From a7874cb29970b72fec106e6a8a4f22c42a15e580 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 5 Apr 2011 00:24:23 +0200 Subject: [PATCH] ARM: Add assert() and type() fast functions. --- src/buildvm_arm.dasc | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc index d2c3e5ca..b0b87ebf 100644 --- a/src/buildvm_arm.dasc +++ b/src/buildvm_arm.dasc @@ -572,11 +572,32 @@ static void build_subroutines(BuildCtx *ctx) | |//-- Base library: checks ----------------------------------------------- | - |.ffunc assert - | NYI + |.ffunc_1 assert + | checktp CARG2, LJ_TTRUE + | bhi ->fff_fallback + | ldr PC, [BASE, FRAME_PC] + | strd CARG12, [BASE, #-8] + | mov RB, BASE + | subs RA, NARGS8:RC, #8 + | add RC, NARGS8:RC, #8 // Compute (nresults+1)*8. + | beq ->fff_res // Done if exactly 1 argument. + |1: + | ldrd CARG12, [RB, #8] + | subs RA, RA, #8 + | strd CARG12, [RB], #8 + | bne <1 + | b ->fff_res | |.ffunc type - | NYI + | ldr CARG2, [BASE, #4] + | cmp NARGS8:RC, #8 + | blo ->fff_fallback + | checktp CARG2, LJ_TISNUM + | mvnlo CARG2, #~LJ_TISNUM + | rsb CARG4, CARG2, #(int)(offsetof(GCfuncC, upvalue)>>3)-1 + | lsl CARG4, CARG4, #3 + | ldrd CARG12, [CFUNC:CARG3, CARG4] + | b ->fff_restv | |//-- Base library: getters and setters --------------------------------- |