mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
x86/x64: Fix code generation for fused test/arith ops.
Thanks to Alexander Nasonov and AFL.
This commit is contained in:
parent
704280fb80
commit
4fa51affe8
@ -1836,8 +1836,12 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
|
|||||||
Reg dest, right;
|
Reg dest, right;
|
||||||
int32_t k = 0;
|
int32_t k = 0;
|
||||||
if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */
|
if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */
|
||||||
as->flagmcp = NULL;
|
MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2);
|
||||||
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 */
|
||||||
|
as->flagmcp = NULL;
|
||||||
|
as->mcp = p;
|
||||||
|
} /* else: cannot transform LE/NLE to cc without use of OF. */
|
||||||
}
|
}
|
||||||
right = IR(rref)->r;
|
right = IR(rref)->r;
|
||||||
if (ra_hasreg(right)) {
|
if (ra_hasreg(right)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user