diff options
Diffstat (limited to 'src/lj_asm_x86.h')
-rw-r--r-- | src/lj_asm_x86.h | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index c4ebdb1f..7647b03f 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h | |||
@@ -1273,11 +1273,12 @@ static void asm_fxstore(ASMState *as, IRIns *ir) | |||
1273 | } | 1273 | } |
1274 | rset_clear(allow, src); | 1274 | rset_clear(allow, src); |
1275 | } | 1275 | } |
1276 | if (ir->o == IR_FSTORE) | 1276 | if (ir->o == IR_FSTORE) { |
1277 | asm_fusefref(as, IR(ir->op1), allow); | 1277 | asm_fusefref(as, IR(ir->op1), allow); |
1278 | else | 1278 | } else { |
1279 | asm_fusexref(as, ir->op1, allow); | 1279 | asm_fusexref(as, ir->op1, allow); |
1280 | /* ir->op2 is ignored -- unaligned stores are ok on x86. */ | 1280 | if (LJ_32 && ir->o == IR_HIOP) as->mrm.ofs += 4; |
1281 | } | ||
1281 | if (ra_hasreg(src)) { | 1282 | if (ra_hasreg(src)) { |
1282 | x86Op xo; | 1283 | x86Op xo; |
1283 | switch (irt_type(ir->t)) { | 1284 | switch (irt_type(ir->t)) { |
@@ -2249,6 +2250,9 @@ static void asm_hiop(ASMState *as, IRIns *ir) | |||
2249 | } else if ((ir-1)->o <= IR_NE) { /* 64 bit integer comparisons. ORDER IR. */ | 2250 | } else if ((ir-1)->o <= IR_NE) { /* 64 bit integer comparisons. ORDER IR. */ |
2250 | asm_comp_int64(as, ir); | 2251 | asm_comp_int64(as, ir); |
2251 | return; | 2252 | return; |
2253 | } else if ((ir-1)->o == IR_XSTORE) { | ||
2254 | asm_fxstore(as, ir); | ||
2255 | return; | ||
2252 | } | 2256 | } |
2253 | if (!usehi) return; /* Skip unused hiword op for all remaining ops. */ | 2257 | if (!usehi) return; /* Skip unused hiword op for all remaining ops. */ |
2254 | switch ((ir-1)->o) { | 2258 | switch ((ir-1)->o) { |