[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
This commit is contained in:
@@ -935,6 +935,10 @@ struct VECTOR_SHL_V128
|
|||||||
e.vpmovzxbd(e.ymm2, i.src2);
|
e.vpmovzxbd(e.ymm2, i.src2);
|
||||||
e.vpmovzxbd(e.ymm3, e.xmm3);
|
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.ymm0, e.ymm0, e.ymm2);
|
||||||
e.vpsllvd(e.ymm1, e.ymm1, e.ymm3);
|
e.vpsllvd(e.ymm1, e.ymm1, e.ymm3);
|
||||||
e.vextracti128(e.xmm2, e.ymm0, 1);
|
e.vextracti128(e.xmm2, e.ymm0, 1);
|
||||||
@@ -985,6 +989,10 @@ struct VECTOR_SHL_V128
|
|||||||
e.vpmovzxbd(e.ymm2, e.xmm2);
|
e.vpmovzxbd(e.ymm2, e.xmm2);
|
||||||
e.vpmovzxbd(e.ymm3, e.xmm3);
|
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.ymm0, e.ymm0, e.ymm2);
|
||||||
e.vpsllvd(e.ymm1, e.ymm1, e.ymm3);
|
e.vpsllvd(e.ymm1, e.ymm1, e.ymm3);
|
||||||
e.vextracti128(e.xmm2, e.ymm0, 1);
|
e.vextracti128(e.xmm2, e.ymm0, 1);
|
||||||
@@ -1025,7 +1033,7 @@ struct VECTOR_SHL_V128
|
|||||||
|
|
||||||
e.L(looper);
|
e.L(looper);
|
||||||
e.movzx(e.ecx, e.byte[e.rsp + stack_offset_src2 + e.rdx]);
|
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);
|
e.shl(e.byte[e.rsp + stack_offset_src1 + e.rdx], e.cl);
|
||||||
|
|
||||||
if (e.IsFeatureEnabled(kX64FlagsIndependentVars)) {
|
if (e.IsFeatureEnabled(kX64FlagsIndependentVars)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user