summaryrefslogtreecommitdiff
path: root/src/buildvm_arm.dasc
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildvm_arm.dasc')
-rw-r--r--src/buildvm_arm.dasc23
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 -------------------------------------------------------- */