|
@@ -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. */
|