aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-03-08 23:43:16 +0100
committerMike Pall <mike>2010-03-08 23:43:16 +0100
commit2e614adb21b3c0c46038a7897b88accab2498ec4 (patch)
tree87769d5c5facca62fdac7f941e08b2674cfd2bab /src
parent09e875519b153bf7bc6fa5e1dbc1cfcdcb1e9aff (diff)
downloadluajit-2e614adb21b3c0c46038a7897b88accab2498ec4.tar.gz
luajit-2e614adb21b3c0c46038a7897b88accab2498ec4.tar.bz2
luajit-2e614adb21b3c0c46038a7897b88accab2498ec4.zip
Do not fuse SLOAD across RETF.
Diffstat (limited to 'src')
-rw-r--r--src/lj_asm.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 367fe430..cd1c0dbd 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -1277,7 +1277,8 @@ static Reg asm_fuseload(ASMState *as, IRRef ref, RegSet allow)
1277 } else if (mayfuse(as, ref)) { 1277 } else if (mayfuse(as, ref)) {
1278 RegSet xallow = (allow & RSET_GPR) ? allow : RSET_GPR; 1278 RegSet xallow = (allow & RSET_GPR) ? allow : RSET_GPR;
1279 if (ir->o == IR_SLOAD) { 1279 if (ir->o == IR_SLOAD) {
1280 if (!irt_isint(ir->t) && !(ir->op2 & IRSLOAD_PARENT)) { 1280 if (!irt_isint(ir->t) && !(ir->op2 & IRSLOAD_PARENT) &&
1281 noconflict(as, ref, IR_RETF)) {
1281 as->mrm.base = (uint8_t)ra_alloc1(as, REF_BASE, xallow); 1282 as->mrm.base = (uint8_t)ra_alloc1(as, REF_BASE, xallow);
1282 as->mrm.ofs = 8*((int32_t)ir->op1-1); 1283 as->mrm.ofs = 8*((int32_t)ir->op1-1);
1283 as->mrm.idx = RID_NONE; 1284 as->mrm.idx = RID_NONE;