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 /src | |
| parent | 172bd953657904e1b133b99ec328271c4e69c52c (diff) | |
| download | luajit-6ba65cefb0652d340f1729ce8d114cb3681e914a.tar.gz luajit-6ba65cefb0652d340f1729ce8d114cb3681e914a.tar.bz2 luajit-6ba65cefb0652d340f1729ce8d114cb3681e914a.zip | |
FFI/x86: Fix register allocation for 64 bit comparisons.
Diffstat (limited to 'src')
| -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. */ |
