aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2012-09-12 11:20:47 +0200
committerMike Pall <mike>2012-09-12 11:20:47 +0200
commit23932a6c8b7ef434bc963139b4160b1058fa6f7f (patch)
tree37a8396d51de634046efe72bff36d9a6fb1324c4 /src
parent039bf85e2610927119254b9c922eab484820e6a7 (diff)
downloadluajit-23932a6c8b7ef434bc963139b4160b1058fa6f7f.tar.gz
luajit-23932a6c8b7ef434bc963139b4160b1058fa6f7f.tar.bz2
luajit-23932a6c8b7ef434bc963139b4160b1058fa6f7f.zip
Use 0/1 macro for Lua 5.2 compatibility.
Diffstat (limited to 'src')
-rw-r--r--src/lib_base.c10
-rw-r--r--src/lib_table.c2
-rw-r--r--src/lj_arch.h7
-rw-r--r--src/lj_ffrecord.c5
-rw-r--r--src/lj_meta.c10
-rw-r--r--src/lj_obj.h2
-rw-r--r--src/lj_parse.c2
-rw-r--r--src/lj_record.c10
-rw-r--r--src/vm_arm.dasc14
-rw-r--r--src/vm_mips.dasc12
-rw-r--r--src/vm_ppc.dasc12
-rw-r--r--src/vm_ppcspe.dasc12
-rw-r--r--src/vm_x86.dasc10
13 files changed, 49 insertions, 59 deletions
diff --git a/src/lib_base.c b/src/lib_base.c
index 824fc0e7..d5f5b0a6 100644
--- a/src/lib_base.c
+++ b/src/lib_base.c
@@ -278,16 +278,12 @@ LJLIB_ASM(next)
278 return FFH_UNREACHABLE; 278 return FFH_UNREACHABLE;
279} 279}
280 280
281#if defined(LUAJIT_ENABLE_LUA52COMPAT) || LJ_HASFFI 281#if LJ_52 || LJ_HASFFI
282static int ffh_pairs(lua_State *L, MMS mm) 282static int ffh_pairs(lua_State *L, MMS mm)
283{ 283{
284 TValue *o = lj_lib_checkany(L, 1); 284 TValue *o = lj_lib_checkany(L, 1);
285 cTValue *mo = lj_meta_lookup(L, o, mm); 285 cTValue *mo = lj_meta_lookup(L, o, mm);
286 if ( 286 if ((LJ_52 || tviscdata(o)) && !tvisnil(mo)) {
287#if !defined(LUAJIT_ENABLE_LUA52COMPAT)
288 tviscdata(o) &&
289#endif
290 !tvisnil(mo)) {
291 L->top = o+1; /* Only keep one argument. */ 287 L->top = o+1; /* Only keep one argument. */
292 copyTV(L, L->base-1, mo); /* Replace callable. */ 288 copyTV(L, L->base-1, mo); /* Replace callable. */
293 return FFH_TAILCALL; 289 return FFH_TAILCALL;
@@ -542,7 +538,7 @@ LJLIB_CF(coroutine_status)
542 538
543LJLIB_CF(coroutine_running) 539LJLIB_CF(coroutine_running)
544{ 540{
545#ifdef LUAJIT_ENABLE_LUA52COMPAT 541#if LJ_52
546 int ismain = lua_pushthread(L); 542 int ismain = lua_pushthread(L);
547 setboolV(L->top++, ismain); 543 setboolV(L->top++, ismain);
548 return 2; 544 return 2;
diff --git a/src/lib_table.c b/src/lib_table.c
index 5210544b..25894eb0 100644
--- a/src/lib_table.c
+++ b/src/lib_table.c
@@ -273,7 +273,7 @@ LJLIB_CF(table_sort)
273LUALIB_API int luaopen_table(lua_State *L) 273LUALIB_API int luaopen_table(lua_State *L)
274{ 274{
275 LJ_LIB_REG(L, LUA_TABLIBNAME, table); 275 LJ_LIB_REG(L, LUA_TABLIBNAME, table);
276#ifdef LUAJIT_ENABLE_LUA52COMPAT 276#if LJ_52
277 lua_getglobal(L, "unpack"); 277 lua_getglobal(L, "unpack");
278 lua_setfield(L, -2, "unpack"); 278 lua_setfield(L, -2, "unpack");
279#endif 279#endif
diff --git a/src/lj_arch.h b/src/lj_arch.h
index a2032821..4df3e8d2 100644
--- a/src/lj_arch.h
+++ b/src/lj_arch.h
@@ -400,4 +400,11 @@
400#define LJ_NO_UNWIND 1 400#define LJ_NO_UNWIND 1
401#endif 401#endif
402 402
403/* Compatibility with Lua 5.1 vs. 5.2. */
404#ifdef LUAJIT_ENABLE_LUA52COMPAT
405#define LJ_52 1
406#else
407#define LJ_52 0
408#endif
409
403#endif 410#endif
diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c
index 1ac0112e..42bbc5f4 100644
--- a/src/lj_ffrecord.c
+++ b/src/lj_ffrecord.c
@@ -353,10 +353,7 @@ static void LJ_FASTCALL recff_ipairs_aux(jit_State *J, RecordFFData *rd)
353 353
354static void LJ_FASTCALL recff_ipairs(jit_State *J, RecordFFData *rd) 354static void LJ_FASTCALL recff_ipairs(jit_State *J, RecordFFData *rd)
355{ 355{
356#ifdef LUAJIT_ENABLE_LUA52COMPAT 356 if (!(LJ_52 && recff_metacall(J, rd, MM_ipairs))) {
357 if (!recff_metacall(J, rd, MM_ipairs))
358#endif
359 {
360 TRef tab = J->base[0]; 357 TRef tab = J->base[0];
361 if (tref_istab(tab)) { 358 if (tref_istab(tab)) {
362 J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0])); 359 J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0]));
diff --git a/src/lj_meta.c b/src/lj_meta.c
index b33cb88d..de2b4068 100644
--- a/src/lj_meta.c
+++ b/src/lj_meta.c
@@ -315,19 +315,13 @@ TValue * LJ_FASTCALL lj_meta_len(lua_State *L, cTValue *o)
315{ 315{
316 cTValue *mo = lj_meta_lookup(L, o, MM_len); 316 cTValue *mo = lj_meta_lookup(L, o, MM_len);
317 if (tvisnil(mo)) { 317 if (tvisnil(mo)) {
318#ifdef LUAJIT_ENABLE_LUA52COMPAT 318 if (LJ_52 && tvistab(o))
319 if (tvistab(o))
320 tabref(tabV(o)->metatable)->nomm |= (uint8_t)(1u<<MM_len); 319 tabref(tabV(o)->metatable)->nomm |= (uint8_t)(1u<<MM_len);
321 else 320 else
322#endif
323 lj_err_optype(L, o, LJ_ERR_OPLEN); 321 lj_err_optype(L, o, LJ_ERR_OPLEN);
324 return NULL; 322 return NULL;
325 } 323 }
326#ifdef LUAJIT_ENABLE_LUA52COMPAT 324 return mmcall(L, lj_cont_ra, mo, o, LJ_52 ? o : niltv(L));
327 return mmcall(L, lj_cont_ra, mo, o, o);
328#else
329 return mmcall(L, lj_cont_ra, mo, o, niltv(L));
330#endif
331} 325}
332 326
333/* Helper for equality comparisons. __eq metamethod. */ 327/* Helper for equality comparisons. __eq metamethod. */
diff --git a/src/lj_obj.h b/src/lj_obj.h
index 67fb5ed9..0b0b3a26 100644
--- a/src/lj_obj.h
+++ b/src/lj_obj.h
@@ -447,7 +447,7 @@ enum {
447#define MMDEF_FFI(_) 447#define MMDEF_FFI(_)
448#endif 448#endif
449 449
450#if defined(LUAJIT_ENABLE_LUA52COMPAT) || LJ_HASFFI 450#if LJ_52 || LJ_HASFFI
451#define MMDEF_PAIRS(_) _(pairs) _(ipairs) 451#define MMDEF_PAIRS(_) _(pairs) _(ipairs)
452#else 452#else
453#define MMDEF_PAIRS(_) 453#define MMDEF_PAIRS(_)
diff --git a/src/lj_parse.c b/src/lj_parse.c
index c5129ad5..6c2f0d31 100644
--- a/src/lj_parse.c
+++ b/src/lj_parse.c
@@ -2495,7 +2495,7 @@ static int parse_stmt(LexState *ls)
2495 lj_lex_next(ls); 2495 lj_lex_next(ls);
2496 parse_break(ls); 2496 parse_break(ls);
2497 return 1; /* Must be last. */ 2497 return 1; /* Must be last. */
2498#ifdef LUAJIT_ENABLE_LUA52COMPAT 2498#if LJ_52
2499 case ';': 2499 case ';':
2500 lj_lex_next(ls); 2500 lj_lex_next(ls);
2501 break; 2501 break;
diff --git a/src/lj_record.c b/src/lj_record.c
index ce25f29e..8718f8bb 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -906,17 +906,15 @@ static TRef rec_mm_len(jit_State *J, TRef tr, TValue *tv)
906 TValue *basev = J->L->base + func; 906 TValue *basev = J->L->base + func;
907 base[0] = ix.mobj; copyTV(J->L, basev+0, &ix.mobjv); 907 base[0] = ix.mobj; copyTV(J->L, basev+0, &ix.mobjv);
908 base[1] = tr; copyTV(J->L, basev+1, tv); 908 base[1] = tr; copyTV(J->L, basev+1, tv);
909#ifdef LUAJIT_ENABLE_LUA52COMPAT 909#if LJ_52
910 base[2] = tr; copyTV(J->L, basev+2, tv); 910 base[2] = tr; copyTV(J->L, basev+2, tv);
911#else 911#else
912 base[2] = TREF_NIL; setnilV(basev+2); 912 base[2] = TREF_NIL; setnilV(basev+2);
913#endif 913#endif
914 lj_record_call(J, func, 2); 914 lj_record_call(J, func, 2);
915 } else { 915 } else {
916#ifdef LUAJIT_ENABLE_LUA52COMPAT 916 if (LJ_52 && tref_istab(tr))
917 if (tref_istab(tr))
918 return lj_ir_call(J, IRCALL_lj_tab_len, tr); 917 return lj_ir_call(J, IRCALL_lj_tab_len, tr);
919#endif
920 lj_trace_err(J, LJ_TRERR_NOMM); 918 lj_trace_err(J, LJ_TRERR_NOMM);
921 } 919 }
922 return 0; /* No result yet. */ 920 return 0; /* No result yet. */
@@ -1815,10 +1813,8 @@ void lj_record_ins(jit_State *J)
1815 case BC_LEN: 1813 case BC_LEN:
1816 if (tref_isstr(rc)) 1814 if (tref_isstr(rc))
1817 rc = emitir(IRTI(IR_FLOAD), rc, IRFL_STR_LEN); 1815 rc = emitir(IRTI(IR_FLOAD), rc, IRFL_STR_LEN);
1818#ifndef LUAJIT_ENABLE_LUA52COMPAT 1816 else if (!LJ_52 && tref_istab(rc))
1819 else if (tref_istab(rc))
1820 rc = lj_ir_call(J, IRCALL_lj_tab_len, rc); 1817 rc = lj_ir_call(J, IRCALL_lj_tab_len, rc);
1821#endif
1822 else 1818 else
1823 rc = rec_mm_len(J, rc, rcv); 1819 rc = rec_mm_len(J, rc, rcv);
1824 break; 1820 break;
diff --git a/src/vm_arm.dasc b/src/vm_arm.dasc
index b9193213..b2c15f49 100644
--- a/src/vm_arm.dasc
+++ b/src/vm_arm.dasc
@@ -793,7 +793,7 @@ static void build_subroutines(BuildCtx *ctx)
793 | bl extern lj_meta_len // (lua_State *L, TValue *o) 793 | bl extern lj_meta_len // (lua_State *L, TValue *o)
794 | // Returns NULL (retry) or TValue * (metamethod base). 794 | // Returns NULL (retry) or TValue * (metamethod base).
795 | .IOS ldr BASE, L->base 795 | .IOS ldr BASE, L->base
796#ifdef LUAJIT_ENABLE_LUA52COMPAT 796#if LJ_52
797 | cmp CRET1, #0 797 | cmp CRET1, #0
798 | bne ->vmeta_binop // Binop call for compatibility. 798 | bne ->vmeta_binop // Binop call for compatibility.
799 | ldr TAB:CARG1, [BASE, RC] 799 | ldr TAB:CARG1, [BASE, RC]
@@ -1085,12 +1085,12 @@ static void build_subroutines(BuildCtx *ctx)
1085 | 1085 |
1086 |.ffunc_1 pairs 1086 |.ffunc_1 pairs
1087 | checktab CARG2, ->fff_fallback 1087 | checktab CARG2, ->fff_fallback
1088#ifdef LUAJIT_ENABLE_LUA52COMPAT 1088#if LJ_52
1089 | ldr TAB:RB, TAB:CARG1->metatable 1089 | ldr TAB:RB, TAB:CARG1->metatable
1090#endif 1090#endif
1091 | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0] 1091 | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0]
1092 | ldr PC, [BASE, FRAME_PC] 1092 | ldr PC, [BASE, FRAME_PC]
1093#ifdef LUAJIT_ENABLE_LUA52COMPAT 1093#if LJ_52
1094 | cmp TAB:RB, #0 1094 | cmp TAB:RB, #0
1095 | bne ->fff_fallback 1095 | bne ->fff_fallback
1096#endif 1096#endif
@@ -1135,12 +1135,12 @@ static void build_subroutines(BuildCtx *ctx)
1135 | 1135 |
1136 |.ffunc_1 ipairs 1136 |.ffunc_1 ipairs
1137 | checktab CARG2, ->fff_fallback 1137 | checktab CARG2, ->fff_fallback
1138#ifdef LUAJIT_ENABLE_LUA52COMPAT 1138#if LJ_52
1139 | ldr TAB:RB, TAB:CARG1->metatable 1139 | ldr TAB:RB, TAB:CARG1->metatable
1140#endif 1140#endif
1141 | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0] 1141 | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0]
1142 | ldr PC, [BASE, FRAME_PC] 1142 | ldr PC, [BASE, FRAME_PC]
1143#ifdef LUAJIT_ENABLE_LUA52COMPAT 1143#if LJ_52
1144 | cmp TAB:RB, #0 1144 | cmp TAB:RB, #0
1145 | bne ->fff_fallback 1145 | bne ->fff_fallback
1146#endif 1146#endif
@@ -2906,7 +2906,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2906 | ins_next3 2906 | ins_next3
2907 |2: 2907 |2:
2908 | checktab CARG2, ->vmeta_len 2908 | checktab CARG2, ->vmeta_len
2909#ifdef LUAJIT_ENABLE_LUA52COMPAT 2909#if LJ_52
2910 | ldr TAB:CARG3, TAB:CARG1->metatable 2910 | ldr TAB:CARG3, TAB:CARG1->metatable
2911 | cmp TAB:CARG3, #0 2911 | cmp TAB:CARG3, #0
2912 | bne >9 2912 | bne >9
@@ -2918,7 +2918,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2918 | // Returns uint32_t (but less than 2^31). 2918 | // Returns uint32_t (but less than 2^31).
2919 | .IOS mov BASE, RC 2919 | .IOS mov BASE, RC
2920 | b <1 2920 | b <1
2921#ifdef LUAJIT_ENABLE_LUA52COMPAT 2921#if LJ_52
2922 |9: 2922 |9:
2923 | ldrb CARG4, TAB:CARG3->nomm 2923 | ldrb CARG4, TAB:CARG3->nomm
2924 | tst CARG4, #1<<MM_len 2924 | tst CARG4, #1<<MM_len
diff --git a/src/vm_mips.dasc b/src/vm_mips.dasc
index 46038c36..6da7d4d2 100644
--- a/src/vm_mips.dasc
+++ b/src/vm_mips.dasc
@@ -842,7 +842,7 @@ static void build_subroutines(BuildCtx *ctx)
842 | 842 |
843 |->vmeta_len: 843 |->vmeta_len:
844 | // CARG2 already set by BC_LEN. 844 | // CARG2 already set by BC_LEN.
845#ifdef LUAJIT_ENABLE_LUA52COMPAT 845#if LJ_52
846 | move MULTRES, CARG1 846 | move MULTRES, CARG1
847#endif 847#endif
848 | load_got lj_meta_len 848 | load_got lj_meta_len
@@ -851,7 +851,7 @@ static void build_subroutines(BuildCtx *ctx)
851 | call_intern lj_meta_len // (lua_State *L, TValue *o) 851 | call_intern lj_meta_len // (lua_State *L, TValue *o)
852 |. move CARG1, L 852 |. move CARG1, L
853 | // Returns NULL (retry) or TValue * (metamethod base). 853 | // Returns NULL (retry) or TValue * (metamethod base).
854#ifdef LUAJIT_ENABLE_LUA52COMPAT 854#if LJ_52
855 | bnez CRET1, ->vmeta_binop // Binop call for compatibility. 855 | bnez CRET1, ->vmeta_binop // Binop call for compatibility.
856 |. nop 856 |. nop
857 | b ->BC_LEN_Z 857 | b ->BC_LEN_Z
@@ -1159,7 +1159,7 @@ static void build_subroutines(BuildCtx *ctx)
1159 | li AT, LJ_TTAB 1159 | li AT, LJ_TTAB
1160 | bne CARG3, AT, ->fff_fallback 1160 | bne CARG3, AT, ->fff_fallback
1161 |. lw PC, FRAME_PC(BASE) 1161 |. lw PC, FRAME_PC(BASE)
1162#ifdef LUAJIT_ENABLE_LUA52COMPAT 1162#if LJ_52
1163 | lw TAB:TMP2, TAB:CARG1->metatable 1163 | lw TAB:TMP2, TAB:CARG1->metatable
1164 | ldc1 f0, CFUNC:RB->upvalue[0] 1164 | ldc1 f0, CFUNC:RB->upvalue[0]
1165 | bnez TAB:TMP2, ->fff_fallback 1165 | bnez TAB:TMP2, ->fff_fallback
@@ -1225,7 +1225,7 @@ static void build_subroutines(BuildCtx *ctx)
1225 | li AT, LJ_TTAB 1225 | li AT, LJ_TTAB
1226 | bne CARG3, AT, ->fff_fallback 1226 | bne CARG3, AT, ->fff_fallback
1227 |. lw PC, FRAME_PC(BASE) 1227 |. lw PC, FRAME_PC(BASE)
1228#ifdef LUAJIT_ENABLE_LUA52COMPAT 1228#if LJ_52
1229 | lw TAB:TMP2, TAB:CARG1->metatable 1229 | lw TAB:TMP2, TAB:CARG1->metatable
1230 | ldc1 f0, CFUNC:RB->upvalue[0] 1230 | ldc1 f0, CFUNC:RB->upvalue[0]
1231 | bnez TAB:TMP2, ->fff_fallback 1231 | bnez TAB:TMP2, ->fff_fallback
@@ -2613,7 +2613,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2613 |2: 2613 |2:
2614 | bne TMP0, AT, ->vmeta_len 2614 | bne TMP0, AT, ->vmeta_len
2615 |. nop 2615 |. nop
2616#ifdef LUAJIT_ENABLE_LUA52COMPAT 2616#if LJ_52
2617 | lw TAB:TMP2, TAB:CARG1->metatable 2617 | lw TAB:TMP2, TAB:CARG1->metatable
2618 | bnez TAB:TMP2, >9 2618 | bnez TAB:TMP2, >9
2619 |. nop 2619 |. nop
@@ -2626,7 +2626,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2626 | // Returns uint32_t (but less than 2^31). 2626 | // Returns uint32_t (but less than 2^31).
2627 | b <1 2627 | b <1
2628 |. nop 2628 |. nop
2629#ifdef LUAJIT_ENABLE_LUA52COMPAT 2629#if LJ_52
2630 |9: 2630 |9:
2631 | lbu TMP0, TAB:TMP2->nomm 2631 | lbu TMP0, TAB:TMP2->nomm
2632 | andi TMP0, TMP0, 1<<MM_len 2632 | andi TMP0, TMP0, 1<<MM_len
diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc
index 461676cd..1a7c31ad 100644
--- a/src/vm_ppc.dasc
+++ b/src/vm_ppc.dasc
@@ -1057,7 +1057,7 @@ static void build_subroutines(BuildCtx *ctx)
1057 | b ->vm_call_dispatch 1057 | b ->vm_call_dispatch
1058 | 1058 |
1059 |->vmeta_len: 1059 |->vmeta_len:
1060#ifdef LUAJIT_ENABLE_LUA52COMPAT 1060#if LJ_52
1061 | mr SAVE0, CARG1 1061 | mr SAVE0, CARG1
1062#endif 1062#endif
1063 | mr CARG2, RD 1063 | mr CARG2, RD
@@ -1066,7 +1066,7 @@ static void build_subroutines(BuildCtx *ctx)
1066 | stw PC, SAVE_PC 1066 | stw PC, SAVE_PC
1067 | bl extern lj_meta_len // (lua_State *L, TValue *o) 1067 | bl extern lj_meta_len // (lua_State *L, TValue *o)
1068 | // Returns NULL (retry) or TValue * (metamethod base). 1068 | // Returns NULL (retry) or TValue * (metamethod base).
1069#ifdef LUAJIT_ENABLE_LUA52COMPAT 1069#if LJ_52
1070 | cmplwi CRET1, 0 1070 | cmplwi CRET1, 0
1071 | bne ->vmeta_binop // Binop call for compatibility. 1071 | bne ->vmeta_binop // Binop call for compatibility.
1072 | mr CARG1, SAVE0 1072 | mr CARG1, SAVE0
@@ -1364,7 +1364,7 @@ static void build_subroutines(BuildCtx *ctx)
1364 | checktab CARG3 1364 | checktab CARG3
1365 | lwz PC, FRAME_PC(BASE) 1365 | lwz PC, FRAME_PC(BASE)
1366 | bne ->fff_fallback 1366 | bne ->fff_fallback
1367#ifdef LUAJIT_ENABLE_LUA52COMPAT 1367#if LJ_52
1368 | lwz TAB:TMP2, TAB:CARG1->metatable 1368 | lwz TAB:TMP2, TAB:CARG1->metatable
1369 | lfd f0, CFUNC:RB->upvalue[0] 1369 | lfd f0, CFUNC:RB->upvalue[0]
1370 | cmplwi TAB:TMP2, 0 1370 | cmplwi TAB:TMP2, 0
@@ -1450,7 +1450,7 @@ static void build_subroutines(BuildCtx *ctx)
1450 | checktab CARG3 1450 | checktab CARG3
1451 | lwz PC, FRAME_PC(BASE) 1451 | lwz PC, FRAME_PC(BASE)
1452 | bne ->fff_fallback 1452 | bne ->fff_fallback
1453#ifdef LUAJIT_ENABLE_LUA52COMPAT 1453#if LJ_52
1454 | lwz TAB:TMP2, TAB:CARG1->metatable 1454 | lwz TAB:TMP2, TAB:CARG1->metatable
1455 | lfd f0, CFUNC:RB->upvalue[0] 1455 | lfd f0, CFUNC:RB->upvalue[0]
1456 | cmplwi TAB:TMP2, 0 1456 | cmplwi TAB:TMP2, 0
@@ -3297,7 +3297,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
3297 | ins_next2 3297 | ins_next2
3298 |2: 3298 |2:
3299 | checktab TMP0; bne ->vmeta_len 3299 | checktab TMP0; bne ->vmeta_len
3300#ifdef LUAJIT_ENABLE_LUA52COMPAT 3300#if LJ_52
3301 | lwz TAB:TMP2, TAB:CARG1->metatable 3301 | lwz TAB:TMP2, TAB:CARG1->metatable
3302 | cmplwi TAB:TMP2, 0 3302 | cmplwi TAB:TMP2, 0
3303 | bne >9 3303 | bne >9
@@ -3307,7 +3307,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
3307 | bl extern lj_tab_len // (GCtab *t) 3307 | bl extern lj_tab_len // (GCtab *t)
3308 | // Returns uint32_t (but less than 2^31). 3308 | // Returns uint32_t (but less than 2^31).
3309 | b <1 3309 | b <1
3310#ifdef LUAJIT_ENABLE_LUA52COMPAT 3310#if LJ_52
3311 |9: 3311 |9:
3312 | lbz TMP0, TAB:TMP2->nomm 3312 | lbz TMP0, TAB:TMP2->nomm
3313 | andix. TMP0, TMP0, 1<<MM_len 3313 | andix. TMP0, TMP0, 1<<MM_len
diff --git a/src/vm_ppcspe.dasc b/src/vm_ppcspe.dasc
index 0ee687c2..31e4c6c4 100644
--- a/src/vm_ppcspe.dasc
+++ b/src/vm_ppcspe.dasc
@@ -811,7 +811,7 @@ static void build_subroutines(BuildCtx *ctx)
811 | b ->vm_call_dispatch 811 | b ->vm_call_dispatch
812 | 812 |
813 |->vmeta_len: 813 |->vmeta_len:
814#ifdef LUAJIT_ENABLE_LUA52COMPAT 814#if LJ_52
815 | mr SAVE0, CARG1 815 | mr SAVE0, CARG1
816#endif 816#endif
817 | add CARG2, BASE, RD 817 | add CARG2, BASE, RD
@@ -820,7 +820,7 @@ static void build_subroutines(BuildCtx *ctx)
820 | stw PC, SAVE_PC 820 | stw PC, SAVE_PC
821 | bl extern lj_meta_len // (lua_State *L, TValue *o) 821 | bl extern lj_meta_len // (lua_State *L, TValue *o)
822 | // Returns NULL (retry) or TValue * (metamethod base). 822 | // Returns NULL (retry) or TValue * (metamethod base).
823#ifdef LUAJIT_ENABLE_LUA52COMPAT 823#if LJ_52
824 | cmplwi CRET1, 0 824 | cmplwi CRET1, 0
825 | bne ->vmeta_binop // Binop call for compatibility. 825 | bne ->vmeta_binop // Binop call for compatibility.
826 | mr CARG1, SAVE0 826 | mr CARG1, SAVE0
@@ -1103,7 +1103,7 @@ static void build_subroutines(BuildCtx *ctx)
1103 | checktab TAB:CARG1 1103 | checktab TAB:CARG1
1104 | lwz PC, FRAME_PC(BASE) 1104 | lwz PC, FRAME_PC(BASE)
1105 | checkfail ->fff_fallback 1105 | checkfail ->fff_fallback
1106#ifdef LUAJIT_ENABLE_LUA52COMPAT 1106#if LJ_52
1107 | lwz TAB:TMP2, TAB:CARG1->metatable 1107 | lwz TAB:TMP2, TAB:CARG1->metatable
1108 | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] 1108 | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
1109 | cmplwi TAB:TMP2, 0 1109 | cmplwi TAB:TMP2, 0
@@ -1162,7 +1162,7 @@ static void build_subroutines(BuildCtx *ctx)
1162 | checktab TAB:CARG1 1162 | checktab TAB:CARG1
1163 | lwz PC, FRAME_PC(BASE) 1163 | lwz PC, FRAME_PC(BASE)
1164 | checkfail ->fff_fallback 1164 | checkfail ->fff_fallback
1165#ifdef LUAJIT_ENABLE_LUA52COMPAT 1165#if LJ_52
1166 | lwz TAB:TMP2, TAB:CARG1->metatable 1166 | lwz TAB:TMP2, TAB:CARG1->metatable
1167 | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] 1167 | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
1168 | cmplwi TAB:TMP2, 0 1168 | cmplwi TAB:TMP2, 0
@@ -2327,7 +2327,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2327 |2: 2327 |2:
2328 | checktab CARG1 2328 | checktab CARG1
2329 | checkfail ->vmeta_len 2329 | checkfail ->vmeta_len
2330#ifdef LUAJIT_ENABLE_LUA52COMPAT 2330#if LJ_52
2331 | lwz TAB:TMP2, TAB:CARG1->metatable 2331 | lwz TAB:TMP2, TAB:CARG1->metatable
2332 | cmplwi TAB:TMP2, 0 2332 | cmplwi TAB:TMP2, 0
2333 | bne >9 2333 | bne >9
@@ -2337,7 +2337,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2337 | bl extern lj_tab_len // (GCtab *t) 2337 | bl extern lj_tab_len // (GCtab *t)
2338 | // Returns uint32_t (but less than 2^31). 2338 | // Returns uint32_t (but less than 2^31).
2339 | b <1 2339 | b <1
2340#ifdef LUAJIT_ENABLE_LUA52COMPAT 2340#if LJ_52
2341 |9: 2341 |9:
2342 | lbz TMP0, TAB:TMP2->nomm 2342 | lbz TMP0, TAB:TMP2->nomm
2343 | andi. TMP0, TMP0, 1<<MM_len 2343 | andi. TMP0, TMP0, 1<<MM_len
diff --git a/src/vm_x86.dasc b/src/vm_x86.dasc
index c455795e..8fe07a65 100644
--- a/src/vm_x86.dasc
+++ b/src/vm_x86.dasc
@@ -1184,7 +1184,7 @@ static void build_subroutines(BuildCtx *ctx)
1184 | call extern lj_meta_len@8 // (lua_State *L, TValue *o) 1184 | call extern lj_meta_len@8 // (lua_State *L, TValue *o)
1185 | // NULL (retry) or TValue * (metamethod) returned in eax (RC). 1185 | // NULL (retry) or TValue * (metamethod) returned in eax (RC).
1186 | mov BASE, L:RB->base 1186 | mov BASE, L:RB->base
1187#ifdef LUAJIT_ENABLE_LUA52COMPAT 1187#if LJ_52
1188 | test RC, RC 1188 | test RC, RC
1189 | jne ->vmeta_binop // Binop call for compatibility. 1189 | jne ->vmeta_binop // Binop call for compatibility.
1190 | movzx RD, PC_RD 1190 | movzx RD, PC_RD
@@ -1600,7 +1600,7 @@ static void build_subroutines(BuildCtx *ctx)
1600 |.ffunc_1 pairs 1600 |.ffunc_1 pairs
1601 | mov TAB:RB, [BASE] 1601 | mov TAB:RB, [BASE]
1602 | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback 1602 | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback
1603#ifdef LUAJIT_ENABLE_LUA52COMPAT 1603#if LJ_52
1604 | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback 1604 | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback
1605#endif 1605#endif
1606 | mov CFUNC:RB, [BASE-8] 1606 | mov CFUNC:RB, [BASE-8]
@@ -1674,7 +1674,7 @@ static void build_subroutines(BuildCtx *ctx)
1674 |.ffunc_1 ipairs 1674 |.ffunc_1 ipairs
1675 | mov TAB:RB, [BASE] 1675 | mov TAB:RB, [BASE]
1676 | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback 1676 | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback
1677#ifdef LUAJIT_ENABLE_LUA52COMPAT 1677#if LJ_52
1678 | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback 1678 | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback
1679#endif 1679#endif
1680 | mov CFUNC:RB, [BASE-8] 1680 | mov CFUNC:RB, [BASE-8]
@@ -4315,7 +4315,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
4315 |2: 4315 |2:
4316 | checktab RD, ->vmeta_len 4316 | checktab RD, ->vmeta_len
4317 | mov TAB:FCARG1, [BASE+RD*8] 4317 | mov TAB:FCARG1, [BASE+RD*8]
4318#ifdef LUAJIT_ENABLE_LUA52COMPAT 4318#if LJ_52
4319 | mov TAB:RB, TAB:FCARG1->metatable 4319 | mov TAB:RB, TAB:FCARG1->metatable
4320 | cmp TAB:RB, 0 4320 | cmp TAB:RB, 0
4321 | jnz >9 4321 | jnz >9
@@ -4336,7 +4336,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
4336 | mov BASE, RB // Restore BASE. 4336 | mov BASE, RB // Restore BASE.
4337 | movzx RA, PC_RA 4337 | movzx RA, PC_RA
4338 | jmp <1 4338 | jmp <1
4339#ifdef LUAJIT_ENABLE_LUA52COMPAT 4339#if LJ_52
4340 |9: // Check for __len. 4340 |9: // Check for __len.
4341 | test byte TAB:RB->nomm, 1<<MM_len 4341 | test byte TAB:RB->nomm, 1<<MM_len
4342 | jnz <3 4342 | jnz <3