diff options
-rw-r--r-- | src/buildvm_arm.dasc | 27 |
1 files 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) | |||
572 | | | 572 | | |
573 | |//-- Base library: checks ----------------------------------------------- | 573 | |//-- Base library: checks ----------------------------------------------- |
574 | | | 574 | | |
575 | |.ffunc assert | 575 | |.ffunc_1 assert |
576 | | NYI | 576 | | checktp CARG2, LJ_TTRUE |
577 | | bhi ->fff_fallback | ||
578 | | ldr PC, [BASE, FRAME_PC] | ||
579 | | strd CARG12, [BASE, #-8] | ||
580 | | mov RB, BASE | ||
581 | | subs RA, NARGS8:RC, #8 | ||
582 | | add RC, NARGS8:RC, #8 // Compute (nresults+1)*8. | ||
583 | | beq ->fff_res // Done if exactly 1 argument. | ||
584 | |1: | ||
585 | | ldrd CARG12, [RB, #8] | ||
586 | | subs RA, RA, #8 | ||
587 | | strd CARG12, [RB], #8 | ||
588 | | bne <1 | ||
589 | | b ->fff_res | ||
577 | | | 590 | | |
578 | |.ffunc type | 591 | |.ffunc type |
579 | | NYI | 592 | | ldr CARG2, [BASE, #4] |
593 | | cmp NARGS8:RC, #8 | ||
594 | | blo ->fff_fallback | ||
595 | | checktp CARG2, LJ_TISNUM | ||
596 | | mvnlo CARG2, #~LJ_TISNUM | ||
597 | | rsb CARG4, CARG2, #(int)(offsetof(GCfuncC, upvalue)>>3)-1 | ||
598 | | lsl CARG4, CARG4, #3 | ||
599 | | ldrd CARG12, [CFUNC:CARG3, CARG4] | ||
600 | | b ->fff_restv | ||
580 | | | 601 | | |
581 | |//-- Base library: getters and setters --------------------------------- | 602 | |//-- Base library: getters and setters --------------------------------- |
582 | | | 603 | | |