4
4
5
5
using System ;
6
6
using System . Runtime . Intrinsics ;
7
- using System . Runtime . CompilerServices ;
7
+ using Internal . Runtime . CompilerServices ;
8
8
9
9
namespace System . Runtime . Intrinsics . X86
10
10
{
@@ -235,64 +235,23 @@ public static class Avx
235
235
/// </summary>
236
236
public static Vector256 < float > DuplicateOddIndexed ( Vector256 < float > value ) => DuplicateOddIndexed ( value ) ;
237
237
238
- /// <summary>
239
- /// __int8 _mm256_extract_epi8 (__m256i a, const int index)
240
- /// HELPER
241
- /// </summary>
242
- public static sbyte Extract ( Vector256 < sbyte > value , byte index )
243
- {
244
- unsafe
245
- {
246
- index &= 0x1F ;
247
- sbyte * buffer = stackalloc sbyte [ 32 ] ;
248
- Store ( buffer , value ) ;
249
- return buffer [ index ] ;
250
- }
251
- }
252
-
253
238
/// <summary>
254
239
/// __int8 _mm256_extract_epi8 (__m256i a, const int index)
255
240
/// HELPER
256
241
/// </summary>
257
242
public static byte Extract ( Vector256 < byte > value , byte index )
258
243
{
259
- unsafe
260
- {
261
- index &= 0x1F ;
262
- byte * buffer = stackalloc byte [ 32 ] ;
263
- Store ( buffer , value ) ;
264
- return buffer [ index ] ;
265
- }
244
+ return Unsafe . Add < byte > ( ref Unsafe . As < Vector256 < byte > , byte > ( ref value ) , index & 0x1F ) ;
266
245
}
267
246
268
- /// <summary>
269
- /// __int16 _mm256_extract_epi16 (__m256i a, const int index)
270
- /// HELPER
271
- /// </summary>
272
- public static short Extract ( Vector256 < short > value , byte index )
273
- {
274
- unsafe
275
- {
276
- index &= 0xF ;
277
- short * buffer = stackalloc short [ 16 ] ;
278
- Store ( buffer , value ) ;
279
- return buffer [ index ] ;
280
- }
281
- }
282
247
283
248
/// <summary>
284
249
/// __int16 _mm256_extract_epi16 (__m256i a, const int index)
285
250
/// HELPER
286
251
/// </summary>
287
252
public static ushort Extract ( Vector256 < ushort > value , byte index )
288
253
{
289
- unsafe
290
- {
291
- index &= 0xF ;
292
- ushort * buffer = stackalloc ushort [ 16 ] ;
293
- Store ( buffer , value ) ;
294
- return buffer [ index ] ;
295
- }
254
+ return Unsafe . Add < ushort > ( ref Unsafe . As < Vector256 < ushort > , ushort > ( ref value ) , index & 0xF ) ;
296
255
}
297
256
298
257
/// <summary>
@@ -301,13 +260,7 @@ public static ushort Extract(Vector256<ushort> value, byte index)
301
260
/// </summary>
302
261
public static int Extract ( Vector256 < int > value , byte index )
303
262
{
304
- unsafe
305
- {
306
- index &= 0x7 ;
307
- int * buffer = stackalloc int [ 8 ] ;
308
- Store ( buffer , value ) ;
309
- return buffer [ index ] ;
310
- }
263
+ return Unsafe . Add < int > ( ref Unsafe . As < Vector256 < int > , int > ( ref value ) , index & 0x7 ) ;
311
264
}
312
265
313
266
/// <summary>
@@ -316,13 +269,7 @@ public static int Extract(Vector256<int> value, byte index)
316
269
/// </summary>
317
270
public static uint Extract ( Vector256 < uint > value , byte index )
318
271
{
319
- unsafe
320
- {
321
- index &= 0x7 ;
322
- uint * buffer = stackalloc uint [ 8 ] ;
323
- Store ( buffer , value ) ;
324
- return buffer [ index ] ;
325
- }
272
+ return Unsafe . Add < uint > ( ref Unsafe . As < Vector256 < uint > , uint > ( ref value ) , index & 0x7 ) ;
326
273
}
327
274
328
275
/// <summary>
@@ -335,13 +282,7 @@ public static long Extract(Vector256<long> value, byte index)
335
282
{
336
283
throw new PlatformNotSupportedException ( ) ;
337
284
}
338
- unsafe
339
- {
340
- index &= 0x3 ;
341
- long * buffer = stackalloc long [ 4 ] ;
342
- Store ( buffer , value ) ;
343
- return buffer [ index ] ;
344
- }
285
+ return Unsafe . Add < long > ( ref Unsafe . As < Vector256 < long > , long > ( ref value ) , index & 0x3 ) ;
345
286
}
346
287
347
288
/// <summary>
@@ -354,13 +295,7 @@ public static ulong Extract(Vector256<ulong> value, byte index)
354
295
{
355
296
throw new PlatformNotSupportedException ( ) ;
356
297
}
357
- unsafe
358
- {
359
- index &= 0x3 ;
360
- ulong * buffer = stackalloc ulong [ 4 ] ;
361
- Store ( buffer , value ) ;
362
- return buffer [ index ] ;
363
- }
298
+ return Unsafe . Add < ulong > ( ref Unsafe . As < Vector256 < ulong > , ulong > ( ref value ) , index & 0x3 ) ;
364
299
}
365
300
366
301
/// <summary>
@@ -825,45 +760,45 @@ public static Vector256<T> InsertVector128<T>(Vector256<T> value, Vector128<T> d
825
760
/// __m128 _mm_maskload_ps (float const * mem_addr, __m128i mask)
826
761
/// VMASKMOVPS xmm, xmm, m128
827
762
/// </summary>
828
- public static unsafe Vector128 < float > MaskLoad ( float * address , Vector128 < uint > mask ) => MaskLoad ( address , mask ) ;
763
+ public static unsafe Vector128 < float > MaskLoad ( float * address , Vector128 < float > mask ) => MaskLoad ( address , mask ) ;
829
764
/// <summary>
830
765
/// __m128d _mm_maskload_pd (double const * mem_addr, __m128i mask)
831
766
/// VMASKMOVPD xmm, xmm, m128
832
767
/// </summary>
833
- public static unsafe Vector128 < double > MaskLoad ( double * address , Vector128 < ulong > mask ) => MaskLoad ( address , mask ) ;
768
+ public static unsafe Vector128 < double > MaskLoad ( double * address , Vector128 < double > mask ) => MaskLoad ( address , mask ) ;
834
769
835
770
/// <summary>
836
771
/// __m256 _mm256_maskload_ps (float const * mem_addr, __m256i mask)
837
772
/// VMASKMOVPS ymm, ymm, m256
838
773
/// </summary>
839
- public static unsafe Vector256 < float > MaskLoad ( float * address , Vector256 < uint > mask ) => MaskLoad ( address , mask ) ;
774
+ public static unsafe Vector256 < float > MaskLoad ( float * address , Vector256 < float > mask ) => MaskLoad ( address , mask ) ;
840
775
/// <summary>
841
776
/// __m256d _mm256_maskload_pd (double const * mem_addr, __m256i mask)
842
777
/// VMASKMOVPD ymm, ymm, m256
843
778
/// </summary>
844
- public static unsafe Vector256 < double > MaskLoad ( double * address , Vector256 < ulong > mask ) => MaskLoad ( address , mask ) ;
779
+ public static unsafe Vector256 < double > MaskLoad ( double * address , Vector256 < double > mask ) => MaskLoad ( address , mask ) ;
845
780
846
781
/// <summary>
847
782
/// void _mm_maskstore_ps (float * mem_addr, __m128i mask, __m128 a)
848
783
/// VMASKMOVPS m128, xmm, xmm
849
784
/// </summary>
850
- public static unsafe void MaskStore ( float * address , Vector128 < float > mask , Vector128 < uint > source ) => MaskStore ( address , mask , source ) ;
785
+ public static unsafe void MaskStore ( float * address , Vector128 < float > mask , Vector128 < float > source ) => MaskStore ( address , mask , source ) ;
851
786
/// <summary>
852
787
/// void _mm_maskstore_pd (double * mem_addr, __m128i mask, __m128d a)
853
788
/// VMASKMOVPD m128, xmm, xmm
854
789
/// </summary>
855
- public static unsafe void MaskStore ( double * address , Vector128 < double > mask , Vector128 < ulong > source ) => MaskStore ( address , mask , source ) ;
790
+ public static unsafe void MaskStore ( double * address , Vector128 < double > mask , Vector128 < double > source ) => MaskStore ( address , mask , source ) ;
856
791
857
792
/// <summary>
858
793
/// void _mm256_maskstore_ps (float * mem_addr, __m256i mask, __m256 a)
859
794
/// VMASKMOVPS m256, ymm, ymm
860
795
/// </summary>
861
- public static unsafe void MaskStore ( float * address , Vector256 < float > mask , Vector256 < uint > source ) => MaskStore ( address , mask , source ) ;
796
+ public static unsafe void MaskStore ( float * address , Vector256 < float > mask , Vector256 < float > source ) => MaskStore ( address , mask , source ) ;
862
797
/// <summary>
863
798
/// void _mm256_maskstore_pd (double * mem_addr, __m256i mask, __m256d a)
864
799
/// VMASKMOVPD m256, ymm, ymm
865
800
/// </summary>
866
- public static unsafe void MaskStore ( double * address , Vector256 < double > mask , Vector256 < ulong > source ) => MaskStore ( address , mask , source ) ;
801
+ public static unsafe void MaskStore ( double * address , Vector256 < double > mask , Vector256 < double > source ) => MaskStore ( address , mask , source ) ;
867
802
868
803
/// <summary>
869
804
/// __m256 _mm256_max_ps (__m256 a, __m256 b)
0 commit comments