1
- using System . Diagnostics . CodeAnalysis ;
1
+ // Licensed to the .NET Foundation under one or more agreements.
2
+ // The .NET Foundation licenses this file to you under the MIT license.
3
+ // See the LICENSE file in the project root for more information.
2
4
using System . Numerics ;
3
- using System . Reflection ;
4
- using System . Runtime . CompilerServices ;
5
- using System . Runtime . InteropServices ;
6
5
using System . Runtime . Intrinsics ;
7
6
using System . Runtime . Intrinsics . Wasm ;
8
7
using System . Tests ;
@@ -84,19 +83,38 @@ public unsafe void FloatingPointOperationsTest()
84
83
Assert . Equal ( Vector128 . Create ( 4.0f , 9.0f , 16.0f , 25.0f ) , floorResult ) ;
85
84
}
86
85
86
+
87
87
[ Fact ]
88
88
public unsafe void LoadStoreTest ( )
89
89
{
90
- int [ ] values = new int [ ] { 1 , 2 , 3 , 4 } ;
90
+ int [ ] values = new int [ ] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } ;
91
91
fixed ( int * ptr = values )
92
92
{
93
93
var loaded = PackedSimd . LoadVector128 ( ptr ) ;
94
+ var loaded2 = PackedSimd . LoadVector128 ( ptr + 4 ) ;
95
+
94
96
Assert . Equal ( Vector128 . Create ( 1 , 2 , 3 , 4 ) , loaded ) ;
97
+ Assert . Equal ( Vector128 . Create ( 5 , 6 , 7 , 8 ) , loaded2 ) ;
98
+
99
+ var vl = Vector128 . LoadUnsafe ( ref values [ 0 ] , ( nuint ) 0 ) ;
100
+ var vl2 = Vector128 . LoadUnsafe ( ref values [ 0 ] , ( nuint ) 4 ) ;
101
+ Assert . Equal ( loaded , vl ) ;
102
+ Assert . Equal ( loaded2 , vl2 ) ;
103
+
104
+ vl = Vector128 . Load ( ptr ) ;
105
+ vl2 = Vector128 . Load ( ptr + 4 ) ;
106
+ Assert . Equal ( loaded , vl ) ;
107
+ Assert . Equal ( loaded2 , vl2 ) ;
108
+
109
+ Assert . Equal ( Vector128 . Create ( 1 , 2 , 3 , 4 ) , loaded ) ;
110
+ Assert . Equal ( Vector128 . Create ( 5 , 6 , 7 , 8 ) , loaded2 ) ;
111
+
95
112
96
- int [ ] storeTarget = new int [ 4 ] ;
113
+ int [ ] storeTarget = new int [ 8 ] ;
97
114
fixed ( int * storePtr = storeTarget )
98
115
{
99
116
PackedSimd . Store ( storePtr , loaded ) ;
117
+ PackedSimd . Store ( storePtr + 4 , loaded2 ) ;
100
118
Assert . Equal ( values , storeTarget ) ;
101
119
}
102
120
}
@@ -549,5 +567,49 @@ public void NativeUnsignedIntegerShiftTest()
549
567
Assert . Equal ( Vector128 . Create ( [ ( nuint ) 64 , unchecked ( ( nuint ) ( - 64 ) ) , ( nuint ) 128 , unchecked ( ( nuint ) ( - 128 ) ) ] ) , leftShift ) ;
550
568
Assert . Equal ( Vector128 . Create ( [ ( nuint ) 4 , ( nuint ) 1073741820 , ( nuint ) 8 , ( nuint ) 1073741816 ] ) , rightShiftLogical ) ;
551
569
}
570
+
571
+ [ Fact ]
572
+ public unsafe void ConvertNarrowingSaturateSignedTest ( )
573
+ {
574
+ var v1 = Vector128 . Create ( 32767 , 32768 , - 32768 , - 32769 ) ;
575
+ var v2 = Vector128 . Create ( 100 , 200 , - 100 , - 200 ) ;
576
+
577
+ var result = PackedSimd . ConvertNarrowingSaturateSigned ( v1 , v2 ) ;
578
+
579
+ Assert . Equal ( Vector128 . Create ( ( short ) 32767 , ( short ) 32767 , ( short ) - 32768 , ( short ) - 32768 , ( short ) 100 , ( short ) 200 , ( short ) - 100 , ( short ) - 200 ) , result ) ;
580
+ }
581
+
582
+ [ Fact ]
583
+ public unsafe void ConvertNarrowingSaturateUnsignedTest ( )
584
+ {
585
+ var v1 = Vector128 . Create ( 65535 , 65536 , - 1 , - 100 ) ;
586
+ var v2 = Vector128 . Create ( 100 , 200 , 300 , 400 ) ;
587
+
588
+ var result = PackedSimd . ConvertNarrowingSaturateUnsigned ( v1 , v2 ) ;
589
+
590
+ Assert . Equal ( Vector128 . Create ( ( ushort ) 65535 , ( ushort ) 65535 , ( ushort ) 0 , ( ushort ) 0 , ( ushort ) 100 , ( ushort ) 200 , ( ushort ) 300 , ( ushort ) 400 ) , result ) ;
591
+ }
592
+
593
+ [ Fact ]
594
+ public unsafe void BitmaskTest ( )
595
+ {
596
+ var v1 = Vector128 . Create ( ( byte ) 0b00000001 , ( byte ) 0b00000010 , ( byte ) 0b00000100 , ( byte ) 0b00001000 ,
597
+ ( byte ) 0b00010000 , ( byte ) 0b00100000 , ( byte ) 0b01000000 , ( byte ) 0b10000000 ,
598
+ ( byte ) 0b00000001 , ( byte ) 0b00000010 , ( byte ) 0b00000100 , ( byte ) 0b00001000 ,
599
+ ( byte ) 0b00010000 , ( byte ) 0b10100000 , ( byte ) 0b01000000 , ( byte ) 0b10000000 ) ;
600
+
601
+ var v2 = Vector128 . Create ( ( ushort ) 0b1100001001100001 , ( ushort ) 0b0000000000000010 , ( ushort ) 0b0000000000000100 , ( ushort ) 0b0000000000001000 ,
602
+ ( ushort ) 0b0000000000010000 , ( ushort ) 0b0000000000100000 , ( ushort ) 0b0000000001000000 , ( ushort ) 0b0000000010000000 ) ;
603
+
604
+ var v3 = Vector128 . Create ( 0b10000000000000000000000000000001 , 0b00000000000111111000000000000010 ,
605
+ 0b00000000000000000000000000000100 , 0b10000000000000000000000000001000 ) ;
606
+
607
+ var bitmask1 = PackedSimd . Bitmask ( v1 ) ;
608
+ var bitmask2 = PackedSimd . Bitmask ( v2 ) ;
609
+ var bitmask3 = PackedSimd . Bitmask ( v3 ) ;
610
+ Assert . Equal ( 0b1010000010000000 , bitmask1 ) ;
611
+ Assert . Equal ( 0b1 , bitmask2 ) ;
612
+ Assert . Equal ( 0b1001 , bitmask3 ) ;
613
+ }
552
614
}
553
615
}
0 commit comments