Handle 64-bit only intrinisc by nested classes (dotnet/coreclr#20146)
authorFei Peng <fei.peng@intel.com>
Thu, 8 Nov 2018 03:15:55 +0000 (19:15 -0800)
committerTanner Gooding <tagoo@outlook.com>
Thu, 8 Nov 2018 03:15:55 +0000 (19:15 -0800)
Commit migrated from https://github.com/dotnet/coreclr/commit/002603e22fe881fc501b344910740a529bed0d9c

16 files changed:
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Bmi1.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Bmi1.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Bmi2.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Bmi2.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Lzcnt.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Lzcnt.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Popcnt.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Popcnt.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse2.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse2.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse41.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse41.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse42.PlatformNotSupported.cs
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/X86/Sse42.cs

index 2b0b48f..4756d9c 100644 (file)
@@ -17,6 +17,62 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get { return false; } }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get { return false; } }
+
+            /// <summary>
+            /// unsigned __int64 _andn_u64 (unsigned __int64 a, unsigned __int64 b)
+            ///   ANDN r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong AndNot(ulong left, ulong right) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _bextr_u64 (unsigned __int64 a, unsigned int start, unsigned int len)
+            ///   BEXTR r64a, reg/m64, r64b
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong BitFieldExtract(ulong value, byte start, byte length) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _bextr2_u64 (unsigned __int64 a, unsigned __int64 control)
+            ///   BEXTR r64a, reg/m64, r64b
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong BitFieldExtract(ulong value, ushort control) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _blsi_u64 (unsigned __int64 a)
+            ///   BLSI reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ExtractLowestSetBit(ulong value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _blsmsk_u64 (unsigned __int64 a)
+            ///   BLSMSK reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong GetMaskUpToLowestSetBit(ulong value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _blsr_u64 (unsigned __int64 a)
+            ///   BLSR reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ResetLowestSetBit(ulong value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __int64 _mm_tzcnt_64 (unsigned __int64 a)
+            ///   TZCNT reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong TrailingZeroCount(ulong value) { throw new PlatformNotSupportedException(); }
+        }
+
         /// <summary>
         /// unsigned int _andn_u32 (unsigned int a, unsigned int b)
         ///   ANDN r32a, r32b, reg/m32
index f06f54d..b75e2da 100644 (file)
@@ -17,6 +17,62 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get => IsSupported; }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get => IsSupported; }
+
+            /// <summary>
+            /// unsigned __int64 _andn_u64 (unsigned __int64 a, unsigned __int64 b)
+            ///   ANDN r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong AndNot(ulong left, ulong right) => AndNot(left, right);
+
+            /// <summary>
+            /// unsigned __int64 _bextr_u64 (unsigned __int64 a, unsigned int start, unsigned int len)
+            ///   BEXTR r64a, reg/m64, r64b
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong BitFieldExtract(ulong value, byte start, byte length) => BitFieldExtract(value, start, length);
+
+            /// <summary>
+            /// unsigned __int64 _bextr2_u64 (unsigned __int64 a, unsigned __int64 control)
+            ///   BEXTR r64a, reg/m64, r64b
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong BitFieldExtract(ulong value, ushort control) => BitFieldExtract(value, control);
+
+            /// <summary>
+            /// unsigned __int64 _blsi_u64 (unsigned __int64 a)
+            ///   BLSI reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ExtractLowestSetBit(ulong value) => ExtractLowestSetBit(value);
+
+            /// <summary>
+            /// unsigned __int64 _blsmsk_u64 (unsigned __int64 a)
+            ///   BLSMSK reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong GetMaskUpToLowestSetBit(ulong value) => GetMaskUpToLowestSetBit(value);
+
+            /// <summary>
+            /// unsigned __int64 _blsr_u64 (unsigned __int64 a)
+            ///   BLSR reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ResetLowestSetBit(ulong value) => ResetLowestSetBit(value);
+
+            /// <summary>
+            /// __int64 _mm_tzcnt_64 (unsigned __int64 a)
+            ///   TZCNT reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong TrailingZeroCount(ulong value) => TrailingZeroCount(value);
+        }
+
         /// <summary>
         /// unsigned int _andn_u32 (unsigned int a, unsigned int b)
         ///   ANDN r32a, r32b, reg/m32
