diff options
Diffstat (limited to 'src/lj_asm.c')
-rw-r--r-- | src/lj_asm.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c index d26d0b4b..e7f2cb72 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c | |||
@@ -96,7 +96,7 @@ typedef struct ASMState { | |||
96 | #define neverfuse(as) (as->fuseref == FUSE_DISABLED) | 96 | #define neverfuse(as) (as->fuseref == FUSE_DISABLED) |
97 | #define opisfusableload(o) \ | 97 | #define opisfusableload(o) \ |
98 | ((o) == IR_ALOAD || (o) == IR_HLOAD || (o) == IR_ULOAD || \ | 98 | ((o) == IR_ALOAD || (o) == IR_HLOAD || (o) == IR_ULOAD || \ |
99 | (o) == IR_FLOAD || (o) == IR_SLOAD || (o) == IR_XLOAD) | 99 | (o) == IR_FLOAD || (o) == IR_XLOAD || (o) == IR_SLOAD || (o) == IR_VLOAD) |
100 | 100 | ||
101 | /* Instruction selection for XMM moves. */ | 101 | /* Instruction selection for XMM moves. */ |
102 | #define XMM_MOVRR(as) ((as->flags & JIT_F_SPLIT_XMM) ? XO_MOVSD : XO_MOVAPS) | 102 | #define XMM_MOVRR(as) ((as->flags & JIT_F_SPLIT_XMM) ? XO_MOVSD : XO_MOVAPS) |
@@ -1315,6 +1315,9 @@ static Reg asm_fuseload(ASMState *as, IRRef ref, RegSet allow) | |||
1315 | asm_fusexref(as, IR(ir->op1), xallow); | 1315 | asm_fusexref(as, IR(ir->op1), xallow); |
1316 | return RID_MRM; | 1316 | return RID_MRM; |
1317 | } | 1317 | } |
1318 | } else if (ir->o == IR_VLOAD) { | ||
1319 | asm_fuseahuref(as, ir->op1, xallow); | ||
1320 | return RID_MRM; | ||
1318 | } | 1321 | } |
1319 | } | 1322 | } |
1320 | if (!(as->freeset & allow) && | 1323 | if (!(as->freeset & allow) && |
@@ -1978,7 +1981,7 @@ static Reg asm_load_lightud64(ASMState *as, IRIns *ir, int typecheck) | |||
1978 | } | 1981 | } |
1979 | #endif | 1982 | #endif |
1980 | 1983 | ||
1981 | static void asm_ahuload(ASMState *as, IRIns *ir) | 1984 | static void asm_ahuvload(ASMState *as, IRIns *ir) |
1982 | { | 1985 | { |
1983 | lua_assert(irt_isnum(ir->t) || irt_ispri(ir->t) || irt_isaddr(ir->t)); | 1986 | lua_assert(irt_isnum(ir->t) || irt_ispri(ir->t) || irt_isaddr(ir->t)); |
1984 | #if LJ_64 | 1987 | #if LJ_64 |
@@ -3385,7 +3388,9 @@ static void asm_ir(ASMState *as, IRIns *ir) | |||
3385 | case IR_STRREF: asm_strref(as, ir); break; | 3388 | case IR_STRREF: asm_strref(as, ir); break; |
3386 | 3389 | ||
3387 | /* Loads and stores. */ | 3390 | /* Loads and stores. */ |
3388 | case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: asm_ahuload(as, ir); break; | 3391 | case IR_ALOAD: case IR_HLOAD: case IR_ULOAD: case IR_VLOAD: |
3392 | asm_ahuvload(as, ir); | ||
3393 | break; | ||
3389 | case IR_FLOAD: case IR_XLOAD: asm_fxload(as, ir); break; | 3394 | case IR_FLOAD: case IR_XLOAD: asm_fxload(as, ir); break; |
3390 | case IR_SLOAD: asm_sload(as, ir); break; | 3395 | case IR_SLOAD: asm_sload(as, ir); break; |
3391 | 3396 | ||