ARM: Add partial support for FFI.

This commit is contained in:
Mike Pall
2011-04-16 23:28:51 +02:00
parent fc40214279
commit d636a3decd
4 changed files with 87 additions and 4 deletions

View File

@@ -1873,7 +1873,32 @@ static void build_subroutines(BuildCtx *ctx)
|
|->vm_ffi_call:
#if LJ_HASFFI
| NYI
| .type CCSTATE, CCallState, r4
| push {CCSTATE, r5, r11, lr}
| mov CCSTATE, CARG1
| ldr CARG1, CCSTATE:CARG1->spadj
| ldrb CARG2, CCSTATE->nsp
| add CARG3, CCSTATE, #offsetof(CCallState, stack)
| mov r11, sp
| sub sp, sp, CARG1 // Readjust stack.
| subs CARG2, CARG2, #1
| ldr RB, CCSTATE->func
| bmi >2
|1: // Copy stack slots.
| ldr CARG4, [CARG3, CARG2, lsl #2]
| str CARG4, [sp, CARG2, lsl #2]
| subs CARG2, CARG2, #1
| bpl <1
|2:
| ldr CARG1, CCSTATE->gpr[0]
| ldr CARG2, CCSTATE->gpr[1]
| ldr CARG3, CCSTATE->gpr[2]
| ldr CARG4, CCSTATE->gpr[3]
| blx RB
| mov sp, r11
| str CRET1, CCSTATE->gpr[0]
| str CRET2, CCSTATE->gpr[1]
| pop {CCSTATE, r5, r11, pc}
#endif
|
|//-----------------------------------------------------------------------
@@ -2340,7 +2365,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
break;
case BC_KCDATA:
#if LJ_HASFFI
| NYI
| // RA = dst*8, RC = cdata_const (~)
| mvn RC, RC
| ins_next1
| ldr CARG1, [KBASE, RC, lsl #2]
| mvn CARG2, #~LJ_TCDATA
| ins_next2
| strd CARG12, [BASE, RA]
| ins_next3
#endif
break;
case BC_KSHORT: