aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2014-10-08 22:06:23 +0200
committerMike Pall <mike>2014-10-08 22:06:23 +0200
commitd2809bec24a7c6a6ec38d3e658c34131adc0de5a (patch)
tree3858712eb3498c932fada98f116c9714e984e066 /src
parentbe64823d957bea318e374d7a16a3985158b76cbb (diff)
parent6d0654d3eca7654c9c4f8a9923907d06b177a8a1 (diff)
downloadluajit-d2809bec24a7c6a6ec38d3e658c34131adc0de5a.tar.gz
luajit-d2809bec24a7c6a6ec38d3e658c34131adc0de5a.tar.bz2
luajit-d2809bec24a7c6a6ec38d3e658c34131adc0de5a.zip
Merge branch 'master' into v2.1
Diffstat (limited to 'src')
-rw-r--r--src/lj_asm.c1
-rw-r--r--src/lj_asm_x86.h10
2 files changed, 10 insertions, 1 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 329e5c95..71d9a881 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -359,6 +359,7 @@ static Reg ra_rematk(ASMState *as, IRRef ref)
359static int32_t ra_spill(ASMState *as, IRIns *ir) 359static int32_t ra_spill(ASMState *as, IRIns *ir)
360{ 360{
361 int32_t slot = ir->s; 361 int32_t slot = ir->s;
362 lua_assert(ir >= as->ir + REF_TRUE);
362 if (!ra_hasspill(slot)) { 363 if (!ra_hasspill(slot)) {
363 if (irt_is64(ir->t)) { 364 if (irt_is64(ir->t)) {
364 slot = as->evenspill; 365 slot = as->evenspill;
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
index 12c7a6ba..8b541250 100644
--- a/src/lj_asm_x86.h
+++ b/src/lj_asm_x86.h
@@ -325,6 +325,14 @@ static Reg asm_fuseload(ASMState *as, IRRef ref, RegSet allow)
325 as->mrm.base = as->mrm.idx = RID_NONE; 325 as->mrm.base = as->mrm.idx = RID_NONE;
326 return RID_MRM; 326 return RID_MRM;
327 } 327 }
328 } else if (ir->o == IR_KINT64) {
329 RegSet avail = as->freeset & ~as->modset & RSET_GPR;
330 lua_assert(allow != RSET_EMPTY);
331 if (!(avail & (avail-1))) { /* Fuse if less than two regs available. */
332 as->mrm.ofs = ptr2addr(ir_kint64(ir));
333 as->mrm.base = as->mrm.idx = RID_NONE;
334 return RID_MRM;
335 }
328 } else if (mayfuse(as, ref)) { 336 } else if (mayfuse(as, ref)) {
329 RegSet xallow = (allow & RSET_GPR) ? allow : RSET_GPR; 337 RegSet xallow = (allow & RSET_GPR) ? allow : RSET_GPR;
330 if (ir->o == IR_SLOAD) { 338 if (ir->o == IR_SLOAD) {
@@ -361,7 +369,7 @@ static Reg asm_fuseload(ASMState *as, IRRef ref, RegSet allow)
361 return RID_MRM; 369 return RID_MRM;
362 } 370 }
363 } 371 }
364 if (!(as->freeset & allow) && 372 if (!(as->freeset & allow) && !irref_isk(ref) &&
365 (allow == RSET_EMPTY || ra_hasspill(ir->s) || iscrossref(as, ref))) 373 (allow == RSET_EMPTY || ra_hasspill(ir->s) || iscrossref(as, ref)))
366 goto fusespill; 374 goto fusespill;
367 return ra_allocref(as, ref, allow); 375 return ra_allocref(as, ref, allow);