Skip to content

Commit 3cda066

Browse files
Fix shuffle
1 parent 56cfd96 commit 3cda066

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/ImageSharp/Common/Helpers/SimdUtils.HwIntrinsics.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,6 @@ private static void Shuffle3(
358358
{
359359
ref byte vmaskBase = ref MemoryMarshal.GetReference(ShuffleMaskPad4Nx16);
360360
Vector128<byte> vmask = Unsafe.As<byte, Vector128<byte>>(ref vmaskBase);
361-
Vector128<byte> vfill = Vector128.Create(0xff000000ff000000ul).AsByte();
362361
ref byte vmaskoBase = ref MemoryMarshal.GetReference(ShuffleMaskSlice4Nx16);
363362
Vector128<byte> vmasko = Unsafe.As<byte, Vector128<byte>>(ref vmaskoBase);
364363
Vector128<byte> vmaske = Ssse3.AlignRight(vmasko, vmasko, 12);
@@ -398,8 +397,12 @@ private static void Shuffle3(
398397
v3 = Ssse3.Shuffle(v3, vmasko);
399398

400399
v0 = Ssse3.AlignRight(v1, v0, 4);
401-
v1 = Sse2.Or(Sse2.ShiftRightLogical128BitLane(v1, 4), Sse2.ShiftLeftLogical128BitLane(v2, 4));
402-
v2 = Ssse3.AlignRight(v3, v2, 12);
400+
v3 = Ssse3.AlignRight(v3, v2, 12);
401+
402+
v1 = Sse2.ShiftLeftLogical128BitLane(v1, 4);
403+
v2 = Sse2.ShiftRightLogical128BitLane(v2, 4);
404+
405+
v1 = Ssse3.AlignRight(v2, v1, 8);
403406

404407
ref Vector128<byte> vd = ref Unsafe.Add(ref destBase, i);
405408

@@ -493,8 +496,12 @@ private static void Shuffle4Slice3(
493496
v3 = Ssse3.Shuffle(Ssse3.Shuffle(v3, vshuffle), vmasko);
494497

495498
v0 = Ssse3.AlignRight(v1, v0, 4);
496-
v1 = Sse2.Or(Sse2.ShiftRightLogical128BitLane(v1, 4), Sse2.ShiftLeftLogical128BitLane(v2, 4));
497-
v2 = Ssse3.AlignRight(v3, v2, 12);
499+
v3 = Ssse3.AlignRight(v3, v2, 12);
500+
501+
v1 = Sse2.ShiftLeftLogical128BitLane(v1, 4);
502+
v2 = Sse2.ShiftRightLogical128BitLane(v2, 4);
503+
504+
v1 = Ssse3.AlignRight(v2, v1, 8);
498505

499506
ref Vector128<byte> vd = ref Unsafe.Add(ref destBase, j);
500507

0 commit comments

Comments
 (0)