summaryrefslogtreecommitdiff
path: root/src/buildvm_arm.dasc
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildvm_arm.dasc')
-rw-r--r--src/buildvm_arm.dasc36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc
index 3e3fb23c..c12b4da8 100644
--- a/src/buildvm_arm.dasc
+++ b/src/buildvm_arm.dasc
@@ -1873,7 +1873,32 @@ static void build_subroutines(BuildCtx *ctx)
1873 | 1873 |
1874 |->vm_ffi_call: 1874 |->vm_ffi_call:
1875#if LJ_HASFFI 1875#if LJ_HASFFI
1876 | NYI 1876 | .type CCSTATE, CCallState, r4
1877 | push {CCSTATE, r5, r11, lr}
1878 | mov CCSTATE, CARG1
1879 | ldr CARG1, CCSTATE:CARG1->spadj
1880 | ldrb CARG2, CCSTATE->nsp
1881 | add CARG3, CCSTATE, #offsetof(CCallState, stack)
1882 | mov r11, sp
1883 | sub sp, sp, CARG1 // Readjust stack.
1884 | subs CARG2, CARG2, #1
1885 | ldr RB, CCSTATE->func
1886 | bmi >2
1887 |1: // Copy stack slots.
1888 | ldr CARG4, [CARG3, CARG2, lsl #2]
1889 | str CARG4, [sp, CARG2, lsl #2]
1890 | subs CARG2, CARG2, #1
1891 | bpl <1
1892 |2:
1893 | ldr CARG1, CCSTATE->gpr[0]
1894 | ldr CARG2, CCSTATE->gpr[1]
1895 | ldr CARG3, CCSTATE->gpr[2]
1896 | ldr CARG4, CCSTATE->gpr[3]
1897 | blx RB
1898 | mov sp, r11
1899 | str CRET1, CCSTATE->gpr[0]
1900 | str CRET2, CCSTATE->gpr[1]
1901 | pop {CCSTATE, r5, r11, pc}
1877#endif 1902#endif
1878 | 1903 |
1879 |//----------------------------------------------------------------------- 1904 |//-----------------------------------------------------------------------
@@ -2340,7 +2365,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2340 break; 2365 break;
2341 case BC_KCDATA: 2366 case BC_KCDATA:
2342#if LJ_HASFFI 2367#if LJ_HASFFI
2343 | NYI 2368 | // RA = dst*8, RC = cdata_const (~)
2369 | mvn RC, RC
2370 | ins_next1
2371 | ldr CARG1, [KBASE, RC, lsl #2]
2372 | mvn CARG2, #~LJ_TCDATA
2373 | ins_next2
2374 | strd CARG12, [BASE, RA]
2375 | ins_next3
2344#endif 2376#endif
2345 break; 2377 break;
2346 case BC_KSHORT: 2378 case BC_KSHORT: