// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System; using System.Runtime.Intrinsics; namespace System.Runtime.Intrinsics.X86 { /// /// This class provides access to Intel AVX2 hardware instructions via intrinsics /// [CLSCompliant(false)] public abstract class Avx2 : Avx { internal Avx2() { } public new static bool IsSupported { get => IsSupported; } /// /// __m256i _mm256_abs_epi8 (__m256i a) /// VPABSB ymm, ymm/m256 /// public static Vector256 Abs(Vector256 value) => Abs(value); /// /// __m256i _mm256_abs_epi16 (__m256i a) /// VPABSW ymm, ymm/m256 /// public static Vector256 Abs(Vector256 value) => Abs(value); /// /// __m256i _mm256_abs_epi32 (__m256i a) /// VPABSD ymm, ymm/m256 /// public static Vector256 Abs(Vector256 value) => Abs(value); /// /// __m256i _mm256_add_epi8 (__m256i a, __m256i b) /// VPADDB ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_add_epi8 (__m256i a, __m256i b) /// VPADDB ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_add_epi16 (__m256i a, __m256i b) /// VPADDW ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_add_epi16 (__m256i a, __m256i b) /// VPADDW ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_add_epi32 (__m256i a, __m256i b) /// VPADDD ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_add_epi32 (__m256i a, __m256i b) /// VPADDD ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_add_epi64 (__m256i a, __m256i b) /// VPADDQ ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_add_epi64 (__m256i a, __m256i b) /// VPADDQ ymm, ymm, ymm/m256 /// public static Vector256 Add(Vector256 left, Vector256 right) => Add(left, right); /// /// __m256i _mm256_adds_epi8 (__m256i a, __m256i b) /// VPADDSB ymm, ymm, ymm/m256 /// public static Vector256 AddSaturate(Vector256 left, Vector256 right) => AddSaturate(left, right); /// /// __m256i _mm256_adds_epu8 (__m256i a, __m256i b) /// VPADDUSB ymm, ymm, ymm/m256 /// public static Vector256 AddSaturate(Vector256 left, Vector256 right) => AddSaturate(left, right); /// /// __m256i _mm256_adds_epi16 (__m256i a, __m256i b) /// VPADDSW ymm, ymm, ymm/m256 /// public static Vector256 AddSaturate(Vector256 left, Vector256 right) => AddSaturate(left, right); /// /// __m256i _mm256_adds_epu16 (__m256i a, __m256i b) /// VPADDUSW ymm, ymm, ymm/m256 /// public static Vector256 AddSaturate(Vector256 left, Vector256 right) => AddSaturate(left, right); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// This intrinsic generates VPALIGNR that operates over bytes rather than elements of the vectors. /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// This intrinsic generates VPALIGNR that operates over bytes rather than elements of the vectors. /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// This intrinsic generates VPALIGNR that operates over bytes rather than elements of the vectors. /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// This intrinsic generates VPALIGNR that operates over bytes rather than elements of the vectors. /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// This intrinsic generates VPALIGNR that operates over bytes rather than elements of the vectors. /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_alignr_epi8 (__m256i a, __m256i b, const int count) /// VPALIGNR ymm, ymm, ymm/m256, imm8 /// This intrinsic generates VPALIGNR that operates over bytes rather than elements of the vectors. /// public static Vector256 AlignRight(Vector256 left, Vector256 right, byte mask) => AlignRight(left, right, mask); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_and_si256 (__m256i a, __m256i b) /// VPAND ymm, ymm, ymm/m256 /// public static Vector256 And(Vector256 left, Vector256 right) => And(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_andnot_si256 (__m256i a, __m256i b) /// VPANDN ymm, ymm, ymm/m256 /// public static Vector256 AndNot(Vector256 left, Vector256 right) => AndNot(left, right); /// /// __m256i _mm256_avg_epu8 (__m256i a, __m256i b) /// VPAVGB ymm, ymm, ymm/m256 /// public static Vector256 Average(Vector256 left, Vector256 right) => Average(left, right); /// /// __m256i _mm256_avg_epu16 (__m256i a, __m256i b) /// VPAVGW ymm, ymm, ymm/m256 /// public static Vector256 Average(Vector256 left, Vector256 right) => Average(left, right); /// /// __m128i _mm_blend_epi32 (__m128i a, __m128i b, const int imm8) /// VPBLENDD xmm, xmm, xmm/m128, imm8 /// public static Vector128 Blend(Vector128 left, Vector128 right, byte control) => Blend(left, right, control); /// /// __m128i _mm_blend_epi32 (__m128i a, __m128i b, const int imm8) /// VPBLENDD xmm, xmm, xmm/m128, imm8 /// public static Vector128 Blend(Vector128 left, Vector128 right, byte control) => Blend(left, right, control); /// /// __m256i _mm256_blend_epi16 (__m256i a, __m256i b, const int imm8) /// VPBLENDW ymm, ymm, ymm/m256, imm8 /// public static Vector256 Blend(Vector256 left, Vector256 right, byte control) => Blend(left, right, control); /// /// __m256i _mm256_blend_epi16 (__m256i a, __m256i b, const int imm8) /// VPBLENDW ymm, ymm, ymm/m256, imm8 /// public static Vector256 Blend(Vector256 left, Vector256 right, byte control) => Blend(left, right, control); /// /// __m256i _mm256_blend_epi32 (__m256i a, __m256i b, const int imm8) /// VPBLENDD ymm, ymm, ymm/m256, imm8 /// public static Vector256 Blend(Vector256 left, Vector256 right, byte control) => Blend(left, right, control); /// /// __m256i _mm256_blend_epi32 (__m256i a, __m256i b, const int imm8) /// VPBLENDD ymm, ymm, ymm/m256, imm8 /// public static Vector256 Blend(Vector256 left, Vector256 right, byte control) => Blend(left, right, control); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// This intrinsic generates VPBLENDVB that needs a BYTE mask-vector, so users should correctly set each mask byte for the selected elements. /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// This intrinsic generates VPBLENDVB that needs a BYTE mask-vector, so users should correctly set each mask byte for the selected elements. /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// This intrinsic generates VPBLENDVB that needs a BYTE mask-vector, so users should correctly set each mask byte for the selected elements. /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// This intrinsic generates VPBLENDVB that needs a BYTE mask-vector, so users should correctly set each mask byte for the selected elements. /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// This intrinsic generates VPBLENDVB that needs a BYTE mask-vector, so users should correctly set each mask byte for the selected elements. /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m256i _mm256_blendv_epi8 (__m256i a, __m256i b, __m256i mask) /// VPBLENDVB ymm, ymm, ymm/m256, ymm /// This intrinsic generates VPBLENDVB that needs a BYTE mask-vector, so users should correctly set each mask byte for the selected elements. /// public static Vector256 BlendVariable(Vector256 left, Vector256 right, Vector256 mask) => BlendVariable(left, right, mask); /// /// __m128i _mm_broadcastb_epi8 (__m128i a) /// VPBROADCASTB xmm, xmm /// __m128i _mm_broadcastw_epi16 (__m128i a) /// VPBROADCASTW xmm, xmm /// __m128i _mm_broadcastd_epi32 (__m128i a) /// VPBROADCASTD xmm, xmm /// __m128i _mm_broadcastq_epi64 (__m128i a) /// VPBROADCASTQ xmm, xmm /// __m128 _mm_broadcastss_ps (__m128 a) /// VBROADCASTSS xmm, xmm /// __m128d _mm_broadcastsd_pd (__m128d a) /// VMOVDDUP xmm, xmm /// public static Vector128 BroadcastScalarToVector128(Vector128 value) where T : struct => BroadcastScalarToVector128(value); /// /// __m128i _mm_broadcastb_epi8 (__m128i a) /// VPBROADCASTB xmm, m8 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(byte* source) => BroadcastScalarToVector128(source); /// /// __m128i _mm_broadcastb_epi8 (__m128i a) /// VPBROADCASTB xmm, m8 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(sbyte* source) => BroadcastScalarToVector128(source); /// /// __m128i _mm_broadcastw_epi16 (__m128i a) /// VPBROADCASTW xmm, m16 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(short* source) => BroadcastScalarToVector128(source); /// /// __m128i _mm_broadcastw_epi16 (__m128i a) /// VPBROADCASTW xmm, m16 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(ushort* source) => BroadcastScalarToVector128(source); /// /// __m128i _mm_broadcastd_epi32 (__m128i a) /// VPBROADCASTD xmm, m32 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(int* source) => BroadcastScalarToVector128(source); /// /// __m128i _mm_broadcastd_epi32 (__m128i a) /// VPBROADCASTD xmm, m32 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(uint* source) => BroadcastScalarToVector128(source); /// /// __m128i _mm_broadcastq_epi64 (__m128i a) /// VPBROADCASTQ xmm, m64 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(long* source) => BroadcastScalarToVector128(source); /// /// __m128i _mm_broadcastq_epi64 (__m128i a) /// VPBROADCASTQ xmm, m64 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector128 BroadcastScalarToVector128(ulong* source) => BroadcastScalarToVector128(source); /// /// __m256i _mm256_broadcastb_epi8 (__m128i a) /// VPBROADCASTB ymm, xmm /// __m256i _mm256_broadcastw_epi16 (__m128i a) /// VPBROADCASTW ymm, xmm /// __m256i _mm256_broadcastd_epi32 (__m128i a) /// VPBROADCASTD ymm, xmm /// __m256i _mm256_broadcastq_epi64 (__m128i a) /// VPBROADCASTQ ymm, xmm /// __m256 _mm256_broadcastss_ps (__m128 a) /// VBROADCASTSS ymm, xmm /// __m256d _mm256_broadcastsd_pd (__m128d a) /// VBROADCASTSD ymm, xmm /// public static Vector256 BroadcastScalarToVector256(Vector128 value) where T : struct => BroadcastScalarToVector256(value); /// /// __m256i _mm256_broadcastb_epi8 (__m128i a) /// VPBROADCASTB ymm, m8 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(byte* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastb_epi8 (__m128i a) /// VPBROADCASTB ymm, m8 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(sbyte* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastw_epi16 (__m128i a) /// VPBROADCASTW ymm, m16 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(short* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastw_epi16 (__m128i a) /// VPBROADCASTW ymm, m16 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(ushort* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastd_epi32 (__m128i a) /// VPBROADCASTD ymm, m32 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(int* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastd_epi32 (__m128i a) /// VPBROADCASTD ymm, m32 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(uint* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastq_epi64 (__m128i a) /// VPBROADCASTQ ymm, m64 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(long* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastq_epi64 (__m128i a) /// VPBROADCASTQ ymm, m64 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastScalarToVector256(ulong* source) => BroadcastScalarToVector256(source); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(sbyte* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(byte* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(short* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(ushort* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(int* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(uint* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(long* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_broadcastsi128_si256 (__m128i a) /// VBROADCASTI128 ymm, m128 /// The above native signature does not directly correspond to the managed signature. /// public static unsafe Vector256 BroadcastVector128ToVector256(ulong* address) => BroadcastVector128ToVector256(address); /// /// __m256i _mm256_cmpeq_epi8 (__m256i a, __m256i b) /// VPCMPEQB ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpeq_epi8 (__m256i a, __m256i b) /// VPCMPEQB ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpeq_epi16 (__m256i a, __m256i b) /// VPCMPEQW ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpeq_epi16 (__m256i a, __m256i b) /// VPCMPEQW ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpeq_epi32 (__m256i a, __m256i b) /// VPCMPEQD ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpeq_epi32 (__m256i a, __m256i b) /// VPCMPEQD ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpeq_epi64 (__m256i a, __m256i b) /// VPCMPEQQ ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpeq_epi64 (__m256i a, __m256i b) /// VPCMPEQQ ymm, ymm, ymm/m256 /// public static Vector256 CompareEqual(Vector256 left, Vector256 right) => CompareEqual(left, right); /// /// __m256i _mm256_cmpgt_epi8 (__m256i a, __m256i b) /// VPCMPGTB ymm, ymm, ymm/m256 /// public static Vector256 CompareGreaterThan(Vector256 left, Vector256 right) => CompareGreaterThan(left, right); /// /// __m256i _mm256_cmpgt_epi16 (__m256i a, __m256i b) /// VPCMPGTW ymm, ymm, ymm/m256 /// public static Vector256 CompareGreaterThan(Vector256 left, Vector256 right) => CompareGreaterThan(left, right); /// /// __m256i _mm256_cmpgt_epi32 (__m256i a, __m256i b) /// VPCMPGTD ymm, ymm, ymm/m256 /// public static Vector256 CompareGreaterThan(Vector256 left, Vector256 right) => CompareGreaterThan(left, right); /// /// __m256i _mm256_cmpgt_epi64 (__m256i a, __m256i b) /// VPCMPGTQ ymm, ymm, ymm/m256 /// public static Vector256 CompareGreaterThan(Vector256 left, Vector256 right) => CompareGreaterThan(left, right); /// /// double _mm256_cvtsd_f64 (__m256d a) /// HELPER: MOVSD /// public static double ConvertToDouble(Vector256 value) => ConvertToDouble(value); /// /// int _mm256_cvtsi256_si32 (__m256i a) /// MOVD reg/m32, xmm /// public static int ConvertToInt32(Vector256 value) => ConvertToInt32(value); /// /// int _mm256_cvtsi256_si32 (__m256i a) /// MOVD reg/m32, xmm /// public static uint ConvertToUInt32(Vector256 value) => ConvertToUInt32(value); /// /// __m256i _mm256_cvtepi8_epi16 (__m128i a) /// VPMOVSXBW ymm, xmm/m128 /// public static Vector256 ConvertToVector256Int16(Vector128 value) => ConvertToVector256Int16(value); /// /// __m256i _mm256_cvtepu8_epi16 (__m128i a) /// VPMOVZXBW ymm, xmm/m128 /// public static Vector256 ConvertToVector256UInt16(Vector128 value) => ConvertToVector256UInt16(value); /// /// __m256i _mm256_cvtepi8_epi32 (__m128i a) /// VPMOVSXBD ymm, xmm/m128 /// public static Vector256 ConvertToVector256Int32(Vector128 value) => ConvertToVector256Int32(value); /// /// __m256i _mm256_cvtepi16_epi32 (__m128i a) /// VPMOVSXWD ymm, xmm/m128 /// public static Vector256 ConvertToVector256Int32(Vector128 value) => ConvertToVector256Int32(value); /// /// __m256i _mm256_cvtepu8_epi32 (__m128i a) /// VPMOVZXBD ymm, xmm/m128 /// public static Vector256 ConvertToVector256UInt32(Vector128 value) => ConvertToVector256UInt32(value); /// /// __m256i _mm256_cvtepu16_epi32 (__m128i a) /// VPMOVZXWD ymm, xmm/m128 /// public static Vector256 ConvertToVector256UInt32(Vector128 value) => ConvertToVector256UInt32(value); /// /// __m256i _mm256_cvtepi8_epi64 (__m128i a) /// VPMOVSXBQ ymm, xmm/m128 /// public static Vector256 ConvertToVector256Int64(Vector128 value) => ConvertToVector256Int64(value); /// /// __m256i _mm256_cvtepi16_epi64 (__m128i a) /// VPMOVSXWQ ymm, xmm/m128 /// public static Vector256 ConvertToVector256Int64(Vector128 value) => ConvertToVector256Int64(value); /// /// __m256i _mm256_cvtepi32_epi64 (__m128i a) /// VPMOVSXDQ ymm, xmm/m128 /// public static Vector256 ConvertToVector256Int64(Vector128 value) => ConvertToVector256Int64(value); /// /// __m256i _mm256_cvtepu8_epi64 (__m128i a) /// VPMOVZXBQ ymm, xmm/m128 /// public static Vector256 ConvertToVector256UInt64(Vector128 value) => ConvertToVector256UInt64(value); /// /// __m256i _mm256_cvtepu16_epi64 (__m128i a) /// VPMOVZXWQ ymm, xmm/m128 /// public static Vector256 ConvertToVector256UInt64(Vector128 value) => ConvertToVector256UInt64(value); /// /// __m256i _mm256_cvtepu32_epi64 (__m128i a) /// VPMOVZXDQ ymm, xmm/m128 /// public static Vector256 ConvertToVector256UInt64(Vector128 value) => ConvertToVector256UInt64(value); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); // /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(sbyte* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(byte* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(short* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(ushort* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(int* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(uint* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(long* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 xmm, ymm, imm8 /// public static Vector128 ExtractVector128(Vector256 value, byte index) => ExtractVector128(value, index); /// /// __m128i _mm256_extracti128_si256 (__m256i a, const int imm8) /// VEXTRACTI128 m128, ymm, imm8 /// public new static unsafe void ExtractVector128(ulong* address, Vector256 value, byte index) => ExtractVector128(address, value, index); /// /// __m128i _mm_i32gather_epi32 (int const* base_addr, __m128i vindex, const int scale) /// VPGATHERDD xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(int* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_i32gather_epi32 (int const* base_addr, __m128i vindex, const int scale) /// VPGATHERDD xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(uint* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_i32gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale) /// VPGATHERDQ xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(long* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_i32gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale) /// VPGATHERDQ xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(ulong* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128 _mm_i32gather_ps (float const* base_addr, __m128i vindex, const int scale) /// VGATHERDPS xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(float* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128d _mm_i32gather_pd (double const* base_addr, __m128i vindex, const int scale) /// VGATHERDPD xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(double* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_i64gather_epi32 (int const* base_addr, __m128i vindex, const int scale) /// VPGATHERQD xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(int* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_i64gather_epi32 (int const* base_addr, __m128i vindex, const int scale) /// VPGATHERQD xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(uint* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_i64gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale) /// VPGATHERQQ xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(long* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_i64gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale) /// VPGATHERQQ xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(ulong* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128 _mm_i64gather_ps (float const* base_addr, __m128i vindex, const int scale) /// VGATHERQPS xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(float* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128d _mm_i64gather_pd (double const* base_addr, __m128i vindex, const int scale) /// VGATHERQPD xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(double* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_i32gather_epi32 (int const* base_addr, __m256i vindex, const int scale) /// VPGATHERDD ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(int* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_i32gather_epi32 (int const* base_addr, __m256i vindex, const int scale) /// VPGATHERDD ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(uint* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_i32gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale) /// VPGATHERDQ ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(long* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_i32gather_epi64 (__int64 const* base_addr, __m128i vindex, const int scale) /// VPGATHERDQ ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(ulong* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256 _mm256_i32gather_ps (float const* base_addr, __m256i vindex, const int scale) /// VGATHERDPS ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(float* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256d _mm256_i32gather_pd (double const* base_addr, __m128i vindex, const int scale) /// VGATHERDPD ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(double* baseAddress, Vector128 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm256_i64gather_epi32 (int const* base_addr, __m256i vindex, const int scale) /// VPGATHERQD xmm, vm64y, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(int* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm256_i64gather_epi32 (int const* base_addr, __m256i vindex, const int scale) /// VPGATHERQD xmm, vm64y, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(uint* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_i64gather_epi64 (__int64 const* base_addr, __m256i vindex, const int scale) /// VPGATHERQQ ymm, vm64y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(long* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_i64gather_epi64 (__int64 const* base_addr, __m256i vindex, const int scale) /// VPGATHERQQ ymm, vm64y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(ulong* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128 _mm256_i64gather_ps (float const* base_addr, __m256i vindex, const int scale) /// VGATHERQPS xmm, vm64y, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherVector128(float* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector128(baseAddress, index, 1); case 2: return GatherVector128(baseAddress, index, 2); case 4: return GatherVector128(baseAddress, index, 4); case 8: return GatherVector128(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256d _mm256_i64gather_pd (double const* base_addr, __m256i vindex, const int scale) /// VGATHERQPD ymm, vm64y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherVector256(double* baseAddress, Vector256 index, byte scale) { switch (scale) { case 1: return GatherVector256(baseAddress, index, 1); case 2: return GatherVector256(baseAddress, index, 2); case 4: return GatherVector256(baseAddress, index, 4); case 8: return GatherVector256(baseAddress, index, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i32gather_epi32 (__m128i src, int const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERDD xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, int* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i32gather_epi32 (__m128i src, int const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERDD xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, uint* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i32gather_epi64 (__m128i src, __int64 const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERDQ xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, long* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i32gather_epi64 (__m128i src, __int64 const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERDQ xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, ulong* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128 _mm_mask_i32gather_ps (__m128 src, float const* base_addr, __m128i vindex, __m128 mask, const int scale) /// VGATHERDPS xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, float* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128d _mm_mask_i32gather_pd (__m128d src, double const* base_addr, __m128i vindex, __m128d mask, const int scale) /// VGATHERDPD xmm, vm32x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, double* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i64gather_epi32 (__m128i src, int const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERQD xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, int* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i64gather_epi32 (__m128i src, int const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERQD xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, uint* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i64gather_epi64 (__m128i src, __int64 const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERQQ xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, long* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm_mask_i64gather_epi64 (__m128i src, __int64 const* base_addr, __m128i vindex, __m128i mask, const int scale) /// VPGATHERQQ xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, ulong* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128 _mm_mask_i64gather_ps (__m128 src, float const* base_addr, __m128i vindex, __m128 mask, const int scale) /// VGATHERQPS xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, float* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128d _mm_mask_i64gather_pd (__m128d src, double const* base_addr, __m128i vindex, __m128d mask, const int scale) /// VGATHERQPD xmm, vm64x, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, double* baseAddress, Vector128 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_mask_i32gather_epi32 (__m256i src, int const* base_addr, __m256i vindex, __m256i mask, const int scale) /// VPGATHERDD ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, int* baseAddress, Vector256 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_mask_i32gather_epi32 (__m256i src, int const* base_addr, __m256i vindex, __m256i mask, const int scale) /// VPGATHERDD ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, uint* baseAddress, Vector256 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_mask_i32gather_epi64 (__m256i src, __int64 const* base_addr, __m128i vindex, __m256i mask, const int scale) /// VPGATHERDQ ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, long* baseAddress, Vector128 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_mask_i32gather_epi64 (__m256i src, __int64 const* base_addr, __m128i vindex, __m256i mask, const int scale) /// VPGATHERDQ ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, ulong* baseAddress, Vector128 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256 _mm256_mask_i32gather_ps (__m256 src, float const* base_addr, __m256i vindex, __m256 mask, const int scale) /// VPGATHERDPS ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, float* baseAddress, Vector256 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256d _mm256_mask_i32gather_pd (__m256d src, double const* base_addr, __m128i vindex, __m256d mask, const int scale) /// VPGATHERDPD ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, double* baseAddress, Vector128 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm256_mask_i64gather_epi32 (__m128i src, int const* base_addr, __m256i vindex, __m128i mask, const int scale) /// VPGATHERQD xmm, vm32y, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, int* baseAddress, Vector256 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128i _mm256_mask_i64gather_epi32 (__m128i src, int const* base_addr, __m256i vindex, __m128i mask, const int scale) /// VPGATHERQD xmm, vm32y, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, uint* baseAddress, Vector256 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_mask_i64gather_epi64 (__m256i src, __int64 const* base_addr, __m256i vindex, __m256i mask, const int scale) /// VPGATHERQQ ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, long* baseAddress, Vector256 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_mask_i64gather_epi64 (__m256i src, __int64 const* base_addr, __m256i vindex, __m256i mask, const int scale) /// VPGATHERQQ ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, ulong* baseAddress, Vector256 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m128 _mm256_mask_i64gather_ps (__m128 src, float const* base_addr, __m256i vindex, __m128 mask, const int scale) /// VGATHERQPS xmm, vm32y, xmm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector128 GatherMaskVector128(Vector128 source, float* baseAddress, Vector256 index, Vector128 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector128(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector128(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector128(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector128(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256d _mm256_mask_i64gather_pd (__m256d src, double const* base_addr, __m256i vindex, __m256d mask, const int scale) /// VGATHERQPD ymm, vm32y, ymm /// The scale parameter should be 1, 2, 4 or 8, otherwise, ArgumentOutOfRangeException will be thrown. /// public static unsafe Vector256 GatherMaskVector256(Vector256 source, double* baseAddress, Vector256 index, Vector256 mask, byte scale) { switch (scale) { case 1: return GatherMaskVector256(source, baseAddress, index, mask, 1); case 2: return GatherMaskVector256(source, baseAddress, index, mask, 2); case 4: return GatherMaskVector256(source, baseAddress, index, mask, 4); case 8: return GatherMaskVector256(source, baseAddress, index, mask, 8); default: throw new ArgumentOutOfRangeException(nameof(scale)); } } /// /// __m256i _mm256_hadd_epi16 (__m256i a, __m256i b) /// VPHADDW ymm, ymm, ymm/m256 /// public static Vector256 HorizontalAdd(Vector256 left, Vector256 right) => HorizontalAdd(left, right); /// /// __m256i _mm256_hadd_epi32 (__m256i a, __m256i b) /// VPHADDD ymm, ymm, ymm/m256 /// public static Vector256 HorizontalAdd(Vector256 left, Vector256 right) => HorizontalAdd(left, right); /// /// __m256i _mm256_hadds_epi16 (__m256i a, __m256i b) /// VPHADDSW ymm, ymm, ymm/m256 /// public static Vector256 HorizontalAddSaturate(Vector256 left, Vector256 right) => HorizontalAddSaturate(left, right); /// /// __m256i _mm256_hsub_epi16 (__m256i a, __m256i b) /// VPHSUBW ymm, ymm, ymm/m256 /// public static Vector256 HorizontalSubtract(Vector256 left, Vector256 right) => HorizontalSubtract(left, right); /// /// __m256i _mm256_hsub_epi32 (__m256i a, __m256i b) /// VPHSUBD ymm, ymm, ymm/m256 /// public static Vector256 HorizontalSubtract(Vector256 left, Vector256 right) => HorizontalSubtract(left, right); /// /// __m256i _mm256_hsubs_epi16 (__m256i a, __m256i b) /// VPHSUBSW ymm, ymm, ymm/m256 /// public static Vector256 HorizontalSubtractSaturate(Vector256 left, Vector256 right) => HorizontalSubtractSaturate(left, right); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xm128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, sbyte* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, m128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, byte* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, m128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, short* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, m128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, ushort* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, m128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, int* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, m128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, uint* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, m128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, long* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, xmm, imm8 /// public static Vector256 InsertVector128(Vector256 value, Vector128 data, byte index) => InsertVector128(value, data, index); /// /// __m256i _mm256_inserti128_si256 (__m256i a, __m128i b, const int imm8) /// VINSERTI128 ymm, ymm, m128, imm8 /// public new static unsafe Vector256 InsertVector128(Vector256 value, ulong* address, byte index) => InsertVector128(value, address, index); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(sbyte* address) => LoadAlignedVector256NonTemporal(address); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(byte* address) => LoadAlignedVector256NonTemporal(address); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(short* address) => LoadAlignedVector256NonTemporal(address); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(ushort* address) => LoadAlignedVector256NonTemporal(address); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(int* address) => LoadAlignedVector256NonTemporal(address); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(uint* address) => LoadAlignedVector256NonTemporal(address); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(long* address) => LoadAlignedVector256NonTemporal(address); /// /// __m256i _mm256_stream_load_si256 (__m256i const* mem_addr) /// VMOVNTDQA ymm, m256 /// public static unsafe Vector256 LoadAlignedVector256NonTemporal(ulong* address) => LoadAlignedVector256NonTemporal(address); /// /// __m128i _mm_maskload_epi32 (int const* mem_addr, __m128i mask) /// VPMASKMOVD xmm, xmm, m128 /// public static unsafe Vector128 MaskLoad(int* address, Vector128 mask) => MaskLoad(address, mask); /// /// __m128i _mm_maskload_epi32 (int const* mem_addr, __m128i mask) /// VPMASKMOVD xmm, xmm, m128 /// public static unsafe Vector128 MaskLoad(uint* address, Vector128 mask) => MaskLoad(address, mask); /// /// __m128i _mm_maskload_epi64 (__int64 const* mem_addr, __m128i mask) /// VPMASKMOVQ xmm, xmm, m128 /// public static unsafe Vector128 MaskLoad(long* address, Vector128 mask) => MaskLoad(address, mask); /// /// __m128i _mm_maskload_epi64 (__int64 const* mem_addr, __m128i mask) /// VPMASKMOVQ xmm, xmm, m128 /// public static unsafe Vector128 MaskLoad(ulong* address, Vector128 mask) => MaskLoad(address, mask); /// /// __m256i _mm256_maskload_epi32 (int const* mem_addr, __m256i mask) /// VPMASKMOVD ymm, ymm, m256 /// public static unsafe Vector256 MaskLoad(int* address, Vector256 mask) => MaskLoad(address, mask); /// /// __m256i _mm256_maskload_epi32 (int const* mem_addr, __m256i mask) /// VPMASKMOVD ymm, ymm, m256 /// public static unsafe Vector256 MaskLoad(uint* address, Vector256 mask) => MaskLoad(address, mask); /// /// __m256i _mm256_maskload_epi64 (__int64 const* mem_addr, __m256i mask) /// VPMASKMOVQ ymm, ymm, m256 /// public static unsafe Vector256 MaskLoad(long* address, Vector256 mask) => MaskLoad(address, mask); /// /// __m256i _mm256_maskload_epi64 (__int64 const* mem_addr, __m256i mask) /// VPMASKMOVQ ymm, ymm, m256 /// public static unsafe Vector256 MaskLoad(ulong* address, Vector256 mask) => MaskLoad(address, mask); /// /// void _mm_maskstore_epi32 (int* mem_addr, __m128i mask, __m128i a) /// VPMASKMOVD m128, xmm, xmm /// public static unsafe void MaskStore(int* address, Vector128 mask, Vector128 source) => MaskStore(address, mask, source); /// /// void _mm_maskstore_epi32 (int* mem_addr, __m128i mask, __m128i a) /// VPMASKMOVD m128, xmm, xmm /// public static unsafe void MaskStore(uint* address, Vector128 mask, Vector128 source) => MaskStore(address, mask, source); /// /// void _mm_maskstore_epi64 (__int64* mem_addr, __m128i mask, __m128i a) /// VPMASKMOVQ m128, xmm, xmm /// public static unsafe void MaskStore(long* address, Vector128 mask, Vector128 source) => MaskStore(address, mask, source); /// /// void _mm_maskstore_epi64 (__int64* mem_addr, __m128i mask, __m128i a) /// VPMASKMOVQ m128, xmm, xmm /// public static unsafe void MaskStore(ulong* address, Vector128 mask, Vector128 source) => MaskStore(address, mask, source); /// /// void _mm256_maskstore_epi32 (int* mem_addr, __m256i mask, __m256i a) /// VPMASKMOVD m256, ymm, ymm /// public static unsafe void MaskStore(int* address, Vector256 mask, Vector256 source) => MaskStore(address, mask, source); /// /// void _mm256_maskstore_epi32 (int* mem_addr, __m256i mask, __m256i a) /// VPMASKMOVD m256, ymm, ymm /// public static unsafe void MaskStore(uint* address, Vector256 mask, Vector256 source) => MaskStore(address, mask, source); /// /// void _mm256_maskstore_epi64 (__int64* mem_addr, __m256i mask, __m256i a) /// VPMASKMOVQ m256, ymm, ymm /// public static unsafe void MaskStore(long* address, Vector256 mask, Vector256 source) => MaskStore(address, mask, source); /// /// void _mm256_maskstore_epi64 (__int64* mem_addr, __m256i mask, __m256i a) /// VPMASKMOVQ m256, ymm, ymm /// public static unsafe void MaskStore(ulong* address, Vector256 mask, Vector256 source) => MaskStore(address, mask, source); /// /// __m256i _mm256_madd_epi16 (__m256i a, __m256i b) /// VPMADDWD ymm, ymm, ymm/m256 /// public static Vector256 MultiplyAddAdjacent(Vector256 left, Vector256 right) => MultiplyAddAdjacent(left, right); /// /// __m256i _mm256_maddubs_epi16 (__m256i a, __m256i b) /// VPMADDUBSW ymm, ymm, ymm/m256 /// public static Vector256 MultiplyAddAdjacent(Vector256 left, Vector256 right) => MultiplyAddAdjacent(left, right); /// /// __m256i _mm256_max_epi8 (__m256i a, __m256i b) /// VPMAXSB ymm, ymm, ymm/m256 /// public static Vector256 Max(Vector256 left, Vector256 right) => Max(left, right); /// /// __m256i _mm256_max_epu8 (__m256i a, __m256i b) /// VPMAXUB ymm, ymm, ymm/m256 /// public static Vector256 Max(Vector256 left, Vector256 right) => Max(left, right); /// /// __m256i _mm256_max_epi16 (__m256i a, __m256i b) /// VPMAXSW ymm, ymm, ymm/m256 /// public static Vector256 Max(Vector256 left, Vector256 right) => Max(left, right); /// /// __m256i _mm256_max_epu16 (__m256i a, __m256i b) /// VPMAXUW ymm, ymm, ymm/m256 /// public static Vector256 Max(Vector256 left, Vector256 right) => Max(left, right); /// /// __m256i _mm256_max_epi32 (__m256i a, __m256i b) /// VPMAXSD ymm, ymm, ymm/m256 /// public static Vector256 Max(Vector256 left, Vector256 right) => Max(left, right); /// /// __m256i _mm256_max_epu32 (__m256i a, __m256i b) /// VPMAXUD ymm, ymm, ymm/m256 /// public static Vector256 Max(Vector256 left, Vector256 right) => Max(left, right); /// /// __m256i _mm256_min_epi8 (__m256i a, __m256i b) /// VPMINSB ymm, ymm, ymm/m256 /// public static Vector256 Min(Vector256 left, Vector256 right) => Min(left, right); /// /// __m256i _mm256_min_epu8 (__m256i a, __m256i b) /// VPMINUB ymm, ymm, ymm/m256 /// public static Vector256 Min(Vector256 left, Vector256 right) => Min(left, right); /// /// __m256i _mm256_min_epi16 (__m256i a, __m256i b) /// VPMINSW ymm, ymm, ymm/m256 /// public static Vector256 Min(Vector256 left, Vector256 right) => Min(left, right); /// /// __m256i _mm256_min_epu16 (__m256i a, __m256i b) /// VPMINUW ymm, ymm, ymm/m256 /// public static Vector256 Min(Vector256 left, Vector256 right) => Min(left, right); /// /// __m256i _mm256_min_epi32 (__m256i a, __m256i b) /// VPMINSD ymm, ymm, ymm/m256 /// public static Vector256 Min(Vector256 left, Vector256 right) => Min(left, right); /// /// __m256i _mm256_min_epu32 (__m256i a, __m256i b) /// VPMINUD ymm, ymm, ymm/m256 /// public static Vector256 Min(Vector256 left, Vector256 right) => Min(left, right); /// /// int _mm256_movemask_epi8 (__m256i a) /// VPMOVMSKB reg, ymm /// public static int MoveMask(Vector256 value) => MoveMask(value); /// /// int _mm256_movemask_epi8 (__m256i a) /// VPMOVMSKB reg, ymm /// public static int MoveMask(Vector256 value) => MoveMask(value); /// /// __m256i _mm256_mpsadbw_epu8 (__m256i a, __m256i b, const int imm8) /// VMPSADBW ymm, ymm, ymm/m256, imm8 /// public static Vector256 MultipleSumAbsoluteDifferences(Vector256 left, Vector256 right, byte mask) => MultipleSumAbsoluteDifferences(left, right, mask); /// /// __m256i _mm256_mul_epi32 (__m256i a, __m256i b) /// VPMULDQ ymm, ymm, ymm/m256 /// public static Vector256 Multiply(Vector256 left, Vector256 right) => Multiply(left, right); /// /// __m256i _mm256_mul_epu32 (__m256i a, __m256i b) /// VPMULUDQ ymm, ymm, ymm/m256 /// public static Vector256 Multiply(Vector256 left, Vector256 right) => Multiply(left, right); /// /// __m256i _mm256_mulhi_epi16 (__m256i a, __m256i b) /// VPMULHW ymm, ymm, ymm/m256 /// public static Vector256 MultiplyHigh(Vector256 left, Vector256 right) => MultiplyHigh(left, right); /// /// __m256i _mm256_mulhi_epu16 (__m256i a, __m256i b) /// VPMULHUW ymm, ymm, ymm/m256 /// public static Vector256 MultiplyHigh(Vector256 left, Vector256 right) => MultiplyHigh(left, right); /// /// __m256i _mm256_mulhrs_epi16 (__m256i a, __m256i b) /// VPMULHRSW ymm, ymm, ymm/m256 /// public static Vector256 MultiplyHighRoundScale(Vector256 left, Vector256 right) => MultiplyHighRoundScale(left, right); /// /// __m256i _mm256_mullo_epi16 (__m256i a, __m256i b) /// VPMULLW ymm, ymm, ymm/m256 /// public static Vector256 MultiplyLow(Vector256 left, Vector256 right) => MultiplyLow(left, right); /// /// __m256i _mm256_mullo_epi16 (__m256i a, __m256i b) /// VPMULLW ymm, ymm, ymm/m256 /// public static Vector256 MultiplyLow(Vector256 left, Vector256 right) => MultiplyLow(left, right); /// /// __m256i _mm256_mullo_epi32 (__m256i a, __m256i b) /// VPMULLD ymm, ymm, ymm/m256 /// public static Vector256 MultiplyLow(Vector256 left, Vector256 right) => MultiplyLow(left, right); /// /// __m256i _mm256_mullo_epi32 (__m256i a, __m256i b) /// VPMULLD ymm, ymm, ymm/m256 /// public static Vector256 MultiplyLow(Vector256 left, Vector256 right) => MultiplyLow(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_or_si256 (__m256i a, __m256i b) /// VPOR ymm, ymm, ymm/m256 /// public static Vector256 Or(Vector256 left, Vector256 right) => Or(left, right); /// /// __m256i _mm256_packs_epi16 (__m256i a, __m256i b) /// VPACKSSWB ymm, ymm, ymm/m256 /// public static Vector256 PackSignedSaturate(Vector256 left, Vector256 right) => PackSignedSaturate(left, right); /// /// __m256i _mm256_packs_epi32 (__m256i a, __m256i b) /// VPACKSSDW ymm, ymm, ymm/m256 /// public static Vector256 PackSignedSaturate(Vector256 left, Vector256 right) => PackSignedSaturate(left, right); /// /// __m256i _mm256_packus_epi16 (__m256i a, __m256i b) /// VPACKUSWB ymm, ymm, ymm/m256 /// public static Vector256 PackUnsignedSaturate(Vector256 left, Vector256 right) => PackUnsignedSaturate(left, right); /// /// __m256i _mm256_packus_epi32 (__m256i a, __m256i b) /// VPACKUSDW ymm, ymm, ymm/m256 /// public static Vector256 PackUnsignedSaturate(Vector256 left, Vector256 right) => PackUnsignedSaturate(left, right); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute2x128_si256 (__m256i a, __m256i b, const int imm8) /// VPERM2I128 ymm, ymm, ymm/m256, imm8 /// public static Vector256 Permute2x128(Vector256 left, Vector256 right, byte control) => Permute2x128(left, right, control); /// /// __m256i _mm256_permute4x64_epi64 (__m256i a, const int imm8) /// VPERMQ ymm, ymm/m256, imm8 /// public static Vector256 Permute4x64(Vector256 value, byte control) => Permute4x64(value, control); /// /// __m256i _mm256_permute4x64_epi64 (__m256i a, const int imm8) /// VPERMQ ymm, ymm/m256, imm8 /// public static Vector256 Permute4x64(Vector256 value, byte control) => Permute4x64(value, control); /// /// __m256d _mm256_permute4x64_pd (__m256d a, const int imm8) /// VPERMPD ymm, ymm/m256, imm8 /// public static Vector256 Permute4x64(Vector256 value, byte control) => Permute4x64(value, control); /// /// __m256i _mm256_permutevar8x32_epi32 (__m256i a, __m256i idx) /// VPERMD ymm, ymm/m256, imm8 /// public static Vector256 PermuteVar8x32(Vector256 left, Vector256 control) => PermuteVar8x32(left, control); /// /// __m256i _mm256_permutevar8x32_epi32 (__m256i a, __m256i idx) /// VPERMD ymm, ymm/m256, imm8 /// public static Vector256 PermuteVar8x32(Vector256 left, Vector256 control) => PermuteVar8x32(left, control); /// /// __m256 _mm256_permutevar8x32_ps (__m256 a, __m256i idx) /// VPERMPS ymm, ymm/m256, imm8 /// public static Vector256 PermuteVar8x32(Vector256 left, Vector256 control) => PermuteVar8x32(left, control); /// /// __m256i _mm256_sll_epi16 (__m256i a, __m128i count) /// VPSLLW ymm, ymm, xmm/m128 /// public static Vector256 ShiftLeftLogical(Vector256 value, Vector128 count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_sll_epi16 (__m256i a, __m128i count) /// VPSLLW ymm, ymm, xmm/m128 /// public static Vector256 ShiftLeftLogical(Vector256 value, Vector128 count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_sll_epi32 (__m256i a, __m128i count) /// VPSLLD ymm, ymm, xmm/m128 /// public static Vector256 ShiftLeftLogical(Vector256 value, Vector128 count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_sll_epi32 (__m256i a, __m128i count) /// VPSLLD ymm, ymm, xmm/m128 /// public static Vector256 ShiftLeftLogical(Vector256 value, Vector128 count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_sll_epi64 (__m256i a, __m128i count) /// VPSLLQ ymm, ymm, xmm/m128 /// public static Vector256 ShiftLeftLogical(Vector256 value, Vector128 count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_sll_epi64 (__m256i a, __m128i count) /// VPSLLQ ymm, ymm, xmm/m128 /// public static Vector256 ShiftLeftLogical(Vector256 value, Vector128 count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_slli_epi16 (__m256i a, int imm8) /// VPSLLW ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical(Vector256 value, byte count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_slli_epi16 (__m256i a, int imm8) /// VPSLLW ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical(Vector256 value, byte count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_slli_epi32 (__m256i a, int imm8) /// VPSLLD ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical(Vector256 value, byte count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_slli_epi32 (__m256i a, int imm8) /// VPSLLD ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical(Vector256 value, byte count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_slli_epi64 (__m256i a, int imm8) /// VPSLLQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical(Vector256 value, byte count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_slli_epi64 (__m256i a, int imm8) /// VPSLLQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical(Vector256 value, byte count) => ShiftLeftLogical(value, count); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bslli_epi128 (__m256i a, const int imm8) /// VPSLLDQ ymm, ymm, imm8 /// public static Vector256 ShiftLeftLogical128BitLane(Vector256 value, byte numBytes) => ShiftLeftLogical128BitLane(value, numBytes); /// /// __m256i _mm256_sllv_epi32 (__m256i a, __m256i count) /// VPSLLVD ymm, ymm, ymm/m256 /// public static Vector256 ShiftLeftLogicalVariable(Vector256 value, Vector256 count) => ShiftLeftLogicalVariable(value, count); /// /// __m256i _mm256_sllv_epi32 (__m256i a, __m256i count) /// VPSLLVD ymm, ymm, ymm/m256 /// public static Vector256 ShiftLeftLogicalVariable(Vector256 value, Vector256 count) => ShiftLeftLogicalVariable(value, count); /// /// __m256i _mm256_sllv_epi64 (__m256i a, __m256i count) /// VPSLLVQ ymm, ymm, ymm/m256 /// public static Vector256 ShiftLeftLogicalVariable(Vector256 value, Vector256 count) => ShiftLeftLogicalVariable(value, count); /// /// __m256i _mm256_sllv_epi64 (__m256i a, __m256i count) /// VPSLLVQ ymm, ymm, ymm/m256 /// public static Vector256 ShiftLeftLogicalVariable(Vector256 value, Vector256 count) => ShiftLeftLogicalVariable(value, count); /// /// __m128i _mm_sllv_epi32 (__m128i a, __m128i count) /// VPSLLVD xmm, ymm, xmm/m128 /// public static Vector128 ShiftLeftLogicalVariable(Vector128 value, Vector128 count) => ShiftLeftLogicalVariable(value, count); /// /// __m128i _mm_sllv_epi32 (__m128i a, __m128i count) /// VPSLLVD xmm, ymm, xmm/m128 /// public static Vector128 ShiftLeftLogicalVariable(Vector128 value, Vector128 count) => ShiftLeftLogicalVariable(value, count); /// /// __m128i _mm_sllv_epi64 (__m128i a, __m128i count) /// VPSLLVQ xmm, ymm, xmm/m128 /// public static Vector128 ShiftLeftLogicalVariable(Vector128 value, Vector128 count) => ShiftLeftLogicalVariable(value, count); /// /// __m128i _mm_sllv_epi64 (__m128i a, __m128i count) /// VPSLLVQ xmm, ymm, xmm/m128 /// public static Vector128 ShiftLeftLogicalVariable(Vector128 value, Vector128 count) => ShiftLeftLogicalVariable(value, count); /// /// _mm256_sra_epi16 (__m256i a, __m128i count) /// VPSRAW ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightArithmetic(Vector256 value, Vector128 count) => ShiftRightArithmetic(value, count); /// /// _mm256_sra_epi32 (__m256i a, __m128i count) /// VPSRAD ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightArithmetic(Vector256 value, Vector128 count) => ShiftRightArithmetic(value, count); /// /// __m256i _mm256_srai_epi16 (__m256i a, int imm8) /// VPSRAW ymm, ymm, imm8 /// public static Vector256 ShiftRightArithmetic(Vector256 value, byte count) => ShiftRightArithmetic(value, count); /// /// __m256i _mm256_srai_epi32 (__m256i a, int imm8) /// VPSRAD ymm, ymm, imm8 /// public static Vector256 ShiftRightArithmetic(Vector256 value, byte count) => ShiftRightArithmetic(value, count); /// /// __m256i _mm256_srav_epi32 (__m256i a, __m256i count) /// VPSRAVD ymm, ymm, ymm/m256 /// public static Vector256 ShiftRightArithmeticVariable(Vector256 value, Vector256 count) => ShiftRightArithmeticVariable(value, count); /// /// __m128i _mm_srav_epi32 (__m128i a, __m128i count) /// VPSRAVD xmm, xmm, xmm/m128 /// public static Vector128 ShiftRightArithmeticVariable(Vector128 value, Vector128 count) => ShiftRightArithmeticVariable(value, count); /// /// __m256i _mm256_srl_epi16 (__m256i a, __m128i count) /// VPSRLW ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightLogical(Vector256 value, Vector128 count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srl_epi16 (__m256i a, __m128i count) /// VPSRLW ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightLogical(Vector256 value, Vector128 count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srl_epi32 (__m256i a, __m128i count) /// VPSRLD ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightLogical(Vector256 value, Vector128 count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srl_epi32 (__m256i a, __m128i count) /// VPSRLD ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightLogical(Vector256 value, Vector128 count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srl_epi64 (__m256i a, __m128i count) /// VPSRLQ ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightLogical(Vector256 value, Vector128 count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srl_epi64 (__m256i a, __m128i count) /// VPSRLQ ymm, ymm, xmm/m128 /// public static Vector256 ShiftRightLogical(Vector256 value, Vector128 count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srli_epi16 (__m256i a, int imm8) /// VPSRLW ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical(Vector256 value, byte count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srli_epi16 (__m256i a, int imm8) /// VPSRLW ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical(Vector256 value, byte count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srli_epi32 (__m256i a, int imm8) /// VPSRLD ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical(Vector256 value, byte count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srli_epi32 (__m256i a, int imm8) /// VPSRLD ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical(Vector256 value, byte count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srli_epi64 (__m256i a, int imm8) /// VPSRLQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical(Vector256 value, byte count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_srli_epi64 (__m256i a, int imm8) /// VPSRLQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical(Vector256 value, byte count) => ShiftRightLogical(value, count); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_bsrli_epi128 (__m256i a, const int imm8) /// VPSRLDQ ymm, ymm, imm8 /// public static Vector256 ShiftRightLogical128BitLane(Vector256 value, byte numBytes) => ShiftRightLogical128BitLane(value, numBytes); /// /// __m256i _mm256_srlv_epi32 (__m256i a, __m256i count) /// VPSRLVD ymm, ymm, ymm/m256 /// public static Vector256 ShiftRightLogicalVariable(Vector256 value, Vector256 count) => ShiftRightLogicalVariable(value, count); /// /// __m256i _mm256_srlv_epi32 (__m256i a, __m256i count) /// VPSRLVD ymm, ymm, ymm/m256 /// public static Vector256 ShiftRightLogicalVariable(Vector256 value, Vector256 count) => ShiftRightLogicalVariable(value, count); /// /// __m256i _mm256_srlv_epi64 (__m256i a, __m256i count) /// VPSRLVQ ymm, ymm, ymm/m256 /// public static Vector256 ShiftRightLogicalVariable(Vector256 value, Vector256 count) => ShiftRightLogicalVariable(value, count); /// /// __m256i _mm256_srlv_epi64 (__m256i a, __m256i count) /// VPSRLVQ ymm, ymm, ymm/m256 /// public static Vector256 ShiftRightLogicalVariable(Vector256 value, Vector256 count) => ShiftRightLogicalVariable(value, count); /// /// __m128i _mm_srlv_epi32 (__m128i a, __m128i count) /// VPSRLVD xmm, xmm, xmm/m128 /// public static Vector128 ShiftRightLogicalVariable(Vector128 value, Vector128 count) => ShiftRightLogicalVariable(value, count); /// /// __m128i _mm_srlv_epi32 (__m128i a, __m128i count) /// VPSRLVD xmm, xmm, xmm/m128 /// public static Vector128 ShiftRightLogicalVariable(Vector128 value, Vector128 count) => ShiftRightLogicalVariable(value, count); /// /// __m128i _mm_srlv_epi64 (__m128i a, __m128i count) /// VPSRLVQ xmm, xmm, xmm/m128 /// public static Vector128 ShiftRightLogicalVariable(Vector128 value, Vector128 count) => ShiftRightLogicalVariable(value, count); /// /// __m128i _mm_srlv_epi64 (__m128i a, __m128i count) /// VPSRLVQ xmm, xmm, xmm/m128 /// public static Vector128 ShiftRightLogicalVariable(Vector128 value, Vector128 count) => ShiftRightLogicalVariable(value, count); /// /// __m256i _mm256_shuffle_epi8 (__m256i a, __m256i b) /// VPSHUFB ymm, ymm, ymm/m256 /// public static Vector256 Shuffle(Vector256 value, Vector256 mask) => Shuffle(value, mask); /// /// __m256i _mm256_shuffle_epi8 (__m256i a, __m256i b) /// VPSHUFB ymm, ymm, ymm/m256 /// public static Vector256 Shuffle(Vector256 value, Vector256 mask) => Shuffle(value, mask); /// /// __m256i _mm256_shuffle_epi32 (__m256i a, const int imm8) /// VPSHUFD ymm, ymm, ymm/m256 /// public static Vector256 Shuffle(Vector256 value, byte control) => Shuffle(value, control); /// /// __m256i _mm256_shuffle_epi32 (__m256i a, const int imm8) /// VPSHUFD ymm, ymm, ymm/m256 /// public static Vector256 Shuffle(Vector256 value, byte control) => Shuffle(value, control); /// /// __m256i _mm256_shufflehi_epi16 (__m256i a, const int imm8) /// VPSHUFHW ymm, ymm/m256, imm8 /// public static Vector256 ShuffleHigh(Vector256 value, byte control) => ShuffleHigh(value, control); /// /// __m256i _mm256_shufflehi_epi16 (__m256i a, const int imm8) /// VPSHUFHW ymm, ymm/m256, imm8 /// public static Vector256 ShuffleHigh(Vector256 value, byte control) => ShuffleHigh(value, control); /// /// __m256i _mm256_shufflelo_epi16 (__m256i a, const int imm8) /// VPSHUFLW ymm, ymm/m256, imm8 /// public static Vector256 ShuffleLow(Vector256 value, byte control) => ShuffleLow(value, control); /// /// __m256i _mm256_shufflelo_epi16 (__m256i a, const int imm8) /// VPSHUFLW ymm, ymm/m256, imm8 /// public static Vector256 ShuffleLow(Vector256 value, byte control) => ShuffleLow(value, control); /// /// __m256i _mm256_sign_epi8 (__m256i a, __m256i b) /// VPSIGNB ymm, ymm, ymm/m256 /// public static Vector256 Sign(Vector256 left, Vector256 right) => Sign(left, right); /// /// __m256i _mm256_sign_epi16 (__m256i a, __m256i b) /// VPSIGNW ymm, ymm, ymm/m256 /// public static Vector256 Sign(Vector256 left, Vector256 right) => Sign(left, right); /// /// __m256i _mm256_sign_epi32 (__m256i a, __m256i b) /// VPSIGND ymm, ymm, ymm/m256 /// public static Vector256 Sign(Vector256 left, Vector256 right) => Sign(left, right); /// /// __m256i _mm256_sub_epi8 (__m256i a, __m256i b) /// VPSUBB ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_sub_epi8 (__m256i a, __m256i b) /// VPSUBB ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_sub_epi16 (__m256i a, __m256i b) /// VPSUBW ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_sub_epi16 (__m256i a, __m256i b) /// VPSUBW ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_sub_epi32 (__m256i a, __m256i b) /// VPSUBD ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_sub_epi32 (__m256i a, __m256i b) /// VPSUBD ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_sub_epi64 (__m256i a, __m256i b) /// VPSUBQ ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_sub_epi64 (__m256i a, __m256i b) /// VPSUBQ ymm, ymm, ymm/m256 /// public static Vector256 Subtract(Vector256 left, Vector256 right) => Subtract(left, right); /// /// __m256i _mm256_subs_epi8 (__m256i a, __m256i b) /// VPSUBSB ymm, ymm, ymm/m256 /// public static Vector256 SubtractSaturate(Vector256 left, Vector256 right) => SubtractSaturate(left, right); /// /// __m256i _mm256_subs_epi16 (__m256i a, __m256i b) /// VPSUBSW ymm, ymm, ymm/m256 /// public static Vector256 SubtractSaturate(Vector256 left, Vector256 right) => SubtractSaturate(left, right); /// /// __m256i _mm256_subs_epu8 (__m256i a, __m256i b) /// VPSUBUSB ymm, ymm, ymm/m256 /// public static Vector256 SubtractSaturate(Vector256 left, Vector256 right) => SubtractSaturate(left, right); /// /// __m256i _mm256_subs_epu16 (__m256i a, __m256i b) /// VPSUBUSW ymm, ymm, ymm/m256 /// public static Vector256 SubtractSaturate(Vector256 left, Vector256 right) => SubtractSaturate(left, right); /// /// __m256i _mm256_sad_epu8 (__m256i a, __m256i b) /// VPSADBW ymm, ymm, ymm/m256 /// public static Vector256 SumAbsoluteDifferences(Vector256 left, Vector256 right) => SumAbsoluteDifferences(left, right); /// /// __m256i _mm256_unpackhi_epi8 (__m256i a, __m256i b) /// VPUNPCKHBW ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpackhi_epi8 (__m256i a, __m256i b) /// VPUNPCKHBW ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpackhi_epi16 (__m256i a, __m256i b) /// VPUNPCKHWD ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpackhi_epi16 (__m256i a, __m256i b) /// VPUNPCKHWD ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpackhi_epi32 (__m256i a, __m256i b) /// VPUNPCKHDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpackhi_epi32 (__m256i a, __m256i b) /// VPUNPCKHDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpackhi_epi64 (__m256i a, __m256i b) /// VPUNPCKHQDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpackhi_epi64 (__m256i a, __m256i b) /// VPUNPCKHQDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackHigh(Vector256 left, Vector256 right) => UnpackHigh(left, right); /// /// __m256i _mm256_unpacklo_epi8 (__m256i a, __m256i b) /// VPUNPCKLBW ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_unpacklo_epi8 (__m256i a, __m256i b) /// VPUNPCKLBW ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_unpacklo_epi16 (__m256i a, __m256i b) /// VPUNPCKLWD ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_unpacklo_epi16 (__m256i a, __m256i b) /// VPUNPCKLWD ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_unpacklo_epi32 (__m256i a, __m256i b) /// VPUNPCKLDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_unpacklo_epi32 (__m256i a, __m256i b) /// VPUNPCKLDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_unpacklo_epi64 (__m256i a, __m256i b) /// VPUNPCKLQDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_unpacklo_epi64 (__m256i a, __m256i b) /// VPUNPCKLQDQ ymm, ymm, ymm/m256 /// public static Vector256 UnpackLow(Vector256 left, Vector256 right) => UnpackLow(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); /// /// __m256i _mm256_xor_si256 (__m256i a, __m256i b) /// VPXOR ymm, ymm, ymm/m256 /// public static Vector256 Xor(Vector256 left, Vector256 right) => Xor(left, right); } }