Proper fix for LJ_GC64 changes to asm_href().

This commit is contained in:
Mike Pall 2016-05-28 13:36:14 +02:00
parent d9986fbadb
commit 56fe899a06

View File

@ -1163,7 +1163,8 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
#if LJ_64 && !LJ_GC64 #if LJ_64 && !LJ_GC64
} else if (irt_islightud(kt)) { } else if (irt_islightud(kt)) {
emit_rmro(as, XO_CMP, key|REX_64, dest, offsetof(Node, key.u64)); emit_rmro(as, XO_CMP, key|REX_64, dest, offsetof(Node, key.u64));
#elif LJ_GC64 #endif
#if LJ_GC64
} else if (irt_isaddr(kt)) { } else if (irt_isaddr(kt)) {
if (isk) { if (isk) {
TValue k; TValue k;
@ -1180,7 +1181,7 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
lua_assert(irt_ispri(kt) && !irt_isnil(kt)); lua_assert(irt_ispri(kt) && !irt_isnil(kt));
emit_u32(as, (irt_toitype(kt)<<15)|0x7fff); emit_u32(as, (irt_toitype(kt)<<15)|0x7fff);
emit_rmro(as, XO_ARITHi, XOg_CMP, dest, offsetof(Node, key.it)); emit_rmro(as, XO_ARITHi, XOg_CMP, dest, offsetof(Node, key.it));
#endif #else
} else { } else {
if (!irt_ispri(kt)) { if (!irt_ispri(kt)) {
lua_assert(irt_isaddr(kt)); lua_assert(irt_isaddr(kt));
@ -1194,6 +1195,7 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
lua_assert(!irt_isnil(kt)); lua_assert(!irt_isnil(kt));
emit_i8(as, irt_toitype(kt)); emit_i8(as, irt_toitype(kt));
emit_rmro(as, XO_ARITHi8, XOg_CMP, dest, offsetof(Node, key.it)); emit_rmro(as, XO_ARITHi8, XOg_CMP, dest, offsetof(Node, key.it));
#endif
} }
emit_sfixup(as, l_loop); emit_sfixup(as, l_loop);
checkmclim(as); checkmclim(as);