From 14c281465432c253cb9eb52ce622b47df26892be Mon Sep 17 00:00:00 2001 From: Gliniak <153369+Gliniak@users.noreply.github.com> Date: Wed, 11 Feb 2026 22:25:16 +0100 Subject: [PATCH] [CPU] Fixed bug in VECTOR_SHL_V128 implementation - For EmitInt8 there was missing check for & 7 which was causing graphical glitches in movies - There is probably similar bug in 16/32 version, but that's for another commit --- src/xenia/cpu/backend/x64/x64_seq_vector.cc | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/xenia/cpu/backend/x64/x64_seq_vector.cc b/src/xenia/cpu/backend/x64/x64_seq_vector.cc index 855aa3797..fbdcd43e9 100644 --- a/src/xenia/cpu/backend/x64/x64_seq_vector.cc +++ b/src/xenia/cpu/backend/x64/x64_seq_vector.cc @@ -935,6 +935,10 @@ struct VECTOR_SHL_V128 e.vpmovzxbd(e.ymm2, i.src2); e.vpmovzxbd(e.ymm3, e.xmm3); + e.vpbroadcastd(e.ymm4, e.GetXmmConstPtr(XMMXOPByteShiftMask)); + e.vpand(e.ymm2, e.ymm2, e.ymm4); + e.vpand(e.ymm3, e.ymm3, e.ymm4); + e.vpsllvd(e.ymm0, e.ymm0, e.ymm2); e.vpsllvd(e.ymm1, e.ymm1, e.ymm3); e.vextracti128(e.xmm2, e.ymm0, 1); @@ -985,6 +989,10 @@ struct VECTOR_SHL_V128 e.vpmovzxbd(e.ymm2, e.xmm2); e.vpmovzxbd(e.ymm3, e.xmm3); + e.vpbroadcastd(e.ymm4, e.GetXmmConstPtr(XMMXOPByteShiftMask)); + e.vpand(e.ymm2, e.ymm2, e.ymm4); + e.vpand(e.ymm3, e.ymm3, e.ymm4); + e.vpsllvd(e.ymm0, e.ymm0, e.ymm2); e.vpsllvd(e.ymm1, e.ymm1, e.ymm3); e.vextracti128(e.xmm2, e.ymm0, 1); @@ -1025,7 +1033,7 @@ struct VECTOR_SHL_V128 e.L(looper); e.movzx(e.ecx, e.byte[e.rsp + stack_offset_src2 + e.rdx]); - + e.and_(e.ecx, 7); e.shl(e.byte[e.rsp + stack_offset_src1 + e.rdx], e.cl); if (e.IsFeatureEnabled(kX64FlagsIndependentVars)) {