From 20d79911f0ff15f3e38bf95e158984e365d1b4ab Mon Sep 17 00:00:00 2001 From: gibbed Date: Sun, 26 Jul 2015 10:54:47 -0500 Subject: [PATCH] Constant support for Emit16_IN_32. --- src/xenia/cpu/backend/x64/x64_sequences.cc | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/xenia/cpu/backend/x64/x64_sequences.cc b/src/xenia/cpu/backend/x64/x64_sequences.cc index 039a1ddc0..feb44bce6 100644 --- a/src/xenia/cpu/backend/x64/x64_sequences.cc +++ b/src/xenia/cpu/backend/x64/x64_sequences.cc @@ -6613,7 +6613,15 @@ struct PACK : Sequence> { // PACKUSDW // TMP[15:0] <- (DEST[31:0] < 0) ? 0 : DEST[15:0]; // DEST[15:0] <- (DEST[31:0] > FFFFH) ? FFFFH : TMP[15:0]; - e.vpackusdw(i.dest, i.src1, i.src2); + Xmm src2; + if (!i.src2.is_constant) { + src2 = i.src2; + } else { + assert_false(i.src2 == e.xmm0); + e.LoadConstantXmm(e.xmm0, i.src2.constant()); + src2 = e.xmm0; + } + e.vpackusdw(i.dest, i.src1, src2); e.vpshuflw(i.dest, i.dest, B10110001); e.vpshufhw(i.dest, i.dest, B10110001); } else { @@ -6647,7 +6655,15 @@ struct PACK : Sequence> { if (IsPackOutSaturate(flags)) { // signed -> signed + saturate // PACKSSDW / SaturateSignedDwordToSignedWord - e.vpackssdw(i.dest, i.src1, i.src2); + Xmm src2; + if (!i.src2.is_constant) { + src2 = i.src2; + } else { + assert_false(e.xmm0 == i.src2); + e.LoadConstantXmm(e.xmm0, i.src2.constant()); + src2 = e.xmm0; + } + e.vpackssdw(i.dest, i.src1, src2); e.vpshuflw(i.dest, i.dest, B10110001); e.vpshufhw(i.dest, i.dest, B10110001); } else {