index 0789d6f..033f055 100644 (file)
@@ -17,6 +17,41 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get { return false; } }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get { return false; } }
+
+            /// <summary>
+            /// unsigned __int64 _bzhi_u64 (unsigned __int64 a, unsigned int index)
+            ///   BZHI r64a, reg/m32, r64b
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ZeroHighBits(ulong value, ulong index) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _mulx_u64 (unsigned __int64 a, unsigned __int64 b, unsigned __int64* hi)
+            ///   MULX r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static unsafe ulong MultiplyNoFlags(ulong left, ulong right, ulong* high) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _pdep_u64 (unsigned __int64 a, unsigned __int64 mask)
+            ///   PDEP r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ParallelBitDeposit(ulong value, ulong mask) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// unsigned __int64 _pext_u64 (unsigned __int64 a, unsigned __int64 mask)
+            ///   PEXT r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ParallelBitExtract(ulong value, ulong mask) { throw new PlatformNotSupportedException(); }
+        }
+
         /// <summary>
         /// unsigned int _bzhi_u32 (unsigned int a, unsigned int index)
         ///   BZHI r32a, reg/m32, r32b
index d8fb152..a3360bd 100644 (file)
@@ -17,6 +17,41 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get => IsSupported; }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get => IsSupported; }
+
+            /// <summary>
+            /// unsigned __int64 _bzhi_u64 (unsigned __int64 a, unsigned int index)
+            ///   BZHI r64a, reg/m32, r64b
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ZeroHighBits(ulong value, ulong index) => ZeroHighBits(value, index);
+
+            /// <summary>
+            /// unsigned __int64 _mulx_u64 (unsigned __int64 a, unsigned __int64 b, unsigned __int64* hi)
+            ///   MULX r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static unsafe ulong MultiplyNoFlags(ulong left, ulong right, ulong* high) => MultiplyNoFlags(left, right, high);
+
+            /// <summary>
+            /// unsigned __int64 _pdep_u64 (unsigned __int64 a, unsigned __int64 mask)
+            ///   PDEP r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ParallelBitDeposit(ulong value, ulong mask) => ParallelBitDeposit(value, mask);
+
+            /// <summary>
+            /// unsigned __int64 _pext_u64 (unsigned __int64 a, unsigned __int64 mask)
+            ///   PEXT r64a, r64b, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ParallelBitExtract(ulong value, ulong mask) => ParallelBitExtract(value, mask);
+        }
+
         /// <summary>
         /// unsigned int _bzhi_u32 (unsigned int a, unsigned int index)
         ///   BZHI r32a, reg/m32, r32b
index 4f92762..3ae39ed 100644 (file)
@@ -16,6 +16,20 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get { return false; } }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get { return false; } }
+
+            /// <summary>
+            /// unsigned __int64 _lzcnt_u64 (unsigned __int64 a)
+            ///   LZCNT reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong LeadingZeroCount(ulong value) { throw new PlatformNotSupportedException(); }
+        }
+
         /// <summary>
         /// unsigned int _lzcnt_u32 (unsigned int a)
         ///   LZCNT reg, reg/m32
index 5e9594f..0f1b8cf 100644 (file)
@@ -17,6 +17,20 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get => IsSupported; }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get => IsSupported; }
+
+            /// <summary>
+            /// unsigned __int64 _lzcnt_u64 (unsigned __int64 a)
+            ///   LZCNT reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong LeadingZeroCount(ulong value) => LeadingZeroCount(value);
+        }
+
         /// <summary>
         /// unsigned int _lzcnt_u32 (unsigned int a)
         ///   LZCNT reg, reg/m32
index bf045bd..1ca46a2 100644 (file)
@@ -16,6 +16,18 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get { return false; } }
 
+        public new abstract class X64 : Sse41.X64
+        {
+            internal X64() { }
+            public new static bool IsSupported { get => IsSupported; }
+            /// <summary>
+            /// __int64 _mm_popcnt_u64 (unsigned __int64 a)
+            ///   POPCNT reg64, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong PopCount(ulong value) => PopCount(value);
+        }
+
         /// <summary>
         /// int _mm_popcnt_u32 (unsigned int a)
         ///   POPCNT reg, reg/m32
