Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Fixing some inconsistencies in the x86 HWIntrinsic APIs #15923

Merged
merged 23 commits into from
Jan 30, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
0f11e64
Adding the missing Sse2.MoveMask(Vector128<byte>) intrinsic
tannergooding Jan 19, 2018
db51549
Fixing some inconsistencies in the Scalar intrinsics
tannergooding Jan 19, 2018
1a6bad1
Fix the naming of the arguments for LoadHigh and LoadLow
tannergooding Jan 19, 2018
b35e067
Adding overloads for the x86 Scalar intrinsics to not take 'upper'.
tannergooding Jan 20, 2018
dd61e10
Listing the instruction mappings for the SSE intrinsics.
tannergooding Jan 24, 2018
3d410de
Listing the instruction mappings for the SSE2 intrinsics.
tannergooding Jan 24, 2018
22ca0fd
Listing the instruction mappings for the SSE3 intrinsics.
tannergooding Jan 24, 2018
f72eeac
Listing the instruction mappings for the SSSE3 intrinsics
tannergooding Jan 24, 2018
78269dd
Listing the instruction mappings for the SSE4.1 intrinsics.
tannergooding Jan 24, 2018
51322e0
Listing the instruction mappings for the SSE4.2 intrinsics.
tannergooding Jan 24, 2018
aa2622d
Listing the instruction mappings for the AVX intrinsics.
tannergooding Jan 24, 2018
c9d7eb1
Listing the instruction mappings for the FMA intrinsics.
tannergooding Jan 24, 2018
93d5999
Listing the instruction mappings for the AVX2 intrinsics.
tannergooding Jan 24, 2018
ca789b8
Adding the missing Sse2.MoveScalar intrinsics
tannergooding Jan 24, 2018
a1001f8
Renaming Sse41.LoadAlignedNonTemporal to Sse41.LoadAlignedVector128No…
tannergooding Jan 24, 2018
b3eba0c
Changing the hardware intrinsic APIs to use pointers rather than ref
tannergooding Jan 29, 2018
a56f02b
Moving the listed instruction for the HWIntrinsics to its own line
tannergooding Jan 30, 2018
cc7c8ee
Adding the Vector128 postfix on the Sse2.LoadScalar instructions
tannergooding Jan 30, 2018
3dd51d5
Adding the missing memory fencing and prefetch intrinsics for x86
tannergooding Jan 30, 2018
4f5fc32
Adding missing instruction mapping documentation and fixing some sign…
tannergooding Jan 30, 2018
b7462fb
Changing BroadcastElement to BroadcastScalar
tannergooding Jan 30, 2018
3f348a5
Changing ConvertTo.*Scalar to ConvertScalarTo.*
tannergooding Jan 30, 2018
5266d3e
Temporaily disable some HWIntrinsic tests due to the naming changes.
tannergooding Jan 30, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,55 +17,67 @@ public static class Aes

/// <summary>
/// __m128i _mm_aesdec_si128 (__m128i a, __m128i RoundKey)
/// AESDEC xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> Decrypt(Vector128<sbyte> value, Vector128<sbyte> roundKey) { throw new PlatformNotSupportedException(); }
/// <summary>
/// __m128i _mm_aesdec_si128 (__m128i a, __m128i RoundKey)
/// AESDEC xmm, xmm/m128
/// </summary>
public static Vector128<byte> Decrypt(Vector128<byte> value, Vector128<byte> roundKey) { throw new PlatformNotSupportedException(); }

/// <summary>
/// __m128i _mm_aesdeclast_si128 (__m128i a, __m128i RoundKey)
/// AESDECLAST xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> DecryptLast(Vector128<sbyte> value, Vector128<sbyte> roundKey) { throw new PlatformNotSupportedException(); }
/// <summary>
/// __m128i _mm_aesdeclast_si128 (__m128i a, __m128i RoundKey)
/// AESDECLAST xmm, xmm/m128
/// </summary>
public static Vector128<byte> DecryptLast(Vector128<byte> value, Vector128<byte> roundKey) { throw new PlatformNotSupportedException(); }

/// <summary>
/// __m128i _mm_aesenc_si128 (__m128i a, __m128i RoundKey)
/// AESENC xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> Encrypt(Vector128<sbyte> value, Vector128<sbyte> roundKey) { throw new PlatformNotSupportedException(); }
/// <summary>
/// __m128i _mm_aesenc_si128 (__m128i a, __m128i RoundKey)
/// AESENC xmm, xmm/m128
/// </summary>
public static Vector128<byte> Encrypt(Vector128<byte> value, Vector128<byte> roundKey) { throw new PlatformNotSupportedException(); }

/// <summary>
/// __m128i _mm_aesenclast_si128 (__m128i a, __m128i RoundKey)
/// AESENCLAST xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> EncryptLast(Vector128<sbyte> value, Vector128<sbyte> roundKey) { throw new PlatformNotSupportedException(); }
/// <summary>
/// __m128i _mm_aesenclast_si128 (__m128i a, __m128i RoundKey)
/// AESENCLAST xmm, xmm/m128
/// </summary>
public static Vector128<byte> EncryptLast(Vector128<byte> value, Vector128<byte> roundKey) { throw new PlatformNotSupportedException(); }

