From 522d2073da4be2af79db4728cbb375db0fbdfc48 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 2 Feb 2020 18:19:44 +0100 Subject: [PATCH] x86/x64: Fix loop realignment. --- src/lj_asm_x86.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index 2c38d1ec..68b40b31 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h @@ -1836,8 +1836,9 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa) int32_t k = 0; if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */ MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2); - if ((p[1] & 15) < 14) { - if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */ + MCode *q = p[0] == 0x0f ? p+1 : p; + if ((*q & 15) < 14) { + if ((*q & 15) >= 12) *q -= 4; /* L <->S, NL <-> NS */ as->flagmcp = NULL; as->mcp = p; } /* else: cannot transform LE/NLE to cc without use of OF. */