diff options
-rw-r--r-- | src/lj_asm_x86.h | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index bb6976f2..0b6b2d4a 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h | |||
@@ -1836,8 +1836,12 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa) | |||
1836 | Reg dest, right; | 1836 | Reg dest, right; |
1837 | int32_t k = 0; | 1837 | int32_t k = 0; |
1838 | if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */ | 1838 | if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */ |
1839 | as->flagmcp = NULL; | 1839 | MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2); |
1840 | as->mcp += (LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2; | 1840 | if ((p[1] & 15) < 14) { |
1841 | if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */ | ||
1842 | as->flagmcp = NULL; | ||
1843 | as->mcp = p; | ||
1844 | } /* else: cannot transform LE/NLE to cc without use of OF. */ | ||
1841 | } | 1845 | } |
1842 | right = IR(rref)->r; | 1846 | right = IR(rref)->r; |
1843 | if (ra_hasreg(right)) { | 1847 | if (ra_hasreg(right)) { |