diff options
author | Tanner Gooding <tagoo@outlook.com> | 2019-05-02 11:15:49 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-02 11:15:49 -0700 |
commit | 780bee637027c48213f5c94e19e8aabbd105e077 (patch) | |
tree | 0d3d1bb11a8a9385df6682b37d453b24b275ff00 /tests | |
parent | 344776d61c355821c907da35af32d5c8962f2374 (diff) | |
download | coreclr-780bee637027c48213f5c94e19e8aabbd105e077.tar.gz coreclr-780bee637027c48213f5c94e19e8aabbd105e077.tar.bz2 coreclr-780bee637027c48213f5c94e19e8aabbd105e077.zip |
Adding more coverage for the AES hwintrinsic tests. (#24335)
* Updating the AES tests to cover all current scenarios
* Regenerating the AES HWIntrinsic tests from the updated templates.
* Fixing a couple of typos in the Aes*OpTest.templates
* Modifying CodeGen::inst_RV_TT_IV to no longer assert when memIndir is nullptr
Diffstat (limited to 'tests')
9 files changed, 1108 insertions, 54 deletions
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Aes/Decrypt.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Aes/Decrypt.Byte.cs index 1adb5a6e2b..511aa48072 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Aes/Decrypt.Byte.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Aes/Decrypt.Byte.cs @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void DecryptByte() { - var test = new SimpleBinaryOpTest__DecryptByte(); + var test = new AesBinaryOpTest__DecryptByte(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if (Aes.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if (Aes.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if (Aes.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleBinaryOpTest__DecryptByte + public sealed unsafe class AesBinaryOpTest__DecryptByte { private struct TestStruct { @@ -107,13 +137,28 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(SimpleBinaryOpTest__DecryptByte testClass) + public void RunStructFldScenario(AesBinaryOpTest__DecryptByte testClass) { var result = Aes.Decrypt(_fld1, _fld2); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesBinaryOpTest__DecryptByte testClass) + { + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.Decrypt( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = 16; @@ -133,7 +178,7 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleBinaryOpTest__DataTable<Byte, Byte, Byte> _dataTable; - static SimpleBinaryOpTest__DecryptByte() + static AesBinaryOpTest__DecryptByte() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); @@ -141,7 +186,7 @@ namespace JIT.HardwareIntrinsics.X86 Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); } - public SimpleBinaryOpTest__DecryptByte() + public AesBinaryOpTest__DecryptByte() { Succeeded = true; @@ -250,6 +295,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed (Vector128<Byte>* pClsVar1 = &_clsVar1) + fixed (Vector128<Byte>* pClsVar2 = &_clsVar2) + { + var result = Aes.Decrypt( + Aes.LoadVector128((Byte*)(pClsVar1)), + Aes.LoadVector128((Byte*)(pClsVar2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -290,13 +352,32 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new SimpleBinaryOpTest__DecryptByte(); + var test = new AesBinaryOpTest__DecryptByte(); var result = Aes.Decrypt(test._fld1, test._fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesBinaryOpTest__DecryptByte(); + + fixed (Vector128<Byte>* pFld1 = &test._fld1) + fixed (Vector128<Byte>* pFld2 = &test._fld2) + { + var result = Aes.Decrypt( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -307,6 +388,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.Decrypt( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -318,6 +416,20 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = Aes.Decrypt( + Aes.LoadVector128((Byte*)(&test._fld1)), + Aes.LoadVector128((Byte*)(&test._fld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -326,6 +438,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Aes/DecryptLast.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Aes/DecryptLast.Byte.cs index 618de7633e..d5ed872df7 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Aes/DecryptLast.Byte.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Aes/DecryptLast.Byte.cs @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void DecryptLastByte() { - var test = new SimpleBinaryOpTest__DecryptLastByte(); + var test = new AesBinaryOpTest__DecryptLastByte(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if (Aes.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if (Aes.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if (Aes.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleBinaryOpTest__DecryptLastByte + public sealed unsafe class AesBinaryOpTest__DecryptLastByte { private struct TestStruct { @@ -107,13 +137,28 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(SimpleBinaryOpTest__DecryptLastByte testClass) + public void RunStructFldScenario(AesBinaryOpTest__DecryptLastByte testClass) { var result = Aes.DecryptLast(_fld1, _fld2); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesBinaryOpTest__DecryptLastByte testClass) + { + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.DecryptLast( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = 16; @@ -133,7 +178,7 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleBinaryOpTest__DataTable<Byte, Byte, Byte> _dataTable; - static SimpleBinaryOpTest__DecryptLastByte() + static AesBinaryOpTest__DecryptLastByte() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); @@ -141,7 +186,7 @@ namespace JIT.HardwareIntrinsics.X86 Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); } - public SimpleBinaryOpTest__DecryptLastByte() + public AesBinaryOpTest__DecryptLastByte() { Succeeded = true; @@ -250,6 +295,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed (Vector128<Byte>* pClsVar1 = &_clsVar1) + fixed (Vector128<Byte>* pClsVar2 = &_clsVar2) + { + var result = Aes.DecryptLast( + Aes.LoadVector128((Byte*)(pClsVar1)), + Aes.LoadVector128((Byte*)(pClsVar2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -290,13 +352,32 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new SimpleBinaryOpTest__DecryptLastByte(); + var test = new AesBinaryOpTest__DecryptLastByte(); var result = Aes.DecryptLast(test._fld1, test._fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesBinaryOpTest__DecryptLastByte(); + + fixed (Vector128<Byte>* pFld1 = &test._fld1) + fixed (Vector128<Byte>* pFld2 = &test._fld2) + { + var result = Aes.DecryptLast( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -307,6 +388,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.DecryptLast( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -318,6 +416,20 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = Aes.DecryptLast( + Aes.LoadVector128((Byte*)(&test._fld1)), + Aes.LoadVector128((Byte*)(&test._fld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -326,6 +438,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Aes/Encrypt.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Aes/Encrypt.Byte.cs index 712c6e76bb..4cd91b8790 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Aes/Encrypt.Byte.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Aes/Encrypt.Byte.cs @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void EncryptByte() { - var test = new SimpleBinaryOpTest__EncryptByte(); + var test = new AesBinaryOpTest__EncryptByte(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if (Aes.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if (Aes.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if (Aes.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleBinaryOpTest__EncryptByte + public sealed unsafe class AesBinaryOpTest__EncryptByte { private struct TestStruct { @@ -107,13 +137,28 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(SimpleBinaryOpTest__EncryptByte testClass) + public void RunStructFldScenario(AesBinaryOpTest__EncryptByte testClass) { var result = Aes.Encrypt(_fld1, _fld2); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesBinaryOpTest__EncryptByte testClass) + { + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.Encrypt( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = 16; @@ -133,7 +178,7 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleBinaryOpTest__DataTable<Byte, Byte, Byte> _dataTable; - static SimpleBinaryOpTest__EncryptByte() + static AesBinaryOpTest__EncryptByte() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); @@ -141,7 +186,7 @@ namespace JIT.HardwareIntrinsics.X86 Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); } - public SimpleBinaryOpTest__EncryptByte() + public AesBinaryOpTest__EncryptByte() { Succeeded = true; @@ -250,6 +295,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed (Vector128<Byte>* pClsVar1 = &_clsVar1) + fixed (Vector128<Byte>* pClsVar2 = &_clsVar2) + { + var result = Aes.Encrypt( + Aes.LoadVector128((Byte*)(pClsVar1)), + Aes.LoadVector128((Byte*)(pClsVar2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -290,13 +352,32 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new SimpleBinaryOpTest__EncryptByte(); + var test = new AesBinaryOpTest__EncryptByte(); var result = Aes.Encrypt(test._fld1, test._fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesBinaryOpTest__EncryptByte(); + + fixed (Vector128<Byte>* pFld1 = &test._fld1) + fixed (Vector128<Byte>* pFld2 = &test._fld2) + { + var result = Aes.Encrypt( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -307,6 +388,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.Encrypt( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -318,6 +416,20 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = Aes.Encrypt( + Aes.LoadVector128((Byte*)(&test._fld1)), + Aes.LoadVector128((Byte*)(&test._fld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -326,6 +438,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Aes/EncryptLast.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Aes/EncryptLast.Byte.cs index 3bb63e6047..b96553ee06 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Aes/EncryptLast.Byte.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Aes/EncryptLast.Byte.cs @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void EncryptLastByte() { - var test = new SimpleBinaryOpTest__EncryptLastByte(); + var test = new AesBinaryOpTest__EncryptLastByte(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if (Aes.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if (Aes.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if (Aes.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleBinaryOpTest__EncryptLastByte + public sealed unsafe class AesBinaryOpTest__EncryptLastByte { private struct TestStruct { @@ -107,13 +137,28 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(SimpleBinaryOpTest__EncryptLastByte testClass) + public void RunStructFldScenario(AesBinaryOpTest__EncryptLastByte testClass) { var result = Aes.EncryptLast(_fld1, _fld2); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesBinaryOpTest__EncryptLastByte testClass) + { + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.EncryptLast( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = 16; @@ -133,7 +178,7 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleBinaryOpTest__DataTable<Byte, Byte, Byte> _dataTable; - static SimpleBinaryOpTest__EncryptLastByte() + static AesBinaryOpTest__EncryptLastByte() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); @@ -141,7 +186,7 @@ namespace JIT.HardwareIntrinsics.X86 Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); } - public SimpleBinaryOpTest__EncryptLastByte() + public AesBinaryOpTest__EncryptLastByte() { Succeeded = true; @@ -250,6 +295,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed (Vector128<Byte>* pClsVar1 = &_clsVar1) + fixed (Vector128<Byte>* pClsVar2 = &_clsVar2) + { + var result = Aes.EncryptLast( + Aes.LoadVector128((Byte*)(pClsVar1)), + Aes.LoadVector128((Byte*)(pClsVar2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -290,13 +352,32 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new SimpleBinaryOpTest__EncryptLastByte(); + var test = new AesBinaryOpTest__EncryptLastByte(); var result = Aes.EncryptLast(test._fld1, test._fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesBinaryOpTest__EncryptLastByte(); + + fixed (Vector128<Byte>* pFld1 = &test._fld1) + fixed (Vector128<Byte>* pFld2 = &test._fld2) + { + var result = Aes.EncryptLast( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -307,6 +388,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed (Vector128<Byte>* pFld1 = &_fld1) + fixed (Vector128<Byte>* pFld2 = &_fld2) + { + var result = Aes.EncryptLast( + Aes.LoadVector128((Byte*)(pFld1)), + Aes.LoadVector128((Byte*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -318,6 +416,20 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = Aes.EncryptLast( + Aes.LoadVector128((Byte*)(&test._fld1)), + Aes.LoadVector128((Byte*)(&test._fld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -326,6 +438,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Aes/InverseMixColumns.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Aes/InverseMixColumns.Byte.cs index ec15cd2416..3fdb4e2074 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Aes/InverseMixColumns.Byte.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Aes/InverseMixColumns.Byte.cs @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void InverseMixColumnsByte() { - var test = new SimpleUnaryOpTest__InverseMixColumnsByte(); + var test = new AesUnaryOpTest__InverseMixColumnsByte(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if (Aes.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if (Aes.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if (Aes.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleUnaryOpTest__InverseMixColumnsByte + public sealed unsafe class AesUnaryOpTest__InverseMixColumnsByte { private struct TestStruct { @@ -104,13 +134,26 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(SimpleUnaryOpTest__InverseMixColumnsByte testClass) + public void RunStructFldScenario(AesUnaryOpTest__InverseMixColumnsByte testClass) { var result = Aes.InverseMixColumns(_fld); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesUnaryOpTest__InverseMixColumnsByte testClass) + { + fixed (Vector128<Byte>* pFld = &_fld) + { + var result = Aes.InverseMixColumns( + Aes.LoadVector128((Byte*)(pFld)) + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = 16; @@ -126,13 +169,13 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable; - static SimpleUnaryOpTest__InverseMixColumnsByte() + static AesUnaryOpTest__InverseMixColumnsByte() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); } - public SimpleUnaryOpTest__InverseMixColumnsByte() + public AesUnaryOpTest__InverseMixColumnsByte() { Succeeded = true; @@ -233,6 +276,21 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed (Vector128<Byte>* pClsVar = &_clsVar) + { + var result = Aes.InverseMixColumns( + Aes.LoadVector128((Byte*)(pClsVar)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -270,13 +328,30 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new SimpleUnaryOpTest__InverseMixColumnsByte(); + var test = new AesUnaryOpTest__InverseMixColumnsByte(); var result = Aes.InverseMixColumns(test._fld); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesUnaryOpTest__InverseMixColumnsByte(); + + fixed (Vector128<Byte>* pFld = &test._fld) + { + var result = Aes.InverseMixColumns( + Aes.LoadVector128((Byte*)(pFld)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -287,6 +362,21 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed (Vector128<Byte>* pFld = &_fld) + { + var result = Aes.InverseMixColumns( + Aes.LoadVector128((Byte*)(pFld)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -298,6 +388,19 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = Aes.InverseMixColumns( + Aes.LoadVector128((Byte*)(&test._fld)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -306,6 +409,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Aes/KeygenAssist.Byte.5.cs b/tests/src/JIT/HardwareIntrinsics/X86/Aes/KeygenAssist.Byte.5.cs index 4e675d2a20..d70e7cf1c1 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Aes/KeygenAssist.Byte.5.cs +++ b/tests/src/JIT/HardwareIntrinsics/X86/Aes/KeygenAssist.Byte.5.cs @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void KeygenAssistByte5() { - var test = new ImmUnaryOpTest__KeygenAssistByte5(); + var test = new AesImmOpTest__KeygenAssistByte5(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if (Aes.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if (Aes.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if (Aes.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if (Aes.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class ImmUnaryOpTest__KeygenAssistByte5 + public sealed unsafe class AesImmOpTest__KeygenAssistByte5 { private struct TestStruct { @@ -104,13 +134,27 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(ImmUnaryOpTest__KeygenAssistByte5 testClass) + public void RunStructFldScenario(AesImmOpTest__KeygenAssistByte5 testClass) { var result = Aes.KeygenAssist(_fld, 5); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesImmOpTest__KeygenAssistByte5 testClass) + { + fixed (Vector128<Byte>* pFld = &_fld) + { + var result = Aes.KeygenAssist( + Aes.LoadVector128((Byte*)(pFld)), + 5 + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = 16; @@ -126,13 +170,13 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable; - static ImmUnaryOpTest__KeygenAssistByte5() + static AesImmOpTest__KeygenAssistByte5() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>()); } - public ImmUnaryOpTest__KeygenAssistByte5() + public AesImmOpTest__KeygenAssistByte5() { Succeeded = true; @@ -240,6 +284,22 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed (Vector128<Byte>* pClsVar = &_clsVar) + { + var result = Aes.KeygenAssist( + Aes.LoadVector128((Byte*)(pClsVar)), + 5 + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -277,13 +337,31 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new ImmUnaryOpTest__KeygenAssistByte5(); + var test = new AesImmOpTest__KeygenAssistByte5(); var result = Aes.KeygenAssist(test._fld, 5); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesImmOpTest__KeygenAssistByte5(); + + fixed (Vector128<Byte>* pFld = &test._fld) + { + var result = Aes.KeygenAssist( + Aes.LoadVector128((Byte*)(pFld)), + 5 + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -294,6 +372,22 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed (Vector128<Byte>* pFld = &_fld) + { + var result = Aes.KeygenAssist( + Aes.LoadVector128((Byte*)(pFld)), + 5 + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -305,6 +399,20 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = Aes.KeygenAssist( + Aes.LoadVector128((Byte*)(&test._fld)), + 5 + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -313,6 +421,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesBinOpTest.template b/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesBinOpTest.template index 015fca9fef..c319e1440c 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesBinOpTest.template +++ b/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesBinOpTest.template @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void {Method}{RetBaseType}() { - var test = new SimpleBinaryOpTest__{Method}{RetBaseType}(); + var test = new AesBinaryOpTest__{Method}{RetBaseType}(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if ({LoadIsa}.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleBinaryOpTest__{Method}{RetBaseType} + public sealed unsafe class AesBinaryOpTest__{Method}{RetBaseType} { private struct TestStruct { @@ -107,13 +137,28 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(SimpleBinaryOpTest__{Method}{RetBaseType} testClass) + public void RunStructFldScenario(AesBinaryOpTest__{Method}{RetBaseType} testClass) { var result = {Isa}.{Method}(_fld1, _fld2); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesBinaryOpTest__{Method}{RetBaseType} testClass) + { + fixed ({Op1VectorType}<{Op1BaseType}>* pFld1 = &_fld1) + fixed ({Op2VectorType}<{Op2BaseType}>* pFld2 = &_fld2) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld1)), + {LoadIsa}.Load{Op2VectorType}(({Op2BaseType}*)(pFld2)) + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = {LargestVectorSize}; @@ -133,7 +178,7 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleBinaryOpTest__DataTable<{RetBaseType}, {Op1BaseType}, {Op2BaseType}> _dataTable; - static SimpleBinaryOpTest__{Method}{RetBaseType}() + static AesBinaryOpTest__{Method}{RetBaseType}() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref _clsVar1), ref Unsafe.As<{Op1BaseType}, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); @@ -141,7 +186,7 @@ namespace JIT.HardwareIntrinsics.X86 Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op2VectorType}<{Op2BaseType}>, byte>(ref _clsVar2), ref Unsafe.As<{Op2BaseType}, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<{Op2VectorType}<{Op2BaseType}>>()); } - public SimpleBinaryOpTest__{Method}{RetBaseType}() + public AesBinaryOpTest__{Method}{RetBaseType}() { Succeeded = true; @@ -250,6 +295,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed ({Op1VectorType}<{Op1BaseType}>* pClsVar1 = &_clsVar1) + fixed ({Op2VectorType}<{Op2BaseType}>* pClsVar2 = &_clsVar2) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pClsVar1)), + {LoadIsa}.Load{Op2VectorType}(({Op2BaseType}*)(pClsVar2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -290,13 +352,32 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new SimpleBinaryOpTest__{Method}{RetBaseType}(); + var test = new AesBinaryOpTest__{Method}{RetBaseType}(); var result = {Isa}.{Method}(test._fld1, test._fld2); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesBinaryOpTest__{Method}{RetBaseType}(); + + fixed ({Op1VectorType}<{Op1BaseType}>* pFld1 = &test._fld1) + fixed ({Op2VectorType}<{Op2BaseType}>* pFld2 = &test._fld2) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld1)), + {LoadIsa}.Load{Op2VectorType}(({Op2BaseType}*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -307,6 +388,23 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed ({Op1VectorType}<{Op1BaseType}>* pFld1 = &_fld1) + fixed ({Op2VectorType}<{Op2BaseType}>* pFld2 = &_fld2) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld1)), + {LoadIsa}.Load{Op2VectorType}(({Op2BaseType}*)(pFld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -318,6 +416,20 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(&test._fld1)), + {LoadIsa}.Load{Op2VectorType}(({Op2BaseType}*)(&test._fld2)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -326,6 +438,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesImmOpTest.template b/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesImmOpTest.template index 7db814e639..017d00d91f 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesImmOpTest.template +++ b/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesImmOpTest.template @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void {Method}{RetBaseType}{Imm}() { - var test = new ImmUnaryOpTest__{Method}{RetBaseType}{Imm}(); + var test = new AesImmOpTest__{Method}{RetBaseType}{Imm}(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if ({LoadIsa}.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class ImmUnaryOpTest__{Method}{RetBaseType}{Imm} + public sealed unsafe class AesImmOpTest__{Method}{RetBaseType}{Imm} { private struct TestStruct { @@ -104,13 +134,27 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(ImmUnaryOpTest__{Method}{RetBaseType}{Imm} testClass) + public void RunStructFldScenario(AesImmOpTest__{Method}{RetBaseType}{Imm} testClass) { var result = {Isa}.{Method}(_fld, {Imm}); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesImmOpTest__{Method}{RetBaseType}{Imm} testClass) + { + fixed ({Op1VectorType}<{Op1BaseType}>* pFld = &_fld) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld)), + {Imm} + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = {LargestVectorSize}; @@ -126,13 +170,13 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleUnaryOpTest__DataTable<{RetBaseType}, {Op1BaseType}> _dataTable; - static ImmUnaryOpTest__{Method}{RetBaseType}{Imm}() + static AesImmOpTest__{Method}{RetBaseType}{Imm}() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref _clsVar), ref Unsafe.As<{Op1BaseType}, byte>(ref _data[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); } - public ImmUnaryOpTest__{Method}{RetBaseType}{Imm}() + public AesImmOpTest__{Method}{RetBaseType}{Imm}() { Succeeded = true; @@ -240,6 +284,22 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed ({Op1VectorType}<{Op1BaseType}>* pClsVar = &_clsVar) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pClsVar)), + {Imm} + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -277,13 +337,31 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new ImmUnaryOpTest__{Method}{RetBaseType}{Imm}(); + var test = new AesImmOpTest__{Method}{RetBaseType}{Imm}(); var result = {Isa}.{Method}(test._fld, {Imm}); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesImmOpTest__{Method}{RetBaseType}{Imm}(); + + fixed ({Op1VectorType}<{Op1BaseType}>* pFld = &test._fld) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld)), + {Imm} + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -294,6 +372,22 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed ({Op1VectorType}<{Op1BaseType}>* pFld = &_fld) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld)), + {Imm} + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -305,6 +399,20 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(&test._fld)), + {Imm} + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -313,6 +421,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesUnOpTest.template b/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesUnOpTest.template index 21cb032cb5..f4483817b2 100644 --- a/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesUnOpTest.template +++ b/tests/src/JIT/HardwareIntrinsics/X86/Shared/AesUnOpTest.template @@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86 { private static void {Method}{RetBaseType}() { - var test = new SimpleUnaryOpTest__{Method}{RetBaseType}(); + var test = new AesUnaryOpTest__{Method}{RetBaseType}(); if (test.IsSupported) { @@ -52,6 +52,12 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing a static member works test.RunClsVarScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing a static member works, using pinning and Load + test.RunClsVarScenario_Load(); + } + // Validates passing a local works, using Unsafe.Read test.RunLclVarScenario_UnsafeRead(); @@ -67,14 +73,38 @@ namespace JIT.HardwareIntrinsics.X86 // Validates passing the field of a local class works test.RunClassLclFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing the field of a local class works, using pinning and Load + test.RunClassLclFldScenario_Load(); + } + // Validates passing an instance member of a class works test.RunClassFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing an instance member of a class works, using pinning and Load + test.RunClassFldScenario_Load(); + } + // Validates passing the field of a local struct works test.RunStructLclFldScenario(); + if ({LoadIsa}.IsSupported) + { + // Validates passing the field of a local struct works, using pinning and Load + test.RunStructLclFldScenario_Load(); + } + // Validates passing an instance member of a struct works test.RunStructFldScenario(); + + if ({LoadIsa}.IsSupported) + { + // Validates passing an instance member of a struct works, using pinning and Load + test.RunStructFldScenario_Load(); + } } else { @@ -89,7 +119,7 @@ namespace JIT.HardwareIntrinsics.X86 } } - public sealed unsafe class SimpleUnaryOpTest__{Method}{RetBaseType} + public sealed unsafe class AesUnaryOpTest__{Method}{RetBaseType} { private struct TestStruct { @@ -104,13 +134,26 @@ namespace JIT.HardwareIntrinsics.X86 return testStruct; } - public void RunStructFldScenario(SimpleUnaryOpTest__{Method}{RetBaseType} testClass) + public void RunStructFldScenario(AesUnaryOpTest__{Method}{RetBaseType} testClass) { var result = {Isa}.{Method}(_fld); Unsafe.Write(testClass._dataTable.outArrayPtr, result); testClass.ValidateResult(testClass._dataTable.outArrayPtr); } + + public void RunStructFldScenario_Load(AesUnaryOpTest__{Method}{RetBaseType} testClass) + { + fixed ({Op1VectorType}<{Op1BaseType}>* pFld = &_fld) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld)) + ); + + Unsafe.Write(testClass._dataTable.outArrayPtr, result); + testClass.ValidateResult(testClass._dataTable.outArrayPtr); + } + } } private static readonly int LargestVectorSize = {LargestVectorSize}; @@ -126,13 +169,13 @@ namespace JIT.HardwareIntrinsics.X86 private SimpleUnaryOpTest__DataTable<{RetBaseType}, {Op1BaseType}> _dataTable; - static SimpleUnaryOpTest__{Method}{RetBaseType}() + static AesUnaryOpTest__{Method}{RetBaseType}() { Unsafe.CopyBlockUnaligned(ref Unsafe.As<{Op1VectorType}<{Op1BaseType}>, byte>(ref _clsVar), ref Unsafe.As<{Op1BaseType}, byte>(ref _data[0]), (uint)Unsafe.SizeOf<{Op1VectorType}<{Op1BaseType}>>()); } - public SimpleUnaryOpTest__{Method}{RetBaseType}() + public AesUnaryOpTest__{Method}{RetBaseType}() { Succeeded = true; @@ -233,6 +276,21 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClsVarScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClsVarScenario_Load)); + + fixed ({Op1VectorType}<{Op1BaseType}>* pClsVar = &_clsVar) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pClsVar)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunLclVarScenario_UnsafeRead() { TestLibrary.TestFramework.BeginScenario(nameof(RunLclVarScenario_UnsafeRead)); @@ -270,13 +328,30 @@ namespace JIT.HardwareIntrinsics.X86 { TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario)); - var test = new SimpleUnaryOpTest__{Method}{RetBaseType}(); + var test = new AesUnaryOpTest__{Method}{RetBaseType}(); var result = {Isa}.{Method}(test._fld); Unsafe.Write(_dataTable.outArrayPtr, result); ValidateResult(_dataTable.outArrayPtr); } + public void RunClassLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassLclFldScenario_Load)); + + var test = new AesUnaryOpTest__{Method}{RetBaseType}(); + + fixed ({Op1VectorType}<{Op1BaseType}>* pFld = &test._fld) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunClassFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario)); @@ -287,6 +362,21 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunClassFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunClassFldScenario_Load)); + + fixed ({Op1VectorType}<{Op1BaseType}>* pFld = &_fld) + { + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(pFld)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + } + public void RunStructLclFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario)); @@ -298,6 +388,19 @@ namespace JIT.HardwareIntrinsics.X86 ValidateResult(_dataTable.outArrayPtr); } + public void RunStructLclFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructLclFldScenario_Load)); + + var test = TestStruct.Create(); + var result = {Isa}.{Method}( + {LoadIsa}.Load{Op1VectorType}(({Op1BaseType}*)(&test._fld)) + ); + + Unsafe.Write(_dataTable.outArrayPtr, result); + ValidateResult(_dataTable.outArrayPtr); + } + public void RunStructFldScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario)); @@ -306,6 +409,14 @@ namespace JIT.HardwareIntrinsics.X86 test.RunStructFldScenario(this); } + public void RunStructFldScenario_Load() + { + TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario_Load)); + + var test = TestStruct.Create(); + test.RunStructFldScenario_Load(this); + } + public void RunUnsupportedScenario() { TestLibrary.TestFramework.BeginScenario(nameof(RunUnsupportedScenario)); |