@@ -892,12 +892,14 @@ private static unsafe void AdvSimdDecode(ref byte* srcBytes, ref byte* destBytes
892
892
byte * src = srcBytes ;
893
893
byte * dest = destBytes ;
894
894
Vector128 < byte > offset = AdvSimd . DuplicateToVector128 ( ( byte ) 0x3F ) ;
895
+ var decLutOne = ( decLutOne1 , decLutOne2 , decLutOne3 , decLutOne4 ) ;
896
+ var decLutTwo = ( decLutTwo1 , decLutTwo2 , decLutTwo3 , decLutTwo4 ) ;
895
897
896
898
do
897
899
{
898
900
// Load 64 bytes and de-interleave.
899
901
AssertRead < Vector128 < byte > > ( src , srcStart , sourceLength ) ;
900
- ( str1 , str2 , str3 , str4 ) = AdvSimd . Arm64 . LoadVector128x4AndUnzip ( src ) ;
902
+ ( str1 , str2 , str3 , str4 ) = AdvSimd . Arm64 . LoadVector128x4AndUnzip ( src ) ;
901
903
902
904
// Get indices for second LUT:
903
905
decTwo1 = AdvSimd . SubtractSaturate ( str1 , offset ) ;
@@ -906,23 +908,23 @@ private static unsafe void AdvSimdDecode(ref byte* srcBytes, ref byte* destBytes
906
908
decTwo4 = AdvSimd . SubtractSaturate ( str4 , offset ) ;
907
909
908
910
// 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 ) ;
913
915
914
916
// 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 ) ;
919
921
920
922
// Invalid values are set to 255 during above look-ups using 'decLutTwo' and 'decLutTwo'.
921
923
// 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 ;
926
928
927
929
// Check for invalid input, any value larger than 63.
928
930
Vector128 < byte > classified = AdvSimd . CompareGreaterThan ( str1 , offset )
0 commit comments