index ba73eb2..c5dd18c 100644 (file)
@@ -17,6 +17,18 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get => IsSupported; }
 
+        public new abstract class X64 : Sse41.X64
+        {
+            internal X64() { }
+            public new static bool IsSupported { get => IsSupported; }
+            /// <summary>
+            /// __int64 _mm_popcnt_u64 (unsigned __int64 a)
+            ///   POPCNT reg64, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong PopCount(ulong value) => PopCount(value);
+        }
+
         /// <summary>
         /// int _mm_popcnt_u32 (unsigned int a)
         ///   POPCNT reg, reg/m32
index 77c63ce..18bb9ec 100644 (file)
@@ -17,6 +17,34 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get { return false; } }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get { return false; } }
+
+            /// <summary>
+            /// __int64 _mm_cvtss_si64 (__m128 a)
+            ///   CVTSS2SI r64, xmm/m32
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64(Vector128<float> value) { throw new PlatformNotSupportedException(); }
+            /// <summary>
+            /// __m128 _mm_cvtsi64_ss (__m128 a, __int64 b)
+            ///   CVTSI2SS xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<float> ConvertScalarToVector128Single(Vector128<float> upper, long value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __int64 _mm_cvttss_si64 (__m128 a)
+            ///   CVTTSS2SI r64, xmm/m32
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64WithTruncation(Vector128<float> value) { throw new PlatformNotSupportedException(); }
+
+        }
+
         /// <summary>
         /// __m128 _mm_add_ps (__m128 a,  __m128 b)
         ///   ADDPS xmm, xmm/m128
index 3b01aee..fb96d01 100644 (file)
@@ -18,6 +18,34 @@ namespace System.Runtime.Intrinsics.X86
 
         public static bool IsSupported { get => IsSupported; }
 
+        public abstract class X64
+        {
+            internal X64() { }
+
+            public static bool IsSupported { get => IsSupported; }
+
+            /// <summary>
+            /// __int64 _mm_cvtss_si64 (__m128 a)
+            ///   CVTSS2SI r64, xmm/m32
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64(Vector128<float> value) => ConvertToInt64(value);
+            /// <summary>
+            /// __m128 _mm_cvtsi64_ss (__m128 a, __int64 b)
+            ///   CVTSI2SS xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<float> ConvertScalarToVector128Single(Vector128<float> upper, long value) => ConvertScalarToVector128Single(upper, value);
+
+            /// <summary>
+            /// __int64 _mm_cvttss_si64 (__m128 a)
+            ///   CVTTSS2SI r64, xmm/m32
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64WithTruncation(Vector128<float> value) => ConvertToInt64WithTruncation(value);
+
+        }
+
         /// <summary>
         /// __m128 _mm_add_ps (__m128 a,  __m128 b)
         ///   ADDPS xmm, xmm/m128
index 0d37377..6affc76 100644 (file)
@@ -17,7 +17,75 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get { return false; } }
 
