diff options
Diffstat (limited to 'src/lj_asm.c')
-rw-r--r-- | src/lj_asm.c | 6 |
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). */ |
724 | static void ra_destpair(ASMState *as, IRIns *ir) | 724 | static 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); |