]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
x86/x64: Check for jcc when using xor r,r in emit_loadi().
authorMike Pall <mike>
Sun, 20 May 2018 10:40:33 +0000 (12:40 +0200)
committerMike Pall <mike>
Sun, 20 May 2018 10:40:33 +0000 (12:40 +0200)
Thanks to Peter Cawley.

src/lj_emit_x86.h

index bcceb93e7b6e7ea7b8991d8d13808591f2681925..9c371a955a4646c13c6c2f8c65797abe2068762a 100644 (file)
@@ -268,10 +268,12 @@ static void emit_movmroi(ASMState *as, Reg base, int32_t ofs, int32_t i)
 /* mov r, i / xor r, r */
 static void emit_loadi(ASMState *as, Reg r, int32_t i)
 {
-  /* XOR r,r is shorter, but modifies the flags. This is bad for HIOP. */
+  /* XOR r,r is shorter, but modifies the flags. This is bad for HIOP/jcc. */
   if (i == 0 && !(LJ_32 && (IR(as->curins)->o == IR_HIOP ||
                            (as->curins+1 < as->T->nins &&
-                            IR(as->curins+1)->o == IR_HIOP)))) {
+                            IR(as->curins+1)->o == IR_HIOP))) &&
+               !((*as->mcp == 0x0f && (as->mcp[1] & 0xf0) == XI_JCCn) ||
+                 (*as->mcp & 0xf0) == XI_JCCs)) {
     emit_rr(as, XO_ARITH(XOg_XOR), r, r);
   } else {
     MCode *p = as->mcp;