-                /// <summary>
+        public new abstract class X64 : Sse.X64
+        {
+            internal X64() { }
+
+            public new static bool IsSupported { get { return false; } }
+
+            /// <summary>
+            /// __int64 _mm_cvtsd_si64 (__m128d a)
+            ///   CVTSD2SI r64, xmm/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64(Vector128<double> value) { throw new PlatformNotSupportedException(); }
+            /// <summary>
+            /// __int64 _mm_cvtsi128_si64 (__m128i a)
+            ///   MOVQ reg/m64, xmm
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64(Vector128<long> value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __int64 _mm_cvtsi128_si64 (__m128i a)
+            ///   MOVQ reg/m64, xmm
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ConvertToUInt64(Vector128<ulong> value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __m128d _mm_cvtsi64_sd (__m128d a, __int64 b)
+            ///   CVTSI2SD xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<double> ConvertScalarToVector128Double(Vector128<double> upper, long value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __m128i _mm_cvtsi64_si128 (__int64 a)
+            ///   MOVQ xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<long> ConvertScalarToVector128Int64(long value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __m128i _mm_cvtsi64_si128 (__int64 a)
+            ///   MOVQ xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<ulong> ConvertScalarToVector128UInt64(ulong value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __int64 _mm_cvttsd_si64 (__m128d a)
+            ///   CVTTSD2SI reg, xmm/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64WithTruncation(Vector128<double> value) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// void _mm_stream_si64(__int64 *p, __int64 a)
+            ///   MOVNTI m64, r64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static unsafe void StoreNonTemporal(long* address, long value) { throw new PlatformNotSupportedException(); }
+            /// <summary>
+            /// void _mm_stream_si64(__int64 *p, __int64 a)
+            ///   MOVNTI m64, r64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static unsafe void StoreNonTemporal(ulong* address, ulong value) { throw new PlatformNotSupportedException(); }
+        }
+
+        /// <summary>
         /// __m128i _mm_add_epi8 (__m128i a,  __m128i b)
         ///   PADDB xmm, xmm/m128
         /// </summary>
index a80c29f..2b8e614 100644 (file)
@@ -18,6 +18,74 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get => IsSupported; }
 
+        public new abstract class X64 : Sse.X64
+        {
+            internal X64() { }
+
+            public new static bool IsSupported { get => IsSupported; }
+
+            /// <summary>
+            /// __int64 _mm_cvtsd_si64 (__m128d a)
+            ///   CVTSD2SI r64, xmm/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64(Vector128<double> value) => ConvertToInt64(value);
+            /// <summary>
+            /// __int64 _mm_cvtsi128_si64 (__m128i a)
+            ///   MOVQ reg/m64, xmm
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64(Vector128<long> value) => ConvertToInt64(value);
+
+            /// <summary>
+            /// __int64 _mm_cvtsi128_si64 (__m128i a)
+            ///   MOVQ reg/m64, xmm
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong ConvertToUInt64(Vector128<ulong> value) => ConvertToUInt64(value);
+
+            /// <summary>
+            /// __m128d _mm_cvtsi64_sd (__m128d a, __int64 b)
+            ///   CVTSI2SD xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<double> ConvertScalarToVector128Double(Vector128<double> upper, long value) => ConvertScalarToVector128Double(upper, value);
+
+            /// <summary>
+            /// __m128i _mm_cvtsi64_si128 (__int64 a)
+            ///   MOVQ xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<long> ConvertScalarToVector128Int64(long value) => ConvertScalarToVector128Int64(value);
+
+            /// <summary>
+            /// __m128i _mm_cvtsi64_si128 (__int64 a)
+            ///   MOVQ xmm, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<ulong> ConvertScalarToVector128UInt64(ulong value) => ConvertScalarToVector128UInt64(value);
+
+            /// <summary>
+            /// __int64 _mm_cvttsd_si64 (__m128d a)
+            ///   CVTTSD2SI reg, xmm/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long ConvertToInt64WithTruncation(Vector128<double> value) => ConvertToInt64WithTruncation(value);
+
+            /// <summary>
+            /// void _mm_stream_si64(__int64 *p, __int64 a)
+            ///   MOVNTI m64, r64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static unsafe void StoreNonTemporal(long* address, long value) => StoreNonTemporal(address, value);
+            /// <summary>
+            /// void _mm_stream_si64(__int64 *p, __int64 a)
+            ///   MOVNTI m64, r64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static unsafe void StoreNonTemporal(ulong* address, ulong value) => StoreNonTemporal(address, value);
+        }
+
         /// <summary>
         /// __m128i _mm_add_epi8 (__m128i a,  __m128i b)
         ///   PADDB xmm, xmm/m128
@@ -543,7 +611,7 @@ namespace System.Runtime.Intrinsics.X86
         /// </summary>
         public static Vector128<double> ConvertScalarToVector128Double(Vector128<double> upper, int value) => ConvertScalarToVector128Double(upper, value);
         /// <summary>
-        /// __m128d _mm_cvtsi64_sd (__m128d a, int b)
+        /// __m128d _mm_cvtsi64_sd (__m128d a, __int64 b)
         ///   CVTSI2SD xmm, reg/m64
         /// </summary>
         public static Vector128<double> ConvertScalarToVector128Double(Vector128<double> upper, long value) => ConvertScalarToVector128Double(upper, value);
index 654dae0..9390089 100644 (file)
@@ -17,6 +17,39 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get { return false; } }
 