/// <summary>
/// __m128i _mm_aesimc_si128 (__m128i a)
/// AESIMC xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> InvisibleMixColumn(Vector128<sbyte> value) { throw new PlatformNotSupportedException(); }
/// <summary>
/// __m128i _mm_aesimc_si128 (__m128i a)
/// AESIMC xmm, xmm/m128
/// </summary>
public static Vector128<byte> InvisibleMixColumn(Vector128<byte> value) { throw new PlatformNotSupportedException(); }

/// <summary>
/// __m128i _mm_aeskeygenassist_si128 (__m128i a, const int imm8)
/// AESKEYGENASSIST xmm, xmm/m128, imm8
/// </summary>
public static Vector128<sbyte> KeygenAssist(Vector128<sbyte> value, byte control) { throw new PlatformNotSupportedException(); }
/// <summary>
/// __m128i _mm_aeskeygenassist_si128 (__m128i a, const int imm8)
/// AESKEYGENASSIST xmm, xmm/m128, imm8
/// </summary>
public static Vector128<byte> KeygenAssist(Vector128<byte> value, byte control) { throw new PlatformNotSupportedException(); }

Expand Down
12 changes: 12 additions & 0 deletions src/mscorlib/src/System/Runtime/Intrinsics/X86/Aes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,55 +17,67 @@ public static class Aes

/// <summary>
/// __m128i _mm_aesdec_si128 (__m128i a, __m128i RoundKey)
/// AESDEC xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> Decrypt(Vector128<sbyte> value, Vector128<sbyte> roundKey) => Decrypt(value, roundKey);
/// <summary>
/// __m128i _mm_aesdec_si128 (__m128i a, __m128i RoundKey)
/// AESDEC xmm, xmm/m128
/// </summary>
public static Vector128<byte> Decrypt(Vector128<byte> value, Vector128<byte> roundKey) => Decrypt(value, roundKey);

/// <summary>
/// __m128i _mm_aesdeclast_si128 (__m128i a, __m128i RoundKey)
/// AESDECLAST xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> DecryptLast(Vector128<sbyte> value, Vector128<sbyte> roundKey) => DecryptLast(value, roundKey);
/// <summary>
/// __m128i _mm_aesdeclast_si128 (__m128i a, __m128i RoundKey)
/// AESDECLAST xmm, xmm/m128
/// </summary>
public static Vector128<byte> DecryptLast(Vector128<byte> value, Vector128<byte> roundKey) => DecryptLast(value, roundKey);

/// <summary>
/// __m128i _mm_aesenc_si128 (__m128i a, __m128i RoundKey)
/// AESENC xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> Encrypt(Vector128<sbyte> value, Vector128<sbyte> roundKey) => Encrypt(value, roundKey);
/// <summary>
/// __m128i _mm_aesenc_si128 (__m128i a, __m128i RoundKey)
/// AESENC xmm, xmm/m128
/// </summary>
public static Vector128<byte> Encrypt(Vector128<byte> value, Vector128<byte> roundKey) => Encrypt(value, roundKey);

/// <summary>
/// __m128i _mm_aesenclast_si128 (__m128i a, __m128i RoundKey)
/// AESENCLAST xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> EncryptLast(Vector128<sbyte> value, Vector128<sbyte> roundKey) => EncryptLast(value, roundKey);
/// <summary>
/// __m128i _mm_aesenclast_si128 (__m128i a, __m128i RoundKey)
/// AESENCLAST xmm, xmm/m128
/// </summary>
public static Vector128<byte> EncryptLast(Vector128<byte> value, Vector128<byte> roundKey) => EncryptLast(value, roundKey);

/// <summary>
/// __m128i _mm_aesimc_si128 (__m128i a)
/// AESIMC xmm, xmm/m128
/// </summary>
public static Vector128<sbyte> InvisibleMixColumn(Vector128<sbyte> value) => InvisibleMixColumn(value);
/// <summary>
/// __m128i _mm_aesimc_si128 (__m128i a)
/// AESIMC xmm, xmm/m128
/// </summary>
public static Vector128<byte> InvisibleMixColumn(Vector128<byte> value) => InvisibleMixColumn(value);

/// <summary>
/// __m128i _mm_aeskeygenassist_si128 (__m128i a, const int imm8)
/// AESKEYGENASSIST xmm, xmm/m128, imm8
/// </summary>
public static Vector128<sbyte> KeygenAssist(Vector128<sbyte> value, byte control) => KeygenAssist(value, control);
/// <summary>
/// __m128i _mm_aeskeygenassist_si128 (__m128i a, const int imm8)
/// AESKEYGENASSIST xmm, xmm/m128, imm8
/// </summary>
public static Vector128<byte> KeygenAssist(Vector128<byte> value, byte control) => KeygenAssist(value, control);

Expand Down
Loading