summaryrefslogtreecommitdiff
path: root/src/lj_opt_mem.c
diff options
context:
space:
mode:
authorMike Pall <mike>2012-06-27 19:54:52 +0200
committerMike Pall <mike>2012-06-27 19:54:52 +0200
commit9a98ba64b4cc52b1e00383b952926369cb3fe526 (patch)
tree54fa0d914cb7863065a8579b48fcbbcc5999f205 /src/lj_opt_mem.c
parent3dc7baf6af317f3d1358a94a1e5f92258d6d0ff4 (diff)
downloadluajit-9a98ba64b4cc52b1e00383b952926369cb3fe526.tar.gz
luajit-9a98ba64b4cc52b1e00383b952926369cb3fe526.tar.bz2
luajit-9a98ba64b4cc52b1e00383b952926369cb3fe526.zip
Fix TDUP to HLOAD forwarding for DUALNUM builds.
Diffstat (limited to 'src/lj_opt_mem.c')
-rw-r--r--src/lj_opt_mem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c
index 17e29569..a0bfba19 100644
--- a/src/lj_opt_mem.c
+++ b/src/lj_opt_mem.c
@@ -181,7 +181,8 @@ static TRef fwd_ahload(jit_State *J, IRRef xref)
181 lua_assert(ir->o != IR_TNEW || irt_isnil(fins->t)); 181 lua_assert(ir->o != IR_TNEW || irt_isnil(fins->t));
182 if (irt_ispri(fins->t)) { 182 if (irt_ispri(fins->t)) {
183 return TREF_PRI(irt_type(fins->t)); 183 return TREF_PRI(irt_type(fins->t));
184 } else if (irt_isnum(fins->t) || irt_isstr(fins->t)) { 184 } else if (irt_isnum(fins->t) || (LJ_DUALNUM && irt_isint(fins->t)) ||
185 irt_isstr(fins->t)) {
185 TValue keyv; 186 TValue keyv;
186 cTValue *tv; 187 cTValue *tv;
187 IRIns *key = IR(xr->op2); 188 IRIns *key = IR(xr->op2);
@@ -191,6 +192,8 @@ static TRef fwd_ahload(jit_State *J, IRRef xref)
191 lua_assert(itype2irt(tv) == irt_type(fins->t)); 192 lua_assert(itype2irt(tv) == irt_type(fins->t));
192 if (irt_isnum(fins->t)) 193 if (irt_isnum(fins->t))
193 return lj_ir_knum_u64(J, tv->u64); 194 return lj_ir_knum_u64(J, tv->u64);
195 else if (LJ_DUALNUM && irt_isint(fins->t))
196 return lj_ir_kint(J, intV(tv));
194 else 197 else
195 return lj_ir_kstr(J, strV(tv)); 198 return lj_ir_kstr(J, strV(tv));
196 } 199 }