aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-12-08 03:24:35 +0100
committerMike Pall <mike>2010-12-08 03:24:35 +0100
commit72744dabd90f23a3d9bd3070c1c5cc537da86867 (patch)
tree7988d3a4f5c1ab035d1aa67732d0f70759d9e3b7 /src
parent3ef6a53cfa95dbe890ec305368a7e446dbd5aedc (diff)
downloadluajit-72744dabd90f23a3d9bd3070c1c5cc537da86867.tar.gz
luajit-72744dabd90f23a3d9bd3070c1c5cc537da86867.tar.bz2
luajit-72744dabd90f23a3d9bd3070c1c5cc537da86867.zip
Fix IRT_NUM support for XLOAD/XSTORE.
Diffstat (limited to 'src')
-rw-r--r--src/lj_asm.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 9c72a864..85587a98 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -2016,7 +2016,7 @@ static void asm_strref(ASMState *as, IRIns *ir)
2016 2016
2017static void asm_fxload(ASMState *as, IRIns *ir) 2017static void asm_fxload(ASMState *as, IRIns *ir)
2018{ 2018{
2019 Reg dest = ra_dest(as, ir, RSET_GPR); 2019 Reg dest = ra_dest(as, ir, irt_isnum(ir->t) ? RSET_FPR : RSET_GPR);
2020 x86Op xo; 2020 x86Op xo;
2021 if (ir->o == IR_FLOAD) 2021 if (ir->o == IR_FLOAD)
2022 asm_fusefref(as, ir, RSET_GPR); 2022 asm_fusefref(as, ir, RSET_GPR);
@@ -2049,7 +2049,8 @@ static void asm_fxstore(ASMState *as, IRIns *ir)
2049 ** values since mov word [mem], imm16 has a length-changing prefix. 2049 ** values since mov word [mem], imm16 has a length-changing prefix.
2050 */ 2050 */
2051 if (!asm_isk32(as, ir->op2, &k) || irt_isi16(ir->t) || irt_isu16(ir->t)) { 2051 if (!asm_isk32(as, ir->op2, &k) || irt_isi16(ir->t) || irt_isu16(ir->t)) {
2052 RegSet allow8 = (irt_isi8(ir->t) || irt_isu8(ir->t)) ? RSET_GPR8 : RSET_GPR; 2052 RegSet allow8 = irt_isnum(ir->t) ? RSET_FPR :
2053 (irt_isi8(ir->t) || irt_isu8(ir->t)) ? RSET_GPR8 : RSET_GPR;
2053 src = osrc = ra_alloc1(as, ir->op2, allow8); 2054 src = osrc = ra_alloc1(as, ir->op2, allow8);
2054 if (!LJ_64 && !rset_test(allow8, src)) { /* Already in wrong register. */ 2055 if (!LJ_64 && !rset_test(allow8, src)) { /* Already in wrong register. */
2055 rset_clear(allow, osrc); 2056 rset_clear(allow, osrc);