Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1ab9bcf

Browse files
Address review comments
1 parent d881cdb commit 1ab9bcf

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

src/libraries/System.Private.CoreLib/src/System/Buffers/Text/Base64Decoder.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -892,12 +892,14 @@ private static unsafe void AdvSimdDecode(ref byte* srcBytes, ref byte* destBytes
892892
byte* src = srcBytes;
893893
byte* dest = destBytes;
894894
Vector128<byte> offset = AdvSimd.DuplicateToVector128((byte)0x3F);
895+
var decLutOne = (decLutOne1, decLutOne2, decLutOne3, decLutOne4);
896+
var decLutTwo = (decLutTwo1, decLutTwo2, decLutTwo3, decLutTwo4);
895897

896898
do
897899
{
898900
// Load 64 bytes and de-interleave.
899901
AssertRead<Vector128<byte>>(src, srcStart, sourceLength);
900-
(str1, str2, str3, str4) = AdvSimd.Arm64.LoadVector128x4AndUnzip(src);
902+
(str1, str2, str3, str4) = AdvSimd.Arm64.LoadVector128x4AndUnzip(src);
901903

902904
// Get indices for second LUT:
903905
decTwo1 = AdvSimd.SubtractSaturate(str1, offset);
@@ -906,23 +908,23 @@ private static unsafe void AdvSimdDecode(ref byte* srcBytes, ref byte* destBytes
906908
decTwo4 = AdvSimd.SubtractSaturate(str4, offset);
907909

908910
// Get values from first LUT. Out-of-range indices are set to 0.
909-
decOne1 = AdvSimd.Arm64.VectorTableLookup((decLutOne1, decLutOne2, decLutOne3, decLutOne4), str1);
910-
decOne2 = AdvSimd.Arm64.VectorTableLookup((decLutOne1, decLutOne2, decLutOne3, decLutOne4), str2);
911-
decOne3 = AdvSimd.Arm64.VectorTableLookup((decLutOne1, decLutOne2, decLutOne3, decLutOne4), str3);
912-
decOne4 = AdvSimd.Arm64.VectorTableLookup((decLutOne1, decLutOne2, decLutOne3, decLutOne4), str4);
911+
decOne1 = AdvSimd.Arm64.VectorTableLookup(decLutOne, str1);
912+
decOne2 = AdvSimd.Arm64.VectorTableLookup(decLutOne, str2);
913+
decOne3 = AdvSimd.Arm64.VectorTableLookup(decLutOne, str3);
914+
decOne4 = AdvSimd.Arm64.VectorTableLookup(decLutOne, str4);
913915

914916
// Get values from second LUT. Out-of-range indices are unchanged.
915-
decTwo1 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo1, (decLutTwo1, decLutTwo2, decLutTwo3, decLutTwo4), decTwo1);
916-
decTwo2 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo2, (decLutTwo1, decLutTwo2, decLutTwo3, decLutTwo4), decTwo2);
917-
decTwo3 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo3, (decLutTwo1, decLutTwo2, decLutTwo3, decLutTwo4), decTwo3);
918-
decTwo4 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo4, (decLutTwo1, decLutTwo2, decLutTwo3, decLutTwo4), decTwo4);
917+
decTwo1 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo1, decLutTwo, decTwo1);
918+
decTwo2 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo2, decLutTwo, decTwo2);
919+
decTwo3 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo3, decLutTwo, decTwo3);
920+
decTwo4 = AdvSimd.Arm64.VectorTableLookupExtension(decTwo4, decLutTwo, decTwo4);
919921

920922
// Invalid values are set to 255 during above look-ups using 'decLutTwo' and 'decLutTwo'.
921923
// Thus the intermediate results 'decOne' and 'decTwo' could be OR-ed to get final values.
922-
str1 = AdvSimd.Or(decOne1, decTwo1);
923-
str2 = AdvSimd.Or(decOne2, decTwo2);
924-
str3 = AdvSimd.Or(decOne3, decTwo3);
925-
str4 = AdvSimd.Or(decOne4, decTwo4);
924+
str1 = decOne1 | decTwo1;
925+
str2 = decOne2 | decTwo2;
926+
str3 = decOne3 | decTwo3;
927+
str4 = decOne4 | decTwo4;
926928

927929
// Check for invalid input, any value larger than 63.
928930
Vector128<byte> classified = AdvSimd.CompareGreaterThan(str1, offset)

0 commit comments

Comments
 (0)