diff options
author | Mike Pall <mike> | 2010-12-08 03:24:35 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-12-08 03:24:35 +0100 |
commit | 72744dabd90f23a3d9bd3070c1c5cc537da86867 (patch) | |
tree | 7988d3a4f5c1ab035d1aa67732d0f70759d9e3b7 /src | |
parent | 3ef6a53cfa95dbe890ec305368a7e446dbd5aedc (diff) | |
download | luajit-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.c | 5 |
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 | ||
2017 | static void asm_fxload(ASMState *as, IRIns *ir) | 2017 | static 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); |