From 3680282b30873a7b389032fb2d6e54e0d7e93e6a Mon Sep 17 00:00:00 2001 From: moonfloww <161968556+MoonFlowww@users.noreply.github.com> Date: Thu, 16 Jul 2026 13:57:12 +0200 Subject: [PATCH] new vmovmsk from 11 to 7 ins. --- .../Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp b/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp index 796437fad..74ba6522a 100644 --- a/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp +++ b/FEXCore/Source/Interface/Core/OpcodeDispatcher/AVX_128.cpp @@ -865,9 +865,12 @@ void OpDispatchBuilder::AVX128_MOVMSK(OpcodeArgs, IR::OpSize ElementSize) { GPR = Mask4Byte(Src.Low); } } else if (ElementSize == OpSize::i32Bit) { - auto GPRLow = Mask4Byte(Src.Low); - auto GPRHigh = Mask4Byte(Src.High); - GPR = _Orlshl(OpSize::i64Bit, GPRLow, GPRHigh, 4); + Ref Fused = _VUnZip2(OpSize::i128Bit, OpSize::i16Bit, Src.Low, Src.High); + Fused = _VUShrI(OpSize::i128Bit, OpSize::i16Bit, Fused, 15); + auto ConstantUSHL = LoadAndCacheNamedVectorConstant(OpSize::i128Bit, NAMED_VECTOR_INCREMENTAL_U16_INDEX); + Fused = _VUShl(OpSize::i128Bit, OpSize::i16Bit, Fused, ConstantUSHL, false); + Fused = _VAddV(OpSize::i128Bit, OpSize::i16Bit, Fused); + GPR = _VExtractToGPR(OpSize::i128Bit, OpSize::i16Bit, Fused, 0); } else { auto GPRLow = Mask8Byte(Src.Low); auto GPRHigh = Mask8Byte(Src.High);