diff options
author | Mike Pall <mike> | 2013-04-04 17:05:00 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2013-04-04 17:05:00 +0200 |
commit | 6ba65cefb0652d340f1729ce8d114cb3681e914a (patch) | |
tree | e425ee747d2fdd4c6e9d21148b2f9ae620a709d3 | |
parent | 172bd953657904e1b133b99ec328271c4e69c52c (diff) | |
download | luajit-6ba65cefb0652d340f1729ce8d114cb3681e914a.tar.gz luajit-6ba65cefb0652d340f1729ce8d114cb3681e914a.tar.bz2 luajit-6ba65cefb0652d340f1729ce8d114cb3681e914a.zip |
FFI/x86: Fix register allocation for 64 bit comparisons.
-rw-r--r-- | src/lj_asm_x86.h | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index e9c53a09..28aa2791 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h | |||
@@ -2211,6 +2211,7 @@ static void asm_comp_int64(ASMState *as, IRIns *ir) | |||
2211 | lefthi = asm_fuseload(as, ir->op1, allow); | 2211 | lefthi = asm_fuseload(as, ir->op1, allow); |
2212 | } else { | 2212 | } else { |
2213 | lefthi = ra_alloc1(as, ir->op1, allow); | 2213 | lefthi = ra_alloc1(as, ir->op1, allow); |
2214 | rset_clear(allow, lefthi); | ||
2214 | righthi = asm_fuseload(as, ir->op2, allow); | 2215 | righthi = asm_fuseload(as, ir->op2, allow); |
2215 | if (righthi == RID_MRM) { | 2216 | if (righthi == RID_MRM) { |
2216 | if (as->mrm.base != RID_NONE) rset_clear(allow, as->mrm.base); | 2217 | if (as->mrm.base != RID_NONE) rset_clear(allow, as->mrm.base); |
@@ -2226,13 +2227,8 @@ static void asm_comp_int64(ASMState *as, IRIns *ir) | |||
2226 | leftlo = asm_fuseload(as, (ir-1)->op1, allow); | 2227 | leftlo = asm_fuseload(as, (ir-1)->op1, allow); |
2227 | } else { | 2228 | } else { |
2228 | leftlo = ra_alloc1(as, (ir-1)->op1, allow); | 2229 | leftlo = ra_alloc1(as, (ir-1)->op1, allow); |
2230 | rset_clear(allow, leftlo); | ||
2229 | rightlo = asm_fuseload(as, (ir-1)->op2, allow); | 2231 | rightlo = asm_fuseload(as, (ir-1)->op2, allow); |
2230 | if (rightlo == RID_MRM) { | ||
2231 | if (as->mrm.base != RID_NONE) rset_clear(allow, as->mrm.base); | ||
2232 | if (as->mrm.idx != RID_NONE) rset_clear(allow, as->mrm.idx); | ||
2233 | } else { | ||
2234 | rset_clear(allow, rightlo); | ||
2235 | } | ||
2236 | } | 2232 | } |
2237 | 2233 | ||
2238 | /* All register allocations must be performed _before_ this point. */ | 2234 | /* All register allocations must be performed _before_ this point. */ |