aboutsummaryrefslogtreecommitdiff
path: root/src/lj_asm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_asm.c')
-rw-r--r--src/lj_asm.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/lj_asm.c b/src/lj_asm.c
index 79097759..6afc70a0 100644
--- a/src/lj_asm.c
+++ b/src/lj_asm.c
@@ -719,7 +719,7 @@ static void ra_leftov(ASMState *as, Reg dest, IRRef lref)
719} 719}
720#endif 720#endif
721 721
722#if !LJ_TARGET_X86ORX64 722#if !LJ_64
723/* Force a RID_RETLO/RID_RETHI destination register pair (marked as free). */ 723/* Force a RID_RETLO/RID_RETHI destination register pair (marked as free). */
724static void ra_destpair(ASMState *as, IRIns *ir) 724static void ra_destpair(ASMState *as, IRIns *ir)
725{ 725{
@@ -747,9 +747,13 @@ static void ra_destpair(ASMState *as, IRIns *ir)
747 /* Check for conflicts and shuffle the registers as needed. */ 747 /* Check for conflicts and shuffle the registers as needed. */
748 if (destlo == RID_RETHI) { 748 if (destlo == RID_RETHI) {
749 if (desthi == RID_RETLO) { 749 if (desthi == RID_RETLO) {
750#if LJ_TARGET_X86
751 *--as->mcp = XI_XCHGa + RID_RETHI;
752#else
750 emit_movrr(as, ir, RID_RETHI, RID_TMP); 753 emit_movrr(as, ir, RID_RETHI, RID_TMP);
751 emit_movrr(as, ir, RID_RETLO, RID_RETHI); 754 emit_movrr(as, ir, RID_RETLO, RID_RETHI);
752 emit_movrr(as, ir, RID_TMP, RID_RETLO); 755 emit_movrr(as, ir, RID_TMP, RID_RETLO);
756#endif
753 } else { 757 } else {
754 emit_movrr(as, ir, RID_RETHI, RID_RETLO); 758 emit_movrr(as, ir, RID_RETHI, RID_RETLO);
755 if (desthi != RID_RETHI) emit_movrr(as, ir, desthi, RID_RETHI); 759 if (desthi != RID_RETHI) emit_movrr(as, ir, desthi, RID_RETHI);