NSEEL_RAM_ITEMSPERBLOCK_LOG2 equ 16 NSEEL_RAM_BLOCKS_LOG2 equ 9 NSEEL_LOOPFUNC_SUPPORT_MAXLEN equ 1048576 NSEEL_RAM_BLOCKS equ (1 << NSEEL_RAM_BLOCKS_LOG2) NSEEL_RAM_ITEMSPERBLOCK equ (1< 0 mov x2, (NSEEL_LOOPFUNC_SUPPORT_MAXLEN & 65535) movk x2, (NSEEL_LOOPFUNC_SUPPORT_MAXLEN>>16), lsl 16 cmp w3, w2 csel w3, w2, w3, gt ] stp fp, lr, [sp, #-48]! mov fp, sp str x25, [sp, #16] mov x25, 0xdead movk x25, 0xbeef, lsl 16 movk x25, 0xbeef, lsl 32 |rep_lz| stp x3, x22, [sp, #32] blr x25 ldp x3, x22, [sp, #32] sub x3, x3, #1 cmp x3, #0 bgt |rep_lz| ldr x25, [sp, #16] ldp fp, lr, [sp], #48 |rep_lz2| mov x1, x1 ENDP |#nseel_asm_repeatwhile| PROC mov x1, x1 [ NSEEL_LOOPFUNC_SUPPORT_MAXLEN > 0 mov x3, (NSEEL_LOOPFUNC_SUPPORT_MAXLEN & 65535) movk x3, (NSEEL_LOOPFUNC_SUPPORT_MAXLEN>>16), lsl 16 ] stp fp, lr, [sp, #-48]! str x25, [sp, #16] mov x25, 0xdead movk x25, 0xbeef, lsl 16 movk x25, 0xbeef, lsl 32 |repw_lz| stp x3, x22, [sp, #32] blr x25 ldp x3, x22, [sp, #32] cmp w0, #0 [ NSEEL_LOOPFUNC_SUPPORT_MAXLEN > 0 beq |repw_lz2| sub x3, x3, #1 cmp x3, #0 bne |repw_lz| |repw_lz2| ] [ NSEEL_LOOPFUNC_SUPPORT_MAXLEN == 0 bne |repw_lz| ] ldr x25, [sp, #16] ldp fp, lr, [sp], #48 mov x1, x1 ENDP |#nseel_asm_band| PROC mov x1, x1 cmp w0, #0 beq |band_chk| mov x3, 0xdead movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 stp fp, lr, [sp, #-16]! mov fp, sp blr x3 ldp fp, lr, [sp], #16 |band_chk| mov x1, x1 ENDP |#nseel_asm_bor| PROC mov x1, x1 cmp w0, #0 bne |bor_chk| mov x3, 0xdead movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 stp fp, lr, [sp, #-16]! mov fp, sp blr x3 ldp fp, lr, [sp], #16 |bor_chk| mov x1, x1 ENDP |#nseel_asm_equal| PROC mov x1, x1 ldr d2, [x21] fsub d0, d0, d1 fabs d0, d0 fcmp d0, d2 cset w0, lt mov x1, x1 ENDP |#nseel_asm_equal_exact| PROC mov x1, x1 fcmp d1, d0 cset w0, eq mov x1, x1 ENDP |#nseel_asm_notequal_exact| PROC mov x1, x1 fcmp d1, d0 cset w0, ne mov x1, x1 ENDP |#nseel_asm_notequal| PROC mov x1, x1 ldr d2, [x21] fsub d0, d0, d1 fabs d0, d0 fcmp d0, d2 cset w0, ge mov x1, x1 ENDP |#nseel_asm_below| PROC mov x1, x1 fcmp d1, d0 cset w0, lt mov x1, x1 ENDP |#nseel_asm_beloweq| PROC mov x1, x1 fcmp d1, d0 cset w0, le mov x1, x1 ENDP |#nseel_asm_above| PROC mov x1, x1 fcmp d1, d0 cset w0, gt mov x1, x1 ENDP |#nseel_asm_aboveeq| PROC mov x1, x1 fcmp d1, d0 cset w0, ge mov x1, x1 ENDP |#nseel_asm_min| PROC mov x1, x1 ldr d0, [x0] ldr d1, [x1] fcmp d1, d0 csel x0, x1, x0, lt mov x1, x1 ENDP |#nseel_asm_max| PROC mov x1, x1 ldr d0, [x0] ldr d1, [x1] fcmp d1, d0 csel x0, x1, x0, gt mov x1, x1 ENDP |#nseel_asm_min_fp| PROC mov x1, x1 fcmp d1, d0 fcsel d0, d1, d0, lt mov x1, x1 ENDP |#nseel_asm_max_fp| PROC mov x1, x1 fcmp d1, d0 fcsel d0, d1, d0, gt mov x1, x1 ENDP |#_asm_generic3parm| PROC mov x1, x1 stp fp, lr, [sp, #-16]! ; input: r0 last, r1=second to last, r2=third to last mov fp, sp mov x3, x0 ; r0 (last parameter) -> r3 mov x0, 0xdead ; r0 is first parm (context) movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x4, 0xdead movk x4, 0xbeef, lsl 16 movk x4, 0xbeef, lsl 32 mov x5, x1 ; swap x1/x2 mov x1, x2 mov x2, x5 blr x4 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#_asm_generic3parm_retd| PROC mov x1, x1 stp fp, lr, [sp, #-16]! ; input: r0 last, r1=second to last, r2=third to last mov fp, sp mov x3, x0 ; r0 (last parameter) -> r3 mov x0, 0xdead ; r0 is first parm (context) movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x4, 0xdead movk x4, 0xbeef, lsl 16 movk x4, 0xbeef, lsl 32 mov x5, x1 ; // swap x1/x2 mov x1, x2 mov x2, x5 blr x4 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#_asm_generic2parm| PROC mov x1, x1 stp fp, lr, [sp, #-16]! ; input: r0 last, r1=second to last mov fp, sp mov x2, x0 mov x0, 0xdead ; r0 is first parm (context) movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x4, 0xdead movk x4, 0xbeef, lsl 16 movk x4, 0xbeef, lsl 32 blr x4 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#_asm_generic2parm_retd| PROC mov x1, x1 stp fp, lr, [sp, #-16]! ; input: r0 last, r1=second to last mov fp, sp mov x2, x0 mov x0, 0xdead ; r0 is first parm (context) movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x4, 0xdead movk x4, 0xbeef, lsl 16 movk x4, 0xbeef, lsl 32 blr x4 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#_asm_generic2xparm_retd| PROC mov x1, x1 stp fp, lr, [sp, #-16]! ; input: r0 last, r1=second to last mov fp, sp mov x2, x1 mov x3, x0 mov x0, 0xdead ; r0 is first parm (context) movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x1, 0xdead ; second parm movk x1, 0xbeef, lsl 16 movk x1, 0xbeef, lsl 32 mov x4, 0xdead movk x4, 0xbeef, lsl 16 movk x4, 0xbeef, lsl 32 blr x4 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#_asm_generic1parm| PROC mov x1, x1 stp fp, lr, [sp, #-16]! mov fp, sp mov x1, x0 mov x0, 0xdead ; r0 is first parm (context) movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x4, 0xdead movk x4, 0xbeef, lsl 16 movk x4, 0xbeef, lsl 32 blr x4 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#_asm_generic1parm_retd| PROC mov x1, x1 stp fp, lr, [sp, #-16]! mov fp, sp mov x1, x0 mov x0, 0xdead ; // r0 is first parm (context) movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x4, 0xdead movk x4, 0xbeef, lsl 16 movk x4, 0xbeef, lsl 32 blr x4 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#_asm_megabuf| PROC mov x1, x1 add x0, x20, #-8 ldr d1, [x0] fadd d0, d0, d1 fcvtzu w3, d0 asr w2, w3, (NSEEL_RAM_ITEMSPERBLOCK_LOG2 - 3) bic w2, w2, #7 ; r2 is page index*8 mov w0, (NSEEL_RAM_BLOCKS * 8) cmp w2, w0 bhs |mbchk1| add x2, x2, x20 ldr x2, [x2] cmp x2, #0 beq |mbchk1| mov x0, (NSEEL_RAM_ITEMSPERBLOCK - 1) and x3, x3, x0 ; r3 mask item in slot add x0, x2, x3, lsl #3 ; set result b |mbchk2| |mbchk1| mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 stp fp, lr, [sp, #-16]! mov fp, sp mov x0, x20 ; first parameter: blocks mov x1, x3 ; second parameter: slot index blr x2 ldp fp, lr, [sp], #16 |mbchk2| mov x1, x1 ENDP |#_asm_gmegabuf| PROC mov x1, x1 add x2, x20, #-8 ldr d1, [x2] mov x0, 0xdead movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 fadd d0, d0, d1 fcvtzu w1, d0 stp fp, lr, [sp, #-16]! mov fp, sp blr x2 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#nseel_asm_fcall| PROC mov x1, x1 mov x0, 0xdead movk x0, 0xbeef, lsl 16 movk x0, 0xbeef, lsl 32 stp fp, lr, [sp, #-16]! mov fp, sp blr x0 ldp fp, lr, [sp], #16 mov x1, x1 ENDP |#nseel_asm_stack_push| PROC mov x1, x1 ldr d0, [x0] mov x3, 0xdead ; r3 is stack movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 ldr x0, [x3] add x0, x0, #8 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 and x0, x0, x2 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 orr x0, x0, x2 str x0, [x3] str d0, [x0] mov x1, x1 ENDP |#nseel_asm_stack_pop| PROC mov x1, x1 mov x3, 0xdead ; r3 is stack movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 ldr x1, [x3] ldr d0, [x1] sub x1, x1, #8 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 str d0, [x0] and x1, x1, x2 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 orr x1, x1, x2 str x1, [x3] mov x1, x1 ENDP |#nseel_asm_stack_pop_fast| PROC mov x1, x1 mov x3, 0xdead ; r3 is stack movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 ldr x1, [x3] mov x0, x1 sub x1, x1, #8 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 and x1, x1, x2 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 orr x1, x1, x2 str x1, [x3] mov x1, x1 ENDP |#nseel_asm_stack_peek| PROC mov x1, x1 mov x3, 0xdead ; r3 is stack movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 fcvtzs w2, d0 ldr x1, [x3] sub x1, x1, x2, lsl #3 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 and x1, x1, x2 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 orr x0, x1, x2 mov x1, x1 ENDP |#nseel_asm_stack_peek_top| PROC mov x1, x1 mov x3, 0xdead ; r3 is stack movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 ldr x0, [x3] mov x1, x1 ENDP |#nseel_asm_stack_peek_int| PROC mov x1, x1 mov x3, 0xdead ; r3 is stack movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 ldr x1, [x3] sub x1, x1, x2 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 and x1, x1, x2 mov x2, 0xdead movk x2, 0xbeef, lsl 16 movk x2, 0xbeef, lsl 32 orr x0, x1, x2 mov x1, x1 ENDP |#nseel_asm_stack_exch| PROC mov x1, x1 mov x3, 0xdead ; r3 is stack movk x3, 0xbeef, lsl 16 movk x3, 0xbeef, lsl 32 ldr x1, [x3] ldr d0, [x0] ldr d1, [x1] str d0, [x1] str d1, [x0] mov x1, x1 ENDP |#nseel_asm_booltofp| PROC mov x1, x1 cmp w0, #0 fmov d0, #1.0 movi d1, #0 fcsel d0, d0, d1, ne mov x1, x1 ENDP |#nseel_asm_fptobool| PROC mov x1, x1 ldr d1, [x21] fabs d0, d0 fcmp d0, d1 cset w0, ge mov x1, x1 ENDP |#nseel_asm_fptobool_rev| PROC mov x1, x1 ldr d1, [x21] fabs d0, d0 fcmp d0, d1 cset w0, lt mov x1, x1 ENDP |#eel_callcode64| PROC stp fp, lr, [sp, #-128]! mov fp, sp stp d13, d12, [sp, #16] stp d11, d10, [sp, #32] stp d9, d8, [sp, #48] stp d15, d14, [sp, #64] stp x20, x19, [sp, #80] stp x22, x21, [sp, #96] mov x19, x0 mov x20, x2 mov x21, x3 blr x1 ldp d13, d12, [sp, #16] ldp d11, d10, [sp, #32] ldp d9, d8, [sp, #48] ldp d15, d14, [sp, #64] ldp x20, x19, [sp, #80] ldp x22, x21, [sp, #96] ldp fp, lr, [sp], #128 ret ENDP |#glue_getscr| PROC mrs x0, FPCR ret ENDP |#glue_setscr| PROC msr FPCR, x0 ret ENDP END