diff options
Diffstat (limited to 'src/buildvm_arm.dasc')
-rw-r--r-- | src/buildvm_arm.dasc | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc index 4d3ba5b7..fd7c7b81 100644 --- a/src/buildvm_arm.dasc +++ b/src/buildvm_arm.dasc | |||
@@ -767,9 +767,16 @@ static void build_subroutines(BuildCtx *ctx) | |||
767 | | mov CARG1, L | 767 | | mov CARG1, L |
768 | | str PC, SAVE_PC | 768 | | str PC, SAVE_PC |
769 | | bl extern lj_meta_len // (lua_State *L, TValue *o) | 769 | | bl extern lj_meta_len // (lua_State *L, TValue *o) |
770 | | // Returns TValue * (metamethod base). | 770 | | // Returns NULL (retry) or TValue * (metamethod base). |
771 | | IOS ldr BASE, L->base | 771 | | IOS ldr BASE, L->base |
772 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | ||
773 | | cmp CRET1, #0 | ||
774 | | bne ->vmeta_binop // Binop call for compatibility. | ||
775 | | ldr TAB:CARG1, [BASE, RC] | ||
776 | | b ->BC_LEN_Z | ||
777 | #else | ||
772 | | b ->vmeta_binop // Binop call for compatibility. | 778 | | b ->vmeta_binop // Binop call for compatibility. |
779 | #endif | ||
773 | | | 780 | | |
774 | |//-- Call metamethod ---------------------------------------------------- | 781 | |//-- Call metamethod ---------------------------------------------------- |
775 | | | 782 | | |
@@ -2546,11 +2553,25 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) | |||
2546 | | ins_next3 | 2553 | | ins_next3 |
2547 | |2: | 2554 | |2: |
2548 | | checktab CARG2, ->vmeta_len | 2555 | | checktab CARG2, ->vmeta_len |
2556 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | ||
2557 | | ldr TAB:CARG3, TAB:CARG1->metatable | ||
2558 | | cmp TAB:CARG3, #0 | ||
2559 | | bne >9 | ||
2560 | |3: | ||
2561 | #endif | ||
2562 | |->BC_LEN_Z: | ||
2549 | | IOS mov RC, BASE | 2563 | | IOS mov RC, BASE |
2550 | | bl extern lj_tab_len // (GCtab *t) | 2564 | | bl extern lj_tab_len // (GCtab *t) |
2551 | | // Returns uint32_t (but less than 2^31). | 2565 | | // Returns uint32_t (but less than 2^31). |
2552 | | IOS mov BASE, RC | 2566 | | IOS mov BASE, RC |
2553 | | b <1 | 2567 | | b <1 |
2568 | #ifdef LUAJIT_ENABLE_LUA52COMPAT | ||
2569 | |9: | ||
2570 | | ldrb CARG4, TAB:CARG3->nomm | ||
2571 | | tst CARG4, #1<<MM_len | ||
2572 | | bne <3 // 'no __len' flag set: done. | ||
2573 | | b ->vmeta_len | ||
2574 | #endif | ||
2554 | break; | 2575 | break; |
2555 | 2576 | ||
2556 | /* -- Binary ops -------------------------------------------------------- */ | 2577 | /* -- Binary ops -------------------------------------------------------- */ |