From 691c3d10212f66163eec25156440688e948e5e21 Mon Sep 17 00:00:00 2001 From: "Dr. Chat" Date: Fri, 11 Nov 2016 16:40:32 -0600 Subject: [PATCH] EXTRACT_I32: Support constant src1 --- src/xenia/cpu/backend/x64/x64_sequences.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/xenia/cpu/backend/x64/x64_sequences.cc b/src/xenia/cpu/backend/x64/x64_sequences.cc index 7185e8aa4..98b3bf3e0 100644 --- a/src/xenia/cpu/backend/x64/x64_sequences.cc +++ b/src/xenia/cpu/backend/x64/x64_sequences.cc @@ -6461,13 +6461,21 @@ struct EXTRACT_I32 // e.vpshufb(e.xmm0, i.src1, e.xmm0); // e.vmovd(i.dest.reg().cvt32(), e.xmm0); // Get the desired word in xmm0, then extract that. + Xmm src1; + if (i.src1.is_constant) { + src1 = e.xmm1; + e.LoadConstantXmm(src1, i.src1.constant()); + } else { + src1 = i.src1.reg(); + } + e.xor_(e.rax, e.rax); e.mov(e.al, i.src2); e.and_(e.al, 0x03); e.shl(e.al, 4); e.mov(e.rdx, reinterpret_cast(extract_table_32)); e.vmovaps(e.xmm0, e.ptr[e.rdx + e.rax]); - e.vpshufb(e.xmm0, i.src1, e.xmm0); + e.vpshufb(e.xmm0, src1, e.xmm0); e.vpextrd(i.dest, e.xmm0, 0); e.ReloadMembase(); }