Use HIOP for XSTORE in SPLIT pass.

This commit is contained in:
Mike Pall
2012-07-02 22:37:00 +02:00
parent 7ae3832f20
commit 264177b0d0
5 changed files with 77 additions and 62 deletions

View File

@@ -1273,11 +1273,12 @@ static void asm_fxstore(ASMState *as, IRIns *ir)
}
rset_clear(allow, src);
}
if (ir->o == IR_FSTORE)
if (ir->o == IR_FSTORE) {
asm_fusefref(as, IR(ir->op1), allow);
else
} else {
asm_fusexref(as, ir->op1, allow);
/* ir->op2 is ignored -- unaligned stores are ok on x86. */
if (LJ_32 && ir->o == IR_HIOP) as->mrm.ofs += 4;
}
if (ra_hasreg(src)) {
x86Op xo;
switch (irt_type(ir->t)) {
@@ -2249,6 +2250,9 @@ static void asm_hiop(ASMState *as, IRIns *ir)
} else if ((ir-1)->o <= IR_NE) { /* 64 bit integer comparisons. ORDER IR. */
asm_comp_int64(as, ir);
return;
} else if ((ir-1)->o == IR_XSTORE) {
asm_fxstore(as, ir);
return;
}
if (!usehi) return; /* Skip unused hiword op for all remaining ops. */
switch ((ir-1)->o) {