+        public new abstract class X64 : Sse2.X64
+        {
+            internal X64() { }
+
+            public new static bool IsSupported { get { return false; } }
+
+            /// <summary>
+            /// __int64 _mm_extract_epi64 (__m128i a, const int imm8)
+            ///   PEXTRQ reg/m64, xmm, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long Extract(Vector128<long> value, byte index) { throw new PlatformNotSupportedException(); }
+            /// <summary>
+            /// __int64 _mm_extract_epi64 (__m128i a, const int imm8)
+            ///   PEXTRQ reg/m64, xmm, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong Extract(Vector128<ulong> value, byte index) { throw new PlatformNotSupportedException(); }
+
+            /// <summary>
+            /// __m128i _mm_insert_epi64 (__m128i a, __int64 i, const int imm8)
+            ///   PINSRQ xmm, reg/m64, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<long> Insert(Vector128<long> value, long data, byte index) { throw new PlatformNotSupportedException(); }
+            /// <summary>
+            /// __m128i _mm_insert_epi64 (__m128i a, __int64 i, const int imm8)
+            ///   PINSRQ xmm, reg/m64, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<ulong> Insert(Vector128<ulong> value, ulong data, byte index) { throw new PlatformNotSupportedException(); }
+        }
+
         /// <summary>
         /// __m128i _mm_blend_epi16 (__m128i a, __m128i b, const int imm8)
         ///   PBLENDW xmm, xmm/m128 imm8
index daa9ccb..995570f 100644 (file)
@@ -17,6 +17,39 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get => IsSupported; }
 
+        public new abstract class X64 : Sse2.X64
+        {
+            internal X64() { }
+
+            public new static bool IsSupported { get => IsSupported; }
+
+            /// <summary>
+            /// __int64 _mm_extract_epi64 (__m128i a, const int imm8)
+            ///   PEXTRQ reg/m64, xmm, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static long Extract(Vector128<long> value, byte index) => Extract(value, index);
+            /// <summary>
+            /// __int64 _mm_extract_epi64 (__m128i a, const int imm8)
+            ///   PEXTRQ reg/m64, xmm, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong Extract(Vector128<ulong> value, byte index) => Extract(value, index);
+
+            /// <summary>
+            /// __m128i _mm_insert_epi64 (__m128i a, __int64 i, const int imm8)
+            ///   PINSRQ xmm, reg/m64, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<long> Insert(Vector128<long> value, long data, byte index) => Insert(value, data, index);
+            /// <summary>
+            /// __m128i _mm_insert_epi64 (__m128i a, __int64 i, const int imm8)
+            ///   PINSRQ xmm, reg/m64, imm8
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static Vector128<ulong> Insert(Vector128<ulong> value, ulong data, byte index) => Insert(value, data, index);
+        }
+
         /// <summary>
         /// __m128i _mm_blend_epi16 (__m128i a, __m128i b, const int imm8)
         ///   PBLENDW xmm, xmm/m128 imm8
index 8ea2d6f..feffb8e 100644 (file)
@@ -17,6 +17,20 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get { return false; } }
 
+        public new abstract class X64 : Sse41.X64
+        {
+            internal X64() { }
+
+            public new static bool IsSupported { get { return false; } }
+
+            /// <summary>
+            /// unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v)
+            ///   CRC32 reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong Crc32(ulong crc, ulong data) { throw new PlatformNotSupportedException(); }
+        }
+
         /// <summary>
         /// int _mm_cmpistra (__m128i a, __m128i b, const int imm8)
         ///   PCMPISTRI xmm, xmm/m128, imm8
index a735338..5775ae4 100644 (file)
@@ -17,6 +17,20 @@ namespace System.Runtime.Intrinsics.X86
 
         public new static bool IsSupported { get => IsSupported; }
 
+        public new abstract class X64 : Sse41.X64
+        {
+            internal X64() { }
+
+            public new static bool IsSupported { get => IsSupported; }
+
+            /// <summary>
+            /// unsigned __int64 _mm_crc32_u64 (unsigned __int64 crc, unsigned __int64 v)
+            ///   CRC32 reg, reg/m64
+            /// This intrinisc is only available on 64-bit processes
+            /// </summary>
+            public static ulong Crc32(ulong crc, ulong data) => Crc32(crc, data);
+        }
+
         /// <summary>
         /// int _mm_cmpistra (__m128i a, __m128i b, const int imm8)
         ///   PCMPISTRI xmm, xmm/m128, imm8