[x64] Fix vector mask issue and add missing tests
This commit is contained in:
@@ -934,6 +934,7 @@ 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);
|
||||||
|
|
||||||
|
// Mask shift counts to 3 bits (0-7) for byte shifts
|
||||||
e.vpbroadcastd(e.ymm4, e.GetXmmConstPtr(XMMXOPByteShiftMask));
|
e.vpbroadcastd(e.ymm4, e.GetXmmConstPtr(XMMXOPByteShiftMask));
|
||||||
e.vpand(e.ymm2, e.ymm2, e.ymm4);
|
e.vpand(e.ymm2, e.ymm2, e.ymm4);
|
||||||
e.vpand(e.ymm3, e.ymm3, e.ymm4);
|
e.vpand(e.ymm3, e.ymm3, e.ymm4);
|
||||||
@@ -1032,7 +1033,8 @@ 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.and_(e.cl, 7); // Mask shift count to 3 bits (0-7) for byte shifts
|
||||||
|
|
||||||
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