diff options
Diffstat (limited to 'src/buildvm_arm.dasc')
-rw-r--r-- | src/buildvm_arm.dasc | 36 |
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: |