summaryrefslogtreecommitdiff
path: root/tests/src/JIT
diff options
context:
space:
mode:
authorTanner Gooding <tagoo@outlook.com>2018-07-09 18:42:01 -0700
committerTanner Gooding <tagoo@outlook.com>2018-07-10 08:51:20 -0700
commit6de41e2f4ffd8971d767e2aadb195f8c51286479 (patch)
treea30ee4805394b8c52c1a3c00ddd55d29ae55f01a /tests/src/JIT
parent2d7baf26bcb149610f261b7eeee5d59c19cfc1be (diff)
downloadcoreclr-6de41e2f4ffd8971d767e2aadb195f8c51286479.tar.gz
coreclr-6de41e2f4ffd8971d767e2aadb195f8c51286479.tar.bz2
coreclr-6de41e2f4ffd8971d767e2aadb195f8c51286479.zip
Regenerating the x86 HWIntrinsic tests to cover struct field scenarios
Diffstat (limited to 'tests/src/JIT')
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateOddIndexed.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Byte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Double.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.SByte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Single.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.20.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.52.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.22.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.6.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.19.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.3.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.11.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.27.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.22.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.6.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.19.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.3.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Byte.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Double.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int16.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int32.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int64.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.SByte.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Single.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt16.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt32.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt64.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Byte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Double.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.SByte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Single.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.20.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.52.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.11.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.27.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.22.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.6.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.19.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.3.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.20.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.52.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.11.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.27.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.22.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.6.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.19.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.3.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Byte.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Double.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int16.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int32.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int64.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.SByte.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Single.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt16.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt32.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt64.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.2.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.2.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Double.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Single.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.Byte.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.SByte.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Byte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Double.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.SByte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Single.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Byte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Double.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.SByte.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Single.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.Store.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.Load.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int32.2.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int64.2.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt32.2.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt64.2.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.SByte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.SByte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt32.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt64.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt32.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt64.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt32.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt64.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt32.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt64.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt32.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt64.cs52
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt32.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt64.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt32.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt64.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Add.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/AddScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/And.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/AndNot.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqual.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualOrderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualUnorderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThan.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqual.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualOrderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualUnorderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanUnorderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThan.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqual.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualOrderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualUnorderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanUnorderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqual.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualOrderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualUnorderedScalar.Boolean.cs56
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThan.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqual.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqualScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThan.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqual.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqualScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrdered.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrderedScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnordered.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnorderedScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Divide.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/DivideScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Max.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/MaxScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Min.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/MinScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Multiply.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/MultiplyScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Or.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Subtract.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/SubtractScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse/Xor.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThanOrEqual.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThanOrEqual.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotEqual.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThan.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThanOrEqual.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThan.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThanOrEqual.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareOrdered.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareUnordered.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Divide.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/DivideScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/MaxScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/MinScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Multiply.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/MultiplyScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Byte.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Double.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int16.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int32.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int64.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.SByte.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt16.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt32.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt64.cs108
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.SByte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.16.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.32.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.64.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.SByte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt16.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Byte.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Double.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.SByte.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Single.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.UInt64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.0.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.1.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.128.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.129.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.16.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.192.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.2.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.32.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.4.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.48.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.64.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.8.cs70
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.1.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.129.cs67
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/MultiplyLow.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/PackUnsignedSaturate.UInt16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Double.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Single.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Double.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Single.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Byte.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int16.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int32.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int64.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.SByte.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt16.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt32.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt64.cs63
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Byte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.SByte.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt16.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt32.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt64.cs62
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Sse42/CompareGreaterThan.Int64.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.Byte.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt16.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt32.cs57
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAddSaturate.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtractSaturate.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyAddAdjacent.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyHighRoundScale.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.Byte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.SByte.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int16.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int32.cs60
-rw-r--r--tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.SByte.cs60
741 files changed, 40721 insertions, 6315 deletions
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Double.cs
index ab282494fd..68f76c620b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddDouble testClass)
+ {
+ var result = Avx.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddDouble();
var result = Avx.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Single.cs
index ebb2751a02..e77853cd8d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Add.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSingle testClass)
+ {
+ var result = Avx.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSingle();
var result = Avx.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Double.cs
index e1ae4afdb0..c52661d426 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSubtractDouble testClass)
+ {
+ var result = Avx.AddSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSubtractDouble();
var result = Avx.AddSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.AddSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.AddSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Single.cs
index 15822235ab..e66ce5b532 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AddSubtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSubtractSingle testClass)
+ {
+ var result = Avx.AddSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSubtractSingle();
var result = Avx.AddSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.AddSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.AddSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Double.cs
index b71ad1ae2f..83bbd9a38f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndDouble testClass)
+ {
+ var result = Avx.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndDouble();
var result = Avx.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Single.cs
index b6e5e62a7f..84a9ff179f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/And.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndSingle testClass)
+ {
+ var result = Avx.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndSingle();
var result = Avx.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Double.cs
index aa62937bcd..26c5303a06 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotDouble testClass)
+ {
+ var result = Avx.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotDouble();
var result = Avx.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Single.cs
index 41aa383a45..be9629b307 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/AndNot.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotSingle testClass)
+ {
+ var result = Avx.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotSingle();
var result = Avx.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Double.cs
index 7a576dfe2a..9d532800ff 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+ public Vector256<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(((i % 2) == 0) ? -0.0 : 1.0); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableDouble testClass)
+ {
+ var result = Avx.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableDouble();
var result = Avx.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Single.cs
index 6af68ac357..e6b3c9eb54 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/BlendVariable.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+ public Vector256<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(((i % 2) == 0) ? -0.0 : 1.0); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableSingle testClass)
+ {
+ var result = Avx.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableSingle();
var result = Avx.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Double.cs
index f34542f437..c1d55fc521 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__CeilingDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__CeilingDouble testClass)
+ {
+ var result = Avx.Ceiling(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__CeilingDouble();
var result = Avx.Ceiling(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Ceiling(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Ceiling(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Single.cs
index d6a27d52c6..636a87a6d3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Ceiling.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__CeilingSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__CeilingSingle testClass)
+ {
+ var result = Avx.Ceiling(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__CeilingSingle();
var result = Avx.Ceiling(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Ceiling(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Ceiling(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Double.cs
index 52588d9e2c..5c8bca234d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__DivideDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__DivideDouble testClass)
+ {
+ var result = Avx.Divide(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__DivideDouble();
var result = Avx.Divide(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Divide(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Divide(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Single.cs
index aa28dc18a4..db2b180674 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Divide.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__DivideSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__DivideSingle testClass)
+ {
+ var result = Avx.Divide(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__DivideSingle();
var result = Avx.Divide(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Divide(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Divide(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Double.cs
index ae42b1a0af..ec8858f175 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__DuplicateEvenIndexedDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__DuplicateEvenIndexedDouble testClass)
+ {
+ var result = Avx.DuplicateEvenIndexed(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__DuplicateEvenIndexedDouble();
var result = Avx.DuplicateEvenIndexed(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.DuplicateEvenIndexed(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.DuplicateEvenIndexed(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Single.cs
index 45728ded03..daa8de79c8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateEvenIndexed.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__DuplicateEvenIndexedSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__DuplicateEvenIndexedSingle testClass)
+ {
+ var result = Avx.DuplicateEvenIndexed(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__DuplicateEvenIndexedSingle();
var result = Avx.DuplicateEvenIndexed(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.DuplicateEvenIndexed(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.DuplicateEvenIndexed(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateOddIndexed.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateOddIndexed.Single.cs
index 94180518c9..d42392a5a5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateOddIndexed.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/DuplicateOddIndexed.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__DuplicateOddIndexedSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__DuplicateOddIndexedSingle testClass)
+ {
+ var result = Avx.DuplicateOddIndexed(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__DuplicateOddIndexedSingle();
var result = Avx.DuplicateOddIndexed(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.DuplicateOddIndexed(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.DuplicateOddIndexed(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Byte.cs
index a84bd435ca..02a254da59 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Byte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256Byte()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Byte();
+ var test = new GenericUnaryOpTest__ExtendToVector256Byte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256Byte
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256Byte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256Byte testClass)
+ {
+ var result = Avx.ExtendToVector256<Byte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256Byte()
+ static GenericUnaryOpTest__ExtendToVector256Byte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__ExtendToVector256Byte()
+ public GenericUnaryOpTest__ExtendToVector256Byte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Byte();
+ var test = new GenericUnaryOpTest__ExtendToVector256Byte();
var result = Avx.ExtendToVector256<Byte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<Byte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Double.cs
index 75f635d53f..48eeb6629b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Double.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256Double()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Double();
+ var test = new GenericUnaryOpTest__ExtendToVector256Double();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256Double
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256Double
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256Double testClass)
+ {
+ var result = Avx.ExtendToVector256<Double>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Double, Double> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256Double()
+ static GenericUnaryOpTest__ExtendToVector256Double()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
}
- public SimpleUnaryOpTest__ExtendToVector256Double()
+ public GenericUnaryOpTest__ExtendToVector256Double()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Double();
+ var test = new GenericUnaryOpTest__ExtendToVector256Double();
var result = Avx.ExtendToVector256<Double>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<Double>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int16.cs
index 99d8a75804..74d514bed8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256Int16()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Int16();
+ var test = new GenericUnaryOpTest__ExtendToVector256Int16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256Int16
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256Int16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256Int16 testClass)
+ {
+ var result = Avx.ExtendToVector256<Int16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256Int16()
+ static GenericUnaryOpTest__ExtendToVector256Int16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ExtendToVector256Int16()
+ public GenericUnaryOpTest__ExtendToVector256Int16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Int16();
+ var test = new GenericUnaryOpTest__ExtendToVector256Int16();
var result = Avx.ExtendToVector256<Int16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<Int16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int32.cs
index 97da6a6fb0..09e87ca43b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256Int32()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Int32();
+ var test = new GenericUnaryOpTest__ExtendToVector256Int32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256Int32
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256Int32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256Int32 testClass)
+ {
+ var result = Avx.ExtendToVector256<Int32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256Int32()
+ static GenericUnaryOpTest__ExtendToVector256Int32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ExtendToVector256Int32()
+ public GenericUnaryOpTest__ExtendToVector256Int32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Int32();
+ var test = new GenericUnaryOpTest__ExtendToVector256Int32();
var result = Avx.ExtendToVector256<Int32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<Int32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int64.cs
index dd181a0db9..6389c973a3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Int64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256Int64()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Int64();
+ var test = new GenericUnaryOpTest__ExtendToVector256Int64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256Int64
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256Int64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256Int64 testClass)
+ {
+ var result = Avx.ExtendToVector256<Int64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256Int64()
+ static GenericUnaryOpTest__ExtendToVector256Int64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ExtendToVector256Int64()
+ public GenericUnaryOpTest__ExtendToVector256Int64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Int64();
+ var test = new GenericUnaryOpTest__ExtendToVector256Int64();
var result = Avx.ExtendToVector256<Int64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<Int64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.SByte.cs
index a8a83d7b28..9722dbdb3f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.SByte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256SByte()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256SByte();
+ var test = new GenericUnaryOpTest__ExtendToVector256SByte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256SByte
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256SByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256SByte testClass)
+ {
+ var result = Avx.ExtendToVector256<SByte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256SByte()
+ static GenericUnaryOpTest__ExtendToVector256SByte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleUnaryOpTest__ExtendToVector256SByte()
+ public GenericUnaryOpTest__ExtendToVector256SByte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256SByte();
+ var test = new GenericUnaryOpTest__ExtendToVector256SByte();
var result = Avx.ExtendToVector256<SByte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<SByte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Single.cs
index 44be3a25a3..c5a9627352 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.Single.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256Single()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Single();
+ var test = new GenericUnaryOpTest__ExtendToVector256Single();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256Single
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256Single
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256Single testClass)
+ {
+ var result = Avx.ExtendToVector256<Single>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256Single()
+ static GenericUnaryOpTest__ExtendToVector256Single()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleUnaryOpTest__ExtendToVector256Single()
+ public GenericUnaryOpTest__ExtendToVector256Single()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256Single();
+ var test = new GenericUnaryOpTest__ExtendToVector256Single();
var result = Avx.ExtendToVector256<Single>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<Single>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt16.cs
index f2f1d3747d..65e9386a47 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256UInt16()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256UInt16();
+ var test = new GenericUnaryOpTest__ExtendToVector256UInt16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256UInt16
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256UInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256UInt16 testClass)
+ {
+ var result = Avx.ExtendToVector256<UInt16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256UInt16()
+ static GenericUnaryOpTest__ExtendToVector256UInt16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ExtendToVector256UInt16()
+ public GenericUnaryOpTest__ExtendToVector256UInt16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256UInt16();
+ var test = new GenericUnaryOpTest__ExtendToVector256UInt16();
var result = Avx.ExtendToVector256<UInt16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<UInt16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt32.cs
index 6a9d7908a9..b30299a925 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256UInt32()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256UInt32();
+ var test = new GenericUnaryOpTest__ExtendToVector256UInt32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256UInt32
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256UInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256UInt32 testClass)
+ {
+ var result = Avx.ExtendToVector256<UInt32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256UInt32()
+ static GenericUnaryOpTest__ExtendToVector256UInt32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ExtendToVector256UInt32()
+ public GenericUnaryOpTest__ExtendToVector256UInt32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256UInt32();
+ var test = new GenericUnaryOpTest__ExtendToVector256UInt32();
var result = Avx.ExtendToVector256<UInt32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<UInt32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt64.cs
index 3e504b119e..fdeefd7ee3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtendToVector256.UInt64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtendToVector256UInt64()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256UInt64();
+ var test = new GenericUnaryOpTest__ExtendToVector256UInt64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtendToVector256UInt64
+ public sealed unsafe class GenericUnaryOpTest__ExtendToVector256UInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__ExtendToVector256UInt64 testClass)
+ {
+ var result = Avx.ExtendToVector256<UInt64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtendToVector256UInt64()
+ static GenericUnaryOpTest__ExtendToVector256UInt64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ExtendToVector256UInt64()
+ public GenericUnaryOpTest__ExtendToVector256UInt64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtendToVector256UInt64();
+ var test = new GenericUnaryOpTest__ExtendToVector256UInt64();
var result = Avx.ExtendToVector256<UInt64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.ExtendToVector256<UInt64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.ExtendToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.1.cs
index ecaae0d0da..1afb0403f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractByte1()
{
- var test = new SimpleUnaryOpTest__ExtractByte1();
+ var test = new ExtractScalarTest__ExtractByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractByte1
+ public sealed unsafe class ExtractScalarTest__ExtractByte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractByte1 testClass)
+ {
+ var result = Avx.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractByte1()
+ static ExtractScalarTest__ExtractByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ExtractByte1()
+ public ExtractScalarTest__ExtractByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractByte1();
+ var test = new ExtractScalarTest__ExtractByte1();
var result = Avx.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.20.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.20.cs
index cd8805e190..247845d342 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.20.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.20.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractByte20()
{
- var test = new SimpleUnaryOpTest__ExtractByte20();
+ var test = new ExtractScalarTest__ExtractByte20();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractByte20
+ public sealed unsafe class ExtractScalarTest__ExtractByte20
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractByte20 testClass)
+ {
+ var result = Avx.Extract(_fld, 20);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractByte20()
+ static ExtractScalarTest__ExtractByte20()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ExtractByte20()
+ public ExtractScalarTest__ExtractByte20()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractByte20();
+ var test = new ExtractScalarTest__ExtractByte20();
var result = Avx.Extract(test._fld, 20);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 20);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 20);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.52.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.52.cs
index 203f5fdf3d..d67f0b1b14 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.52.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Byte.52.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractByte52()
{
- var test = new SimpleUnaryOpTest__ExtractByte52();
+ var test = new ExtractScalarTest__ExtractByte52();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractByte52
+ public sealed unsafe class ExtractScalarTest__ExtractByte52
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractByte52 testClass)
+ {
+ var result = Avx.Extract(_fld, 52);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractByte52()
+ static ExtractScalarTest__ExtractByte52()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ExtractByte52()
+ public ExtractScalarTest__ExtractByte52()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractByte52();
+ var test = new ExtractScalarTest__ExtractByte52();
var result = Avx.Extract(test._fld, 52);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 52);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 52);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.1.cs
index ea140daf79..61a19f77d7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt321()
{
- var test = new SimpleUnaryOpTest__ExtractInt321();
+ var test = new ExtractScalarTest__ExtractInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt321
+ public sealed unsafe class ExtractScalarTest__ExtractInt321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt321 testClass)
+ {
+ var result = Avx.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractInt321()
+ static ExtractScalarTest__ExtractInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ExtractInt321()
+ public ExtractScalarTest__ExtractInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt321();
+ var test = new ExtractScalarTest__ExtractInt321();
var result = Avx.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.22.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.22.cs
index 07062064b1..499ca1c12e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.22.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.22.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt3222()
{
- var test = new SimpleUnaryOpTest__ExtractInt3222();
+ var test = new ExtractScalarTest__ExtractInt3222();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt3222
+ public sealed unsafe class ExtractScalarTest__ExtractInt3222
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt3222 testClass)
+ {
+ var result = Avx.Extract(_fld, 22);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractInt3222()
+ static ExtractScalarTest__ExtractInt3222()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ExtractInt3222()
+ public ExtractScalarTest__ExtractInt3222()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt3222();
+ var test = new ExtractScalarTest__ExtractInt3222();
var result = Avx.Extract(test._fld, 22);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 22);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 22);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.6.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.6.cs
index be6f8a84a0..bcfdbbb218 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.6.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int32.6.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt326()
{
- var test = new SimpleUnaryOpTest__ExtractInt326();
+ var test = new ExtractScalarTest__ExtractInt326();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt326
+ public sealed unsafe class ExtractScalarTest__ExtractInt326
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt326 testClass)
+ {
+ var result = Avx.Extract(_fld, 6);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractInt326()
+ static ExtractScalarTest__ExtractInt326()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ExtractInt326()
+ public ExtractScalarTest__ExtractInt326()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt326();
+ var test = new ExtractScalarTest__ExtractInt326();
var result = Avx.Extract(test._fld, 6);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 6);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 6);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.1.cs
index 8f7518a571..969241461d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt641()
{
- var test = new SimpleUnaryOpTest__ExtractInt641();
+ var test = new ExtractScalarTest__ExtractInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt641
+ public sealed unsafe class ExtractScalarTest__ExtractInt641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt641 testClass)
+ {
+ var result = Avx.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractInt641()
+ static ExtractScalarTest__ExtractInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ExtractInt641()
+ public ExtractScalarTest__ExtractInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt641();
+ var test = new ExtractScalarTest__ExtractInt641();
var result = Avx.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.19.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.19.cs
index 5566becfad..50484863e6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.19.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.19.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt6419()
{
- var test = new SimpleUnaryOpTest__ExtractInt6419();
+ var test = new ExtractScalarTest__ExtractInt6419();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt6419
+ public sealed unsafe class ExtractScalarTest__ExtractInt6419
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt6419 testClass)
+ {
+ var result = Avx.Extract(_fld, 19);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractInt6419()
+ static ExtractScalarTest__ExtractInt6419()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ExtractInt6419()
+ public ExtractScalarTest__ExtractInt6419()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt6419();
+ var test = new ExtractScalarTest__ExtractInt6419();
var result = Avx.Extract(test._fld, 19);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 19);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 19);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.3.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.3.cs
index e0cdecebcf..e7d8270388 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.3.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.Int64.3.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt643()
{
- var test = new SimpleUnaryOpTest__ExtractInt643();
+ var test = new ExtractScalarTest__ExtractInt643();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt643
+ public sealed unsafe class ExtractScalarTest__ExtractInt643
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt643 testClass)
+ {
+ var result = Avx.Extract(_fld, 3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractInt643()
+ static ExtractScalarTest__ExtractInt643()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ExtractInt643()
+ public ExtractScalarTest__ExtractInt643()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt643();
+ var test = new ExtractScalarTest__ExtractInt643();
var result = Avx.Extract(test._fld, 3);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 3);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.1.cs
index aa2b92f03f..f1d71842cc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt161()
{
- var test = new SimpleUnaryOpTest__ExtractUInt161();
+ var test = new ExtractScalarTest__ExtractUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt161
+ public sealed unsafe class ExtractScalarTest__ExtractUInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt161 testClass)
+ {
+ var result = Avx.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt161()
+ static ExtractScalarTest__ExtractUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractUInt161()
+ public ExtractScalarTest__ExtractUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt161();
+ var test = new ExtractScalarTest__ExtractUInt161();
var result = Avx.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.11.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.11.cs
index 8b09d37dba..ab75007663 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.11.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.11.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt1611()
{
- var test = new SimpleUnaryOpTest__ExtractUInt1611();
+ var test = new ExtractScalarTest__ExtractUInt1611();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt1611
+ public sealed unsafe class ExtractScalarTest__ExtractUInt1611
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt1611 testClass)
+ {
+ var result = Avx.Extract(_fld, 11);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt1611()
+ static ExtractScalarTest__ExtractUInt1611()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractUInt1611()
+ public ExtractScalarTest__ExtractUInt1611()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt1611();
+ var test = new ExtractScalarTest__ExtractUInt1611();
var result = Avx.Extract(test._fld, 11);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 11);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 11);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.27.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.27.cs
index af88227df8..1e88bbdfd8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.27.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt16.27.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt1627()
{
- var test = new SimpleUnaryOpTest__ExtractUInt1627();
+ var test = new ExtractScalarTest__ExtractUInt1627();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt1627
+ public sealed unsafe class ExtractScalarTest__ExtractUInt1627
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt1627 testClass)
+ {
+ var result = Avx.Extract(_fld, 27);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt1627()
+ static ExtractScalarTest__ExtractUInt1627()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractUInt1627()
+ public ExtractScalarTest__ExtractUInt1627()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt1627();
+ var test = new ExtractScalarTest__ExtractUInt1627();
var result = Avx.Extract(test._fld, 27);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 27);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 27);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.1.cs
index 5d7a36066d..c96bcefa1f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt321()
{
- var test = new SimpleUnaryOpTest__ExtractUInt321();
+ var test = new ExtractScalarTest__ExtractUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt321
+ public sealed unsafe class ExtractScalarTest__ExtractUInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt321 testClass)
+ {
+ var result = Avx.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt321()
+ static ExtractScalarTest__ExtractUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractUInt321()
+ public ExtractScalarTest__ExtractUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt321();
+ var test = new ExtractScalarTest__ExtractUInt321();
var result = Avx.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.22.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.22.cs
index 5199c957a2..0ac84ea9b8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.22.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.22.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt3222()
{
- var test = new SimpleUnaryOpTest__ExtractUInt3222();
+ var test = new ExtractScalarTest__ExtractUInt3222();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt3222
+ public sealed unsafe class ExtractScalarTest__ExtractUInt3222
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt3222 testClass)
+ {
+ var result = Avx.Extract(_fld, 22);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt3222()
+ static ExtractScalarTest__ExtractUInt3222()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractUInt3222()
+ public ExtractScalarTest__ExtractUInt3222()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt3222();
+ var test = new ExtractScalarTest__ExtractUInt3222();
var result = Avx.Extract(test._fld, 22);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 22);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 22);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.6.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.6.cs
index 0a9cf397ed..d5f7ebd95e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.6.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt32.6.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt326()
{
- var test = new SimpleUnaryOpTest__ExtractUInt326();
+ var test = new ExtractScalarTest__ExtractUInt326();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt326
+ public sealed unsafe class ExtractScalarTest__ExtractUInt326
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt326 testClass)
+ {
+ var result = Avx.Extract(_fld, 6);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt326()
+ static ExtractScalarTest__ExtractUInt326()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractUInt326()
+ public ExtractScalarTest__ExtractUInt326()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt326();
+ var test = new ExtractScalarTest__ExtractUInt326();
var result = Avx.Extract(test._fld, 6);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 6);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 6);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.1.cs
index 8f360153d0..02a92b954c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt641()
{
- var test = new SimpleUnaryOpTest__ExtractUInt641();
+ var test = new ExtractScalarTest__ExtractUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt641
+ public sealed unsafe class ExtractScalarTest__ExtractUInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt641 testClass)
+ {
+ var result = Avx.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt641()
+ static ExtractScalarTest__ExtractUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractUInt641()
+ public ExtractScalarTest__ExtractUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt641();
+ var test = new ExtractScalarTest__ExtractUInt641();
var result = Avx.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.19.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.19.cs
index 817b73fe2d..52ce9a273d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.19.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.19.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt6419()
{
- var test = new SimpleUnaryOpTest__ExtractUInt6419();
+ var test = new ExtractScalarTest__ExtractUInt6419();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt6419
+ public sealed unsafe class ExtractScalarTest__ExtractUInt6419
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt6419 testClass)
+ {
+ var result = Avx.Extract(_fld, 19);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt6419()
+ static ExtractScalarTest__ExtractUInt6419()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractUInt6419()
+ public ExtractScalarTest__ExtractUInt6419()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt6419();
+ var test = new ExtractScalarTest__ExtractUInt6419();
var result = Avx.Extract(test._fld, 19);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 19);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 19);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.3.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.3.cs
index 21480f046c..52f92c4a6a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.3.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Extract.UInt64.3.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt643()
{
- var test = new SimpleUnaryOpTest__ExtractUInt643();
+ var test = new ExtractScalarTest__ExtractUInt643();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt643
+ public sealed unsafe class ExtractScalarTest__ExtractUInt643
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt643 testClass)
+ {
+ var result = Avx.Extract(_fld, 3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt643()
+ static ExtractScalarTest__ExtractUInt643()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractUInt643()
+ public ExtractScalarTest__ExtractUInt643()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt643();
+ var test = new ExtractScalarTest__ExtractUInt643();
var result = Avx.Extract(test._fld, 3);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Extract(_fld, 3);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Extract(test._fld, 3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Byte.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Byte.1.Store.cs
index 844edcc9d2..ccb6fedadc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Byte.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Byte.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Byte1Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Byte1Store();
+ var test = new ExtractStoreTest__ExtractVector128Byte1();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Byte1Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Byte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Byte1 testClass)
+ {
+ Avx.ExtractVector128((Byte*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Byte1Store()
+ static ExtractStoreTest__ExtractVector128Byte1()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ExtractVector128Byte1Store()
+ public ExtractStoreTest__ExtractVector128Byte1()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Byte>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((Byte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Byte*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Byte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Byte*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Byte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Byte1Store();
+ var test = new ExtractStoreTest__ExtractVector128Byte1();
Avx.ExtractVector128((Byte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((Byte*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((Byte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Double.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Double.1.Store.cs
index d55515d2a7..a57fb5e9c3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Double.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Double.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Double1Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Double1Store();
+ var test = new ExtractStoreTest__ExtractVector128Double1();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Double1Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Double1
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Double1 testClass)
+ {
+ Avx.ExtractVector128((Double*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Double, Double> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Double1Store()
+ static ExtractStoreTest__ExtractVector128Double1()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
}
- public SimpleUnaryOpTest__ExtractVector128Double1Store()
+ public ExtractStoreTest__ExtractVector128Double1()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Double>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((Double*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Double*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Double*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Double*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Double*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Double1Store();
+ var test = new ExtractStoreTest__ExtractVector128Double1();
Avx.ExtractVector128((Double*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((Double*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((Double*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int16.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int16.1.Store.cs
index 8b073bd270..8333f88f37 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int16.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int16.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int161Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int161Store();
+ var test = new ExtractStoreTest__ExtractVector128Int161();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int161Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Int161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Int161 testClass)
+ {
+ Avx.ExtractVector128((Int16*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int161Store()
+ static ExtractStoreTest__ExtractVector128Int161()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int161Store()
+ public ExtractStoreTest__ExtractVector128Int161()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Int16>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((Int16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Int16*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Int16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Int16*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Int16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int161Store();
+ var test = new ExtractStoreTest__ExtractVector128Int161();
Avx.ExtractVector128((Int16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((Int16*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((Int16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int32.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int32.1.Store.cs
index 7b55d154d6..3a168adad4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int32.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int32.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int321Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int321Store();
+ var test = new ExtractStoreTest__ExtractVector128Int321();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int321Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Int321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Int321 testClass)
+ {
+ Avx.ExtractVector128((Int32*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int321Store()
+ static ExtractStoreTest__ExtractVector128Int321()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int321Store()
+ public ExtractStoreTest__ExtractVector128Int321()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Int32>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((Int32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Int32*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Int32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Int32*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Int32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int321Store();
+ var test = new ExtractStoreTest__ExtractVector128Int321();
Avx.ExtractVector128((Int32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((Int32*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((Int32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int64.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int64.1.Store.cs
index c683405c3b..265775bec8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int64.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Int64.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int641Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int641Store();
+ var test = new ExtractStoreTest__ExtractVector128Int641();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int641Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Int641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Int641 testClass)
+ {
+ Avx.ExtractVector128((Int64*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int641Store()
+ static ExtractStoreTest__ExtractVector128Int641()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int641Store()
+ public ExtractStoreTest__ExtractVector128Int641()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Int64>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((Int64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Int64*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Int64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Int64*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Int64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int641Store();
+ var test = new ExtractStoreTest__ExtractVector128Int641();
Avx.ExtractVector128((Int64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((Int64*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((Int64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.SByte.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.SByte.1.Store.cs
index 25d4cfc623..a0675a6930 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.SByte.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.SByte.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128SByte1Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128SByte1Store();
+ var test = new ExtractStoreTest__ExtractVector128SByte1();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128SByte1Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128SByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128SByte1 testClass)
+ {
+ Avx.ExtractVector128((SByte*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128SByte1Store()
+ static ExtractStoreTest__ExtractVector128SByte1()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__ExtractVector128SByte1Store()
+ public ExtractStoreTest__ExtractVector128SByte1()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<SByte>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((SByte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((SByte*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((SByte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((SByte*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((SByte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128SByte1Store();
+ var test = new ExtractStoreTest__ExtractVector128SByte1();
Avx.ExtractVector128((SByte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((SByte*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((SByte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Single.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Single.1.Store.cs
index 03c29d2a0e..61cdad40eb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Single.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.Single.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Single1Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Single1Store();
+ var test = new ExtractStoreTest__ExtractVector128Single1();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Single1Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Single1
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Single1 testClass)
+ {
+ Avx.ExtractVector128((Single*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Single1Store()
+ static ExtractStoreTest__ExtractVector128Single1()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
}
- public SimpleUnaryOpTest__ExtractVector128Single1Store()
+ public ExtractStoreTest__ExtractVector128Single1()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Single>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((Single*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Single*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Single*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Single*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((Single*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Single1Store();
+ var test = new ExtractStoreTest__ExtractVector128Single1();
Avx.ExtractVector128((Single*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((Single*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((Single*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt16.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt16.1.Store.cs
index 2deda23f9a..3fe565dd5a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt16.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt16.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt161Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt161Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt161();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt161Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128UInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128UInt161 testClass)
+ {
+ Avx.ExtractVector128((UInt16*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt161Store()
+ static ExtractStoreTest__ExtractVector128UInt161()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt161Store()
+ public ExtractStoreTest__ExtractVector128UInt161()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<UInt16>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((UInt16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((UInt16*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((UInt16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((UInt16*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((UInt16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt161Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt161();
Avx.ExtractVector128((UInt16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((UInt16*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((UInt16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt32.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt32.1.Store.cs
index 53769a5194..4e0f64f093 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt32.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt32.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt321Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt321Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt321();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt321Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128UInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128UInt321 testClass)
+ {
+ Avx.ExtractVector128((UInt32*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt321Store()
+ static ExtractStoreTest__ExtractVector128UInt321()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt321Store()
+ public ExtractStoreTest__ExtractVector128UInt321()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<UInt32>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((UInt32*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((UInt32*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt321Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt321();
Avx.ExtractVector128((UInt32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((UInt32*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((UInt32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt64.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt64.1.Store.cs
index 949d618a03..67e47638a6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt64.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/ExtractVector128.UInt64.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt641Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt641Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt641();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt641Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128UInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128UInt641 testClass)
+ {
+ Avx.ExtractVector128((UInt64*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt641Store()
+ static ExtractStoreTest__ExtractVector128UInt641()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt641Store()
+ public ExtractStoreTest__ExtractVector128UInt641()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<UInt64>>(_dataTable.inArrayPtr);
Avx.ExtractVector128((UInt64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((UInt64*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((UInt64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((UInt64*)(_dataTable.inArrayPtr));
Avx.ExtractVector128((UInt64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt641Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt641();
Avx.ExtractVector128((UInt64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx.ExtractVector128((UInt64*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx.ExtractVector128((UInt64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Double.cs
index d616cf19d4..5ca7fd415d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__FloorDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__FloorDouble testClass)
+ {
+ var result = Avx.Floor(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__FloorDouble();
var result = Avx.Floor(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Floor(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Floor(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Single.cs
index f85a614951..eee4b031cc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Floor.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__FloorSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__FloorSingle testClass)
+ {
+ var result = Avx.Floor(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__FloorSingle();
var result = Avx.Floor(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Floor(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Floor(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Byte.cs
index b8bb560f14..d8b50873f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Byte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfByte()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfByte();
+ var test = new GenericUnaryOpTest__GetLowerHalfByte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfByte
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfByte testClass)
+ {
+ var result = Avx.GetLowerHalf<Byte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfByte()
+ static GenericUnaryOpTest__GetLowerHalfByte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__GetLowerHalfByte()
+ public GenericUnaryOpTest__GetLowerHalfByte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfByte();
+ var test = new GenericUnaryOpTest__GetLowerHalfByte();
var result = Avx.GetLowerHalf<Byte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<Byte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Double.cs
index 604d537e86..be4696d756 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Double.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfDouble()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfDouble();
+ var test = new GenericUnaryOpTest__GetLowerHalfDouble();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfDouble
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfDouble testClass)
+ {
+ var result = Avx.GetLowerHalf<Double>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Double, Double> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfDouble()
+ static GenericUnaryOpTest__GetLowerHalfDouble()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
}
- public SimpleUnaryOpTest__GetLowerHalfDouble()
+ public GenericUnaryOpTest__GetLowerHalfDouble()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfDouble();
+ var test = new GenericUnaryOpTest__GetLowerHalfDouble();
var result = Avx.GetLowerHalf<Double>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<Double>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int16.cs
index 30d48a1176..1c6ddcd83b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfInt16()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfInt16();
+ var test = new GenericUnaryOpTest__GetLowerHalfInt16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfInt16
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfInt16 testClass)
+ {
+ var result = Avx.GetLowerHalf<Int16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfInt16()
+ static GenericUnaryOpTest__GetLowerHalfInt16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__GetLowerHalfInt16()
+ public GenericUnaryOpTest__GetLowerHalfInt16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfInt16();
+ var test = new GenericUnaryOpTest__GetLowerHalfInt16();
var result = Avx.GetLowerHalf<Int16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<Int16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int32.cs
index ade78b5907..82bb872293 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfInt32()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfInt32();
+ var test = new GenericUnaryOpTest__GetLowerHalfInt32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfInt32
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfInt32 testClass)
+ {
+ var result = Avx.GetLowerHalf<Int32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfInt32()
+ static GenericUnaryOpTest__GetLowerHalfInt32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__GetLowerHalfInt32()
+ public GenericUnaryOpTest__GetLowerHalfInt32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfInt32();
+ var test = new GenericUnaryOpTest__GetLowerHalfInt32();
var result = Avx.GetLowerHalf<Int32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<Int32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int64.cs
index 9c17b248de..cd5a6f5843 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Int64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfInt64()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfInt64();
+ var test = new GenericUnaryOpTest__GetLowerHalfInt64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfInt64
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfInt64 testClass)
+ {
+ var result = Avx.GetLowerHalf<Int64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfInt64()
+ static GenericUnaryOpTest__GetLowerHalfInt64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__GetLowerHalfInt64()
+ public GenericUnaryOpTest__GetLowerHalfInt64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfInt64();
+ var test = new GenericUnaryOpTest__GetLowerHalfInt64();
var result = Avx.GetLowerHalf<Int64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<Int64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.SByte.cs
index 51e1f79165..ca2d196865 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.SByte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfSByte()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfSByte();
+ var test = new GenericUnaryOpTest__GetLowerHalfSByte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfSByte
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfSByte testClass)
+ {
+ var result = Avx.GetLowerHalf<SByte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfSByte()
+ static GenericUnaryOpTest__GetLowerHalfSByte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__GetLowerHalfSByte()
+ public GenericUnaryOpTest__GetLowerHalfSByte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfSByte();
+ var test = new GenericUnaryOpTest__GetLowerHalfSByte();
var result = Avx.GetLowerHalf<SByte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<SByte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Single.cs
index cb29e95568..670cc842f7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.Single.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfSingle()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfSingle();
+ var test = new GenericUnaryOpTest__GetLowerHalfSingle();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfSingle
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfSingle testClass)
+ {
+ var result = Avx.GetLowerHalf<Single>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfSingle()
+ static GenericUnaryOpTest__GetLowerHalfSingle()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
}
- public SimpleUnaryOpTest__GetLowerHalfSingle()
+ public GenericUnaryOpTest__GetLowerHalfSingle()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfSingle();
+ var test = new GenericUnaryOpTest__GetLowerHalfSingle();
var result = Avx.GetLowerHalf<Single>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<Single>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt16.cs
index 1ce642c1c8..4de1b65bd8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfUInt16()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfUInt16();
+ var test = new GenericUnaryOpTest__GetLowerHalfUInt16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfUInt16
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfUInt16 testClass)
+ {
+ var result = Avx.GetLowerHalf<UInt16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfUInt16()
+ static GenericUnaryOpTest__GetLowerHalfUInt16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__GetLowerHalfUInt16()
+ public GenericUnaryOpTest__GetLowerHalfUInt16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfUInt16();
+ var test = new GenericUnaryOpTest__GetLowerHalfUInt16();
var result = Avx.GetLowerHalf<UInt16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<UInt16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt32.cs
index 2ef048d190..289cc6e580 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfUInt32()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfUInt32();
+ var test = new GenericUnaryOpTest__GetLowerHalfUInt32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfUInt32
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfUInt32 testClass)
+ {
+ var result = Avx.GetLowerHalf<UInt32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfUInt32()
+ static GenericUnaryOpTest__GetLowerHalfUInt32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__GetLowerHalfUInt32()
+ public GenericUnaryOpTest__GetLowerHalfUInt32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfUInt32();
+ var test = new GenericUnaryOpTest__GetLowerHalfUInt32();
var result = Avx.GetLowerHalf<UInt32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<UInt32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt64.cs
index 06727e54df..e177a26cc3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/GetLowerHalf.UInt64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void GetLowerHalfUInt64()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfUInt64();
+ var test = new GenericUnaryOpTest__GetLowerHalfUInt64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__GetLowerHalfUInt64
+ public sealed unsafe class GenericUnaryOpTest__GetLowerHalfUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__GetLowerHalfUInt64 testClass)
+ {
+ var result = Avx.GetLowerHalf<UInt64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__GetLowerHalfUInt64()
+ static GenericUnaryOpTest__GetLowerHalfUInt64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__GetLowerHalfUInt64()
+ public GenericUnaryOpTest__GetLowerHalfUInt64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__GetLowerHalfUInt64();
+ var test = new GenericUnaryOpTest__GetLowerHalfUInt64();
var result = Avx.GetLowerHalf<UInt64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.GetLowerHalf<UInt64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.GetLowerHalf(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.1.cs
index dc24dd48ed..4279421be9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertByte1()
{
- var test = new SimpleUnaryOpTest__InsertByte1();
+ var test = new InsertScalarTest__InsertByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertByte1
+ public sealed unsafe class InsertScalarTest__InsertByte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertByte1 testClass)
+ {
+ var result = Avx.Insert(_fld, (byte)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__InsertByte1()
+ static InsertScalarTest__InsertByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__InsertByte1()
+ public InsertScalarTest__InsertByte1()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertByte1();
+ var test = new InsertScalarTest__InsertByte1();
var result = Avx.Insert(test._fld, (byte)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (byte)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (byte)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.20.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.20.cs
index 9676713593..9782ff6d2b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.20.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.20.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertByte20()
{
- var test = new SimpleUnaryOpTest__InsertByte20();
+ var test = new InsertScalarTest__InsertByte20();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertByte20
+ public sealed unsafe class InsertScalarTest__InsertByte20
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertByte20 testClass)
+ {
+ var result = Avx.Insert(_fld, (byte)2, 20);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__InsertByte20()
+ static InsertScalarTest__InsertByte20()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__InsertByte20()
+ public InsertScalarTest__InsertByte20()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertByte20();
+ var test = new InsertScalarTest__InsertByte20();
var result = Avx.Insert(test._fld, (byte)2, 20);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (byte)2, 20);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (byte)2, 20);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.52.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.52.cs
index 16b7cb39a7..39e1837e99 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.52.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Byte.52.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertByte52()
{
- var test = new SimpleUnaryOpTest__InsertByte52();
+ var test = new InsertScalarTest__InsertByte52();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertByte52
+ public sealed unsafe class InsertScalarTest__InsertByte52
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertByte52 testClass)
+ {
+ var result = Avx.Insert(_fld, (byte)2, 52);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__InsertByte52()
+ static InsertScalarTest__InsertByte52()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__InsertByte52()
+ public InsertScalarTest__InsertByte52()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertByte52();
+ var test = new InsertScalarTest__InsertByte52();
var result = Avx.Insert(test._fld, (byte)2, 52);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (byte)2, 52);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (byte)2, 52);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.1.cs
index 6db867f87a..715c9c49d9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt161()
{
- var test = new SimpleUnaryOpTest__InsertInt161();
+ var test = new InsertScalarTest__InsertInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt161
+ public sealed unsafe class InsertScalarTest__InsertInt161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt161 testClass)
+ {
+ var result = Avx.Insert(_fld, (short)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__InsertInt161()
+ static InsertScalarTest__InsertInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__InsertInt161()
+ public InsertScalarTest__InsertInt161()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt161();
+ var test = new InsertScalarTest__InsertInt161();
var result = Avx.Insert(test._fld, (short)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (short)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (short)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.11.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.11.cs
index e64b977740..fecb2605a8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.11.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.11.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt1611()
{
- var test = new SimpleUnaryOpTest__InsertInt1611();
+ var test = new InsertScalarTest__InsertInt1611();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt1611
+ public sealed unsafe class InsertScalarTest__InsertInt1611
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt1611 testClass)
+ {
+ var result = Avx.Insert(_fld, (short)2, 11);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__InsertInt1611()
+ static InsertScalarTest__InsertInt1611()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__InsertInt1611()
+ public InsertScalarTest__InsertInt1611()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt1611();
+ var test = new InsertScalarTest__InsertInt1611();
var result = Avx.Insert(test._fld, (short)2, 11);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (short)2, 11);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (short)2, 11);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.27.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.27.cs
index 30f76ac477..5c8ba0a34b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.27.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int16.27.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt1627()
{
- var test = new SimpleUnaryOpTest__InsertInt1627();
+ var test = new InsertScalarTest__InsertInt1627();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt1627
+ public sealed unsafe class InsertScalarTest__InsertInt1627
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt1627 testClass)
+ {
+ var result = Avx.Insert(_fld, (short)2, 27);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__InsertInt1627()
+ static InsertScalarTest__InsertInt1627()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__InsertInt1627()
+ public InsertScalarTest__InsertInt1627()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt1627();
+ var test = new InsertScalarTest__InsertInt1627();
var result = Avx.Insert(test._fld, (short)2, 27);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (short)2, 27);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (short)2, 27);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.1.cs
index fd4c149134..3ba748680c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt321()
{
- var test = new SimpleUnaryOpTest__InsertInt321();
+ var test = new InsertScalarTest__InsertInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt321
+ public sealed unsafe class InsertScalarTest__InsertInt321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt321 testClass)
+ {
+ var result = Avx.Insert(_fld, (int)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__InsertInt321()
+ static InsertScalarTest__InsertInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__InsertInt321()
+ public InsertScalarTest__InsertInt321()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt321();
+ var test = new InsertScalarTest__InsertInt321();
var result = Avx.Insert(test._fld, (int)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (int)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (int)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.22.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.22.cs
index a988031003..9c3f35be24 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.22.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.22.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt3222()
{
- var test = new SimpleUnaryOpTest__InsertInt3222();
+ var test = new InsertScalarTest__InsertInt3222();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt3222
+ public sealed unsafe class InsertScalarTest__InsertInt3222
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt3222 testClass)
+ {
+ var result = Avx.Insert(_fld, (int)2, 22);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__InsertInt3222()
+ static InsertScalarTest__InsertInt3222()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__InsertInt3222()
+ public InsertScalarTest__InsertInt3222()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt3222();
+ var test = new InsertScalarTest__InsertInt3222();
var result = Avx.Insert(test._fld, (int)2, 22);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (int)2, 22);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (int)2, 22);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.6.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.6.cs
index d37cf368b5..fd5afdf87b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.6.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int32.6.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt326()
{
- var test = new SimpleUnaryOpTest__InsertInt326();
+ var test = new InsertScalarTest__InsertInt326();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt326
+ public sealed unsafe class InsertScalarTest__InsertInt326
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt326 testClass)
+ {
+ var result = Avx.Insert(_fld, (int)2, 6);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__InsertInt326()
+ static InsertScalarTest__InsertInt326()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__InsertInt326()
+ public InsertScalarTest__InsertInt326()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt326();
+ var test = new InsertScalarTest__InsertInt326();
var result = Avx.Insert(test._fld, (int)2, 6);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (int)2, 6);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (int)2, 6);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.1.cs
index a94f30b656..c4774e5e3d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt641()
{
- var test = new SimpleUnaryOpTest__InsertInt641();
+ var test = new InsertScalarTest__InsertInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt641
+ public sealed unsafe class InsertScalarTest__InsertInt641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt641 testClass)
+ {
+ var result = Avx.Insert(_fld, (long)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__InsertInt641()
+ static InsertScalarTest__InsertInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__InsertInt641()
+ public InsertScalarTest__InsertInt641()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt641();
+ var test = new InsertScalarTest__InsertInt641();
var result = Avx.Insert(test._fld, (long)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (long)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (long)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.19.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.19.cs
index 501ebd5952..1babe82c7e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.19.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.19.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt6419()
{
- var test = new SimpleUnaryOpTest__InsertInt6419();
+ var test = new InsertScalarTest__InsertInt6419();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt6419
+ public sealed unsafe class InsertScalarTest__InsertInt6419
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt6419 testClass)
+ {
+ var result = Avx.Insert(_fld, (long)2, 19);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__InsertInt6419()
+ static InsertScalarTest__InsertInt6419()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__InsertInt6419()
+ public InsertScalarTest__InsertInt6419()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt6419();
+ var test = new InsertScalarTest__InsertInt6419();
var result = Avx.Insert(test._fld, (long)2, 19);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (long)2, 19);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (long)2, 19);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.3.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.3.cs
index 3b842c4bc7..e28dc8b5ff 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.3.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.Int64.3.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt643()
{
- var test = new SimpleUnaryOpTest__InsertInt643();
+ var test = new InsertScalarTest__InsertInt643();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt643
+ public sealed unsafe class InsertScalarTest__InsertInt643
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt643 testClass)
+ {
+ var result = Avx.Insert(_fld, (long)2, 3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__InsertInt643()
+ static InsertScalarTest__InsertInt643()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__InsertInt643()
+ public InsertScalarTest__InsertInt643()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt643();
+ var test = new InsertScalarTest__InsertInt643();
var result = Avx.Insert(test._fld, (long)2, 3);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (long)2, 3);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (long)2, 3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.1.cs
index e9f9f4baa0..3a4a1d2378 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSByte1()
{
- var test = new SimpleUnaryOpTest__InsertSByte1();
+ var test = new InsertScalarTest__InsertSByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertSByte1
+ public sealed unsafe class InsertScalarTest__InsertSByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertSByte1 testClass)
+ {
+ var result = Avx.Insert(_fld, (sbyte)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__InsertSByte1()
+ static InsertScalarTest__InsertSByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__InsertSByte1()
+ public InsertScalarTest__InsertSByte1()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertSByte1();
+ var test = new InsertScalarTest__InsertSByte1();
var result = Avx.Insert(test._fld, (sbyte)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (sbyte)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (sbyte)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.20.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.20.cs
index d95d63fb77..97549a1e26 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.20.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.20.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSByte20()
{
- var test = new SimpleUnaryOpTest__InsertSByte20();
+ var test = new InsertScalarTest__InsertSByte20();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertSByte20
+ public sealed unsafe class InsertScalarTest__InsertSByte20
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertSByte20 testClass)
+ {
+ var result = Avx.Insert(_fld, (sbyte)2, 20);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__InsertSByte20()
+ static InsertScalarTest__InsertSByte20()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__InsertSByte20()
+ public InsertScalarTest__InsertSByte20()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertSByte20();
+ var test = new InsertScalarTest__InsertSByte20();
var result = Avx.Insert(test._fld, (sbyte)2, 20);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (sbyte)2, 20);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (sbyte)2, 20);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.52.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.52.cs
index bdbea54b34..3c5d502680 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.52.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.SByte.52.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSByte52()
{
- var test = new SimpleUnaryOpTest__InsertSByte52();
+ var test = new InsertScalarTest__InsertSByte52();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertSByte52
+ public sealed unsafe class InsertScalarTest__InsertSByte52
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertSByte52 testClass)
+ {
+ var result = Avx.Insert(_fld, (sbyte)2, 52);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__InsertSByte52()
+ static InsertScalarTest__InsertSByte52()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__InsertSByte52()
+ public InsertScalarTest__InsertSByte52()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertSByte52();
+ var test = new InsertScalarTest__InsertSByte52();
var result = Avx.Insert(test._fld, (sbyte)2, 52);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (sbyte)2, 52);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (sbyte)2, 52);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.1.cs
index bd2cfe25dc..beea0ba05b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt161()
{
- var test = new SimpleUnaryOpTest__InsertUInt161();
+ var test = new InsertScalarTest__InsertUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt161
+ public sealed unsafe class InsertScalarTest__InsertUInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt161 testClass)
+ {
+ var result = Avx.Insert(_fld, (ushort)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__InsertUInt161()
+ static InsertScalarTest__InsertUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__InsertUInt161()
+ public InsertScalarTest__InsertUInt161()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt161();
+ var test = new InsertScalarTest__InsertUInt161();
var result = Avx.Insert(test._fld, (ushort)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (ushort)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (ushort)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.11.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.11.cs
index 8bbea9b0b1..6cb5e5a5e3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.11.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.11.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt1611()
{
- var test = new SimpleUnaryOpTest__InsertUInt1611();
+ var test = new InsertScalarTest__InsertUInt1611();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt1611
+ public sealed unsafe class InsertScalarTest__InsertUInt1611
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt1611 testClass)
+ {
+ var result = Avx.Insert(_fld, (ushort)2, 11);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__InsertUInt1611()
+ static InsertScalarTest__InsertUInt1611()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__InsertUInt1611()
+ public InsertScalarTest__InsertUInt1611()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt1611();
+ var test = new InsertScalarTest__InsertUInt1611();
var result = Avx.Insert(test._fld, (ushort)2, 11);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (ushort)2, 11);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (ushort)2, 11);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.27.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.27.cs
index 50a583e16d..767e920c45 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.27.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt16.27.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt1627()
{
- var test = new SimpleUnaryOpTest__InsertUInt1627();
+ var test = new InsertScalarTest__InsertUInt1627();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt1627
+ public sealed unsafe class InsertScalarTest__InsertUInt1627
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt1627 testClass)
+ {
+ var result = Avx.Insert(_fld, (ushort)2, 27);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__InsertUInt1627()
+ static InsertScalarTest__InsertUInt1627()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__InsertUInt1627()
+ public InsertScalarTest__InsertUInt1627()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt1627();
+ var test = new InsertScalarTest__InsertUInt1627();
var result = Avx.Insert(test._fld, (ushort)2, 27);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (ushort)2, 27);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (ushort)2, 27);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.1.cs
index 391a2fb34e..4c20835d0a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt321()
{
- var test = new SimpleUnaryOpTest__InsertUInt321();
+ var test = new InsertScalarTest__InsertUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt321
+ public sealed unsafe class InsertScalarTest__InsertUInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt321 testClass)
+ {
+ var result = Avx.Insert(_fld, (uint)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__InsertUInt321()
+ static InsertScalarTest__InsertUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__InsertUInt321()
+ public InsertScalarTest__InsertUInt321()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt321();
+ var test = new InsertScalarTest__InsertUInt321();
var result = Avx.Insert(test._fld, (uint)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (uint)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (uint)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.22.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.22.cs
index 878c4624dd..4766efac8b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.22.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.22.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt3222()
{
- var test = new SimpleUnaryOpTest__InsertUInt3222();
+ var test = new InsertScalarTest__InsertUInt3222();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt3222
+ public sealed unsafe class InsertScalarTest__InsertUInt3222
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt3222 testClass)
+ {
+ var result = Avx.Insert(_fld, (uint)2, 22);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__InsertUInt3222()
+ static InsertScalarTest__InsertUInt3222()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__InsertUInt3222()
+ public InsertScalarTest__InsertUInt3222()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt3222();
+ var test = new InsertScalarTest__InsertUInt3222();
var result = Avx.Insert(test._fld, (uint)2, 22);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (uint)2, 22);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (uint)2, 22);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.6.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.6.cs
index 2c3947bca9..993cfa6274 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.6.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt32.6.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt326()
{
- var test = new SimpleUnaryOpTest__InsertUInt326();
+ var test = new InsertScalarTest__InsertUInt326();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt326
+ public sealed unsafe class InsertScalarTest__InsertUInt326
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt326 testClass)
+ {
+ var result = Avx.Insert(_fld, (uint)2, 6);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__InsertUInt326()
+ static InsertScalarTest__InsertUInt326()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__InsertUInt326()
+ public InsertScalarTest__InsertUInt326()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt326();
+ var test = new InsertScalarTest__InsertUInt326();
var result = Avx.Insert(test._fld, (uint)2, 6);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (uint)2, 6);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (uint)2, 6);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.1.cs
index efc9265543..bf6cd63d90 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt641()
{
- var test = new SimpleUnaryOpTest__InsertUInt641();
+ var test = new InsertScalarTest__InsertUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt641
+ public sealed unsafe class InsertScalarTest__InsertUInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt641 testClass)
+ {
+ var result = Avx.Insert(_fld, (ulong)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__InsertUInt641()
+ static InsertScalarTest__InsertUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__InsertUInt641()
+ public InsertScalarTest__InsertUInt641()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt641();
+ var test = new InsertScalarTest__InsertUInt641();
var result = Avx.Insert(test._fld, (ulong)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (ulong)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (ulong)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.19.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.19.cs
index 2601ae0ae1..bd8f843929 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.19.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.19.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt6419()
{
- var test = new SimpleUnaryOpTest__InsertUInt6419();
+ var test = new InsertScalarTest__InsertUInt6419();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt6419
+ public sealed unsafe class InsertScalarTest__InsertUInt6419
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt6419 testClass)
+ {
+ var result = Avx.Insert(_fld, (ulong)2, 19);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__InsertUInt6419()
+ static InsertScalarTest__InsertUInt6419()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__InsertUInt6419()
+ public InsertScalarTest__InsertUInt6419()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt6419();
+ var test = new InsertScalarTest__InsertUInt6419();
var result = Avx.Insert(test._fld, (ulong)2, 19);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (ulong)2, 19);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (ulong)2, 19);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.3.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.3.cs
index 122c6878cc..df7bd7a6b5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.3.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Insert.UInt64.3.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt643()
{
- var test = new SimpleUnaryOpTest__InsertUInt643();
+ var test = new InsertScalarTest__InsertUInt643();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt643
+ public sealed unsafe class InsertScalarTest__InsertUInt643
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt643 testClass)
+ {
+ var result = Avx.Insert(_fld, (ulong)2, 3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__InsertUInt643()
+ static InsertScalarTest__InsertUInt643()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__InsertUInt643()
+ public InsertScalarTest__InsertUInt643()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt643();
+ var test = new InsertScalarTest__InsertUInt643();
var result = Avx.Insert(test._fld, (ulong)2, 3);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Insert(_fld, (ulong)2, 3);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Insert(test._fld, (ulong)2, 3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Byte.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Byte.1.Load.cs
index 58d3894af5..849e6b51b5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Byte.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Byte.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Byte1Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Byte1Load();
+ var test = new InsertLoadTest__InsertVector128Byte1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Byte1Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Byte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Byte1 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (Byte*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Byte*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Byte, Byte, Byte> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Byte1Load()
+ static InsertLoadTest__InsertVector128Byte1()
{
var random = new Random();
@@ -114,7 +147,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__InsertVector128Byte1Load()
+ public InsertLoadTest__InsertVector128Byte1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Byte1Load();
+ var test = new InsertLoadTest__InsertVector128Byte1();
var result = Avx.InsertVector128(test._fld1, (Byte*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Byte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (Byte*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Byte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (Byte*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Byte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Double.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Double.1.Load.cs
index 74ca07cd1e..b19560107a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Double.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Double.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Double1Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Double1Load();
+ var test = new InsertLoadTest__InsertVector128Double1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Double1Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Double1
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Double1 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (Double*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Double*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Double, Double, Double> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Double1Load()
+ static InsertLoadTest__InsertVector128Double1()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
}
- public SimpleBinaryOpTest__InsertVector128Double1Load()
+ public InsertLoadTest__InsertVector128Double1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Double1Load();
+ var test = new InsertLoadTest__InsertVector128Double1();
var result = Avx.InsertVector128(test._fld1, (Double*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Double*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (Double*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Double*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (Double*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Double*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int16.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int16.1.Load.cs
index 03247d9ff8..8006b77eda 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int16.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int16.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int161Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int161Load();
+ var test = new InsertLoadTest__InsertVector128Int161();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int161Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Int161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(0,short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Int161 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (Int16*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Int16*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int16, Int16, Int16> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int161Load()
+ static InsertLoadTest__InsertVector128Int161()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleBinaryOpTest__InsertVector128Int161Load()
+ public InsertLoadTest__InsertVector128Int161()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int161Load();
+ var test = new InsertLoadTest__InsertVector128Int161();
var result = Avx.InsertVector128(test._fld1, (Int16*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Int16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (Int16*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Int16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (Int16*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Int16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int32.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int32.1.Load.cs
index 23fa978466..b6eef6b29f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int32.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int32.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int321Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int321Load();
+ var test = new InsertLoadTest__InsertVector128Int321();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int321Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Int321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Int321 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (Int32*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Int32*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int32, Int32, Int32> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int321Load()
+ static InsertLoadTest__InsertVector128Int321()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleBinaryOpTest__InsertVector128Int321Load()
+ public InsertLoadTest__InsertVector128Int321()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int321Load();
+ var test = new InsertLoadTest__InsertVector128Int321();
var result = Avx.InsertVector128(test._fld1, (Int32*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Int32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (Int32*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Int32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (Int32*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Int32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int64.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int64.1.Load.cs
index 3fbc087422..81a4f6e3fe 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int64.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Int64.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int641Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int641Load();
+ var test = new InsertLoadTest__InsertVector128Int641();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int641Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Int641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Int641 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (Int64*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Int64*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int64, Int64, Int64> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int641Load()
+ static InsertLoadTest__InsertVector128Int641()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleBinaryOpTest__InsertVector128Int641Load()
+ public InsertLoadTest__InsertVector128Int641()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int641Load();
+ var test = new InsertLoadTest__InsertVector128Int641();
var result = Avx.InsertVector128(test._fld1, (Int64*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Int64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (Int64*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Int64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (Int64*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Int64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.SByte.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.SByte.1.Load.cs
index 881f529965..0949c32ce4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.SByte.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.SByte.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128SByte1Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128SByte1Load();
+ var test = new InsertLoadTest__InsertVector128SByte1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128SByte1Load
+ public sealed unsafe class InsertLoadTest__InsertVector128SByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(0,sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128SByte1 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (SByte*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (SByte*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<SByte, SByte, SByte> _dataTable;
- static SimpleBinaryOpTest__InsertVector128SByte1Load()
+ static InsertLoadTest__InsertVector128SByte1()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleBinaryOpTest__InsertVector128SByte1Load()
+ public InsertLoadTest__InsertVector128SByte1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128SByte1Load();
+ var test = new InsertLoadTest__InsertVector128SByte1();
var result = Avx.InsertVector128(test._fld1, (SByte*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (SByte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (SByte*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (SByte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (SByte*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (SByte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Single.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Single.1.Load.cs
index 715484eb31..ba4cdb1070 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Single.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.Single.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Single1Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Single1Load();
+ var test = new InsertLoadTest__InsertVector128Single1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Single1Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Single1
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Single1 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (Single*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Single*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Single1Load()
+ static InsertLoadTest__InsertVector128Single1()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertVector128Single1Load()
+ public InsertLoadTest__InsertVector128Single1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Single1Load();
+ var test = new InsertLoadTest__InsertVector128Single1();
var result = Avx.InsertVector128(test._fld1, (Single*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Single*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (Single*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Single*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (Single*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Single*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt16.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt16.1.Load.cs
index 745aa55c53..816f3dd595 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt16.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt16.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt161Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt161Load();
+ var test = new InsertLoadTest__InsertVector128UInt161();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt161Load
+ public sealed unsafe class InsertLoadTest__InsertVector128UInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128UInt161 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (UInt16*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (UInt16*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt16, UInt16, UInt16> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt161Load()
+ static InsertLoadTest__InsertVector128UInt161()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt161Load()
+ public InsertLoadTest__InsertVector128UInt161()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt161Load();
+ var test = new InsertLoadTest__InsertVector128UInt161();
var result = Avx.InsertVector128(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (UInt16*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (UInt16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt32.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt32.1.Load.cs
index ecc6655e57..827d8f3878 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt32.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt32.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt321Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt321Load();
+ var test = new InsertLoadTest__InsertVector128UInt321();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt321Load
+ public sealed unsafe class InsertLoadTest__InsertVector128UInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128UInt321 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (UInt32*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (UInt32*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt32, UInt32, UInt32> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt321Load()
+ static InsertLoadTest__InsertVector128UInt321()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt321Load()
+ public InsertLoadTest__InsertVector128UInt321()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt321Load();
+ var test = new InsertLoadTest__InsertVector128UInt321();
var result = Avx.InsertVector128(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (UInt32*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (UInt32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt64.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt64.1.Load.cs
index 8ed7dfdaaa..0757b7e81e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt64.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/InsertVector128.UInt64.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt641Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt641Load();
+ var test = new InsertLoadTest__InsertVector128UInt641();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt641Load
+ public sealed unsafe class InsertLoadTest__InsertVector128UInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128UInt641 testClass)
+ {
+ var result = Avx.InsertVector128(_fld1, (UInt64*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (UInt64*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt64, UInt64, UInt64> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt641Load()
+ static InsertLoadTest__InsertVector128UInt641()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt641Load()
+ public InsertLoadTest__InsertVector128UInt641()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt641Load();
+ var test = new InsertLoadTest__InsertVector128UInt641();
var result = Avx.InsertVector128(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.InsertVector128(_fld1, (UInt64*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (UInt64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.InsertVector128(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Double.cs
index c8b2815519..e6790e0bcf 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxDouble testClass)
+ {
+ var result = Avx.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxDouble();
var result = Avx.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Single.cs
index 3939057bef..5146a9abeb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Max.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxSingle testClass)
+ {
+ var result = Avx.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxSingle();
var result = Avx.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Double.cs
index d9c08b0373..9d7fee74f0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinDouble testClass)
+ {
+ var result = Avx.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinDouble();
var result = Avx.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Single.cs
index 4c80d5f146..4971e24f3c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Min.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinSingle testClass)
+ {
+ var result = Avx.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinSingle();
var result = Avx.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Double.cs
index 278e320b55..c890d23799 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplyDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplyDouble testClass)
+ {
+ var result = Avx.Multiply(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplyDouble();
var result = Avx.Multiply(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Multiply(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Multiply(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Single.cs
index c6f0b5338c..af3e1f27a5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Multiply.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplySingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplySingle testClass)
+ {
+ var result = Avx.Multiply(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplySingle();
var result = Avx.Multiply(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Multiply(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Multiply(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Double.cs
index c28d3c9ac6..8c6bf485d2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrDouble testClass)
+ {
+ var result = Avx.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrDouble();
var result = Avx.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Single.cs
index 3336030aa1..35f8f57b93 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Or.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrSingle testClass)
+ {
+ var result = Avx.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrSingle();
var result = Avx.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.1.cs
index a7d3bf9e1e..09b8b8dcdd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void PermuteDouble1()
{
- var test = new SimpleUnaryOpTest__PermuteDouble1();
+ var test = new ImmUnaryOpTest__PermuteDouble1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__PermuteDouble1
+ public sealed unsafe class ImmUnaryOpTest__PermuteDouble1
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__PermuteDouble1 testClass)
+ {
+ var result = Avx.Permute(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Double, Double> _dataTable;
- static SimpleUnaryOpTest__PermuteDouble1()
+ static ImmUnaryOpTest__PermuteDouble1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
}
- public SimpleUnaryOpTest__PermuteDouble1()
+ public ImmUnaryOpTest__PermuteDouble1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__PermuteDouble1();
+ var test = new ImmUnaryOpTest__PermuteDouble1();
var result = Avx.Permute(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Permute(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Permute(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.2.cs
index 4ccecc5ddc..be5ea9d7d5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.2.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Double.2.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void PermuteDouble2()
{
- var test = new SimpleUnaryOpTest__PermuteDouble2();
+ var test = new ImmUnaryOpTest__PermuteDouble2();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__PermuteDouble2
+ public sealed unsafe class ImmUnaryOpTest__PermuteDouble2
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__PermuteDouble2 testClass)
+ {
+ var result = Avx.Permute(_fld, 2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Double, Double> _dataTable;
- static SimpleUnaryOpTest__PermuteDouble2()
+ static ImmUnaryOpTest__PermuteDouble2()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
}
- public SimpleUnaryOpTest__PermuteDouble2()
+ public ImmUnaryOpTest__PermuteDouble2()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__PermuteDouble2();
+ var test = new ImmUnaryOpTest__PermuteDouble2();
var result = Avx.Permute(test._fld, 2);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Permute(_fld, 2);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Permute(test._fld, 2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.1.cs
index 30b5838d98..8e01ecd58b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void PermuteSingle1()
{
- var test = new SimpleUnaryOpTest__PermuteSingle1();
+ var test = new ImmUnaryOpTest__PermuteSingle1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__PermuteSingle1
+ public sealed unsafe class ImmUnaryOpTest__PermuteSingle1
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__PermuteSingle1 testClass)
+ {
+ var result = Avx.Permute(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__PermuteSingle1()
+ static ImmUnaryOpTest__PermuteSingle1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
}
- public SimpleUnaryOpTest__PermuteSingle1()
+ public ImmUnaryOpTest__PermuteSingle1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__PermuteSingle1();
+ var test = new ImmUnaryOpTest__PermuteSingle1();
var result = Avx.Permute(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Permute(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Permute(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.2.cs
index d50cddc384..99f4b91389 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.2.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Permute.Single.2.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void PermuteSingle2()
{
- var test = new SimpleUnaryOpTest__PermuteSingle2();
+ var test = new ImmUnaryOpTest__PermuteSingle2();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__PermuteSingle2
+ public sealed unsafe class ImmUnaryOpTest__PermuteSingle2
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__PermuteSingle2 testClass)
+ {
+ var result = Avx.Permute(_fld, 2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__PermuteSingle2()
+ static ImmUnaryOpTest__PermuteSingle2()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleUnaryOpTest__PermuteSingle2()
+ public ImmUnaryOpTest__PermuteSingle2()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__PermuteSingle2();
+ var test = new ImmUnaryOpTest__PermuteSingle2();
var result = Avx.Permute(test._fld, 2);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Permute(_fld, 2);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Permute(test._fld, 2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Double.cs
index f9171d8e02..f93cb69df8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__PermuteVarDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = BitConverter.Int64BitsToDouble(1); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__PermuteVarDouble testClass)
+ {
+ var result = Avx.PermuteVar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__PermuteVarDouble();
var result = Avx.PermuteVar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.PermuteVar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.PermuteVar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Single.cs
index 24e5bb021d..90855e0fca 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/PermuteVar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__PermuteVarSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = BitConverter.Int32BitsToSingle(1); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__PermuteVarSingle testClass)
+ {
+ var result = Avx.PermuteVar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__PermuteVarSingle();
var result = Avx.PermuteVar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.PermuteVar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.PermuteVar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Double.cs
index 89728933ea..299b78e286 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundCurrentDirectionDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundCurrentDirectionDouble testClass)
+ {
+ var result = Avx.RoundCurrentDirection(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundCurrentDirectionDouble();
var result = Avx.RoundCurrentDirection(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundCurrentDirection(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundCurrentDirection(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Single.cs
index 1ff78899b6..d3da6a1089 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundCurrentDirection.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundCurrentDirectionSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundCurrentDirectionSingle testClass)
+ {
+ var result = Avx.RoundCurrentDirection(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundCurrentDirectionSingle();
var result = Avx.RoundCurrentDirection(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundCurrentDirection(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundCurrentDirection(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Double.cs
index 70aa331044..a91f908ffb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNearestIntegerDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNearestIntegerDouble testClass)
+ {
+ var result = Avx.RoundToNearestInteger(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNearestIntegerDouble();
var result = Avx.RoundToNearestInteger(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToNearestInteger(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToNearestInteger(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Single.cs
index 4ca041cbf3..1ed0e1ab35 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNearestInteger.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNearestIntegerSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNearestIntegerSingle testClass)
+ {
+ var result = Avx.RoundToNearestInteger(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNearestIntegerSingle();
var result = Avx.RoundToNearestInteger(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToNearestInteger(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToNearestInteger(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Double.cs
index 90ce9cbb7f..d4db5013be 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNegativeInfinityDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNegativeInfinityDouble testClass)
+ {
+ var result = Avx.RoundToNegativeInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNegativeInfinityDouble();
var result = Avx.RoundToNegativeInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToNegativeInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToNegativeInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Single.cs
index 8ac2fade68..3038e651cb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToNegativeInfinity.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNegativeInfinitySingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNegativeInfinitySingle testClass)
+ {
+ var result = Avx.RoundToNegativeInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNegativeInfinitySingle();
var result = Avx.RoundToNegativeInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToNegativeInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToNegativeInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Double.cs
index f37472f523..a8cac4aea7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToPositiveInfinityDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToPositiveInfinityDouble testClass)
+ {
+ var result = Avx.RoundToPositiveInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToPositiveInfinityDouble();
var result = Avx.RoundToPositiveInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToPositiveInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToPositiveInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Single.cs
index fb216f4f23..1cddfd0f37 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToPositiveInfinity.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToPositiveInfinitySingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToPositiveInfinitySingle testClass)
+ {
+ var result = Avx.RoundToPositiveInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToPositiveInfinitySingle();
var result = Avx.RoundToPositiveInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToPositiveInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToPositiveInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Double.cs
index 3c20297c4e..0755b2f8ee 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToZeroDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToZeroDouble testClass)
+ {
+ var result = Avx.RoundToZero(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToZeroDouble();
var result = Avx.RoundToZero(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToZero(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToZero(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Single.cs
index d8ecdb2138..aed9992fa9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/RoundToZero.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToZeroSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToZeroSingle testClass)
+ {
+ var result = Avx.RoundToZero(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToZeroSingle();
var result = Avx.RoundToZero(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.RoundToZero(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.RoundToZero(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Double.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Double.1.cs
index 97ea26a72a..df581dc3bd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Double.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Double.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShuffleDouble1()
{
- var test = new SimpleBinaryOpTest__ShuffleDouble1();
+ var test = new ImmBinaryOpTest__ShuffleDouble1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__ShuffleDouble1
+ public sealed unsafe class ImmBinaryOpTest__ShuffleDouble1
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmBinaryOpTest__ShuffleDouble1 testClass)
+ {
+ var result = Avx.Shuffle(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -102,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Double, Double, Double> _dataTable;
- static SimpleBinaryOpTest__ShuffleDouble1()
+ static ImmBinaryOpTest__ShuffleDouble1()
{
var random = new Random();
@@ -112,7 +145,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
}
- public SimpleBinaryOpTest__ShuffleDouble1()
+ public ImmBinaryOpTest__ShuffleDouble1()
{
Succeeded = true;
@@ -249,16 +282,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__ShuffleDouble1();
+ var test = new ImmBinaryOpTest__ShuffleDouble1();
var result = Avx.Shuffle(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Shuffle(_fld1, _fld2, 1);
@@ -266,6 +299,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Shuffle(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Single.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Single.1.cs
index 3192185336..9858aa0f26 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Single.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Shuffle.Single.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShuffleSingle1()
{
- var test = new SimpleBinaryOpTest__ShuffleSingle1();
+ var test = new ImmBinaryOpTest__ShuffleSingle1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__ShuffleSingle1
+ public sealed unsafe class ImmBinaryOpTest__ShuffleSingle1
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmBinaryOpTest__ShuffleSingle1 testClass)
+ {
+ var result = Avx.Shuffle(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -102,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__ShuffleSingle1()
+ static ImmBinaryOpTest__ShuffleSingle1()
{
var random = new Random();
@@ -112,7 +145,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
}
- public SimpleBinaryOpTest__ShuffleSingle1()
+ public ImmBinaryOpTest__ShuffleSingle1()
{
Succeeded = true;
@@ -249,16 +282,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__ShuffleSingle1();
+ var test = new ImmBinaryOpTest__ShuffleSingle1();
var result = Avx.Shuffle(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Shuffle(_fld1, _fld2, 1);
@@ -266,6 +299,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Shuffle(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Double.cs
index 51f355ab2b..a9ac4cedd2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractDouble testClass)
+ {
+ var result = Avx.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractDouble();
var result = Avx.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Single.cs
index 9ad31d60ef..eb5cd64dcf 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Subtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSingle testClass)
+ {
+ var result = Avx.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSingle();
var result = Avx.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Byte.cs
index b98a09bdd4..630e545ed1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCByte testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCByte();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int16.cs
index b9d579135a..63284f0d28 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCInt16 testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCInt16();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int32.cs
index 0808a5ba6b..76ab9687ed 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCInt32 testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCInt32();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int64.cs
index 6d59986f46..04b170bad8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCInt64 testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCInt64();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.SByte.cs
index 230bb03864..df2a9f995d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCSByte testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCSByte();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt16.cs
index f203b62218..c00d3694a7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCUInt16 testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCUInt16();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt32.cs
index 430b97b82a..c0b4f076a8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCUInt32 testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCUInt32();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt64.cs
index 573fd505cb..8992258a40 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestC.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCUInt64 testClass)
+ {
+ var result = Avx.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestC), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCUInt64();
var result = Avx.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Byte.cs
index 5c40fd04aa..003ce55fa6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCByte testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCByte();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int16.cs
index e4be74f539..471222c583 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCInt16 testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCInt16();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int32.cs
index 494b36b7e5..dee10d6a55 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCInt32 testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCInt32();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int64.cs
index 047a1d23d9..4d33bc9803 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCInt64 testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCInt64();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.SByte.cs
index 5f4b056ba2..e359d12329 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCSByte testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCSByte();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt16.cs
index 8325d5e7bf..b8c1659397 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCUInt16 testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCUInt16();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt32.cs
index 74ffd2d301..b56dfabb43 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCUInt32 testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCUInt32();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt64.cs
index 3e09f105e6..c4e60bdf83 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestNotZAndNotC.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCUInt64 testClass)
+ {
+ var result = Avx.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Avx).GetMethod(nameof(Avx.TestNotZAndNotC), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCUInt64();
var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Byte.cs
index 2a7afbea96..952aa7abc8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZByte testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Byte>), typeof(Vector256<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZByte();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int16.cs
index 04ae3058b4..45ad68aa78 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZInt16 testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int16>), typeof(Vector256<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZInt16();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int32.cs
index 8cd3156a16..7d786e879d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZInt32 testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int32>), typeof(Vector256<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZInt32();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int64.cs
index 2b2be9432f..3451a1405e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZInt64 testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<Int64>), typeof(Vector256<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZInt64();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.SByte.cs
index a7b11ef09c..69dfb44620 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZSByte testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<SByte>), typeof(Vector256<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZSByte();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt16.cs
index 660c3733d2..296ffb6e9d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZUInt16 testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt16>), typeof(Vector256<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZUInt16();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt32.cs
index 10fd92a941..cea14a9ba4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZUInt32 testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt32>), typeof(Vector256<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZUInt32();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt64.cs
index e5d330de03..30f7277902 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/TestZ.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZUInt64 testClass)
+ {
+ var result = Avx.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Avx).GetMethod(nameof(Avx.TestZ), new Type[] { typeof(Vector256<UInt64>), typeof(Vector256<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZUInt64();
var result = Avx.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Double.cs
index 053026e490..5a60a33cf9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorDouble testClass)
+ {
+ var result = Avx.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorDouble();
var result = Avx.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Single.cs
index 9e91f6f6f9..9975a99235 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx/Xor.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorSingle testClass)
+ {
+ var result = Avx.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorSingle();
var result = Avx.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Byte.cs
index bba9fe7e8d..5bb3f3c1ce 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddByte testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddByte();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int16.cs
index d1df1b650f..8c381ed065 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddInt16 testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddInt16();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int32.cs
index e758f3be09..f77d1adbed 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddInt32 testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddInt32();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int64.cs
index bfe96038ec..250e60407e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddInt64 testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddInt64();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.SByte.cs
index ad8dc3f878..bde1c469fc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSByte testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSByte();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt16.cs
index 750621a15c..22f09d0355 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddUInt16 testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddUInt16();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt32.cs
index 0a1001ef11..b71a8e2f2f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddUInt32 testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddUInt32();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt64.cs
index a47f3d1022..b6cc1ec767 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Add.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddUInt64 testClass)
+ {
+ var result = Avx2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddUInt64();
var result = Avx2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Byte.cs
index 582513def6..e6efd0ef22 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndByte testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndByte();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int16.cs
index 86f0808076..fe21d1fd39 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndInt16 testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndInt16();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int32.cs
index 40a021c0d6..0d111aec0d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndInt32 testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndInt32();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int64.cs
index e0acc87cd5..2d3418cd6d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndInt64 testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndInt64();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.SByte.cs
index 4c40e4e313..1e5a52b227 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndSByte testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndSByte();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt16.cs
index 7943d3fcbd..66a2b368dc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndUInt16 testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndUInt16();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt32.cs
index 26c74e3ea6..b94534c05e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndUInt32 testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndUInt32();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt64.cs
index ddbeef057b..4df88d1fc3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/And.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndUInt64 testClass)
+ {
+ var result = Avx2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndUInt64();
var result = Avx2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Byte.cs
index af8dc71ff5..9065400407 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotByte testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotByte();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int16.cs
index db5f3232fe..1896f6fcd0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotInt16 testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotInt16();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int32.cs
index 6f85e81932..88b6a77855 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotInt32 testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotInt32();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int64.cs
index 2af6e9a92f..2e7d488550 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotInt64 testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotInt64();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.SByte.cs
index 6af9e2eb79..94c5280e14 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotSByte testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotSByte();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt16.cs
index a4fbb70cc5..d85d71ec07 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotUInt16 testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotUInt16();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt32.cs
index 3a5304a8fc..fe1d0436b6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotUInt32 testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotUInt32();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt64.cs
index b940c7f4c8..fbf6beb311 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/AndNot.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotUInt64 testClass)
+ {
+ var result = Avx2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotUInt64();
var result = Avx2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.Byte.cs
index d5d9e8226b..8bb2af3d0f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AverageByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AverageByte testClass)
+ {
+ var result = Avx2.Average(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AverageByte();
var result = Avx2.Average(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Average(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Average(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.UInt16.cs
index 00907cd611..cc9f78d2b2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Average.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AverageUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AverageUInt16 testClass)
+ {
+ var result = Avx2.Average(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AverageUInt16();
var result = Avx2.Average(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Average(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Average(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.Byte.cs
index ca4738e493..46aa4afd79 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+ public Vector256<Byte> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (byte)(((i % 2) == 0) ? 128 : 1); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar3), ref Unsafe.As<Byte, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableByte testClass)
+ {
+ var result = Avx2.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableByte();
var result = Avx2.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.SByte.cs
index f15a531a40..95ec7320d2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BlendVariable.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+ public Vector256<SByte> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (sbyte)(((i % 2) == 0) ? -128 : 1); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar3), ref Unsafe.As<SByte, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableSByte testClass)
+ {
+ var result = Avx2.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableSByte();
var result = Avx2.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Byte.cs
index e02e1f3c53..09a6d63047 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Byte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128Byte()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Byte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Byte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128Byte
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128Byte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128Byte testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<Byte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128Byte()
+ static GenericUnaryOpTest__BroadcastScalarToVector128Byte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__BroadcastScalarToVector128Byte()
+ public GenericUnaryOpTest__BroadcastScalarToVector128Byte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Byte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Byte();
var result = Avx2.BroadcastScalarToVector128<Byte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<Byte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Double.cs
index e2165e0877..7a5143cc02 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Double.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128Double()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Double();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Double();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128Double
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128Double
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128Double testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<Double>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Double, Double> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128Double()
+ static GenericUnaryOpTest__BroadcastScalarToVector128Double()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128Double()
+ public GenericUnaryOpTest__BroadcastScalarToVector128Double()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Double();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Double();
var result = Avx2.BroadcastScalarToVector128<Double>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<Double>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int16.cs
index cca08b34d7..0b4027fc10 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128Int16()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Int16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Int16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128Int16
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128Int16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128Int16 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<Int16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128Int16()
+ static GenericUnaryOpTest__BroadcastScalarToVector128Int16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128Int16()
+ public GenericUnaryOpTest__BroadcastScalarToVector128Int16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Int16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Int16();
var result = Avx2.BroadcastScalarToVector128<Int16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<Int16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int32.cs
index 0c27915839..e5528d9612 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128Int32()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Int32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Int32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128Int32
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128Int32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128Int32 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<Int32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128Int32()
+ static GenericUnaryOpTest__BroadcastScalarToVector128Int32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128Int32()
+ public GenericUnaryOpTest__BroadcastScalarToVector128Int32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Int32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Int32();
var result = Avx2.BroadcastScalarToVector128<Int32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<Int32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int64.cs
index 98a9fa2672..f140f49f60 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Int64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128Int64()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Int64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Int64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128Int64
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128Int64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128Int64 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<Int64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128Int64()
+ static GenericUnaryOpTest__BroadcastScalarToVector128Int64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128Int64()
+ public GenericUnaryOpTest__BroadcastScalarToVector128Int64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Int64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Int64();
var result = Avx2.BroadcastScalarToVector128<Int64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<Int64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.SByte.cs
index 8c8ea54db7..ef53cd8349 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.SByte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128SByte()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128SByte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128SByte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128SByte
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128SByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128SByte testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<SByte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128SByte()
+ static GenericUnaryOpTest__BroadcastScalarToVector128SByte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128SByte()
+ public GenericUnaryOpTest__BroadcastScalarToVector128SByte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128SByte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128SByte();
var result = Avx2.BroadcastScalarToVector128<SByte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<SByte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Single.cs
index 0e7535fcf8..3d5c488096 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.Single.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128Single()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Single();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Single();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128Single
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128Single
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128Single testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<Single>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128Single()
+ static GenericUnaryOpTest__BroadcastScalarToVector128Single()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128Single()
+ public GenericUnaryOpTest__BroadcastScalarToVector128Single()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128Single();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128Single();
var result = Avx2.BroadcastScalarToVector128<Single>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<Single>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt16.cs
index ec5efa9444..74b2d7f533 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128UInt16()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128UInt16
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128UInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128UInt16 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<UInt16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128UInt16()
+ static GenericUnaryOpTest__BroadcastScalarToVector128UInt16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128UInt16()
+ public GenericUnaryOpTest__BroadcastScalarToVector128UInt16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt16();
var result = Avx2.BroadcastScalarToVector128<UInt16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<UInt16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs
index 6cf303e86d..885d034c87 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128UInt32()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128UInt32
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128UInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128UInt32 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<UInt32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128UInt32()
+ static GenericUnaryOpTest__BroadcastScalarToVector128UInt32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128UInt32()
+ public GenericUnaryOpTest__BroadcastScalarToVector128UInt32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt32();
var result = Avx2.BroadcastScalarToVector128<UInt32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<UInt32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt64.cs
index 3a2acad9c0..2c263bb945 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector128.UInt64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector128UInt64()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector128UInt64
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector128UInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector128UInt64 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector128<UInt64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector128UInt64()
+ static GenericUnaryOpTest__BroadcastScalarToVector128UInt64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector128UInt64()
+ public GenericUnaryOpTest__BroadcastScalarToVector128UInt64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector128UInt64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector128UInt64();
var result = Avx2.BroadcastScalarToVector128<UInt64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector128<UInt64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Byte.cs
index 6710791d14..5b30e65ae5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Byte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256Byte()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Byte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Byte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256Byte
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256Byte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256Byte testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<Byte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256Byte()
+ static GenericUnaryOpTest__BroadcastScalarToVector256Byte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__BroadcastScalarToVector256Byte()
+ public GenericUnaryOpTest__BroadcastScalarToVector256Byte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Byte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Byte();
var result = Avx2.BroadcastScalarToVector256<Byte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<Byte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Double.cs
index df0ddd82bd..fe2ca74b3a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Double.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256Double()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Double();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Double();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256Double
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256Double
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256Double testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<Double>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Double, Double> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256Double()
+ static GenericUnaryOpTest__BroadcastScalarToVector256Double()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256Double()
+ public GenericUnaryOpTest__BroadcastScalarToVector256Double()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Double();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Double();
var result = Avx2.BroadcastScalarToVector256<Double>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<Double>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int16.cs
index 2fb3132015..1f676c9101 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256Int16()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Int16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Int16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256Int16
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256Int16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256Int16 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<Int16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256Int16()
+ static GenericUnaryOpTest__BroadcastScalarToVector256Int16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256Int16()
+ public GenericUnaryOpTest__BroadcastScalarToVector256Int16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Int16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Int16();
var result = Avx2.BroadcastScalarToVector256<Int16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<Int16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int32.cs
index 4d1792a46c..e4fccefa74 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256Int32()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Int32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Int32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256Int32
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256Int32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256Int32 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<Int32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256Int32()
+ static GenericUnaryOpTest__BroadcastScalarToVector256Int32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256Int32()
+ public GenericUnaryOpTest__BroadcastScalarToVector256Int32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Int32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Int32();
var result = Avx2.BroadcastScalarToVector256<Int32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<Int32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int64.cs
index feef4b9643..cbdbe7bbb3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Int64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256Int64()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Int64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Int64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256Int64
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256Int64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256Int64 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<Int64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256Int64()
+ static GenericUnaryOpTest__BroadcastScalarToVector256Int64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256Int64()
+ public GenericUnaryOpTest__BroadcastScalarToVector256Int64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Int64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Int64();
var result = Avx2.BroadcastScalarToVector256<Int64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<Int64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.SByte.cs
index 33a9ac1bda..bd268da8d8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.SByte.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256SByte()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256SByte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256SByte();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256SByte
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256SByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256SByte testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<SByte>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256SByte()
+ static GenericUnaryOpTest__BroadcastScalarToVector256SByte()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256SByte()
+ public GenericUnaryOpTest__BroadcastScalarToVector256SByte()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256SByte();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256SByte();
var result = Avx2.BroadcastScalarToVector256<SByte>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<SByte>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Single.cs
index 4fc18d7bc5..05fd2b6ce9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.Single.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256Single()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Single();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Single();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256Single
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256Single
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256Single testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<Single>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256Single()
+ static GenericUnaryOpTest__BroadcastScalarToVector256Single()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256Single()
+ public GenericUnaryOpTest__BroadcastScalarToVector256Single()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256Single();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256Single();
var result = Avx2.BroadcastScalarToVector256<Single>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<Single>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt16.cs
index 64c4e8109d..0c707ae5db 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256UInt16()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256UInt16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256UInt16();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256UInt16
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256UInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256UInt16 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<UInt16>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256UInt16()
+ static GenericUnaryOpTest__BroadcastScalarToVector256UInt16()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256UInt16()
+ public GenericUnaryOpTest__BroadcastScalarToVector256UInt16()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256UInt16();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256UInt16();
var result = Avx2.BroadcastScalarToVector256<UInt16>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<UInt16>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt32.cs
index 0136d9949c..0d8983158e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256UInt32()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256UInt32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256UInt32();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256UInt32
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256UInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256UInt32 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<UInt32>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256UInt32()
+ static GenericUnaryOpTest__BroadcastScalarToVector256UInt32()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256UInt32()
+ public GenericUnaryOpTest__BroadcastScalarToVector256UInt32()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256UInt32();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256UInt32();
var result = Avx2.BroadcastScalarToVector256<UInt32>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<UInt32>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt64.cs
index 2f9aaf8e57..025eaaef86 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/BroadcastScalarToVector256.UInt64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void BroadcastScalarToVector256UInt64()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256UInt64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256UInt64();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__BroadcastScalarToVector256UInt64
+ public sealed unsafe class GenericUnaryOpTest__BroadcastScalarToVector256UInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(GenericUnaryOpTest__BroadcastScalarToVector256UInt64 testClass)
+ {
+ var result = Avx2.BroadcastScalarToVector256<UInt64>(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__BroadcastScalarToVector256UInt64()
+ static GenericUnaryOpTest__BroadcastScalarToVector256UInt64()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__BroadcastScalarToVector256UInt64()
+ public GenericUnaryOpTest__BroadcastScalarToVector256UInt64()
{
Succeeded = true;
@@ -226,16 +256,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__BroadcastScalarToVector256UInt64();
+ var test = new GenericUnaryOpTest__BroadcastScalarToVector256UInt64();
var result = Avx2.BroadcastScalarToVector256<UInt64>(test._fld);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.BroadcastScalarToVector256<UInt64>(_fld);
@@ -243,6 +273,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.BroadcastScalarToVector256(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Byte.cs
index 7c0154216b..afb9c30510 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualByte testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualByte();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int16.cs
index 7e3304fa8e..a965da973c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualInt16 testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualInt16();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int32.cs
index a3c8d5b95b..0fc224bf06 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualInt32 testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualInt32();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int64.cs
index 4764dd4f3f..352fd1dc65 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualInt64 testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualInt64();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.SByte.cs
index 2616f1f7c3..aeda65b9e9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualSByte testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualSByte();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt16.cs
index 34835ba549..2ba1dd710b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualUInt16 testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualUInt16();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt32.cs
index 6dcaca2435..cc5d707e35 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualUInt32 testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualUInt32();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt64.cs
index 8df791cb9d..d3cb844aba 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareEqual.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualUInt64 testClass)
+ {
+ var result = Avx2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualUInt64();
var result = Avx2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int16.cs
index 804d24e87b..0ce6b5c03e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanInt16 testClass)
+ {
+ var result = Avx2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanInt16();
var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int32.cs
index e5cb25e464..859faa438a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanInt32 testClass)
+ {
+ var result = Avx2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanInt32();
var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int64.cs
index 0227f9d640..2df6d3f7f9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanInt64 testClass)
+ {
+ var result = Avx2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanInt64();
var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.SByte.cs
index b3d8c4dd0f..91e2a6f0c7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/CompareGreaterThan.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanSByte testClass)
+ {
+ var result = Avx2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanSByte();
var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.Store.cs
index 01e37463cb..a7afd6dafe 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Byte1Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Byte1Store();
+ var test = new ExtractStoreTest__ExtractVector128Byte1();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Byte1Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Byte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Byte1 testClass)
+ {
+ Avx2.ExtractVector128((Byte*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Byte1Store()
+ static ExtractStoreTest__ExtractVector128Byte1()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ExtractVector128Byte1Store()
+ public ExtractStoreTest__ExtractVector128Byte1()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Byte>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((Byte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Byte*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Byte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Byte*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Byte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Byte1Store();
+ var test = new ExtractStoreTest__ExtractVector128Byte1();
Avx2.ExtractVector128((Byte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((Byte*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((Byte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.cs
index 90ff66ba4a..a64c5d0507 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Byte1()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Byte1();
+ var test = new ExtractVector128Test__ExtractVector128Byte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Byte1
+ public sealed unsafe class ExtractVector128Test__ExtractVector128Byte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128Byte1 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Byte1()
+ static ExtractVector128Test__ExtractVector128Byte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ExtractVector128Byte1()
+ public ExtractVector128Test__ExtractVector128Byte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Byte1();
+ var test = new ExtractVector128Test__ExtractVector128Byte1();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.Store.cs
index 3f1b9644b4..9d1b4744e2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int161Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int161Store();
+ var test = new ExtractStoreTest__ExtractVector128Int161();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int161Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Int161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Int161 testClass)
+ {
+ Avx2.ExtractVector128((Int16*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int161Store()
+ static ExtractStoreTest__ExtractVector128Int161()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int161Store()
+ public ExtractStoreTest__ExtractVector128Int161()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Int16>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((Int16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Int16*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Int16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Int16*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Int16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int161Store();
+ var test = new ExtractStoreTest__ExtractVector128Int161();
Avx2.ExtractVector128((Int16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((Int16*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((Int16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.cs
index b92fc89c54..ca2c3a6701 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int161()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int161();
+ var test = new ExtractVector128Test__ExtractVector128Int161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int161
+ public sealed unsafe class ExtractVector128Test__ExtractVector128Int161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128Int161 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int161()
+ static ExtractVector128Test__ExtractVector128Int161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int161()
+ public ExtractVector128Test__ExtractVector128Int161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int161();
+ var test = new ExtractVector128Test__ExtractVector128Int161();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.Store.cs
index 35446e6e50..a7e671df15 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int321Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int321Store();
+ var test = new ExtractStoreTest__ExtractVector128Int321();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int321Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Int321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Int321 testClass)
+ {
+ Avx2.ExtractVector128((Int32*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int321Store()
+ static ExtractStoreTest__ExtractVector128Int321()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int321Store()
+ public ExtractStoreTest__ExtractVector128Int321()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Int32>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((Int32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Int32*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Int32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Int32*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Int32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int321Store();
+ var test = new ExtractStoreTest__ExtractVector128Int321();
Avx2.ExtractVector128((Int32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((Int32*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((Int32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.cs
index 8d6c800e8a..37732d5ac9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int321()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int321();
+ var test = new ExtractVector128Test__ExtractVector128Int321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int321
+ public sealed unsafe class ExtractVector128Test__ExtractVector128Int321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128Int321 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int321()
+ static ExtractVector128Test__ExtractVector128Int321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int321()
+ public ExtractVector128Test__ExtractVector128Int321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int321();
+ var test = new ExtractVector128Test__ExtractVector128Int321();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.Store.cs
index 9d74435270..2e848a3bab 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int641Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int641Store();
+ var test = new ExtractStoreTest__ExtractVector128Int641();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int641Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128Int641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128Int641 testClass)
+ {
+ Avx2.ExtractVector128((Int64*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int641Store()
+ static ExtractStoreTest__ExtractVector128Int641()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int641Store()
+ public ExtractStoreTest__ExtractVector128Int641()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<Int64>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((Int64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((Int64*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Int64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((Int64*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((Int64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int641Store();
+ var test = new ExtractStoreTest__ExtractVector128Int641();
Avx2.ExtractVector128((Int64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((Int64*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((Int64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.cs
index 82eb318b4c..5a60973c1f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128Int641()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int641();
+ var test = new ExtractVector128Test__ExtractVector128Int641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128Int641
+ public sealed unsafe class ExtractVector128Test__ExtractVector128Int641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128Int641 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128Int641()
+ static ExtractVector128Test__ExtractVector128Int641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ExtractVector128Int641()
+ public ExtractVector128Test__ExtractVector128Int641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128Int641();
+ var test = new ExtractVector128Test__ExtractVector128Int641();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.Store.cs
index 7af171776a..a0d9ca1e0d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128SByte1Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128SByte1Store();
+ var test = new ExtractStoreTest__ExtractVector128SByte1();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128SByte1Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128SByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128SByte1 testClass)
+ {
+ Avx2.ExtractVector128((SByte*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128SByte1Store()
+ static ExtractStoreTest__ExtractVector128SByte1()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__ExtractVector128SByte1Store()
+ public ExtractStoreTest__ExtractVector128SByte1()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<SByte>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((SByte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((SByte*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((SByte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((SByte*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((SByte*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128SByte1Store();
+ var test = new ExtractStoreTest__ExtractVector128SByte1();
Avx2.ExtractVector128((SByte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((SByte*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((SByte*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.cs
index a24c5deab7..b9f9c827ba 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.SByte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128SByte1()
{
- var test = new SimpleUnaryOpTest__ExtractVector128SByte1();
+ var test = new ExtractVector128Test__ExtractVector128SByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128SByte1
+ public sealed unsafe class ExtractVector128Test__ExtractVector128SByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128SByte1 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128SByte1()
+ static ExtractVector128Test__ExtractVector128SByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__ExtractVector128SByte1()
+ public ExtractVector128Test__ExtractVector128SByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128SByte1();
+ var test = new ExtractVector128Test__ExtractVector128SByte1();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.Store.cs
index f2da250625..6416d25c6d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt161Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt161Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt161();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt161Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128UInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128UInt161 testClass)
+ {
+ Avx2.ExtractVector128((UInt16*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt161Store()
+ static ExtractStoreTest__ExtractVector128UInt161()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt161Store()
+ public ExtractStoreTest__ExtractVector128UInt161()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<UInt16>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((UInt16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((UInt16*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((UInt16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((UInt16*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((UInt16*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt161Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt161();
Avx2.ExtractVector128((UInt16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((UInt16*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((UInt16*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.cs
index 93a99dfec2..324646e82d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt161()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt161();
+ var test = new ExtractVector128Test__ExtractVector128UInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt161
+ public sealed unsafe class ExtractVector128Test__ExtractVector128UInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128UInt161 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt161()
+ static ExtractVector128Test__ExtractVector128UInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt161()
+ public ExtractVector128Test__ExtractVector128UInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt161();
+ var test = new ExtractVector128Test__ExtractVector128UInt161();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs
index 5383285413..8a22c33eb9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt321Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt321Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt321();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt321Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128UInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128UInt321 testClass)
+ {
+ Avx2.ExtractVector128((UInt32*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt321Store()
+ static ExtractStoreTest__ExtractVector128UInt321()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt321Store()
+ public ExtractStoreTest__ExtractVector128UInt321()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<UInt32>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((UInt32*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((UInt32*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt321Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt321();
Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((UInt32*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.cs
index 88b415c50c..b916464edd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt321()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt321();
+ var test = new ExtractVector128Test__ExtractVector128UInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt321
+ public sealed unsafe class ExtractVector128Test__ExtractVector128UInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128UInt321 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt321()
+ static ExtractVector128Test__ExtractVector128UInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt321()
+ public ExtractVector128Test__ExtractVector128UInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt321();
+ var test = new ExtractVector128Test__ExtractVector128UInt321();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.Store.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.Store.cs
index 02ce1e7ded..11b2d9663d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.Store.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.Store.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt641Store()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt641Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt641();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt641Store
+ public sealed unsafe class ExtractStoreTest__ExtractVector128UInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractStoreTest__ExtractVector128UInt641 testClass)
+ {
+ Avx2.ExtractVector128((UInt64*)testClass._dataTable.outArrayPtr, _fld, 1);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -99,7 +127,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt641Store()
+ static ExtractStoreTest__ExtractVector128UInt641()
{
var random = new Random();
@@ -107,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt641Store()
+ public ExtractStoreTest__ExtractVector128UInt641()
{
Succeeded = true;
@@ -200,35 +228,55 @@ namespace JIT.HardwareIntrinsics.X86
_clsVar,
1
);
+
+ ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_UnsafeRead()
{
var firstOp = Unsafe.Read<Vector256<UInt64>>(_dataTable.inArrayPtr);
Avx2.ExtractVector128((UInt64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_Load()
{
var firstOp = Avx.LoadVector256((UInt64*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((UInt64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
public void RunLclVarScenario_LoadAligned()
{
var firstOp = Avx.LoadAlignedVector256((UInt64*)(_dataTable.inArrayPtr));
Avx2.ExtractVector128((UInt64*)_dataTable.outArrayPtr, firstOp, 1);
+ ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt641Store();
+ var test = new ExtractStoreTest__ExtractVector128UInt641();
Avx2.ExtractVector128((UInt64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
Avx2.ExtractVector128((UInt64*)_dataTable.outArrayPtr, _fld, 1);
+ ValidateResult(_fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ Avx2.ExtractVector128((UInt64*)_dataTable.outArrayPtr, test._fld, 1);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
}
public void RunUnsupportedScenario()
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.cs
index 227c62b056..350887fbe7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ExtractVector128.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractVector128UInt641()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt641();
+ var test = new ExtractVector128Test__ExtractVector128UInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractVector128UInt641
+ public sealed unsafe class ExtractVector128Test__ExtractVector128UInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractVector128Test__ExtractVector128UInt641 testClass)
+ {
+ var result = Avx2.ExtractVector128(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractVector128UInt641()
+ static ExtractVector128Test__ExtractVector128UInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractVector128UInt641()
+ public ExtractVector128Test__ExtractVector128UInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractVector128UInt641();
+ var test = new ExtractVector128Test__ExtractVector128UInt641();
var result = Avx2.ExtractVector128(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ExtractVector128(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ExtractVector128(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.Load.cs
index 4585907c87..d8f946d945 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Byte1Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Byte1Load();
+ var test = new InsertLoadTest__InsertVector128Byte1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Byte1Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Byte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Byte1 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (Byte*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Byte*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Byte, Byte, Byte> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Byte1Load()
+ static InsertLoadTest__InsertVector128Byte1()
{
var random = new Random();
@@ -114,7 +147,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__InsertVector128Byte1Load()
+ public InsertLoadTest__InsertVector128Byte1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Byte1Load();
+ var test = new InsertLoadTest__InsertVector128Byte1();
var result = Avx2.InsertVector128(test._fld1, (Byte*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Byte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (Byte*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Byte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (Byte*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Byte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.cs
index 4fe983215f..5a7351c6f0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Byte.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Byte1()
{
- var test = new SimpleBinaryOpTest__InsertVector128Byte1();
+ var test = new InsertVector128Test__InsertVector128Byte1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Byte1
+ public sealed unsafe class InsertVector128Test__InsertVector128Byte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128Byte1 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Byte, Byte, Byte> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Byte1()
+ static InsertVector128Test__InsertVector128Byte1()
{
var random = new Random();
@@ -114,7 +147,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__InsertVector128Byte1()
+ public InsertVector128Test__InsertVector128Byte1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Byte1();
+ var test = new InsertVector128Test__InsertVector128Byte1();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.Load.cs
index 073b5a1996..655ba083e4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int161Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int161Load();
+ var test = new InsertLoadTest__InsertVector128Int161();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int161Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Int161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(0,short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Int161 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (Int16*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Int16*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int16, Int16, Int16> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int161Load()
+ static InsertLoadTest__InsertVector128Int161()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleBinaryOpTest__InsertVector128Int161Load()
+ public InsertLoadTest__InsertVector128Int161()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int161Load();
+ var test = new InsertLoadTest__InsertVector128Int161();
var result = Avx2.InsertVector128(test._fld1, (Int16*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Int16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (Int16*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Int16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (Int16*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Int16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.cs
index bbb1906849..0b13a754b1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int16.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int161()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int161();
+ var test = new InsertVector128Test__InsertVector128Int161();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int161
+ public sealed unsafe class InsertVector128Test__InsertVector128Int161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128Int161 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int16, Int16, Int16> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int161()
+ static InsertVector128Test__InsertVector128Int161()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleBinaryOpTest__InsertVector128Int161()
+ public InsertVector128Test__InsertVector128Int161()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int161();
+ var test = new InsertVector128Test__InsertVector128Int161();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.Load.cs
index 7401013cf6..904e8b2d7e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int321Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int321Load();
+ var test = new InsertLoadTest__InsertVector128Int321();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int321Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Int321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Int321 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (Int32*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Int32*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int32, Int32, Int32> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int321Load()
+ static InsertLoadTest__InsertVector128Int321()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleBinaryOpTest__InsertVector128Int321Load()
+ public InsertLoadTest__InsertVector128Int321()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int321Load();
+ var test = new InsertLoadTest__InsertVector128Int321();
var result = Avx2.InsertVector128(test._fld1, (Int32*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Int32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (Int32*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Int32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (Int32*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Int32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.cs
index b50d7a8e22..5a519fd1e2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int32.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int321()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int321();
+ var test = new InsertVector128Test__InsertVector128Int321();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int321
+ public sealed unsafe class InsertVector128Test__InsertVector128Int321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128Int321 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int32, Int32, Int32> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int321()
+ static InsertVector128Test__InsertVector128Int321()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleBinaryOpTest__InsertVector128Int321()
+ public InsertVector128Test__InsertVector128Int321()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int321();
+ var test = new InsertVector128Test__InsertVector128Int321();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.Load.cs
index 40deb8cd89..1e0cf798b0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int641Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int641Load();
+ var test = new InsertLoadTest__InsertVector128Int641();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int641Load
+ public sealed unsafe class InsertLoadTest__InsertVector128Int641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128Int641 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (Int64*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (Int64*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int64, Int64, Int64> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int641Load()
+ static InsertLoadTest__InsertVector128Int641()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleBinaryOpTest__InsertVector128Int641Load()
+ public InsertLoadTest__InsertVector128Int641()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int641Load();
+ var test = new InsertLoadTest__InsertVector128Int641();
var result = Avx2.InsertVector128(test._fld1, (Int64*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (Int64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (Int64*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (Int64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (Int64*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (Int64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.cs
index d5629d5322..368a8c89c5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.Int64.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128Int641()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int641();
+ var test = new InsertVector128Test__InsertVector128Int641();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128Int641
+ public sealed unsafe class InsertVector128Test__InsertVector128Int641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128Int641 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int64, Int64, Int64> _dataTable;
- static SimpleBinaryOpTest__InsertVector128Int641()
+ static InsertVector128Test__InsertVector128Int641()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleBinaryOpTest__InsertVector128Int641()
+ public InsertVector128Test__InsertVector128Int641()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128Int641();
+ var test = new InsertVector128Test__InsertVector128Int641();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.Load.cs
index 9ccc2c547f..e90a626b97 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128SByte1Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128SByte1Load();
+ var test = new InsertLoadTest__InsertVector128SByte1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128SByte1Load
+ public sealed unsafe class InsertLoadTest__InsertVector128SByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(0,sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128SByte1 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (SByte*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (SByte*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<SByte, SByte, SByte> _dataTable;
- static SimpleBinaryOpTest__InsertVector128SByte1Load()
+ static InsertLoadTest__InsertVector128SByte1()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleBinaryOpTest__InsertVector128SByte1Load()
+ public InsertLoadTest__InsertVector128SByte1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128SByte1Load();
+ var test = new InsertLoadTest__InsertVector128SByte1();
var result = Avx2.InsertVector128(test._fld1, (SByte*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (SByte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (SByte*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (SByte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (SByte*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (SByte*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.cs
index 449acbf05d..4a39530ee6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.SByte.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128SByte1()
{
- var test = new SimpleBinaryOpTest__InsertVector128SByte1();
+ var test = new InsertVector128Test__InsertVector128SByte1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128SByte1
+ public sealed unsafe class InsertVector128Test__InsertVector128SByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128SByte1 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<SByte, SByte, SByte> _dataTable;
- static SimpleBinaryOpTest__InsertVector128SByte1()
+ static InsertVector128Test__InsertVector128SByte1()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleBinaryOpTest__InsertVector128SByte1()
+ public InsertVector128Test__InsertVector128SByte1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128SByte1();
+ var test = new InsertVector128Test__InsertVector128SByte1();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.Load.cs
index 0f561f65b6..83f1216c83 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt161Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt161Load();
+ var test = new InsertLoadTest__InsertVector128UInt161();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt161Load
+ public sealed unsafe class InsertLoadTest__InsertVector128UInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128UInt161 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (UInt16*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (UInt16*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt16, UInt16, UInt16> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt161Load()
+ static InsertLoadTest__InsertVector128UInt161()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt161Load()
+ public InsertLoadTest__InsertVector128UInt161()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt161Load();
+ var test = new InsertLoadTest__InsertVector128UInt161();
var result = Avx2.InsertVector128(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (UInt16*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (UInt16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (UInt16*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.cs
index 1c2c0b3247..6d47444524 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt16.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt161()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt161();
+ var test = new InsertVector128Test__InsertVector128UInt161();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt161
+ public sealed unsafe class InsertVector128Test__InsertVector128UInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128UInt161 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt16, UInt16, UInt16> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt161()
+ static InsertVector128Test__InsertVector128UInt161()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt161()
+ public InsertVector128Test__InsertVector128UInt161()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt161();
+ var test = new InsertVector128Test__InsertVector128UInt161();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.Load.cs
index 1384636552..5f91467c89 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt321Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt321Load();
+ var test = new InsertLoadTest__InsertVector128UInt321();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt321Load
+ public sealed unsafe class InsertLoadTest__InsertVector128UInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128UInt321 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (UInt32*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (UInt32*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt32, UInt32, UInt32> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt321Load()
+ static InsertLoadTest__InsertVector128UInt321()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt321Load()
+ public InsertLoadTest__InsertVector128UInt321()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt321Load();
+ var test = new InsertLoadTest__InsertVector128UInt321();
var result = Avx2.InsertVector128(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (UInt32*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (UInt32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (UInt32*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.cs
index 93778dd893..a6ae9d1f90 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt32.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt321()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt321();
+ var test = new InsertVector128Test__InsertVector128UInt321();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt321
+ public sealed unsafe class InsertVector128Test__InsertVector128UInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128UInt321 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt32, UInt32, UInt32> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt321()
+ static InsertVector128Test__InsertVector128UInt321()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt321()
+ public InsertVector128Test__InsertVector128UInt321()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt321();
+ var test = new InsertVector128Test__InsertVector128UInt321();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.Load.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.Load.cs
index 5cb7d0c2e3..9cd284b492 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.Load.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.Load.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt641Load()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt641Load();
+ var test = new InsertLoadTest__InsertVector128UInt641();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt641Load
+ public sealed unsafe class InsertLoadTest__InsertVector128UInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0,int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertLoadTest__InsertVector128UInt641 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, (UInt64*)testClass._dataTable.inArray2Ptr, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, (UInt64*)testClass._dataTable.inArray2Ptr, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt64, UInt64, UInt64> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt641Load()
+ static InsertLoadTest__InsertVector128UInt641()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt641Load()
+ public InsertLoadTest__InsertVector128UInt641()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt641Load();
+ var test = new InsertLoadTest__InsertVector128UInt641();
var result = Avx2.InsertVector128(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, (UInt64*)(_dataTable.inArray2Ptr), 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, (UInt64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, (UInt64*)(_dataTable.inArray2Ptr), _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.cs
index 38cb48a34c..6d8ddbd998 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/InsertVector128.UInt64.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertVector128UInt641()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt641();
+ var test = new InsertVector128Test__InsertVector128UInt641();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertVector128UInt641
+ public sealed unsafe class InsertVector128Test__InsertVector128UInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertVector128UInt641 testClass)
+ {
+ var result = Avx2.InsertVector128(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt64, UInt64, UInt64> _dataTable;
- static SimpleBinaryOpTest__InsertVector128UInt641()
+ static InsertVector128Test__InsertVector128UInt641()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleBinaryOpTest__InsertVector128UInt641()
+ public InsertVector128Test__InsertVector128UInt641()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertVector128UInt641();
+ var test = new InsertVector128Test__InsertVector128UInt641();
var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.InsertVector128(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.InsertVector128(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Byte.cs
index 00af5a5699..4deb733837 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(byte.MinValue, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(byte.MinValue, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxByte testClass)
+ {
+ var result = Avx2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxByte();
var result = Avx2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int16.cs
index bd8f391a29..032f73185b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxInt16 testClass)
+ {
+ var result = Avx2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxInt16();
var result = Avx2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int32.cs
index e9c45952b0..d57682b463 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxInt32 testClass)
+ {
+ var result = Avx2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxInt32();
var result = Avx2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.SByte.cs
index cf8f8095af..a8bf9c3240 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxSByte testClass)
+ {
+ var result = Avx2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxSByte();
var result = Avx2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt16.cs
index 147cddaf5b..f9ad906ba5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxUInt16 testClass)
+ {
+ var result = Avx2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxUInt16();
var result = Avx2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt32.cs
index 98982ff2f6..be90bd3290 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Max.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxUInt32 testClass)
+ {
+ var result = Avx2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxUInt32();
var result = Avx2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Byte.cs
index 1144fe86e9..37620e66b3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(byte.MinValue, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(byte.MinValue, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinByte testClass)
+ {
+ var result = Avx2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinByte();
var result = Avx2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int16.cs
index 5cd0fd5707..11cb6056f8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinInt16 testClass)
+ {
+ var result = Avx2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinInt16();
var result = Avx2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int32.cs
index 280dbfaa70..4770ea82f4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinInt32 testClass)
+ {
+ var result = Avx2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinInt32();
var result = Avx2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.SByte.cs
index c2cd75a4a2..eb114cca59 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinSByte testClass)
+ {
+ var result = Avx2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinSByte();
var result = Avx2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt16.cs
index 9b07ddfd83..0d70c1a523 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinUInt16 testClass)
+ {
+ var result = Avx2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinUInt16();
var result = Avx2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt32.cs
index 8272e8582a..fd0c2a7c03 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Min.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinUInt32 testClass)
+ {
+ var result = Avx2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinUInt32();
var result = Avx2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Byte.cs
index 6db5c68632..db367289ee 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrByte testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrByte();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int16.cs
index 63c83e45a7..e58a5b1949 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrInt16 testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrInt16();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int32.cs
index 8ee4521b25..ee8098e70c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrInt32 testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrInt32();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int64.cs
index 1e13397d30..c701d819bf 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrInt64 testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrInt64();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.SByte.cs
index cfead69ed5..4900f005e3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrSByte testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrSByte();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt16.cs
index 98459c4d6c..818df49fa2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrUInt16 testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrUInt16();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt32.cs
index 8bb9bbbc06..c1c7a85958 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrUInt32 testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrUInt32();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt64.cs
index ffd4564e3b..9b405fc3c2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Or.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrUInt64 testClass)
+ {
+ var result = Avx2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrUInt64();
var result = Avx2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int32.2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int32.2.cs
index 1f650764e9..53e4f1e549 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int32.2.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int32.2.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void Permute2x128Int322()
{
- var test = new SimpleBinaryOpTest__Permute2x128Int322();
+ var test = new ImmBinaryOpTest__Permute2x128Int322();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__Permute2x128Int322
+ public sealed unsafe class ImmBinaryOpTest__Permute2x128Int322
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmBinaryOpTest__Permute2x128Int322 testClass)
+ {
+ var result = Avx2.Permute2x128(_fld1, _fld2, 2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -102,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int32, Int32, Int32> _dataTable;
- static SimpleBinaryOpTest__Permute2x128Int322()
+ static ImmBinaryOpTest__Permute2x128Int322()
{
var random = new Random();
@@ -112,7 +145,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleBinaryOpTest__Permute2x128Int322()
+ public ImmBinaryOpTest__Permute2x128Int322()
{
Succeeded = true;
@@ -249,16 +282,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__Permute2x128Int322();
+ var test = new ImmBinaryOpTest__Permute2x128Int322();
var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Permute2x128(_fld1, _fld2, 2);
@@ -266,6 +299,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int64.2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int64.2.cs
index 0662227675..b045fc6b46 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int64.2.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.Int64.2.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void Permute2x128Int642()
{
- var test = new SimpleBinaryOpTest__Permute2x128Int642();
+ var test = new ImmBinaryOpTest__Permute2x128Int642();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__Permute2x128Int642
+ public sealed unsafe class ImmBinaryOpTest__Permute2x128Int642
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmBinaryOpTest__Permute2x128Int642 testClass)
+ {
+ var result = Avx2.Permute2x128(_fld1, _fld2, 2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -102,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Int64, Int64, Int64> _dataTable;
- static SimpleBinaryOpTest__Permute2x128Int642()
+ static ImmBinaryOpTest__Permute2x128Int642()
{
var random = new Random();
@@ -112,7 +145,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleBinaryOpTest__Permute2x128Int642()
+ public ImmBinaryOpTest__Permute2x128Int642()
{
Succeeded = true;
@@ -249,16 +282,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__Permute2x128Int642();
+ var test = new ImmBinaryOpTest__Permute2x128Int642();
var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Permute2x128(_fld1, _fld2, 2);
@@ -266,6 +299,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt32.2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt32.2.cs
index ca46e060b0..75b420e194 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt32.2.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt32.2.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void Permute2x128UInt322()
{
- var test = new SimpleBinaryOpTest__Permute2x128UInt322();
+ var test = new ImmBinaryOpTest__Permute2x128UInt322();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__Permute2x128UInt322
+ public sealed unsafe class ImmBinaryOpTest__Permute2x128UInt322
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmBinaryOpTest__Permute2x128UInt322 testClass)
+ {
+ var result = Avx2.Permute2x128(_fld1, _fld2, 2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -102,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt32, UInt32, UInt32> _dataTable;
- static SimpleBinaryOpTest__Permute2x128UInt322()
+ static ImmBinaryOpTest__Permute2x128UInt322()
{
var random = new Random();
@@ -112,7 +145,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleBinaryOpTest__Permute2x128UInt322()
+ public ImmBinaryOpTest__Permute2x128UInt322()
{
Succeeded = true;
@@ -249,16 +282,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__Permute2x128UInt322();
+ var test = new ImmBinaryOpTest__Permute2x128UInt322();
var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Permute2x128(_fld1, _fld2, 2);
@@ -266,6 +299,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt64.2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt64.2.cs
index 15a271b266..23b52fddda 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt64.2.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Permute2x128.UInt64.2.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void Permute2x128UInt642()
{
- var test = new SimpleBinaryOpTest__Permute2x128UInt642();
+ var test = new ImmBinaryOpTest__Permute2x128UInt642();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__Permute2x128UInt642
+ public sealed unsafe class ImmBinaryOpTest__Permute2x128UInt642
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmBinaryOpTest__Permute2x128UInt642 testClass)
+ {
+ var result = Avx2.Permute2x128(_fld1, _fld2, 2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -102,7 +135,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<UInt64, UInt64, UInt64> _dataTable;
- static SimpleBinaryOpTest__Permute2x128UInt642()
+ static ImmBinaryOpTest__Permute2x128UInt642()
{
var random = new Random();
@@ -112,7 +145,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleBinaryOpTest__Permute2x128UInt642()
+ public ImmBinaryOpTest__Permute2x128UInt642()
{
Succeeded = true;
@@ -249,16 +282,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__Permute2x128UInt642();
+ var test = new ImmBinaryOpTest__Permute2x128UInt642();
var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Permute2x128(_fld1, _fld2, 2);
@@ -266,6 +299,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Permute2x128(test._fld1, test._fld2, 2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.1.cs
index 4cc6a69350..db35fbb0d5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt161 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt161()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt161()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt161();
var result = Avx2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.16.cs
index a38f968bf1..58a1ddba9b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt1616
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt1616 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt1616()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt1616()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt1616();
var result = Avx2.ShiftLeftLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.1.cs
index a7cd9f9b2c..52c615099c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt321 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt321()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt321()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt321();
var result = Avx2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.32.cs
index f4fd0c2844..8a82a1ed5c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt3232
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt3232 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt3232()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt3232()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt3232();
var result = Avx2.ShiftLeftLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.1.cs
index 346d1b0e9e..91a5472570 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt641 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt641()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt641()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt641();
var result = Avx2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.64.cs
index 3c9520d17b..012bfd4552 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.Int64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt6464
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt6464 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt6464()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt6464()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt6464();
var result = Avx2.ShiftLeftLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.1.cs
index 82ff5e985d..e205a106a0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt161 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt161()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt161()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt161();
var result = Avx2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.16.cs
index 9704991ef2..1ee092bbf8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt1616
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt1616 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt1616()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt1616()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt1616();
var result = Avx2.ShiftLeftLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.1.cs
index e7a4c80edb..bc359cf0af 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt321 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt321()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt321()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt321();
var result = Avx2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.32.cs
index 69a727d6e8..3300fb65c0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt3232
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt3232 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt3232()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt3232()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt3232();
var result = Avx2.ShiftLeftLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.1.cs
index 145d23313d..e54fae7dff 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt641 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt641()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt641()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt641();
var result = Avx2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.64.cs
index f71e4ce517..42bd270599 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical.UInt64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt6464
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt6464 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt6464()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt6464()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt6464();
var result = Avx2.ShiftLeftLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Byte.1.cs
index 6a84ddf7be..f4cfb416de 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneByte1()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int16.1.cs
index c79430a237..bcdf259438 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int32.1.cs
index c215777974..332a068005 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int64.1.cs
index 2ff1810c71..fd9b4ca225 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.SByte.1.cs
index 1f7cca825a..73065285aa 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.SByte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneSByte1()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt16.1.cs
index b2a019de44..ffc700111f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt32.1.cs
index 2ab40fd699..955cad2c37 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt64.1.cs
index 7f75ba48d4..47557048d9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftLeftLogical128BitLane.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641 testClass)
+ {
+ var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.1.cs
index 92717b230c..e68514c2fe 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt161();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt161 testClass)
+ {
+ var result = Avx2.ShiftRightArithmetic(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt161()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt161()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt161();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt161();
var result = Avx2.ShiftRightArithmetic(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightArithmetic(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightArithmetic(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.16.cs
index 36d5864e1d..a7b32f8a3f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt1616
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt1616 testClass)
+ {
+ var result = Avx2.ShiftRightArithmetic(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt1616()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt1616()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt1616();
var result = Avx2.ShiftRightArithmetic(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightArithmetic(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightArithmetic(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.1.cs
index 266b014377..1f12a87c34 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt321();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt321 testClass)
+ {
+ var result = Avx2.ShiftRightArithmetic(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt321()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt321()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt321();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt321();
var result = Avx2.ShiftRightArithmetic(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightArithmetic(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightArithmetic(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.32.cs
index 0869e6316d..95f2cfcb14 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightArithmetic.Int32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt3232
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt3232 testClass)
+ {
+ var result = Avx2.ShiftRightArithmetic(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt3232()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt3232()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt3232();
var result = Avx2.ShiftRightArithmetic(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightArithmetic(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightArithmetic(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.1.cs
index c16999ca66..103eab6041 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt161 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt161()
+ static ImmUnaryOpTest__ShiftRightLogicalInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt161()
+ public ImmUnaryOpTest__ShiftRightLogicalInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt161();
var result = Avx2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.16.cs
index d6edfd687d..094a730e9c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt1616
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt1616 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt1616()
+ static ImmUnaryOpTest__ShiftRightLogicalInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt1616()
+ public ImmUnaryOpTest__ShiftRightLogicalInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt1616();
var result = Avx2.ShiftRightLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.1.cs
index f5d0f5d1bd..af532cbcb4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt321 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt321()
+ static ImmUnaryOpTest__ShiftRightLogicalInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt321()
+ public ImmUnaryOpTest__ShiftRightLogicalInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt321();
var result = Avx2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.32.cs
index 82a1c7ac6c..eb230872d2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt3232
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt3232 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt3232()
+ static ImmUnaryOpTest__ShiftRightLogicalInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt3232()
+ public ImmUnaryOpTest__ShiftRightLogicalInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt3232();
var result = Avx2.ShiftRightLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.1.cs
index d0a2651ca0..e95aab1d06 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt641 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt641()
+ static ImmUnaryOpTest__ShiftRightLogicalInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt641()
+ public ImmUnaryOpTest__ShiftRightLogicalInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt641();
var result = Avx2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.64.cs
index aa0b01e5d5..5c04086f80 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.Int64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt6464
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt6464 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt6464()
+ static ImmUnaryOpTest__ShiftRightLogicalInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt6464()
+ public ImmUnaryOpTest__ShiftRightLogicalInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt6464();
var result = Avx2.ShiftRightLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.1.cs
index 6b2b2a804b..5b28ae3bb6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt161 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt161()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt161()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt161();
var result = Avx2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.16.cs
index 0a15497903..4d4c965c20 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt1616
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt1616 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt1616()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt1616()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt1616();
var result = Avx2.ShiftRightLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.1.cs
index dc966abcf1..2a479c31ba 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt321 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt321()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt321()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt321();
var result = Avx2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.32.cs
index cc21fd1b12..44903ed8f4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt3232
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt3232 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt3232()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt3232()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt3232();
var result = Avx2.ShiftRightLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.1.cs
index edcb324936..e8be2c9f40 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt641 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt641()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt641()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt641();
var result = Avx2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.64.cs
index 737f16c0db..cd1ceb4a0d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical.UInt64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt6464
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt6464 testClass)
+ {
+ var result = Avx2.ShiftRightLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt6464()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt6464()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt6464();
var result = Avx2.ShiftRightLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Byte.1.cs
index 93078a8392..3592d4d53f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneByte1()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int16.1.cs
index ee65a4ae23..70e148a085 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int32.1.cs
index 422f23570a..161ec96741 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int64.1.cs
index 1286612155..7de670c759 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.SByte.1.cs
index d9221f3fb2..90036bff9d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.SByte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneSByte1()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt16.1.cs
index 8b1f3fa7c1..c936a2def8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt32.1.cs
index 074706267e..4fe70b99ae 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt64.1.cs
index ba0f42a631..0bcabd2091 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/ShiftRightLogical128BitLane.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641 testClass)
+ {
+ var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Byte.cs
index 73723503f9..3f08373745 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractByte testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractByte();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int16.cs
index 4729c2e9cf..461957ea99 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractInt16 testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractInt16();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int32.cs
index d9274da2fe..3596ec2524 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractInt32 testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractInt32();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int64.cs
index 2066b4116c..225668f663 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractInt64 testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractInt64();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.SByte.cs
index cf5c34531c..4ee5b3873c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSByte testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSByte();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt16.cs
index eb9d675a98..596840194e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractUInt16 testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractUInt16();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt32.cs
index 6b0d32edf8..bd57ecb0b3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractUInt32 testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractUInt32();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt64.cs
index 34953a389a..f2dc9a01db 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Subtract.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractUInt64 testClass)
+ {
+ var result = Avx2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractUInt64();
var result = Avx2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Byte.cs
index aa3bc6ba6e..c279b1d43e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorByte
{
+ private struct TestStruct
+ {
+ public Vector256<Byte> _fld1;
+ public Vector256<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorByte testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorByte();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int16.cs
index a7866e8ec0..f7e1d9a535 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorInt16
{
+ private struct TestStruct
+ {
+ public Vector256<Int16> _fld1;
+ public Vector256<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorInt16 testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorInt16();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int32.cs
index 809b1f7ed2..1f7310e1c8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorInt32
{
+ private struct TestStruct
+ {
+ public Vector256<Int32> _fld1;
+ public Vector256<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorInt32 testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorInt32();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int64.cs
index 0276a29e07..2c02138369 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorInt64
{
+ private struct TestStruct
+ {
+ public Vector256<Int64> _fld1;
+ public Vector256<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorInt64 testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorInt64();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.SByte.cs
index 49f5784cf1..263dc54a1e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorSByte
{
+ private struct TestStruct
+ {
+ public Vector256<SByte> _fld1;
+ public Vector256<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorSByte testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorSByte();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt16.cs
index c175a5dd65..002a38b72a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorUInt16
{
+ private struct TestStruct
+ {
+ public Vector256<UInt16> _fld1;
+ public Vector256<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorUInt16 testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorUInt16();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt32.cs
index 924d6705e7..865aff5e75 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorUInt32
{
+ private struct TestStruct
+ {
+ public Vector256<UInt32> _fld1;
+ public Vector256<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorUInt32 testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorUInt32();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt64.cs
index d178951b04..0ed91f44fc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Avx2/Xor.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorUInt64
{
+ private struct TestStruct
+ {
+ public Vector256<UInt64> _fld1;
+ public Vector256<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorUInt64 testClass)
+ {
+ var result = Avx2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorUInt64();
var result = Avx2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Avx2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Avx2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt32.cs
index d91124d0cb..a8f5f85452 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt32.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,29 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarBinaryOpTest__AndNotUInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld1;
+ public UInt32 _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld1 = (uint)(random.Next(0, int.MaxValue));
+ testStruct._fld2 = (uint)(random.Next(0, int.MaxValue));
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarBinaryOpTest__AndNotUInt32 testClass)
+ {
+ var result = Bmi1.AndNot(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static UInt32 _data1;
private static UInt32 _data2;
@@ -79,7 +108,7 @@ namespace JIT.HardwareIntrinsics.X86
Succeeded = true;
var random = new Random();
-
+
_fld1 = (uint)(random.Next(0, int.MaxValue));
_fld2 = (uint)(random.Next(0, int.MaxValue));
@@ -131,7 +160,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data1, data2, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarBinaryOpTest__AndNotUInt32();
var result = Bmi1.AndNot(test._fld1, test._fld2);
@@ -139,12 +168,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.AndNot(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.AndNot(test._fld1, test._fld2);
+
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt64.cs
index eac6861017..1758aac9bc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/AndNot.UInt64.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,29 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarBinaryOpTest__AndNotUInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld1;
+ public UInt64 _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld1 = (ulong)(random.Next(0, int.MaxValue));
+ testStruct._fld2 = (ulong)(random.Next(0, int.MaxValue));
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarBinaryOpTest__AndNotUInt64 testClass)
+ {
+ var result = Bmi1.AndNot(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static UInt64 _data1;
private static UInt64 _data2;
@@ -79,7 +108,7 @@ namespace JIT.HardwareIntrinsics.X86
Succeeded = true;
var random = new Random();
-
+
_fld1 = (ulong)(random.Next(0, int.MaxValue));
_fld2 = (ulong)(random.Next(0, int.MaxValue));
@@ -131,7 +160,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data1, data2, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarBinaryOpTest__AndNotUInt64();
var result = Bmi1.AndNot(test._fld1, test._fld2);
@@ -139,12 +168,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.AndNot(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.AndNot(test._fld1, test._fld2);
+
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt32.cs
index c912b70b1a..998301c65c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt32.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__ExtractLowestSetBitUInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (uint)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__ExtractLowestSetBitUInt32 testClass)
+ {
+ var result = Bmi1.ExtractLowestSetBit(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt32 _data;
private static UInt32 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__ExtractLowestSetBitUInt32();
var result = Bmi1.ExtractLowestSetBit(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.ExtractLowestSetBit(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.ExtractLowestSetBit(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt64.cs
index 27fbd0ef42..791ec9b9b9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ExtractLowestSetBit.UInt64.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__ExtractLowestSetBitUInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (ulong)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__ExtractLowestSetBitUInt64 testClass)
+ {
+ var result = Bmi1.ExtractLowestSetBit(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt64 _data;
private static UInt64 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__ExtractLowestSetBitUInt64();
var result = Bmi1.ExtractLowestSetBit(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.ExtractLowestSetBit(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.ExtractLowestSetBit(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt32.cs
index dbef6f77cd..9a11c71316 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt32.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__GetMaskUpToLowestSetBitUInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (uint)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__GetMaskUpToLowestSetBitUInt32 testClass)
+ {
+ var result = Bmi1.GetMaskUpToLowestSetBit(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt32 _data;
private static UInt32 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__GetMaskUpToLowestSetBitUInt32();
var result = Bmi1.GetMaskUpToLowestSetBit(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.GetMaskUpToLowestSetBit(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.GetMaskUpToLowestSetBit(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt64.cs
index 9fa4932b7a..6eef299ad1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/GetMaskUpToLowestSetBit.UInt64.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__GetMaskUpToLowestSetBitUInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (ulong)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__GetMaskUpToLowestSetBitUInt64 testClass)
+ {
+ var result = Bmi1.GetMaskUpToLowestSetBit(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt64 _data;
private static UInt64 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__GetMaskUpToLowestSetBitUInt64();
var result = Bmi1.GetMaskUpToLowestSetBit(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.GetMaskUpToLowestSetBit(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.GetMaskUpToLowestSetBit(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt32.cs
index d42e48119b..ff12e0399e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt32.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__ResetLowestSetBitUInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (uint)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__ResetLowestSetBitUInt32 testClass)
+ {
+ var result = Bmi1.ResetLowestSetBit(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt32 _data;
private static UInt32 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__ResetLowestSetBitUInt32();
var result = Bmi1.ResetLowestSetBit(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.ResetLowestSetBit(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.ResetLowestSetBit(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt64.cs
index 4ca1c8afd9..bc505e095e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/ResetLowestSetBit.UInt64.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__ResetLowestSetBitUInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (ulong)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__ResetLowestSetBitUInt64 testClass)
+ {
+ var result = Bmi1.ResetLowestSetBit(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt64 _data;
private static UInt64 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__ResetLowestSetBitUInt64();
var result = Bmi1.ResetLowestSetBit(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.ResetLowestSetBit(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.ResetLowestSetBit(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt32.cs
index 8dc97062ba..5349394db5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt32.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__TrailingZeroCountUInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (uint)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__TrailingZeroCountUInt32 testClass)
+ {
+ var result = Bmi1.TrailingZeroCount(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt32 _data;
private static UInt32 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__TrailingZeroCountUInt32();
var result = Bmi1.TrailingZeroCount(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.TrailingZeroCount(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.TrailingZeroCount(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt64.cs
index 9de8e87c5f..8e8cda2a66 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi1/TrailingZeroCount.UInt64.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,26 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarUnaryOpTest__TrailingZeroCountUInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (ulong)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarUnaryOpTest__TrailingZeroCountUInt64 testClass)
+ {
+ var result = Bmi1.TrailingZeroCount(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static UInt64 _data;
private static UInt64 _clsVar;
@@ -120,7 +146,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarUnaryOpTest__TrailingZeroCountUInt64();
var result = Bmi1.TrailingZeroCount(test._fld);
@@ -128,12 +154,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi1.TrailingZeroCount(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi1.TrailingZeroCount(test._fld);
+
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt32.cs
index 66e5a59efa..9a56e891ec 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt32.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,29 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarBinaryOpTest__ParallelBitDepositUInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld1;
+ public UInt32 _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld1 = (uint)(random.Next(0, int.MaxValue));
+ testStruct._fld2 = (uint)(random.Next(0, int.MaxValue));
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarBinaryOpTest__ParallelBitDepositUInt32 testClass)
+ {
+ var result = Bmi2.ParallelBitDeposit(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static UInt32 _data1;
private static UInt32 _data2;
@@ -79,7 +108,7 @@ namespace JIT.HardwareIntrinsics.X86
Succeeded = true;
var random = new Random();
-
+
_fld1 = (uint)(random.Next(0, int.MaxValue));
_fld2 = (uint)(random.Next(0, int.MaxValue));
@@ -131,7 +160,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data1, data2, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarBinaryOpTest__ParallelBitDepositUInt32();
var result = Bmi2.ParallelBitDeposit(test._fld1, test._fld2);
@@ -139,12 +168,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi2.ParallelBitDeposit(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi2.ParallelBitDeposit(test._fld1, test._fld2);
+
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt64.cs
index 91ed8bd5f8..e95212bb26 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitDeposit.UInt64.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,29 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarBinaryOpTest__ParallelBitDepositUInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld1;
+ public UInt64 _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld1 = (ulong)(random.Next(0, int.MaxValue));
+ testStruct._fld2 = (ulong)(random.Next(0, int.MaxValue));
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarBinaryOpTest__ParallelBitDepositUInt64 testClass)
+ {
+ var result = Bmi2.ParallelBitDeposit(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static UInt64 _data1;
private static UInt64 _data2;
@@ -79,7 +108,7 @@ namespace JIT.HardwareIntrinsics.X86
Succeeded = true;
var random = new Random();
-
+
_fld1 = (ulong)(random.Next(0, int.MaxValue));
_fld2 = (ulong)(random.Next(0, int.MaxValue));
@@ -131,7 +160,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data1, data2, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarBinaryOpTest__ParallelBitDepositUInt64();
var result = Bmi2.ParallelBitDeposit(test._fld1, test._fld2);
@@ -139,12 +168,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi2.ParallelBitDeposit(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi2.ParallelBitDeposit(test._fld1, test._fld2);
+
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt32.cs
index 67258ee345..5d3e651af8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt32.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,29 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarBinaryOpTest__ParallelBitExtractUInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld1;
+ public UInt32 _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld1 = (uint)(random.Next(0, int.MaxValue));
+ testStruct._fld2 = (uint)(random.Next(0, int.MaxValue));
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarBinaryOpTest__ParallelBitExtractUInt32 testClass)
+ {
+ var result = Bmi2.ParallelBitExtract(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static UInt32 _data1;
private static UInt32 _data2;
@@ -79,7 +108,7 @@ namespace JIT.HardwareIntrinsics.X86
Succeeded = true;
var random = new Random();
-
+
_fld1 = (uint)(random.Next(0, int.MaxValue));
_fld2 = (uint)(random.Next(0, int.MaxValue));
@@ -131,7 +160,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data1, data2, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarBinaryOpTest__ParallelBitExtractUInt32();
var result = Bmi2.ParallelBitExtract(test._fld1, test._fld2);
@@ -139,12 +168,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi2.ParallelBitExtract(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi2.ParallelBitExtract(test._fld1, test._fld2);
+
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt64.cs
index 6bcf7c5650..bdb246d0cb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Bmi2/ParallelBitExtract.UInt64.cs
@@ -37,11 +37,17 @@ namespace JIT.HardwareIntrinsics.X86
// Validates passing a local works, using Unsafe.ReadUnaligned
test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -58,6 +64,29 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarBinaryOpTest__ParallelBitExtractUInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld1;
+ public UInt64 _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld1 = (ulong)(random.Next(0, int.MaxValue));
+ testStruct._fld2 = (ulong)(random.Next(0, int.MaxValue));
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarBinaryOpTest__ParallelBitExtractUInt64 testClass)
+ {
+ var result = Bmi2.ParallelBitExtract(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static UInt64 _data1;
private static UInt64 _data2;
@@ -79,7 +108,7 @@ namespace JIT.HardwareIntrinsics.X86
Succeeded = true;
var random = new Random();
-
+
_fld1 = (ulong)(random.Next(0, int.MaxValue));
_fld2 = (ulong)(random.Next(0, int.MaxValue));
@@ -131,7 +160,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(data1, data2, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarBinaryOpTest__ParallelBitExtractUInt64();
var result = Bmi2.ParallelBitExtract(test._fld1, test._fld2);
@@ -139,12 +168,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Bmi2.ParallelBitExtract(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Bmi2.ParallelBitExtract(test._fld1, test._fld2);
+
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Double.cs
index bb0fd1e06f..19bcf0d97c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddDouble testClass)
+ {
+ var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddDouble();
var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Single.cs
index b968359c5b..69f7d15ef7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAdd.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddSingle testClass)
+ {
+ var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddSingle();
var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Double.cs
index 9bdded606a..6747a97ea6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddNegatedDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddNegatedDouble testClass)
+ {
+ var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddNegatedDouble();
var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Single.cs
index fea3ec7666..0c1ab5e503 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegated.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddNegatedSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddNegatedSingle testClass)
+ {
+ var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddNegatedSingle();
var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Double.cs
index 72cb3af14a..dcf00b0270 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddNegatedScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddNegatedScalarDouble testClass)
+ {
+ var result = Fma.MultiplyAddNegatedScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddNegatedScalarDouble();
var result = Fma.MultiplyAddNegatedScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddNegatedScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddNegatedScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Single.cs
index 78e5cdaff9..a9c206540d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddNegatedScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddNegatedScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddNegatedScalarSingle testClass)
+ {
+ var result = Fma.MultiplyAddNegatedScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddNegatedScalarSingle();
var result = Fma.MultiplyAddNegatedScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddNegatedScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddNegatedScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Double.cs
index 666bb1c3b3..83700abf1e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddScalarDouble testClass)
+ {
+ var result = Fma.MultiplyAddScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddScalarDouble();
var result = Fma.MultiplyAddScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Single.cs
index ca4914fbb6..64a8f08278 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddScalarSingle testClass)
+ {
+ var result = Fma.MultiplyAddScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddScalarSingle();
var result = Fma.MultiplyAddScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Double.cs
index 51c5f67e0a..2df1a1406f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplyAddSubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplyAddSubtractDouble testClass)
+ {
+ var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplyAddSubtractDouble();
var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Single.cs
index 7e847db004..401225b4b9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplyAddSubtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplyAddSubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplyAddSubtractSingle testClass)
+ {
+ var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplyAddSubtractSingle();
var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Double.cs
index 95681f3730..db449902bc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractDouble testClass)
+ {
+ var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractDouble();
var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Single.cs
index b5878bc0bd..820e9d3c0b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractSingle testClass)
+ {
+ var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractSingle();
var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Double.cs
index a1691448d4..1c8abb7495 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplySubtractAddDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplySubtractAddDouble testClass)
+ {
+ var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplySubtractAddDouble();
var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Single.cs
index 2d4486b0ff..a62a6a7b49 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractAdd.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplySubtractAddSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplySubtractAddSingle testClass)
+ {
+ var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplySubtractAddSingle();
var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Double.cs
index 87a05cccf8..70fc5309af 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractNegatedDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractNegatedDouble testClass)
+ {
+ var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractNegatedDouble();
var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Single.cs
index 4a69878c7a..08f3079456 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegated.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractNegatedSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractNegatedSingle testClass)
+ {
+ var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractNegatedSingle();
var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Double.cs
index d24ee61870..98d0b85e8d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractNegatedScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractNegatedScalarDouble testClass)
+ {
+ var result = Fma.MultiplySubtractNegatedScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractNegatedScalarDouble();
var result = Fma.MultiplySubtractNegatedScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractNegatedScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractNegatedScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Single.cs
index 0383238cdb..ab2a8e7ab2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractNegatedScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractNegatedScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractNegatedScalarSingle testClass)
+ {
+ var result = Fma.MultiplySubtractNegatedScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractNegatedScalarSingle();
var result = Fma.MultiplySubtractNegatedScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractNegatedScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractNegatedScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Double.cs
index d9a9d377f6..991708022a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractScalarDouble testClass)
+ {
+ var result = Fma.MultiplySubtractScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractScalarDouble();
var result = Fma.MultiplySubtractScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Single.cs
index f5ce69a4b2..7a3ba45198 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector128/MultiplySubtractScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractScalarSingle testClass)
+ {
+ var result = Fma.MultiplySubtractScalar(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractScalarSingle();
var result = Fma.MultiplySubtractScalar(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractScalar(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractScalar(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Double.cs
index ea72fa1eb1..cb7f4351dd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+ public Vector256<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddDouble testClass)
+ {
+ var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddDouble();
var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Single.cs
index b43f125fef..ff1a637080 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAdd.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+ public Vector256<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddSingle testClass)
+ {
+ var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddSingle();
var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Double.cs
index df2b53d3d1..004966a7a7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddNegatedDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+ public Vector256<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddNegatedDouble testClass)
+ {
+ var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddNegatedDouble();
var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Single.cs
index 4e9056599a..6e2f2acc64 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddNegated.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplyAddNegatedSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+ public Vector256<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplyAddNegatedSingle testClass)
+ {
+ var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplyAddNegatedSingle();
var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Double.cs
index 4fb1287752..3909f2b1b6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplyAddSubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+ public Vector256<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplyAddSubtractDouble testClass)
+ {
+ var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplyAddSubtractDouble();
var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Single.cs
index fcfcef76f5..02661351f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplyAddSubtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplyAddSubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+ public Vector256<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplyAddSubtractSingle testClass)
+ {
+ var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplyAddSubtractSingle();
var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplyAddSubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplyAddSubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Double.cs
index 58e6e8f40a..799f4c6a9c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+ public Vector256<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractDouble testClass)
+ {
+ var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractDouble();
var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Single.cs
index f9c0195048..b38bf66f19 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+ public Vector256<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractSingle testClass)
+ {
+ var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractSingle();
var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtract(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtract(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Double.cs
index c20c08499a..447878031d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplySubtractAddDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+ public Vector256<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplySubtractAddDouble testClass)
+ {
+ var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplySubtractAddDouble();
var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Single.cs
index dddb2ebd53..4bfb7210fb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractAdd.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingTernaryOpTest__MultiplySubtractAddSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+ public Vector256<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingTernaryOpTest__MultiplySubtractAddSingle testClass)
+ {
+ var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingTernaryOpTest__MultiplySubtractAddSingle();
var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractAdd(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractAdd(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Double.cs
index 538ccde610..10b42ad94a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractNegatedDouble
{
+ private struct TestStruct
+ {
+ public Vector256<Double> _fld1;
+ public Vector256<Double> _fld2;
+ public Vector256<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractNegatedDouble testClass)
+ {
+ var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractNegatedDouble();
var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Single.cs
index d193c3c704..955e6e94be 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Fma_Vector256/MultiplySubtractNegated.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__MultiplySubtractNegatedSingle
{
+ private struct TestStruct
+ {
+ public Vector256<Single> _fld1;
+ public Vector256<Single> _fld2;
+ public Vector256<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector256<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector256<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__MultiplySubtractNegatedSingle testClass)
+ {
+ var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 32;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector256<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__MultiplySubtractNegatedSingle();
var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Fma.MultiplySubtractNegated(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Fma.MultiplySubtractNegated(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Add.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Add.Single.cs
index ea6ec79a1b..52b7562636 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Add.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Add.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSingle testClass)
+ {
+ var result = Sse.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSingle();
var result = Sse.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/AddScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/AddScalar.Single.cs
index a2b42bd243..adab79fdf4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/AddScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/AddScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddScalarSingle testClass)
+ {
+ var result = Sse.AddScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddScalarSingle();
var result = Sse.AddScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.AddScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.AddScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/And.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/And.Single.cs
index 9dc28b1a26..04b761563e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/And.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/And.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndSingle testClass)
+ {
+ var result = Sse.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndSingle();
var result = Sse.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/AndNot.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/AndNot.Single.cs
index 842dca0de3..e27167c2eb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/AndNot.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/AndNot.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotSingle testClass)
+ {
+ var result = Sse.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotSingle();
var result = Sse.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqual.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqual.Single.cs
index 41d365c4ea..d4e446c486 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqual.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqual.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualSingle testClass)
+ {
+ var result = Sse.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualSingle();
var result = Sse.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualOrderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualOrderedScalar.Boolean.cs
index 28f81e3166..77755a9ea3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualOrderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualOrderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareEqualOrderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareEqualOrderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareEqualOrderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareEqualOrderedScalarBoolean();
var result = Sse.CompareEqualOrderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareEqualOrderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareEqualOrderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualScalar.Single.cs
index 04f31d7364..572b6060a9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualScalarSingle testClass)
+ {
+ var result = Sse.CompareEqualScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualScalarSingle();
var result = Sse.CompareEqualScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareEqualScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareEqualScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualUnorderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualUnorderedScalar.Boolean.cs
index b2989738b7..fdd4494772 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualUnorderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareEqualUnorderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareEqualUnorderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareEqualUnorderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareEqualUnorderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareEqualUnorderedScalarBoolean();
var result = Sse.CompareEqualUnorderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareEqualUnorderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareEqualUnorderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThan.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThan.Single.cs
index ffea1c1462..80e23748e6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThan.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThan.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanSingle testClass)
+ {
+ var result = Sse.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanSingle();
var result = Sse.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqual.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqual.Single.cs
index cae02ca9fb..f22ea93513 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqual.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqual.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanOrEqualSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanOrEqualSingle testClass)
+ {
+ var result = Sse.CompareGreaterThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanOrEqualSingle();
var result = Sse.CompareGreaterThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualOrderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualOrderedScalar.Boolean.cs
index 2f82c7ba90..f120ee6bf7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualOrderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualOrderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareGreaterThanOrEqualOrderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareGreaterThanOrEqualOrderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareGreaterThanOrEqualOrderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareGreaterThanOrEqualOrderedScalarBoolean();
var result = Sse.CompareGreaterThanOrEqualOrderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThanOrEqualOrderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThanOrEqualOrderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualScalar.Single.cs
index 0a36d79da3..eacfa00adc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanOrEqualScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanOrEqualScalarSingle testClass)
+ {
+ var result = Sse.CompareGreaterThanOrEqualScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanOrEqualScalarSingle();
var result = Sse.CompareGreaterThanOrEqualScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThanOrEqualScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThanOrEqualScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualUnorderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualUnorderedScalar.Boolean.cs
index 157c1d6eb2..8bf0246f6d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualUnorderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrEqualUnorderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareGreaterThanOrEqualUnorderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareGreaterThanOrEqualUnorderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareGreaterThanOrEqualUnorderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareGreaterThanOrEqualUnorderedScalarBoolean();
var result = Sse.CompareGreaterThanOrEqualUnorderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThanOrEqualUnorderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThanOrEqualUnorderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrderedScalar.Boolean.cs
index f0160bf1a5..3841a8e90d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanOrderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareGreaterThanOrderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareGreaterThanOrderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareGreaterThanOrderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareGreaterThanOrderedScalarBoolean();
var result = Sse.CompareGreaterThanOrderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThanOrderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThanOrderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanScalar.Single.cs
index 56239855af..a81fcf3549 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanScalarSingle testClass)
+ {
+ var result = Sse.CompareGreaterThanScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanScalarSingle();
var result = Sse.CompareGreaterThanScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThanScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThanScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanUnorderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanUnorderedScalar.Boolean.cs
index 7d4141f3da..7c35444ea4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanUnorderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareGreaterThanUnorderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareGreaterThanUnorderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareGreaterThanUnorderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareGreaterThanUnorderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareGreaterThanUnorderedScalarBoolean();
var result = Sse.CompareGreaterThanUnorderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareGreaterThanUnorderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareGreaterThanUnorderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThan.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThan.Single.cs
index f5f44bc1e5..ab39c7dfdf 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThan.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThan.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanSingle testClass)
+ {
+ var result = Sse.CompareLessThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanSingle();
var result = Sse.CompareLessThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqual.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqual.Single.cs
index 95a355bd04..0e6be86cff 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqual.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqual.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanOrEqualSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanOrEqualSingle testClass)
+ {
+ var result = Sse.CompareLessThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanOrEqualSingle();
var result = Sse.CompareLessThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualOrderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualOrderedScalar.Boolean.cs
index 2c79172c5a..cfaab35d35 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualOrderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualOrderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareLessThanOrEqualOrderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareLessThanOrEqualOrderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareLessThanOrEqualOrderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareLessThanOrEqualOrderedScalarBoolean();
var result = Sse.CompareLessThanOrEqualOrderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThanOrEqualOrderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThanOrEqualOrderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualScalar.Single.cs
index 576add2b4a..2da2287b71 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanOrEqualScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanOrEqualScalarSingle testClass)
+ {
+ var result = Sse.CompareLessThanOrEqualScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanOrEqualScalarSingle();
var result = Sse.CompareLessThanOrEqualScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThanOrEqualScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThanOrEqualScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualUnorderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualUnorderedScalar.Boolean.cs
index ea632d0818..507ff9a8c3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualUnorderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrEqualUnorderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareLessThanOrEqualUnorderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareLessThanOrEqualUnorderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareLessThanOrEqualUnorderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareLessThanOrEqualUnorderedScalarBoolean();
var result = Sse.CompareLessThanOrEqualUnorderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThanOrEqualUnorderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThanOrEqualUnorderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrderedScalar.Boolean.cs
index a5d49e26b2..27b064e7e6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanOrderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareLessThanOrderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareLessThanOrderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareLessThanOrderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareLessThanOrderedScalarBoolean();
var result = Sse.CompareLessThanOrderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThanOrderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThanOrderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanScalar.Single.cs
index e7de0dd0b4..f5f234adde 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanScalarSingle testClass)
+ {
+ var result = Sse.CompareLessThanScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanScalarSingle();
var result = Sse.CompareLessThanScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThanScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThanScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanUnorderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanUnorderedScalar.Boolean.cs
index 746bd511e8..f086187ea8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanUnorderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareLessThanUnorderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareLessThanUnorderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareLessThanUnorderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareLessThanUnorderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareLessThanUnorderedScalarBoolean();
var result = Sse.CompareLessThanUnorderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareLessThanUnorderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareLessThanUnorderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqual.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqual.Single.cs
index 6415345bff..777f77b413 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqual.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqual.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotEqualSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotEqualSingle testClass)
+ {
+ var result = Sse.CompareNotEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotEqualSingle();
var result = Sse.CompareNotEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualOrderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualOrderedScalar.Boolean.cs
index 9e62c8181f..64bde8387a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualOrderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualOrderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareNotEqualOrderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareNotEqualOrderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareNotEqualOrderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareNotEqualOrderedScalarBoolean();
var result = Sse.CompareNotEqualOrderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotEqualOrderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotEqualOrderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualScalar.Single.cs
index 68e085a707..bfb6261762 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotEqualScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotEqualScalarSingle testClass)
+ {
+ var result = Sse.CompareNotEqualScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotEqualScalarSingle();
var result = Sse.CompareNotEqualScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotEqualScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotEqualScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualUnorderedScalar.Boolean.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualUnorderedScalar.Boolean.cs
index d5cc0d00b9..a198480f76 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualUnorderedScalar.Boolean.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotEqualUnorderedScalar.Boolean.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanComparisonOpTest__CompareNotEqualUnorderedScalarBoolean
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanComparisonOpTest__CompareNotEqualUnorderedScalarBoolean testClass)
+ {
+ var result = Sse.CompareNotEqualUnorderedScalar(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -231,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanComparisonOpTest__CompareNotEqualUnorderedScalarBoolean();
var result = Sse.CompareNotEqualUnorderedScalar(test._fld1, test._fld2);
@@ -239,13 +270,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotEqualUnorderedScalar(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotEqualUnorderedScalar(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThan.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThan.Single.cs
index f23de3ae9a..8b4df12e7e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThan.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThan.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotGreaterThanSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotGreaterThanSingle testClass)
+ {
+ var result = Sse.CompareNotGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotGreaterThanSingle();
var result = Sse.CompareNotGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqual.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqual.Single.cs
index b674df86d5..9a9c7ee05b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqual.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqual.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotGreaterThanOrEqualSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotGreaterThanOrEqualSingle testClass)
+ {
+ var result = Sse.CompareNotGreaterThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotGreaterThanOrEqualSingle();
var result = Sse.CompareNotGreaterThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotGreaterThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotGreaterThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqualScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqualScalar.Single.cs
index ee86e1e2bd..b8ef6babaa 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqualScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanOrEqualScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotGreaterThanOrEqualScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotGreaterThanOrEqualScalarSingle testClass)
+ {
+ var result = Sse.CompareNotGreaterThanOrEqualScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotGreaterThanOrEqualScalarSingle();
var result = Sse.CompareNotGreaterThanOrEqualScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotGreaterThanOrEqualScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotGreaterThanOrEqualScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanScalar.Single.cs
index cef197a6a5..1419622e1c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotGreaterThanScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotGreaterThanScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotGreaterThanScalarSingle testClass)
+ {
+ var result = Sse.CompareNotGreaterThanScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotGreaterThanScalarSingle();
var result = Sse.CompareNotGreaterThanScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotGreaterThanScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotGreaterThanScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThan.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThan.Single.cs
index d27660d612..35fb6c726a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThan.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThan.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotLessThanSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotLessThanSingle testClass)
+ {
+ var result = Sse.CompareNotLessThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotLessThanSingle();
var result = Sse.CompareNotLessThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotLessThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotLessThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqual.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqual.Single.cs
index 6d1f1825c5..474ad9c6f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqual.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqual.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotLessThanOrEqualSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotLessThanOrEqualSingle testClass)
+ {
+ var result = Sse.CompareNotLessThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotLessThanOrEqualSingle();
var result = Sse.CompareNotLessThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotLessThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotLessThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqualScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqualScalar.Single.cs
index b5e33e77ed..f17dfdf0ed 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqualScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanOrEqualScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotLessThanOrEqualScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotLessThanOrEqualScalarSingle testClass)
+ {
+ var result = Sse.CompareNotLessThanOrEqualScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotLessThanOrEqualScalarSingle();
var result = Sse.CompareNotLessThanOrEqualScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotLessThanOrEqualScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotLessThanOrEqualScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanScalar.Single.cs
index dda2565eab..c412c486fc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareNotLessThanScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotLessThanScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotLessThanScalarSingle testClass)
+ {
+ var result = Sse.CompareNotLessThanScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotLessThanScalarSingle();
var result = Sse.CompareNotLessThanScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareNotLessThanScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareNotLessThanScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrdered.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrdered.Single.cs
index c61e9f0cfa..9f7185f763 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrdered.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrdered.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareOrderedSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareOrderedSingle testClass)
+ {
+ var result = Sse.CompareOrdered(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareOrderedSingle();
var result = Sse.CompareOrdered(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareOrdered(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareOrdered(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrderedScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrderedScalar.Single.cs
index 3b4a66b941..44f8cc11de 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrderedScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareOrderedScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareOrderedScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareOrderedScalarSingle testClass)
+ {
+ var result = Sse.CompareOrderedScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareOrderedScalarSingle();
var result = Sse.CompareOrderedScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareOrderedScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareOrderedScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnordered.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnordered.Single.cs
index 9523f100fa..a1041d7a45 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnordered.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnordered.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareUnorderedSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareUnorderedSingle testClass)
+ {
+ var result = Sse.CompareUnordered(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareUnorderedSingle();
var result = Sse.CompareUnordered(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareUnordered(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareUnordered(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnorderedScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnorderedScalar.Single.cs
index 30545475ad..12b616cf7f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnorderedScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/CompareUnorderedScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareUnorderedScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareUnorderedScalarSingle testClass)
+ {
+ var result = Sse.CompareUnorderedScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareUnorderedScalarSingle();
var result = Sse.CompareUnorderedScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.CompareUnorderedScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.CompareUnorderedScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Divide.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Divide.Single.cs
index 1ad17ed7d3..a80fa20d3a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Divide.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Divide.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__DivideSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__DivideSingle testClass)
+ {
+ var result = Sse.Divide(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__DivideSingle();
var result = Sse.Divide(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Divide(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Divide(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/DivideScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/DivideScalar.Single.cs
index 82ac08e2d6..3a637d218f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/DivideScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/DivideScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__DivideScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__DivideScalarSingle testClass)
+ {
+ var result = Sse.DivideScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__DivideScalarSingle();
var result = Sse.DivideScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.DivideScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.DivideScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Max.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Max.Single.cs
index 69a1112582..8e392223c4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Max.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Max.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxSingle testClass)
+ {
+ var result = Sse.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxSingle();
var result = Sse.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MaxScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MaxScalar.Single.cs
index 7e025c9fdd..680c137cff 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MaxScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MaxScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxScalarSingle testClass)
+ {
+ var result = Sse.MaxScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxScalarSingle();
var result = Sse.MaxScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.MaxScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.MaxScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Min.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Min.Single.cs
index 6387eefcc0..082a6e9742 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Min.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Min.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinSingle testClass)
+ {
+ var result = Sse.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinSingle();
var result = Sse.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MinScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MinScalar.Single.cs
index d6089109b4..3d1bb9f8ea 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MinScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MinScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinScalarSingle testClass)
+ {
+ var result = Sse.MinScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinScalarSingle();
var result = Sse.MinScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.MinScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.MinScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Multiply.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Multiply.Single.cs
index aab7bb9cd2..384879482c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Multiply.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Multiply.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplySingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplySingle testClass)
+ {
+ var result = Sse.Multiply(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplySingle();
var result = Sse.Multiply(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Multiply(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Multiply(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MultiplyScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MultiplyScalar.Single.cs
index fb730d8bef..d7d35b1266 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/MultiplyScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/MultiplyScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplyScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplyScalarSingle testClass)
+ {
+ var result = Sse.MultiplyScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplyScalarSingle();
var result = Sse.MultiplyScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.MultiplyScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.MultiplyScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Or.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Or.Single.cs
index 3d790f8f44..4e2945bd35 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Or.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Or.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrSingle testClass)
+ {
+ var result = Sse.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrSingle();
var result = Sse.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Subtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Subtract.Single.cs
index 2b1ce21a7c..fc6541c640 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Subtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Subtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSingle testClass)
+ {
+ var result = Sse.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSingle();
var result = Sse.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/SubtractScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/SubtractScalar.Single.cs
index fda05d7fdf..1213f049ba 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/SubtractScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/SubtractScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractScalarSingle testClass)
+ {
+ var result = Sse.SubtractScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractScalarSingle();
var result = Sse.SubtractScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.SubtractScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.SubtractScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Xor.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Xor.Single.cs
index 6a7c1e9c23..2a41cb6328 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse/Xor.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse/Xor.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorSingle testClass)
+ {
+ var result = Sse.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorSingle();
var result = Sse.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Byte.cs
index a15a98a6e5..c3a5068c69 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddByte testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddByte();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Double.cs
index de3e2519b5..1120174ded 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddDouble testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddDouble();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int16.cs
index 505e04214e..868c9abe63 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddInt16 testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddInt16();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int32.cs
index 55003509fd..63025cea11 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddInt32 testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddInt32();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int64.cs
index 4bc63205f2..197d215736 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddInt64 testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddInt64();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.SByte.cs
index d91ea41e55..3b05e72d3e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSByte testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSByte();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt16.cs
index 20801eee38..dbb2edae26 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddUInt16 testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddUInt16();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt32.cs
index bc81f3af81..68fa2a4cc2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddUInt32 testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddUInt32();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt64.cs
index e41697a175..b77b7732d3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Add.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddUInt64 testClass)
+ {
+ var result = Sse2.Add(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddUInt64();
var result = Sse2.Add(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Add(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Add(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Byte.cs
index 83f78493e8..6ca672ead0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSaturateByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSaturateByte testClass)
+ {
+ var result = Sse2.AddSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSaturateByte();
var result = Sse2.AddSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AddSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AddSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Int16.cs
index 79f90d19c3..d5a1f9f5de 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSaturateInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSaturateInt16 testClass)
+ {
+ var result = Sse2.AddSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSaturateInt16();
var result = Sse2.AddSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AddSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AddSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.SByte.cs
index f2df53ab15..fd568373f7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSaturateSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSaturateSByte testClass)
+ {
+ var result = Sse2.AddSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSaturateSByte();
var result = Sse2.AddSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AddSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AddSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.UInt16.cs
index b1578f7ec4..a1a983c545 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddSaturate.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddSaturateUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(ushort.MinValue,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(ushort.MinValue,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddSaturateUInt16 testClass)
+ {
+ var result = Sse2.AddSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddSaturateUInt16();
var result = Sse2.AddSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AddSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AddSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddScalar.Double.cs
index 191f88ed99..8cf1fbd671 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AddScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AddScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AddScalarDouble testClass)
+ {
+ var result = Sse2.AddScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AddScalarDouble();
var result = Sse2.AddScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AddScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AddScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Byte.cs
index 4160d32ae4..29648cc5a4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndByte testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndByte();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Double.cs
index 6c91107c38..ae7c2f70f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndDouble testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndDouble();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int16.cs
index 69e46925cc..944cf20337 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndInt16 testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndInt16();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int32.cs
index eb509cddb7..af99cd1762 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndInt32 testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndInt32();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int64.cs
index 010cc8b9f5..3425f1678e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndInt64 testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndInt64();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.SByte.cs
index ce671243c1..39ca3854a2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndSByte testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndSByte();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt16.cs
index 363cfe3e35..f5d6eb6329 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndUInt16 testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndUInt16();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt32.cs
index 51e5b7e3aa..44380c4e19 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndUInt32 testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndUInt32();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt64.cs
index 741c313538..59161ca112 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/And.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndUInt64 testClass)
+ {
+ var result = Sse2.And(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndUInt64();
var result = Sse2.And(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.And(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.And(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Byte.cs
index f0d111d61b..2d41403a1a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotByte testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotByte();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Double.cs
index c2fe12e454..e6132ecc7c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotDouble testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotDouble();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int16.cs
index dc41c4565a..032c1bcbc8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotInt16 testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotInt16();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int32.cs
index bdde65ae2d..a17d38320c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotInt32 testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotInt32();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int64.cs
index 34108a44bc..9951743284 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotInt64 testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotInt64();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.SByte.cs
index d02e70af35..aa145851d0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotSByte testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotSByte();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt16.cs
index f5f4a0cb46..a5e235e9ac 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotUInt16 testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotUInt16();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt32.cs
index c6c1716c08..e2f9961a01 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotUInt32 testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotUInt32();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt64.cs
index 565b71ca28..936d29082f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/AndNot.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AndNotUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AndNotUInt64 testClass)
+ {
+ var result = Sse2.AndNot(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AndNotUInt64();
var result = Sse2.AndNot(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.AndNot(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.AndNot(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.Byte.cs
index f60ba8f852..44a3ffd903 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AverageByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AverageByte testClass)
+ {
+ var result = Sse2.Average(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AverageByte();
var result = Sse2.Average(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Average(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Average(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.UInt16.cs
index 4735dc81aa..5594018118 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Average.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__AverageUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(ushort.MinValue,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(ushort.MinValue,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__AverageUInt16 testClass)
+ {
+ var result = Sse2.Average(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__AverageUInt16();
var result = Sse2.Average(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Average(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Average(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Byte.cs
index f4717b2848..cc1994b9dc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualByte testClass)
+ {
+ var result = Sse2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualByte();
var result = Sse2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Double.cs
index 82800a5750..a1397d69fd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualDouble testClass)
+ {
+ var result = Sse2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualDouble();
var result = Sse2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int16.cs
index 2ba89e3ff7..2d6d92f075 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualInt16 testClass)
+ {
+ var result = Sse2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualInt16();
var result = Sse2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int32.cs
index 42a5be79c9..56f44b7fe8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualInt32 testClass)
+ {
+ var result = Sse2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualInt32();
var result = Sse2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.SByte.cs
index e497a9a367..406bbeffd7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualSByte testClass)
+ {
+ var result = Sse2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualSByte();
var result = Sse2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt16.cs
index 951309a095..6167e7b9c6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualUInt16 testClass)
+ {
+ var result = Sse2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualUInt16();
var result = Sse2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt32.cs
index b44d47219c..49fcf493d6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareEqual.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualUInt32 testClass)
+ {
+ var result = Sse2.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualUInt32();
var result = Sse2.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Double.cs
index d57c30a745..4ba6880c68 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanDouble testClass)
+ {
+ var result = Sse2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanDouble();
var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int16.cs
index 143878261a..f1f873d70c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanInt16 testClass)
+ {
+ var result = Sse2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanInt16();
var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int32.cs
index 9587d0d8f7..ef7178c14a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanInt32 testClass)
+ {
+ var result = Sse2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanInt32();
var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.SByte.cs
index cecf67fa9b..9ad2b16ec8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThan.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanSByte testClass)
+ {
+ var result = Sse2.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanSByte();
var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThanOrEqual.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThanOrEqual.Double.cs
index fa4d06dfaa..7c42bcd780 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThanOrEqual.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareGreaterThanOrEqual.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanOrEqualDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanOrEqualDouble testClass)
+ {
+ var result = Sse2.CompareGreaterThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanOrEqualDouble();
var result = Sse2.CompareGreaterThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareGreaterThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareGreaterThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Double.cs
index 310f3d4e29..80f7f473d1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanDouble testClass)
+ {
+ var result = Sse2.CompareLessThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanDouble();
var result = Sse2.CompareLessThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareLessThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareLessThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int16.cs
index 2b2b5f5140..ec7d35a6f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanInt16 testClass)
+ {
+ var result = Sse2.CompareLessThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanInt16();
var result = Sse2.CompareLessThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareLessThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareLessThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int32.cs
index cc4f8eefb5..32328c510a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanInt32 testClass)
+ {
+ var result = Sse2.CompareLessThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanInt32();
var result = Sse2.CompareLessThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareLessThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareLessThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.SByte.cs
index 9ce1350e71..b0e699b547 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThan.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanSByte testClass)
+ {
+ var result = Sse2.CompareLessThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanSByte();
var result = Sse2.CompareLessThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareLessThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareLessThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThanOrEqual.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThanOrEqual.Double.cs
index 7cff72660f..9e66e99f36 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThanOrEqual.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareLessThanOrEqual.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareLessThanOrEqualDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareLessThanOrEqualDouble testClass)
+ {
+ var result = Sse2.CompareLessThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareLessThanOrEqualDouble();
var result = Sse2.CompareLessThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareLessThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareLessThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotEqual.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotEqual.Double.cs
index 0ba136f05b..d905fd357a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotEqual.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotEqual.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotEqualDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotEqualDouble testClass)
+ {
+ var result = Sse2.CompareNotEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotEqualDouble();
var result = Sse2.CompareNotEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareNotEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareNotEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThan.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThan.Double.cs
index 17de1547cb..e84103d17c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThan.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThan.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotGreaterThanDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotGreaterThanDouble testClass)
+ {
+ var result = Sse2.CompareNotGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotGreaterThanDouble();
var result = Sse2.CompareNotGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareNotGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareNotGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThanOrEqual.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThanOrEqual.Double.cs
index 6a625d04c7..a9399babc2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThanOrEqual.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotGreaterThanOrEqual.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotGreaterThanOrEqualDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotGreaterThanOrEqualDouble testClass)
+ {
+ var result = Sse2.CompareNotGreaterThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotGreaterThanOrEqualDouble();
var result = Sse2.CompareNotGreaterThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareNotGreaterThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareNotGreaterThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThan.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThan.Double.cs
index 869e08a279..6456e73e74 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThan.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThan.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotLessThanDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotLessThanDouble testClass)
+ {
+ var result = Sse2.CompareNotLessThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotLessThanDouble();
var result = Sse2.CompareNotLessThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareNotLessThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareNotLessThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThanOrEqual.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThanOrEqual.Double.cs
index 0666009ae5..c42d47b24e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThanOrEqual.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareNotLessThanOrEqual.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareNotLessThanOrEqualDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareNotLessThanOrEqualDouble testClass)
+ {
+ var result = Sse2.CompareNotLessThanOrEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareNotLessThanOrEqualDouble();
var result = Sse2.CompareNotLessThanOrEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareNotLessThanOrEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareNotLessThanOrEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareOrdered.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareOrdered.Double.cs
index 474ebc7ba1..19e85746df 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareOrdered.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareOrdered.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareOrderedDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareOrderedDouble testClass)
+ {
+ var result = Sse2.CompareOrdered(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareOrderedDouble();
var result = Sse2.CompareOrdered(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareOrdered(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareOrdered(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareUnordered.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareUnordered.Double.cs
index e38a939797..a08ed80211 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareUnordered.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/CompareUnordered.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareUnorderedDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareUnorderedDouble testClass)
+ {
+ var result = Sse2.CompareUnordered(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareUnorderedDouble();
var result = Sse2.CompareUnordered(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.CompareUnordered(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.CompareUnordered(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Divide.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Divide.Double.cs
index da4e34b77f..6392541ebc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Divide.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Divide.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__DivideDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__DivideDouble testClass)
+ {
+ var result = Sse2.Divide(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__DivideDouble();
var result = Sse2.Divide(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Divide(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Divide(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/DivideScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/DivideScalar.Double.cs
index 01f4d3be40..60af3ba9be 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/DivideScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/DivideScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__DivideScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__DivideScalarDouble testClass)
+ {
+ var result = Sse2.DivideScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__DivideScalarDouble();
var result = Sse2.DivideScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.DivideScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.DivideScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.1.cs
index f3bea8f12d..1960d4aee5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt161()
{
- var test = new SimpleUnaryOpTest__ExtractUInt161();
+ var test = new ExtractScalarTest__ExtractUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt161
+ public sealed unsafe class ExtractScalarTest__ExtractUInt161
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt161 testClass)
+ {
+ var result = Sse2.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt161()
+ static ExtractScalarTest__ExtractUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractUInt161()
+ public ExtractScalarTest__ExtractUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt161();
+ var test = new ExtractScalarTest__ExtractUInt161();
var result = Sse2.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.129.cs
index fe45a56a33..5590412a52 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Extract.UInt16.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt16129()
{
- var test = new SimpleUnaryOpTest__ExtractUInt16129();
+ var test = new ExtractScalarTest__ExtractUInt16129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt16129
+ public sealed unsafe class ExtractScalarTest__ExtractUInt16129
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt16129 testClass)
+ {
+ var result = Sse2.Extract(_fld, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt16129()
+ static ExtractScalarTest__ExtractUInt16129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ExtractUInt16129()
+ public ExtractScalarTest__ExtractUInt16129()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt16129();
+ var test = new ExtractScalarTest__ExtractUInt16129();
var result = Sse2.Extract(test._fld, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Extract(_fld, 129);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Extract(test._fld, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.1.cs
index 7523812160..72944d5fc0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt161()
{
- var test = new SimpleUnaryOpTest__InsertInt161();
+ var test = new InsertScalarTest__InsertInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt161
+ public sealed unsafe class InsertScalarTest__InsertInt161
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt161 testClass)
+ {
+ var result = Sse2.Insert(_fld, (short)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__InsertInt161()
+ static InsertScalarTest__InsertInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__InsertInt161()
+ public InsertScalarTest__InsertInt161()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt161();
+ var test = new InsertScalarTest__InsertInt161();
var result = Sse2.Insert(test._fld, (short)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Insert(_fld, (short)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Insert(test._fld, (short)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.129.cs
index 2c9d92c83f..94c6788e6b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.Int16.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt16129()
{
- var test = new SimpleUnaryOpTest__InsertInt16129();
+ var test = new InsertScalarTest__InsertInt16129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt16129
+ public sealed unsafe class InsertScalarTest__InsertInt16129
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt16129 testClass)
+ {
+ var result = Sse2.Insert(_fld, (short)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__InsertInt16129()
+ static InsertScalarTest__InsertInt16129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__InsertInt16129()
+ public InsertScalarTest__InsertInt16129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt16129();
+ var test = new InsertScalarTest__InsertInt16129();
var result = Sse2.Insert(test._fld, (short)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Insert(_fld, (short)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Insert(test._fld, (short)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.1.cs
index b46b3ab1ae..a159949af7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt161()
{
- var test = new SimpleUnaryOpTest__InsertUInt161();
+ var test = new InsertScalarTest__InsertUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt161
+ public sealed unsafe class InsertScalarTest__InsertUInt161
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt161 testClass)
+ {
+ var result = Sse2.Insert(_fld, (ushort)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__InsertUInt161()
+ static InsertScalarTest__InsertUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__InsertUInt161()
+ public InsertScalarTest__InsertUInt161()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt161();
+ var test = new InsertScalarTest__InsertUInt161();
var result = Sse2.Insert(test._fld, (ushort)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Insert(_fld, (ushort)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Insert(test._fld, (ushort)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.129.cs
index 719ef7cc3f..10cae42702 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Insert.UInt16.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt16129()
{
- var test = new SimpleUnaryOpTest__InsertUInt16129();
+ var test = new InsertScalarTest__InsertUInt16129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt16129
+ public sealed unsafe class InsertScalarTest__InsertUInt16129
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)0; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt16129 testClass)
+ {
+ var result = Sse2.Insert(_fld, (ushort)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__InsertUInt16129()
+ static InsertScalarTest__InsertUInt16129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__InsertUInt16129()
+ public InsertScalarTest__InsertUInt16129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt16129();
+ var test = new InsertScalarTest__InsertUInt16129();
var result = Sse2.Insert(test._fld, (ushort)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Insert(_fld, (ushort)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Insert(test._fld, (ushort)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Byte.cs
index 7224345858..d57d01c1b7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxByte testClass)
+ {
+ var result = Sse2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxByte();
var result = Sse2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Double.cs
index 52a2920f98..245c0a1782 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxDouble testClass)
+ {
+ var result = Sse2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxDouble();
var result = Sse2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Int16.cs
index c60ad296a2..a525d69be9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Max.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxInt16 testClass)
+ {
+ var result = Sse2.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxInt16();
var result = Sse2.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MaxScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MaxScalar.Double.cs
index 0f72b2e122..cf1ae30097 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MaxScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MaxScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxScalarDouble testClass)
+ {
+ var result = Sse2.MaxScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxScalarDouble();
var result = Sse2.MaxScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.MaxScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.MaxScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Byte.cs
index 6670eaee78..9c9c2626b2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MinValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MinValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinByte testClass)
+ {
+ var result = Sse2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinByte();
var result = Sse2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Double.cs
index 17ed799177..7c373eb534 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinDouble testClass)
+ {
+ var result = Sse2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinDouble();
var result = Sse2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Int16.cs
index b9a1a1ef2c..fb9e015a6e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Min.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MinValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MinValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinInt16 testClass)
+ {
+ var result = Sse2.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinInt16();
var result = Sse2.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MinScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MinScalar.Double.cs
index 81ddf32e02..1b15573246 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MinScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MinScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinScalarDouble testClass)
+ {
+ var result = Sse2.MinScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinScalarDouble();
var result = Sse2.MinScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.MinScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.MinScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Multiply.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Multiply.Double.cs
index 5adb4d14a4..3b6f99fc02 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Multiply.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Multiply.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplyDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplyDouble testClass)
+ {
+ var result = Sse2.Multiply(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplyDouble();
var result = Sse2.Multiply(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Multiply(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Multiply(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MultiplyScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MultiplyScalar.Double.cs
index 7be0a029d0..ca5357f8ff 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MultiplyScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/MultiplyScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplyScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplyScalarDouble testClass)
+ {
+ var result = Sse2.MultiplyScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplyScalarDouble();
var result = Sse2.MultiplyScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.MultiplyScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.MultiplyScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Byte.cs
index af8e8c098e..53756f9192 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrByte testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrByte();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Double.cs
index 7c8eeb8dd8..c5e4d99f58 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrDouble testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrDouble();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int16.cs
index eae8b5f433..f7ec38df0b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrInt16 testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrInt16();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int32.cs
index 32d05fefb4..78aa2cc807 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrInt32 testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrInt32();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int64.cs
index 8570ab158b..b3fd649c8a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrInt64 testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrInt64();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.SByte.cs
index 7775bc0812..a8dd737f79 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrSByte testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrSByte();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt16.cs
index 0f2aa04bdc..14f14e2008 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrUInt16 testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrUInt16();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt32.cs
index 4a9234c9a3..3401cee3fb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrUInt32 testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrUInt32();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt64.cs
index 9403d32eb7..c472e79347 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Or.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__OrUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__OrUInt64 testClass)
+ {
+ var result = Sse2.Or(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__OrUInt64();
var result = Sse2.Or(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Or(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Or(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Byte.cs
index ccf6a8d6d9..bf4a60a9b0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Byte.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128Byte()
{
- bool skipIf32Bit = (typeof(Byte) == typeof(Int64)) ||
- (typeof(Byte) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128Byte();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128Byte
{
+ private struct TestStruct
+ {
+ public Byte _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (byte)(random.Next(byte.MinValue, byte.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128Byte testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
- private static readonly Random Random = new Random();
+ private static Byte _data;
private static Byte _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128Byte()
{
- _clsVar = (byte)(Random.Next(byte.MinValue, byte.MaxValue));
+ var random = new Random();
+ _clsVar = (byte)(random.Next(byte.MinValue, byte.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128Byte()
{
Succeeded = true;
- _fld = (byte)(Random.Next(byte.MinValue, byte.MaxValue));
+ var random = new Random();
+ _fld = (byte)(random.Next(byte.MinValue, byte.MaxValue));
+ _data = (byte)(random.Next(byte.MinValue, byte.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<Byte>(new Byte[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(Byte) != typeof(long)) && (typeof(Byte) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (byte)(Random.Next(byte.MinValue, byte.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<Byte>(ref Unsafe.As<Byte, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (byte)(Random.Next(byte.MinValue, byte.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Byte) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Byte) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<Byte>(ref Unsafe.As<Byte, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<Byte>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (byte)(Random.Next(byte.MinValue, byte.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<Byte>(ref Unsafe.As<Byte, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128Byte();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Double.cs
index 661d1e17df..cdcb4e1d96 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Double.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128Double()
{
- bool skipIf32Bit = (typeof(Double) == typeof(Int64)) ||
- (typeof(Double) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128Double();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128Double
{
+ private struct TestStruct
+ {
+ public Double _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = random.NextDouble();
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128Double testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
- private static readonly Random Random = new Random();
+ private static Double _data;
private static Double _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128Double()
{
- _clsVar = Random.NextDouble();
+ var random = new Random();
+ _clsVar = random.NextDouble();
}
public ScalarSimdUnaryOpTest__SetAllVector128Double()
{
Succeeded = true;
- _fld = Random.NextDouble();
+ var random = new Random();
+ _fld = random.NextDouble();
+ _data = random.NextDouble();
_dataTable = new ScalarSimdUnaryOpTest__DataTable<Double>(new Double[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(Double) != typeof(long)) && (typeof(Double) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = Random.NextDouble();
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<Double>(ref Unsafe.As<Double, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = Random.NextDouble();
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Double) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Double) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<Double>(ref Unsafe.As<Double, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<Double>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = Random.NextDouble();
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<Double>(ref Unsafe.As<Double, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128Double();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int16.cs
index 31f5cdebce..d8b1698517 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int16.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128Int16()
{
- bool skipIf32Bit = (typeof(Int16) == typeof(Int64)) ||
- (typeof(Int16) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128Int16();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128Int16
{
+ private struct TestStruct
+ {
+ public Int16 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (short)(random.Next(short.MinValue, short.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128Int16 testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
- private static readonly Random Random = new Random();
+ private static Int16 _data;
private static Int16 _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128Int16()
{
- _clsVar = (short)(Random.Next(short.MinValue, short.MaxValue));
+ var random = new Random();
+ _clsVar = (short)(random.Next(short.MinValue, short.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128Int16()
{
Succeeded = true;
- _fld = (short)(Random.Next(short.MinValue, short.MaxValue));
+ var random = new Random();
+ _fld = (short)(random.Next(short.MinValue, short.MaxValue));
+ _data = (short)(random.Next(short.MinValue, short.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<Int16>(new Int16[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(Int16) != typeof(long)) && (typeof(Int16) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (short)(Random.Next(short.MinValue, short.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<Int16>(ref Unsafe.As<Int16, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (short)(Random.Next(short.MinValue, short.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Int16) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Int16) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<Int16>(ref Unsafe.As<Int16, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<Int16>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (short)(Random.Next(short.MinValue, short.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<Int16>(ref Unsafe.As<Int16, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128Int16();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int32.cs
index 91a86b97e0..281ee91c00 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int32.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128Int32()
{
- bool skipIf32Bit = (typeof(Int32) == typeof(Int64)) ||
- (typeof(Int32) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128Int32();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128Int32
{
+ private struct TestStruct
+ {
+ public Int32 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (int)(random.Next(int.MinValue, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128Int32 testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
- private static readonly Random Random = new Random();
+ private static Int32 _data;
private static Int32 _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128Int32()
{
- _clsVar = (int)(Random.Next(int.MinValue, int.MaxValue));
+ var random = new Random();
+ _clsVar = (int)(random.Next(int.MinValue, int.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128Int32()
{
Succeeded = true;
- _fld = (int)(Random.Next(int.MinValue, int.MaxValue));
+ var random = new Random();
+ _fld = (int)(random.Next(int.MinValue, int.MaxValue));
+ _data = (int)(random.Next(int.MinValue, int.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<Int32>(new Int32[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(Int32) != typeof(long)) && (typeof(Int32) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (int)(Random.Next(int.MinValue, int.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<Int32>(ref Unsafe.As<Int32, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (int)(Random.Next(int.MinValue, int.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Int32) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Int32) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<Int32>(ref Unsafe.As<Int32, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<Int32>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (int)(Random.Next(int.MinValue, int.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<Int32>(ref Unsafe.As<Int32, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128Int32();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int64.cs
index c526daef2d..56a8a48031 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.Int64.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128Int64()
{
- bool skipIf32Bit = (typeof(Int64) == typeof(Int64)) ||
- (typeof(Int64) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128Int64();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128Int64
{
+ private struct TestStruct
+ {
+ public Int64 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (long)(random.Next(int.MinValue, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128Int64 testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
- private static readonly Random Random = new Random();
+ private static Int64 _data;
private static Int64 _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128Int64()
{
- _clsVar = (long)(Random.Next(int.MinValue, int.MaxValue));
+ var random = new Random();
+ _clsVar = (long)(random.Next(int.MinValue, int.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128Int64()
{
Succeeded = true;
- _fld = (long)(Random.Next(int.MinValue, int.MaxValue));
+ var random = new Random();
+ _fld = (long)(random.Next(int.MinValue, int.MaxValue));
+ _data = (long)(random.Next(int.MinValue, int.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<Int64>(new Int64[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(Int64) != typeof(long)) && (typeof(Int64) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (long)(Random.Next(int.MinValue, int.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<Int64>(ref Unsafe.As<Int64, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (long)(Random.Next(int.MinValue, int.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Int64) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(Int64) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<Int64>(ref Unsafe.As<Int64, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<Int64>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (long)(Random.Next(int.MinValue, int.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<Int64>(ref Unsafe.As<Int64, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128Int64();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.SByte.cs
index 151226b809..9b9e927f22 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.SByte.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128SByte()
{
- bool skipIf32Bit = (typeof(SByte) == typeof(Int64)) ||
- (typeof(SByte) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128SByte();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128SByte
{
+ private struct TestStruct
+ {
+ public SByte _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128SByte testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
- private static readonly Random Random = new Random();
+ private static SByte _data;
private static SByte _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128SByte()
{
- _clsVar = (sbyte)(Random.Next(sbyte.MinValue, sbyte.MaxValue));
+ var random = new Random();
+ _clsVar = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128SByte()
{
Succeeded = true;
- _fld = (sbyte)(Random.Next(sbyte.MinValue, sbyte.MaxValue));
+ var random = new Random();
+ _fld = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue));
+ _data = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<SByte>(new SByte[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(SByte) != typeof(long)) && (typeof(SByte) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (sbyte)(Random.Next(sbyte.MinValue, sbyte.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<SByte>(ref Unsafe.As<SByte, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (sbyte)(Random.Next(sbyte.MinValue, sbyte.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(SByte) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(SByte) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<SByte>(ref Unsafe.As<SByte, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<SByte>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (sbyte)(Random.Next(sbyte.MinValue, sbyte.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<SByte>(ref Unsafe.As<SByte, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128SByte();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt16.cs
index a13a8dca0f..3773a7b1a2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt16.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128UInt16()
{
- bool skipIf32Bit = (typeof(UInt16) == typeof(Int64)) ||
- (typeof(UInt16) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128UInt16();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128UInt16
{
+ private struct TestStruct
+ {
+ public UInt16 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (ushort)(random.Next(ushort.MinValue, ushort.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128UInt16 testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
- private static readonly Random Random = new Random();
+ private static UInt16 _data;
private static UInt16 _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128UInt16()
{
- _clsVar = (ushort)(Random.Next(ushort.MinValue, ushort.MaxValue));
+ var random = new Random();
+ _clsVar = (ushort)(random.Next(ushort.MinValue, ushort.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128UInt16()
{
Succeeded = true;
- _fld = (ushort)(Random.Next(ushort.MinValue, ushort.MaxValue));
+ var random = new Random();
+ _fld = (ushort)(random.Next(ushort.MinValue, ushort.MaxValue));
+ _data = (ushort)(random.Next(ushort.MinValue, ushort.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<UInt16>(new UInt16[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(UInt16) != typeof(long)) && (typeof(UInt16) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (ushort)(Random.Next(ushort.MinValue, ushort.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<UInt16>(ref Unsafe.As<UInt16, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (ushort)(Random.Next(ushort.MinValue, ushort.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(UInt16) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(UInt16) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<UInt16>(ref Unsafe.As<UInt16, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<UInt16>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (ushort)(Random.Next(ushort.MinValue, ushort.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<UInt16>(ref Unsafe.As<UInt16, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128UInt16();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt32.cs
index 5c0f76b24a..330b3b5801 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt32.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128UInt32()
{
- bool skipIf32Bit = (typeof(UInt32) == typeof(Int64)) ||
- (typeof(UInt32) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128UInt32();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128UInt32
{
+ private struct TestStruct
+ {
+ public UInt32 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (uint)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128UInt32 testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
- private static readonly Random Random = new Random();
+ private static UInt32 _data;
private static UInt32 _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128UInt32()
{
- _clsVar = (uint)(Random.Next(0, int.MaxValue));
+ var random = new Random();
+ _clsVar = (uint)(random.Next(0, int.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128UInt32()
{
Succeeded = true;
- _fld = (uint)(Random.Next(0, int.MaxValue));
+ var random = new Random();
+ _fld = (uint)(random.Next(0, int.MaxValue));
+ _data = (uint)(random.Next(0, int.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<UInt32>(new UInt32[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(UInt32) != typeof(long)) && (typeof(UInt32) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (uint)(Random.Next(0, int.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<UInt32>(ref Unsafe.As<UInt32, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (uint)(Random.Next(0, int.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(UInt32) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(UInt32) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<UInt32>(ref Unsafe.As<UInt32, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<UInt32>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (uint)(Random.Next(0, int.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<UInt32>(ref Unsafe.As<UInt32, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128UInt32();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt64.cs
index 42eef9bd17..1983b4f3a3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SetAllVector128.UInt64.cs
@@ -21,35 +21,33 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void SetAllVector128UInt64()
{
- bool skipIf32Bit = (typeof(UInt64) == typeof(Int64)) ||
- (typeof(UInt64) == typeof(UInt64));
-
- if (skipIf32Bit && !Environment.Is64BitProcess)
- {
- return;
- }
-
var test = new ScalarSimdUnaryOpTest__SetAllVector128UInt64();
if (test.IsSupported)
{
// Validates basic functionality works
- test.RunBasicScenario();
+ test.RunBasicScenario_UnsafeRead();
// Validates calling via reflection works
- test.RunReflectionScenario();
+ test.RunReflectionScenario_UnsafeRead();
// Validates passing a static member works
test.RunClsVarScenario();
// Validates passing a local works
- test.RunLclVarScenario();
+ test.RunLclVarScenario_UnsafeRead();
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -66,11 +64,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class ScalarSimdUnaryOpTest__SetAllVector128UInt64
{
+ private struct TestStruct
+ {
+ public UInt64 _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ testStruct._fld = (ulong)(random.Next(0, int.MaxValue));
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ScalarSimdUnaryOpTest__SetAllVector128UInt64 testClass)
+ {
+ var result = Sse2.SetAllVector128(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int RetElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
- private static readonly Random Random = new Random();
+ private static UInt64 _data;
private static UInt64 _clsVar;
@@ -80,40 +100,43 @@ namespace JIT.HardwareIntrinsics.X86
static ScalarSimdUnaryOpTest__SetAllVector128UInt64()
{
- _clsVar = (ulong)(Random.Next(0, int.MaxValue));
+ var random = new Random();
+ _clsVar = (ulong)(random.Next(0, int.MaxValue));
}
public ScalarSimdUnaryOpTest__SetAllVector128UInt64()
{
Succeeded = true;
- _fld = (ulong)(Random.Next(0, int.MaxValue));
+ var random = new Random();
+ _fld = (ulong)(random.Next(0, int.MaxValue));
+ _data = (ulong)(random.Next(0, int.MaxValue));
_dataTable = new ScalarSimdUnaryOpTest__DataTable<UInt64>(new UInt64[RetElementCount], LargestVectorSize);
}
- public bool IsSupported => Sse2.IsSupported;
+ public bool IsSupported => Sse2.IsSupported && (Environment.Is64BitProcess || ((typeof(UInt64) != typeof(long)) && (typeof(UInt64) != typeof(ulong))));
public bool Succeeded { get; set; }
- public void RunBasicScenario()
+ public void RunBasicScenario_UnsafeRead()
{
- var firstOp = (ulong)(Random.Next(0, int.MaxValue));
var result = Sse2.SetAllVector128(
- firstOp
+ Unsafe.ReadUnaligned<UInt64>(ref Unsafe.As<UInt64, byte>(ref _data))
);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
- public void RunReflectionScenario()
+ public void RunReflectionScenario_UnsafeRead()
{
- var firstOp = (ulong)(Random.Next(0, int.MaxValue));
- var method = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(UInt64) });
- var result = method.Invoke(null, new object[] { firstOp });
+ var result = typeof(Sse2).GetMethod(nameof(Sse2.SetAllVector128), new Type[] { typeof(UInt64) })
+ .Invoke(null, new object[] {
+ Unsafe.ReadUnaligned<UInt64>(ref Unsafe.As<UInt64, byte>(ref _data))
+ });
Unsafe.Write(_dataTable.outArrayPtr, (Vector128<UInt64>)(result));
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(_data, _dataTable.outArrayPtr);
}
public void RunClsVarScenario()
@@ -126,16 +149,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_clsVar, _dataTable.outArrayPtr);
}
- public void RunLclVarScenario()
+ public void RunLclVarScenario_UnsafeRead()
{
- var firstOp = (ulong)(Random.Next(0, int.MaxValue));
- var result = Sse2.SetAllVector128(firstOp);
+ var data = Unsafe.ReadUnaligned<UInt64>(ref Unsafe.As<UInt64, byte>(ref _data));
+ var result = Sse2.SetAllVector128(data);
Unsafe.Write(_dataTable.outArrayPtr, result);
- ValidateResult(firstOp, _dataTable.outArrayPtr);
+ ValidateResult(data, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new ScalarSimdUnaryOpTest__SetAllVector128UInt64();
var result = Sse2.SetAllVector128(test._fld);
@@ -144,7 +167,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SetAllVector128(_fld);
@@ -152,13 +175,28 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SetAllVector128(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
try
{
- RunBasicScenario();
+ RunBasicScenario_UnsafeRead();
}
catch (PlatformNotSupportedException)
{
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.1.cs
index 58a8d25f4c..8754e3a699 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt161
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt161 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt161()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt161()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt161();
var result = Sse2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.16.cs
index 2d0c6df18d..9737b9d27a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt1616
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt1616 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt1616()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt1616()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt1616();
var result = Sse2.ShiftLeftLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.1.cs
index 24a390ecc8..9fd8c2828f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt321
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt321 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt321()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt321()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt321();
var result = Sse2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.32.cs
index 2e83c1c95a..9c70a61f1b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt3232
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt3232 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt3232()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt3232()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt3232();
var result = Sse2.ShiftLeftLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.1.cs
index 45cc4d0e72..ce7e5dcfe4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt641
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt641 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt641()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt641()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt641();
var result = Sse2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.64.cs
index 39591dfb91..b77dc1289b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.Int64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalInt6464
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalInt6464 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalInt6464()
+ static ImmUnaryOpTest__ShiftLeftLogicalInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalInt6464()
+ public ImmUnaryOpTest__ShiftLeftLogicalInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalInt6464();
var result = Sse2.ShiftLeftLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.1.cs
index a701aaa765..12e44cf13b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt161
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt161 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt161()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt161()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt161();
var result = Sse2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.16.cs
index f1a6b7451b..c230bbe8fc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt1616
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt1616 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt1616()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt1616()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt1616();
var result = Sse2.ShiftLeftLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.1.cs
index bf9223cdad..ac1a082d9f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt321
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt321 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt321()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt321()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt321();
var result = Sse2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.32.cs
index 3cce6d0bba..12910f44e1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt3232
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt3232 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt3232()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt3232()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt3232();
var result = Sse2.ShiftLeftLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.1.cs
index 0c55130706..74186f517f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt641
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt641 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt641()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt641()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt641();
var result = Sse2.ShiftLeftLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.64.cs
index 14a737bf91..126e58f511 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical.UInt64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogicalUInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogicalUInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogicalUInt6464
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogicalUInt6464 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogicalUInt6464()
+ static ImmUnaryOpTest__ShiftLeftLogicalUInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogicalUInt6464()
+ public ImmUnaryOpTest__ShiftLeftLogicalUInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftLeftLogicalUInt6464();
var result = Sse2.ShiftLeftLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Byte.1.cs
index f7f792cea4..c025af080f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneByte1()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__ShiftLeftLogical128BitLaneByte1()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneByte1();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int16.1.cs
index b0f048dbc5..3e46bb3f62 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt161();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int32.1.cs
index ffb3330874..9e89f91ac6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt321();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int64.1.cs
index 9473a37f02..ebddb62aba 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneInt641();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.SByte.1.cs
index a45eb1ec08..a73f75ae69 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.SByte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneSByte1()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneSByte1();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt16.1.cs
index 21d868141c..f5f5a427ae 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt161();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt32.1.cs
index 0ed76400d7..d6cc28ac62 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt321();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt64.1.cs
index fce9edd57d..05b09c787a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftLeftLogical128BitLane.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftLeftLogical128BitLaneUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641 testClass)
+ {
+ var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
+ static ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
+ public ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftLeftLogical128BitLaneUInt641();
var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftLeftLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftLeftLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.1.cs
index 77661070b1..3da18be7ae 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt161();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt161
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt161 testClass)
+ {
+ var result = Sse2.ShiftRightArithmetic(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt161()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt161()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt161();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt161();
var result = Sse2.ShiftRightArithmetic(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightArithmetic(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightArithmetic(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.16.cs
index ae94e8cc4e..c463b72b92 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt1616
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt1616 testClass)
+ {
+ var result = Sse2.ShiftRightArithmetic(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt1616()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt1616()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt1616();
var result = Sse2.ShiftRightArithmetic(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightArithmetic(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightArithmetic(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.1.cs
index d0a8f72966..3cf8b1630d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt321();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt321
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt321 testClass)
+ {
+ var result = Sse2.ShiftRightArithmetic(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt321()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt321()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt321();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt321();
var result = Sse2.ShiftRightArithmetic(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightArithmetic(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightArithmetic(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.32.cs
index 74edfe1dc8..ee0a454eb6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightArithmetic.Int32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightArithmeticInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightArithmeticInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightArithmeticInt3232
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightArithmeticInt3232 testClass)
+ {
+ var result = Sse2.ShiftRightArithmetic(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightArithmeticInt3232()
+ static ImmUnaryOpTest__ShiftRightArithmeticInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightArithmeticInt3232()
+ public ImmUnaryOpTest__ShiftRightArithmeticInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightArithmeticInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightArithmeticInt3232();
var result = Sse2.ShiftRightArithmetic(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightArithmetic(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightArithmetic(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.1.cs
index 40d3f043dd..6ce2efecef 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt161
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt161 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt161()
+ static ImmUnaryOpTest__ShiftRightLogicalInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt161()
+ public ImmUnaryOpTest__ShiftRightLogicalInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt161();
var result = Sse2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.16.cs
index 528e674bc7..528987a982 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt1616
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(0, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt1616 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt1616()
+ static ImmUnaryOpTest__ShiftRightLogicalInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt1616()
+ public ImmUnaryOpTest__ShiftRightLogicalInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt1616();
var result = Sse2.ShiftRightLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.1.cs
index 72bc20b35d..c3b5562eea 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt321
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt321 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt321()
+ static ImmUnaryOpTest__ShiftRightLogicalInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt321()
+ public ImmUnaryOpTest__ShiftRightLogicalInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt321();
var result = Sse2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.32.cs
index 65c0a1dbf2..b6ba6ce700 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt3232
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt3232 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt3232()
+ static ImmUnaryOpTest__ShiftRightLogicalInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt3232()
+ public ImmUnaryOpTest__ShiftRightLogicalInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt3232();
var result = Sse2.ShiftRightLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.1.cs
index 3c5806c59f..2a1af230ef 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt641
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt641 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt641()
+ static ImmUnaryOpTest__ShiftRightLogicalInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt641()
+ public ImmUnaryOpTest__ShiftRightLogicalInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt641();
var result = Sse2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.64.cs
index c3b9f43beb..983b117f08 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.Int64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalInt6464
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalInt6464 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalInt6464()
+ static ImmUnaryOpTest__ShiftRightLogicalInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalInt6464()
+ public ImmUnaryOpTest__ShiftRightLogicalInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalInt6464();
var result = Sse2.ShiftRightLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.1.cs
index 09dae4f4c1..eee049ce18 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt161
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt161 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt161()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt161()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt161();
var result = Sse2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.16.cs
index 5a1834ab58..af87a8d1ec 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt16.16.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt1616()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt1616();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt1616
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt1616
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt1616 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt1616()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt1616()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt1616()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt1616()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt1616();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt1616();
var result = Sse2.ShiftRightLogical(test._fld, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 16);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.1.cs
index 9f72c36ec7..7c3d4debc9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt321
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt321 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt321()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt321()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt321();
var result = Sse2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.32.cs
index a9b488a186..18e686e86a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt32.32.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt3232()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt3232();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt3232
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt3232
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt3232 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt3232()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt3232()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt3232()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt3232()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt3232();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt3232();
var result = Sse2.ShiftRightLogical(test._fld, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 32);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.1.cs
index b7b06facf6..f03725a185 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt641
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt641 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt641()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt641()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt641();
var result = Sse2.ShiftRightLogical(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.64.cs
index a240f3c135..d67b64dfbf 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical.UInt64.64.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogicalUInt6464()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt6464();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogicalUInt6464
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogicalUInt6464
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogicalUInt6464 testClass)
+ {
+ var result = Sse2.ShiftRightLogical(_fld, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogicalUInt6464()
+ static ImmUnaryOpTest__ShiftRightLogicalUInt6464()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogicalUInt6464()
+ public ImmUnaryOpTest__ShiftRightLogicalUInt6464()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogicalUInt6464();
+ var test = new ImmUnaryOpTest__ShiftRightLogicalUInt6464();
var result = Sse2.ShiftRightLogical(test._fld, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical(_fld, 64);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical(test._fld, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Byte.1.cs
index 4629e10551..ba1a3d951a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneByte1()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__ShiftRightLogical128BitLaneByte1()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneByte1();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int16.1.cs
index ae70e60011..b8ccee319d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int16, Int16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt161();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int32.1.cs
index 8e2b7b006a..647b7c6829 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt321();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int64.1.cs
index 5ad3c2e285..51e0d832d8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneInt641();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.SByte.1.cs
index a90ee473cc..71740a82f2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.SByte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneSByte1()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneSByte1();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt16.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt16.1.cs
index 71217bd456..14585c1d46 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt16.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt16.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneUInt161()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt16, UInt16> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt161();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt32.1.cs
index a0e439f664..028880c94c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneUInt321()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt321();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt64.1.cs
index 55e9d47418..0c9f9dffa7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/ShiftRightLogical128BitLane.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ShiftRightLogical128BitLaneUInt641()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641
+ public sealed unsafe class ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)8; }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641 testClass)
+ {
+ var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
+ static ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
+ public ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
+ var test = new ImmUnaryOpTest__ShiftRightLogical128BitLaneUInt641();
var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.ShiftRightLogical128BitLane(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.ShiftRightLogical128BitLane(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Byte.cs
index c8de3ae5a5..a513f006d5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractByte testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractByte();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Double.cs
index 98c5826e16..576d1bd383 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractDouble testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractDouble();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int16.cs
index 0906300e61..3bd5f57ce0 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractInt16 testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractInt16();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int32.cs
index 7c2dc5dbf1..93f90607af 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractInt32 testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractInt32();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int64.cs
index 5a67978f7f..b404f2117b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractInt64 testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractInt64();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.SByte.cs
index 54f955b377..726c654ad9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSByte testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSByte();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt16.cs
index 8e16038192..f266e34686 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractUInt16 testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractUInt16();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt32.cs
index 263c3531d4..851d321b50 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractUInt32 testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractUInt32();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt64.cs
index fa62449631..297ee439da 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Subtract.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractUInt64 testClass)
+ {
+ var result = Sse2.Subtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractUInt64();
var result = Sse2.Subtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Subtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Subtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Byte.cs
index 2f72bb0d86..1079bcb04a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSaturateByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSaturateByte testClass)
+ {
+ var result = Sse2.SubtractSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSaturateByte();
var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SubtractSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Int16.cs
index 9d9e2a5516..81a8120228 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSaturateInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSaturateInt16 testClass)
+ {
+ var result = Sse2.SubtractSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSaturateInt16();
var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SubtractSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.SByte.cs
index 2afaabd494..037ce8e57f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSaturateSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSaturateSByte testClass)
+ {
+ var result = Sse2.SubtractSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSaturateSByte();
var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SubtractSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.UInt16.cs
index c7d80e1d82..43f5a129ea 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractSaturate.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractSaturateUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(ushort.MinValue,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(ushort.MinValue,ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractSaturateUInt16 testClass)
+ {
+ var result = Sse2.SubtractSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractSaturateUInt16();
var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SubtractSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SubtractSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractScalar.Double.cs
index eb9aeefd0d..615c0220de 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/SubtractScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SubtractScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SubtractScalarDouble testClass)
+ {
+ var result = Sse2.SubtractScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SubtractScalarDouble();
var result = Sse2.SubtractScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.SubtractScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.SubtractScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Byte.cs
index 7ca399c522..48eca30ec3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorByte testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorByte();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Double.cs
index 1b0f5bc46b..ea23c450aa 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorDouble testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorDouble();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int16.cs
index 28a768f7cb..1f6afd5c5c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorInt16 testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorInt16();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int32.cs
index 2a3d6f78bd..c56b27a18b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorInt32 testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorInt32();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int64.cs
index 6c2fc07308..71b32c3082 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorInt64 testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorInt64();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.SByte.cs
index 5edc54402f..a22386e9a7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorSByte testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorSByte();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt16.cs
index 63888399a2..ebd1df625c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorUInt16 testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorUInt16();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt32.cs
index 65625241b4..6e0c801510 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorUInt32 testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorUInt32();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt64.cs
index 7cbf13db5e..2bb6ebca74 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse2/Xor.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__XorUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__XorUInt64 testClass)
+ {
+ var result = Sse2.Xor(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__XorUInt64();
var result = Sse2.Xor(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse2.Xor(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse2.Xor(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Double.cs
index 19afb61f20..513e2dbaa5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingBinaryOpTest__AddSubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingBinaryOpTest__AddSubtractDouble testClass)
+ {
+ var result = Sse3.AddSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingBinaryOpTest__AddSubtractDouble();
var result = Sse3.AddSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse3.AddSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse3.AddSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Single.cs
index 8021924e07..7bacc27d4c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/AddSubtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class AlternatingBinaryOpTest__AddSubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(AlternatingBinaryOpTest__AddSubtractSingle testClass)
+ {
+ var result = Sse3.AddSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new AlternatingBinaryOpTest__AddSubtractSingle();
var result = Sse3.AddSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse3.AddSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse3.AddSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Double.cs
index 432d3b5c87..9651b6070b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalAddDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalAddDouble testClass)
+ {
+ var result = Sse3.HorizontalAdd(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalAddDouble();
var result = Sse3.HorizontalAdd(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse3.HorizontalAdd(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse3.HorizontalAdd(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Single.cs
index 4ade0e035d..d9dd25b24d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalAdd.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalAddSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalAddSingle testClass)
+ {
+ var result = Sse3.HorizontalAdd(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalAddSingle();
var result = Sse3.HorizontalAdd(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse3.HorizontalAdd(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse3.HorizontalAdd(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Double.cs
index 823fa9f4b5..7be722c32d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalSubtractDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalSubtractDouble testClass)
+ {
+ var result = Sse3.HorizontalSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalSubtractDouble();
var result = Sse3.HorizontalSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse3.HorizontalSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse3.HorizontalSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Single.cs
index 2a7a413085..52c9ea619d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse3/HorizontalSubtract.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalSubtractSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalSubtractSingle testClass)
+ {
+ var result = Sse3.HorizontalSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalSubtractSingle();
var result = Sse3.HorizontalSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse3.HorizontalSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse3.HorizontalSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Byte.cs
index 99ff3ef49c..33db0c9d98 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+ public Vector128<Byte> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (byte)(((i % 2) == 0) ? 128 : 1); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar3), ref Unsafe.As<Byte, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableByte testClass)
+ {
+ var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableByte();
var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Double.cs
index 24f57157dc..4bcc205841 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+ public Vector128<Double> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (double)(((i % 2) == 0) ? -0.0 : 1.0); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref _clsVar3), ref Unsafe.As<Double, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableDouble testClass)
+ {
+ var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableDouble();
var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.SByte.cs
index fcbbb7dda2..7d34f7d565 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+ public Vector128<SByte> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (sbyte)(((i % 2) == 0) ? -128 : 1); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar3), ref Unsafe.As<SByte, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableSByte testClass)
+ {
+ var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableSByte();
var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Single.cs
index e1b2263d3c..44f5dc3842 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/BlendVariable.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,36 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleTernaryOpTest__BlendVariableSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+ public Vector128<Single> _fld3;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op3ElementCount; i++) { _data3[i] = (float)(((i % 2) == 0) ? -0.0 : 1.0); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar3), ref Unsafe.As<Single, byte>(ref _data3[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleTernaryOpTest__BlendVariableSingle testClass)
+ {
+ var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, _fld3, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -261,7 +297,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, secondOp, thirdOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleTernaryOpTest__BlendVariableSingle();
var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
@@ -270,7 +306,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.BlendVariable(_fld1, _fld2, _fld3);
@@ -278,6 +314,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _fld3, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.BlendVariable(test._fld1, test._fld2, test._fld3);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, test._fld3, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Double.cs
index 34a80ca358..7d654a9dd1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__CeilingDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__CeilingDouble testClass)
+ {
+ var result = Sse41.Ceiling(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__CeilingDouble();
var result = Sse41.Ceiling(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Ceiling(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Ceiling(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Single.cs
index 3638f258a4..b0b850dc70 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Ceiling.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__CeilingSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__CeilingSingle testClass)
+ {
+ var result = Sse41.Ceiling(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__CeilingSingle();
var result = Sse41.Ceiling(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Ceiling(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Ceiling(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Double.cs
index ab1f72df7c..820072dc95 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CeilingScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CeilingScalarDouble testClass)
+ {
+ var result = Sse41.CeilingScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CeilingScalarDouble();
var result = Sse41.CeilingScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.CeilingScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.CeilingScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Single.cs
index 0f26dd152e..b14301c5fa 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CeilingScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CeilingScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CeilingScalarSingle testClass)
+ {
+ var result = Sse41.CeilingScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CeilingScalarSingle();
var result = Sse41.CeilingScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.CeilingScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.CeilingScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.Int64.cs
index ddfb665df7..2c6572857a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualInt64 testClass)
+ {
+ var result = Sse41.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualInt64();
var result = Sse41.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.UInt64.cs
index ac372c3901..e287e8399c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/CompareEqual.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareEqualUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareEqualUInt64 testClass)
+ {
+ var result = Sse41.CompareEqual(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareEqualUInt64();
var result = Sse41.CompareEqual(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.CompareEqual(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.CompareEqual(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.1.cs
index d7e9847538..23eb41c686 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractByte1()
{
- var test = new SimpleUnaryOpTest__ExtractByte1();
+ var test = new ExtractScalarTest__ExtractByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractByte1
+ public sealed unsafe class ExtractScalarTest__ExtractByte1
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractByte1 testClass)
+ {
+ var result = Sse41.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractByte1()
+ static ExtractScalarTest__ExtractByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__ExtractByte1()
+ public ExtractScalarTest__ExtractByte1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractByte1();
+ var test = new ExtractScalarTest__ExtractByte1();
var result = Sse41.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.129.cs
index 4f6a93be02..ff407b9631 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Byte.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractByte129()
{
- var test = new SimpleUnaryOpTest__ExtractByte129();
+ var test = new ExtractScalarTest__ExtractByte129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractByte129
+ public sealed unsafe class ExtractScalarTest__ExtractByte129
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractByte129 testClass)
+ {
+ var result = Sse41.Extract(_fld, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__ExtractByte129()
+ static ExtractScalarTest__ExtractByte129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__ExtractByte129()
+ public ExtractScalarTest__ExtractByte129()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractByte129();
+ var test = new ExtractScalarTest__ExtractByte129();
var result = Sse41.Extract(test._fld, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 129);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.1.cs
index 05bb4f03bb..63d8d00cf9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt321()
{
- var test = new SimpleUnaryOpTest__ExtractInt321();
+ var test = new ExtractScalarTest__ExtractInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt321
+ public sealed unsafe class ExtractScalarTest__ExtractInt321
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt321 testClass)
+ {
+ var result = Sse41.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractInt321()
+ static ExtractScalarTest__ExtractInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ExtractInt321()
+ public ExtractScalarTest__ExtractInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt321();
+ var test = new ExtractScalarTest__ExtractInt321();
var result = Sse41.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.129.cs
index 1b63c5d02e..6de15f7dd3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int32.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt32129()
{
- var test = new SimpleUnaryOpTest__ExtractInt32129();
+ var test = new ExtractScalarTest__ExtractInt32129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt32129
+ public sealed unsafe class ExtractScalarTest__ExtractInt32129
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt32129 testClass)
+ {
+ var result = Sse41.Extract(_fld, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__ExtractInt32129()
+ static ExtractScalarTest__ExtractInt32129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__ExtractInt32129()
+ public ExtractScalarTest__ExtractInt32129()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt32129();
+ var test = new ExtractScalarTest__ExtractInt32129();
var result = Sse41.Extract(test._fld, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 129);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.1.cs
index 48276ba1b2..3238555cde 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt641()
{
- var test = new SimpleUnaryOpTest__ExtractInt641();
+ var test = new ExtractScalarTest__ExtractInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt641
+ public sealed unsafe class ExtractScalarTest__ExtractInt641
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt641 testClass)
+ {
+ var result = Sse41.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractInt641()
+ static ExtractScalarTest__ExtractInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ExtractInt641()
+ public ExtractScalarTest__ExtractInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt641();
+ var test = new ExtractScalarTest__ExtractInt641();
var result = Sse41.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.129.cs
index ad06c85aa6..e0cb830914 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Int64.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractInt64129()
{
- var test = new SimpleUnaryOpTest__ExtractInt64129();
+ var test = new ExtractScalarTest__ExtractInt64129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractInt64129
+ public sealed unsafe class ExtractScalarTest__ExtractInt64129
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractInt64129 testClass)
+ {
+ var result = Sse41.Extract(_fld, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__ExtractInt64129()
+ static ExtractScalarTest__ExtractInt64129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__ExtractInt64129()
+ public ExtractScalarTest__ExtractInt64129()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractInt64129();
+ var test = new ExtractScalarTest__ExtractInt64129();
var result = Sse41.Extract(test._fld, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 129);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.1.cs
index 49a44cbb53..97a6a907fd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractSingle1()
{
- var test = new SimpleUnaryOpTest__ExtractSingle1();
+ var test = new ExtractScalarTest__ExtractSingle1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractSingle1
+ public sealed unsafe class ExtractScalarTest__ExtractSingle1
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractSingle1 testClass)
+ {
+ var result = Sse41.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__ExtractSingle1()
+ static ExtractScalarTest__ExtractSingle1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleUnaryOpTest__ExtractSingle1()
+ public ExtractScalarTest__ExtractSingle1()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractSingle1();
+ var test = new ExtractScalarTest__ExtractSingle1();
var result = Sse41.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.129.cs
index a325e9eefa..32d0006b11 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.Single.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractSingle129()
{
- var test = new SimpleUnaryOpTest__ExtractSingle129();
+ var test = new ExtractScalarTest__ExtractSingle129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractSingle129
+ public sealed unsafe class ExtractScalarTest__ExtractSingle129
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractSingle129 testClass)
+ {
+ var result = Sse41.Extract(_fld, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Single, Single> _dataTable;
- static SimpleUnaryOpTest__ExtractSingle129()
+ static ExtractScalarTest__ExtractSingle129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleUnaryOpTest__ExtractSingle129()
+ public ExtractScalarTest__ExtractSingle129()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractSingle129();
+ var test = new ExtractScalarTest__ExtractSingle129();
var result = Sse41.Extract(test._fld, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 129);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.1.cs
index 69f423c34f..66392f4463 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt321()
{
- var test = new SimpleUnaryOpTest__ExtractUInt321();
+ var test = new ExtractScalarTest__ExtractUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt321
+ public sealed unsafe class ExtractScalarTest__ExtractUInt321
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt321 testClass)
+ {
+ var result = Sse41.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt321()
+ static ExtractScalarTest__ExtractUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractUInt321()
+ public ExtractScalarTest__ExtractUInt321()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt321();
+ var test = new ExtractScalarTest__ExtractUInt321();
var result = Sse41.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.129.cs
index ca6fadd2d5..04055a8a76 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt32.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt32129()
{
- var test = new SimpleUnaryOpTest__ExtractUInt32129();
+ var test = new ExtractScalarTest__ExtractUInt32129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt32129
+ public sealed unsafe class ExtractScalarTest__ExtractUInt32129
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt32129 testClass)
+ {
+ var result = Sse41.Extract(_fld, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt32129()
+ static ExtractScalarTest__ExtractUInt32129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__ExtractUInt32129()
+ public ExtractScalarTest__ExtractUInt32129()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt32129();
+ var test = new ExtractScalarTest__ExtractUInt32129();
var result = Sse41.Extract(test._fld, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 129);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.1.cs
index 399ba96124..03f7f84695 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt641()
{
- var test = new SimpleUnaryOpTest__ExtractUInt641();
+ var test = new ExtractScalarTest__ExtractUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt641
+ public sealed unsafe class ExtractScalarTest__ExtractUInt641
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt641 testClass)
+ {
+ var result = Sse41.Extract(_fld, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt641()
+ static ExtractScalarTest__ExtractUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractUInt641()
+ public ExtractScalarTest__ExtractUInt641()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt641();
+ var test = new ExtractScalarTest__ExtractUInt641();
var result = Sse41.Extract(test._fld, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 1);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.129.cs
index c3c896d49b..e9b8421d1f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Extract.UInt64.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void ExtractUInt64129()
{
- var test = new SimpleUnaryOpTest__ExtractUInt64129();
+ var test = new ExtractScalarTest__ExtractUInt64129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__ExtractUInt64129
+ public sealed unsafe class ExtractScalarTest__ExtractUInt64129
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(ExtractScalarTest__ExtractUInt64129 testClass)
+ {
+ var result = Sse41.Extract(_fld, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__ExtractUInt64129()
+ static ExtractScalarTest__ExtractUInt64129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__ExtractUInt64129()
+ public ExtractScalarTest__ExtractUInt64129()
{
Succeeded = true;
@@ -230,16 +260,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__ExtractUInt64129();
+ var test = new ExtractScalarTest__ExtractUInt64129();
var result = Sse41.Extract(test._fld, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Extract(_fld, 129);
@@ -247,6 +277,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Extract(test._fld, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Double.cs
index 9be27a2cd2..1d1b3a001b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__FloorDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__FloorDouble testClass)
+ {
+ var result = Sse41.Floor(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__FloorDouble();
var result = Sse41.Floor(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Floor(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Floor(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Single.cs
index 125584edf6..2dbd48e6c7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Floor.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__FloorSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__FloorSingle testClass)
+ {
+ var result = Sse41.Floor(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__FloorSingle();
var result = Sse41.Floor(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Floor(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Floor(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Double.cs
index 1a2b520655..67a96a03ec 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__FloorScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__FloorScalarDouble testClass)
+ {
+ var result = Sse41.FloorScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__FloorScalarDouble();
var result = Sse41.FloorScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.FloorScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.FloorScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Single.cs
index d646f4b320..35049fb1f9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/FloorScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__FloorScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__FloorScalarSingle testClass)
+ {
+ var result = Sse41.FloorScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__FloorScalarSingle();
var result = Sse41.FloorScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.FloorScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.FloorScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.1.cs
index f12125b03c..6bae0f6f89 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertByte1()
{
- var test = new SimpleUnaryOpTest__InsertByte1();
+ var test = new InsertScalarTest__InsertByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertByte1
+ public sealed unsafe class InsertScalarTest__InsertByte1
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertByte1 testClass)
+ {
+ var result = Sse41.Insert(_fld, (byte)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__InsertByte1()
+ static InsertScalarTest__InsertByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__InsertByte1()
+ public InsertScalarTest__InsertByte1()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertByte1();
+ var test = new InsertScalarTest__InsertByte1();
var result = Sse41.Insert(test._fld, (byte)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (byte)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (byte)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.129.cs
index a6a020da9d..07628a641c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Byte.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertByte129()
{
- var test = new SimpleUnaryOpTest__InsertByte129();
+ var test = new InsertScalarTest__InsertByte129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertByte129
+ public sealed unsafe class InsertScalarTest__InsertByte129
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertByte129 testClass)
+ {
+ var result = Sse41.Insert(_fld, (byte)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Byte, Byte> _dataTable;
- static SimpleUnaryOpTest__InsertByte129()
+ static InsertScalarTest__InsertByte129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
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__InsertByte129()
+ public InsertScalarTest__InsertByte129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertByte129();
+ var test = new InsertScalarTest__InsertByte129();
var result = Sse41.Insert(test._fld, (byte)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (byte)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (byte)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.1.cs
index 02ba67c0b8..1519841e6c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt321()
{
- var test = new SimpleUnaryOpTest__InsertInt321();
+ var test = new InsertScalarTest__InsertInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt321
+ public sealed unsafe class InsertScalarTest__InsertInt321
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt321 testClass)
+ {
+ var result = Sse41.Insert(_fld, (int)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__InsertInt321()
+ static InsertScalarTest__InsertInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__InsertInt321()
+ public InsertScalarTest__InsertInt321()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt321();
+ var test = new InsertScalarTest__InsertInt321();
var result = Sse41.Insert(test._fld, (int)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (int)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (int)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.129.cs
index 5e0b41e491..b5380b2f5f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int32.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt32129()
{
- var test = new SimpleUnaryOpTest__InsertInt32129();
+ var test = new InsertScalarTest__InsertInt32129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt32129
+ public sealed unsafe class InsertScalarTest__InsertInt32129
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt32129 testClass)
+ {
+ var result = Sse41.Insert(_fld, (int)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int32, Int32> _dataTable;
- static SimpleUnaryOpTest__InsertInt32129()
+ static InsertScalarTest__InsertInt32129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public SimpleUnaryOpTest__InsertInt32129()
+ public InsertScalarTest__InsertInt32129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt32129();
+ var test = new InsertScalarTest__InsertInt32129();
var result = Sse41.Insert(test._fld, (int)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (int)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (int)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.1.cs
index 03110fa74d..23cea92147 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt641()
{
- var test = new SimpleUnaryOpTest__InsertInt641();
+ var test = new InsertScalarTest__InsertInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt641
+ public sealed unsafe class InsertScalarTest__InsertInt641
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt641 testClass)
+ {
+ var result = Sse41.Insert(_fld, (long)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__InsertInt641()
+ static InsertScalarTest__InsertInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__InsertInt641()
+ public InsertScalarTest__InsertInt641()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt641();
+ var test = new InsertScalarTest__InsertInt641();
var result = Sse41.Insert(test._fld, (long)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (long)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (long)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.129.cs
index e344759a30..2358923e0f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Int64.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertInt64129()
{
- var test = new SimpleUnaryOpTest__InsertInt64129();
+ var test = new InsertScalarTest__InsertInt64129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertInt64129
+ public sealed unsafe class InsertScalarTest__InsertInt64129
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertInt64129 testClass)
+ {
+ var result = Sse41.Insert(_fld, (long)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<Int64, Int64> _dataTable;
- static SimpleUnaryOpTest__InsertInt64129()
+ static InsertScalarTest__InsertInt64129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public SimpleUnaryOpTest__InsertInt64129()
+ public InsertScalarTest__InsertInt64129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertInt64129();
+ var test = new InsertScalarTest__InsertInt64129();
var result = Sse41.Insert(test._fld, (long)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (long)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (long)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.1.cs
index 2b7af448ec..a30b1b1484 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSByte1()
{
- var test = new SimpleUnaryOpTest__InsertSByte1();
+ var test = new InsertScalarTest__InsertSByte1();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertSByte1
+ public sealed unsafe class InsertScalarTest__InsertSByte1
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertSByte1 testClass)
+ {
+ var result = Sse41.Insert(_fld, (sbyte)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__InsertSByte1()
+ static InsertScalarTest__InsertSByte1()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleUnaryOpTest__InsertSByte1()
+ public InsertScalarTest__InsertSByte1()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertSByte1();
+ var test = new InsertScalarTest__InsertSByte1();
var result = Sse41.Insert(test._fld, (sbyte)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (sbyte)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (sbyte)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.129.cs
index 4c164ab166..77bb6ef2cf 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.SByte.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSByte129()
{
- var test = new SimpleUnaryOpTest__InsertSByte129();
+ var test = new InsertScalarTest__InsertSByte129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertSByte129
+ public sealed unsafe class InsertScalarTest__InsertSByte129
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(0, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertSByte129 testClass)
+ {
+ var result = Sse41.Insert(_fld, (sbyte)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<SByte, SByte> _dataTable;
- static SimpleUnaryOpTest__InsertSByte129()
+ static InsertScalarTest__InsertSByte129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public SimpleUnaryOpTest__InsertSByte129()
+ public InsertScalarTest__InsertSByte129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertSByte129();
+ var test = new InsertScalarTest__InsertSByte129();
var result = Sse41.Insert(test._fld, (sbyte)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (sbyte)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (sbyte)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.0.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.0.cs
index 19a9902c35..6edb701d5e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.0.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.0.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle0()
{
- var test = new SimpleBinaryOpTest__InsertSingle0();
+ var test = new InsertVector128Test__InsertSingle0();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle0
+ public sealed unsafe class InsertVector128Test__InsertSingle0
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle0 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 0);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle0()
+ static InsertVector128Test__InsertSingle0()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle0()
+ public InsertVector128Test__InsertSingle0()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle0();
+ var test = new InsertVector128Test__InsertSingle0();
var result = Sse41.Insert(test._fld1, test._fld2, 0);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 0);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 0);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.1.cs
index ba6b5a0500..24fb0f2b91 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.1.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle1()
{
- var test = new SimpleBinaryOpTest__InsertSingle1();
+ var test = new InsertVector128Test__InsertSingle1();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle1
+ public sealed unsafe class InsertVector128Test__InsertSingle1
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle1 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle1()
+ static InsertVector128Test__InsertSingle1()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle1()
+ public InsertVector128Test__InsertSingle1()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle1();
+ var test = new InsertVector128Test__InsertSingle1();
var result = Sse41.Insert(test._fld1, test._fld2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 1);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.128.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.128.cs
index c736e7b00c..25bbdd7cfa 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.128.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.128.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle128()
{
- var test = new SimpleBinaryOpTest__InsertSingle128();
+ var test = new InsertVector128Test__InsertSingle128();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle128
+ public sealed unsafe class InsertVector128Test__InsertSingle128
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle128 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 128);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle128()
+ static InsertVector128Test__InsertSingle128()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle128()
+ public InsertVector128Test__InsertSingle128()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle128();
+ var test = new InsertVector128Test__InsertSingle128();
var result = Sse41.Insert(test._fld1, test._fld2, 128);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 128);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 128);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.129.cs
index 07e25f3863..c6f9dd7910 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.129.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle129()
{
- var test = new SimpleBinaryOpTest__InsertSingle129();
+ var test = new InsertVector128Test__InsertSingle129();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle129
+ public sealed unsafe class InsertVector128Test__InsertSingle129
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle129 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle129()
+ static InsertVector128Test__InsertSingle129()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle129()
+ public InsertVector128Test__InsertSingle129()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle129();
+ var test = new InsertVector128Test__InsertSingle129();
var result = Sse41.Insert(test._fld1, test._fld2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 129);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.16.cs
index 07d80ab151..a81d9928e5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.16.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle16()
{
- var test = new SimpleBinaryOpTest__InsertSingle16();
+ var test = new InsertVector128Test__InsertSingle16();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle16
+ public sealed unsafe class InsertVector128Test__InsertSingle16
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle16 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 16);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle16()
+ static InsertVector128Test__InsertSingle16()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle16()
+ public InsertVector128Test__InsertSingle16()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle16();
+ var test = new InsertVector128Test__InsertSingle16();
var result = Sse41.Insert(test._fld1, test._fld2, 16);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 16);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 16);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.192.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.192.cs
index c5f7eb910f..8479a1410a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.192.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.192.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle192()
{
- var test = new SimpleBinaryOpTest__InsertSingle192();
+ var test = new InsertVector128Test__InsertSingle192();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle192
+ public sealed unsafe class InsertVector128Test__InsertSingle192
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle192 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 192);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle192()
+ static InsertVector128Test__InsertSingle192()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle192()
+ public InsertVector128Test__InsertSingle192()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle192();
+ var test = new InsertVector128Test__InsertSingle192();
var result = Sse41.Insert(test._fld1, test._fld2, 192);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 192);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 192);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.2.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.2.cs
index da4ff5f31e..720e25ab85 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.2.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.2.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle2()
{
- var test = new SimpleBinaryOpTest__InsertSingle2();
+ var test = new InsertVector128Test__InsertSingle2();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle2
+ public sealed unsafe class InsertVector128Test__InsertSingle2
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle2 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle2()
+ static InsertVector128Test__InsertSingle2()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle2()
+ public InsertVector128Test__InsertSingle2()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle2();
+ var test = new InsertVector128Test__InsertSingle2();
var result = Sse41.Insert(test._fld1, test._fld2, 2);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 2);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.32.cs
index 3aaf3ea16b..88a9d66c1e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.32.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle32()
{
- var test = new SimpleBinaryOpTest__InsertSingle32();
+ var test = new InsertVector128Test__InsertSingle32();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle32
+ public sealed unsafe class InsertVector128Test__InsertSingle32
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle32 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 32);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle32()
+ static InsertVector128Test__InsertSingle32()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle32()
+ public InsertVector128Test__InsertSingle32()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle32();
+ var test = new InsertVector128Test__InsertSingle32();
var result = Sse41.Insert(test._fld1, test._fld2, 32);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 32);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 32);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.4.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.4.cs
index c961127f54..ebffcead4b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.4.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.4.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle4()
{
- var test = new SimpleBinaryOpTest__InsertSingle4();
+ var test = new InsertVector128Test__InsertSingle4();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle4
+ public sealed unsafe class InsertVector128Test__InsertSingle4
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle4 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 4);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle4()
+ static InsertVector128Test__InsertSingle4()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle4()
+ public InsertVector128Test__InsertSingle4()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle4();
+ var test = new InsertVector128Test__InsertSingle4();
var result = Sse41.Insert(test._fld1, test._fld2, 4);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 4);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 4);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.48.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.48.cs
index 96514307da..09e1f19397 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.48.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.48.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle48()
{
- var test = new SimpleBinaryOpTest__InsertSingle48();
+ var test = new InsertVector128Test__InsertSingle48();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle48
+ public sealed unsafe class InsertVector128Test__InsertSingle48
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle48 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 48);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle48()
+ static InsertVector128Test__InsertSingle48()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle48()
+ public InsertVector128Test__InsertSingle48()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle48();
+ var test = new InsertVector128Test__InsertSingle48();
var result = Sse41.Insert(test._fld1, test._fld2, 48);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 48);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 48);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.64.cs
index d47c8b0300..7658cdc2f2 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.64.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle64()
{
- var test = new SimpleBinaryOpTest__InsertSingle64();
+ var test = new InsertVector128Test__InsertSingle64();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle64
+ public sealed unsafe class InsertVector128Test__InsertSingle64
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle64 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 64);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle64()
+ static InsertVector128Test__InsertSingle64()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle64()
+ public InsertVector128Test__InsertSingle64()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle64();
+ var test = new InsertVector128Test__InsertSingle64();
var result = Sse41.Insert(test._fld1, test._fld2, 64);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 64);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 64);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.8.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.8.cs
index ae2f080247..a9329d0897 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.8.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.Single.8.cs
@@ -23,7 +23,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertSingle8()
{
- var test = new SimpleBinaryOpTest__InsertSingle8();
+ var test = new InsertVector128Test__InsertSingle8();
if (test.IsSupported)
{
@@ -66,11 +66,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,8 +91,35 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleBinaryOpTest__InsertSingle8
+ public sealed unsafe class InsertVector128Test__InsertSingle8
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertVector128Test__InsertSingle8 testClass)
+ {
+ var result = Sse41.Insert(_fld1, _fld2, 8);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -104,7 +137,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleBinaryOpTest__DataTable<Single, Single, Single> _dataTable;
- static SimpleBinaryOpTest__InsertSingle8()
+ static InsertVector128Test__InsertSingle8()
{
var random = new Random();
@@ -114,7 +147,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref _clsVar2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
}
- public SimpleBinaryOpTest__InsertSingle8()
+ public InsertVector128Test__InsertSingle8()
{
Succeeded = true;
@@ -251,16 +284,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleBinaryOpTest__InsertSingle8();
+ var test = new InsertVector128Test__InsertSingle8();
var result = Sse41.Insert(test._fld1, test._fld2, 8);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld1, _fld2, 8);
@@ -268,6 +301,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld1, test._fld2, 8);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.1.cs
index efe68f652b..8c598a717e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt321()
{
- var test = new SimpleUnaryOpTest__InsertUInt321();
+ var test = new InsertScalarTest__InsertUInt321();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt321
+ public sealed unsafe class InsertScalarTest__InsertUInt321
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt321 testClass)
+ {
+ var result = Sse41.Insert(_fld, (uint)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__InsertUInt321()
+ static InsertScalarTest__InsertUInt321()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__InsertUInt321()
+ public InsertScalarTest__InsertUInt321()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt321();
+ var test = new InsertScalarTest__InsertUInt321();
var result = Sse41.Insert(test._fld, (uint)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (uint)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (uint)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.129.cs
index 32ef922ed2..da2b85bb49 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt32.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt32129()
{
- var test = new SimpleUnaryOpTest__InsertUInt32129();
+ var test = new InsertScalarTest__InsertUInt32129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt32129
+ public sealed unsafe class InsertScalarTest__InsertUInt32129
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt32129 testClass)
+ {
+ var result = Sse41.Insert(_fld, (uint)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt32, UInt32> _dataTable;
- static SimpleUnaryOpTest__InsertUInt32129()
+ static InsertScalarTest__InsertUInt32129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public SimpleUnaryOpTest__InsertUInt32129()
+ public InsertScalarTest__InsertUInt32129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt32129();
+ var test = new InsertScalarTest__InsertUInt32129();
var result = Sse41.Insert(test._fld, (uint)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (uint)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (uint)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.1.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.1.cs
index a735dd5321..ae2c243846 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.1.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.1.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt641()
{
- var test = new SimpleUnaryOpTest__InsertUInt641();
+ var test = new InsertScalarTest__InsertUInt641();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt641
+ public sealed unsafe class InsertScalarTest__InsertUInt641
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt641 testClass)
+ {
+ var result = Sse41.Insert(_fld, (ulong)2, 1);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__InsertUInt641()
+ static InsertScalarTest__InsertUInt641()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__InsertUInt641()
+ public InsertScalarTest__InsertUInt641()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt641();
+ var test = new InsertScalarTest__InsertUInt641();
var result = Sse41.Insert(test._fld, (ulong)2, 1);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (ulong)2, 1);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (ulong)2, 1);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.129.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.129.cs
index d8b339db1d..41adb2ed18 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.129.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Insert.UInt64.129.cs
@@ -21,7 +21,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void InsertUInt64129()
{
- var test = new SimpleUnaryOpTest__InsertUInt64129();
+ var test = new InsertScalarTest__InsertUInt64129();
if (test.IsSupported)
{
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -83,8 +89,32 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class SimpleUnaryOpTest__InsertUInt64129
+ public sealed unsafe class InsertScalarTest__InsertUInt64129
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(InsertScalarTest__InsertUInt64129 testClass)
+ {
+ var result = Sse41.Insert(_fld, (ulong)2, 129);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +128,7 @@ namespace JIT.HardwareIntrinsics.X86
private SimpleUnaryOpTest__DataTable<UInt64, UInt64> _dataTable;
- static SimpleUnaryOpTest__InsertUInt64129()
+ static InsertScalarTest__InsertUInt64129()
{
var random = new Random();
@@ -106,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public SimpleUnaryOpTest__InsertUInt64129()
+ public InsertScalarTest__InsertUInt64129()
{
Succeeded = true;
@@ -237,16 +267,16 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new SimpleUnaryOpTest__InsertUInt64129();
+ var test = new InsertScalarTest__InsertUInt64129();
var result = Sse41.Insert(test._fld, (ulong)2, 129);
Unsafe.Write(_dataTable.outArrayPtr, result);
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Insert(_fld, (ulong)2, 129);
@@ -254,6 +284,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Insert(test._fld, (ulong)2, 129);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.Int32.cs
index d7ff58d931..f4066c205c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxInt32 testClass)
+ {
+ var result = Sse41.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxInt32();
var result = Sse41.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.SByte.cs
index 17baef2bd1..6a35591ba8 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxSByte testClass)
+ {
+ var result = Sse41.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxSByte();
var result = Sse41.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt16.cs
index 8c31b75252..92feeb8a8a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxUInt16 testClass)
+ {
+ var result = Sse41.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxUInt16();
var result = Sse41.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt32.cs
index 15740cee8a..5197e6763e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Max.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MaxUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MaxUInt32 testClass)
+ {
+ var result = Sse41.Max(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MaxUInt32();
var result = Sse41.Max(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Max(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Max(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.Int32.cs
index 8dca101e42..906127bedd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinInt32 testClass)
+ {
+ var result = Sse41.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinInt32();
var result = Sse41.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.SByte.cs
index e7abc4d198..061ef3f46b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinSByte testClass)
+ {
+ var result = Sse41.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinSByte();
var result = Sse41.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt16.cs
index 8488da65fb..ae652c8168 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinUInt16 testClass)
+ {
+ var result = Sse41.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinUInt16();
var result = Sse41.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt32.cs
index 14e80d7b45..6e3636a67d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/Min.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MinUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MinUInt32 testClass)
+ {
+ var result = Sse41.Min(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MinUInt32();
var result = Sse41.Min(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.Min(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.Min(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/MultiplyLow.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/MultiplyLow.Int32.cs
index e5f348ee47..2a936ed646 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/MultiplyLow.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/MultiplyLow.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplyLowInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplyLowInt32 testClass)
+ {
+ var result = Sse41.MultiplyLow(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplyLowInt32();
var result = Sse41.MultiplyLow(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.MultiplyLow(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.MultiplyLow(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/PackUnsignedSaturate.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/PackUnsignedSaturate.UInt16.cs
index 556ff291b0..50539af227 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/PackUnsignedSaturate.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/PackUnsignedSaturate.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__PackUnsignedSaturateUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__PackUnsignedSaturateUInt16 testClass)
+ {
+ var result = Sse41.PackUnsignedSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__PackUnsignedSaturateUInt16();
var result = Sse41.PackUnsignedSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.PackUnsignedSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.PackUnsignedSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Double.cs
index 4eeedb70cd..ca457aa416 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundCurrentDirectionDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundCurrentDirectionDouble testClass)
+ {
+ var result = Sse41.RoundCurrentDirection(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundCurrentDirectionDouble();
var result = Sse41.RoundCurrentDirection(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundCurrentDirection(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundCurrentDirection(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Single.cs
index 987a7d6db7..256f6136e7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirection.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundCurrentDirectionSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundCurrentDirectionSingle testClass)
+ {
+ var result = Sse41.RoundCurrentDirection(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundCurrentDirectionSingle();
var result = Sse41.RoundCurrentDirection(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundCurrentDirection(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundCurrentDirection(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Double.cs
index d1a94bf212..53720029f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundCurrentDirectionScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundCurrentDirectionScalarDouble testClass)
+ {
+ var result = Sse41.RoundCurrentDirectionScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundCurrentDirectionScalarDouble();
var result = Sse41.RoundCurrentDirectionScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundCurrentDirectionScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundCurrentDirectionScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Single.cs
index 812d9809c9..248d965514 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundCurrentDirectionScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundCurrentDirectionScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundCurrentDirectionScalarSingle testClass)
+ {
+ var result = Sse41.RoundCurrentDirectionScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundCurrentDirectionScalarSingle();
var result = Sse41.RoundCurrentDirectionScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundCurrentDirectionScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundCurrentDirectionScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Double.cs
index 9d98e55704..1b4ac87903 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNearestIntegerDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNearestIntegerDouble testClass)
+ {
+ var result = Sse41.RoundToNearestInteger(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNearestIntegerDouble();
var result = Sse41.RoundToNearestInteger(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNearestInteger(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNearestInteger(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Single.cs
index b4d42a2508..892a86daee 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestInteger.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNearestIntegerSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNearestIntegerSingle testClass)
+ {
+ var result = Sse41.RoundToNearestInteger(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNearestIntegerSingle();
var result = Sse41.RoundToNearestInteger(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNearestInteger(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNearestInteger(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Double.cs
index b715709c4e..03d99bd887 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToNearestIntegerScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToNearestIntegerScalarDouble testClass)
+ {
+ var result = Sse41.RoundToNearestIntegerScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToNearestIntegerScalarDouble();
var result = Sse41.RoundToNearestIntegerScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNearestIntegerScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNearestIntegerScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Single.cs
index b00afe9cef..5ce8cbfdf1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNearestIntegerScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToNearestIntegerScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToNearestIntegerScalarSingle testClass)
+ {
+ var result = Sse41.RoundToNearestIntegerScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToNearestIntegerScalarSingle();
var result = Sse41.RoundToNearestIntegerScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNearestIntegerScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNearestIntegerScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Double.cs
index cd7c55f7ab..d54e34cd9a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNegativeInfinityDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNegativeInfinityDouble testClass)
+ {
+ var result = Sse41.RoundToNegativeInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNegativeInfinityDouble();
var result = Sse41.RoundToNegativeInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNegativeInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNegativeInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Single.cs
index 0b12a931ae..03f5948d20 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinity.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToNegativeInfinitySingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToNegativeInfinitySingle testClass)
+ {
+ var result = Sse41.RoundToNegativeInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToNegativeInfinitySingle();
var result = Sse41.RoundToNegativeInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNegativeInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNegativeInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Double.cs
index 2c67fe099d..583e146191 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToNegativeInfinityScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToNegativeInfinityScalarDouble testClass)
+ {
+ var result = Sse41.RoundToNegativeInfinityScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToNegativeInfinityScalarDouble();
var result = Sse41.RoundToNegativeInfinityScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNegativeInfinityScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNegativeInfinityScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Single.cs
index 3b5ea8c33b..92af8047a5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToNegativeInfinityScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToNegativeInfinityScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToNegativeInfinityScalarSingle testClass)
+ {
+ var result = Sse41.RoundToNegativeInfinityScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToNegativeInfinityScalarSingle();
var result = Sse41.RoundToNegativeInfinityScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToNegativeInfinityScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToNegativeInfinityScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Double.cs
index 66e782f703..27d9ba5ecc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToPositiveInfinityDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToPositiveInfinityDouble testClass)
+ {
+ var result = Sse41.RoundToPositiveInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToPositiveInfinityDouble();
var result = Sse41.RoundToPositiveInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToPositiveInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToPositiveInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Single.cs
index f9308c0e54..a972bdfed9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinity.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToPositiveInfinitySingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToPositiveInfinitySingle testClass)
+ {
+ var result = Sse41.RoundToPositiveInfinity(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToPositiveInfinitySingle();
var result = Sse41.RoundToPositiveInfinity(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToPositiveInfinity(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToPositiveInfinity(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Double.cs
index 54bd3c22fb..0671276db5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToPositiveInfinityScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToPositiveInfinityScalarDouble testClass)
+ {
+ var result = Sse41.RoundToPositiveInfinityScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToPositiveInfinityScalarDouble();
var result = Sse41.RoundToPositiveInfinityScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToPositiveInfinityScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToPositiveInfinityScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Single.cs
index 24565086a9..23a110e04d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToPositiveInfinityScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToPositiveInfinityScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToPositiveInfinityScalarSingle testClass)
+ {
+ var result = Sse41.RoundToPositiveInfinityScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToPositiveInfinityScalarSingle();
var result = Sse41.RoundToPositiveInfinityScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToPositiveInfinityScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToPositiveInfinityScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Double.cs
index a58150b542..2078292075 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToZeroDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld), ref Unsafe.As<Double, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToZeroDouble testClass)
+ {
+ var result = Sse41.RoundToZero(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToZeroDouble();
var result = Sse41.RoundToZero(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToZero(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToZero(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Single.cs
index 30fc2ddf33..9872e8466f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZero.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__RoundToZeroSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld), ref Unsafe.As<Single, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__RoundToZeroSingle testClass)
+ {
+ var result = Sse41.RoundToZero(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__RoundToZeroSingle();
var result = Sse41.RoundToZero(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToZero(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToZero(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Double.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Double.cs
index 6ee0e0ed94..5d1827d8cb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Double.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Double.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToZeroScalarDouble
{
+ private struct TestStruct
+ {
+ public Vector128<Double> _fld1;
+ public Vector128<Double> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld1), ref Unsafe.As<Double, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (double)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Double>, byte>(ref testStruct._fld2), ref Unsafe.As<Double, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Double>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToZeroScalarDouble testClass)
+ {
+ var result = Sse41.RoundToZeroScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Double>>() / sizeof(Double);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToZeroScalarDouble();
var result = Sse41.RoundToZeroScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToZeroScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToZeroScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Single.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Single.cs
index c653838004..060afd8f94 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Single.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/RoundToZeroScalar.Single.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__RoundToZeroScalarSingle
{
+ private struct TestStruct
+ {
+ public Vector128<Single> _fld1;
+ public Vector128<Single> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld1), ref Unsafe.As<Single, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (float)(random.NextDouble()); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Single>, byte>(ref testStruct._fld2), ref Unsafe.As<Single, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Single>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__RoundToZeroScalarSingle testClass)
+ {
+ var result = Sse41.RoundToZeroScalar(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Single>>() / sizeof(Single);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__RoundToZeroScalarSingle();
var result = Sse41.RoundToZeroScalar(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.RoundToZeroScalar(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.RoundToZeroScalar(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Byte.cs
index 9cd052cfde..92069c78b7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Byte.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesByte()
{
- var test = new BooleanComparisonOpTest__TestAllOnesByte();
+ var test = new BooleanUnaryOpTest__TestAllOnesByte();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesByte
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesByte testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<Byte> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesByte()
+ static BooleanUnaryOpTest__TestAllOnesByte()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref _clsVar), ref Unsafe.As<Byte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
}
- public BooleanComparisonOpTest__TestAllOnesByte()
+ public BooleanUnaryOpTest__TestAllOnesByte()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesByte();
+ var test = new BooleanUnaryOpTest__TestAllOnesByte();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int16.cs
index f14704207b..e147a7aa01 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int16.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesInt16()
{
- var test = new BooleanComparisonOpTest__TestAllOnesInt16();
+ var test = new BooleanUnaryOpTest__TestAllOnesInt16();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesInt16
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesInt16 testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<Int16> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesInt16()
+ static BooleanUnaryOpTest__TestAllOnesInt16()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref _clsVar), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
}
- public BooleanComparisonOpTest__TestAllOnesInt16()
+ public BooleanUnaryOpTest__TestAllOnesInt16()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesInt16();
+ var test = new BooleanUnaryOpTest__TestAllOnesInt16();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int32.cs
index cea53a44eb..9c731c93f6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int32.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesInt32()
{
- var test = new BooleanComparisonOpTest__TestAllOnesInt32();
+ var test = new BooleanUnaryOpTest__TestAllOnesInt32();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesInt32
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesInt32 testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<Int32> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesInt32()
+ static BooleanUnaryOpTest__TestAllOnesInt32()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref _clsVar), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
}
- public BooleanComparisonOpTest__TestAllOnesInt32()
+ public BooleanUnaryOpTest__TestAllOnesInt32()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesInt32();
+ var test = new BooleanUnaryOpTest__TestAllOnesInt32();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int64.cs
index d79048dad8..97032d1a5e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.Int64.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesInt64()
{
- var test = new BooleanComparisonOpTest__TestAllOnesInt64();
+ var test = new BooleanUnaryOpTest__TestAllOnesInt64();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesInt64
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesInt64 testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<Int64> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesInt64()
+ static BooleanUnaryOpTest__TestAllOnesInt64()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref _clsVar), ref Unsafe.As<Int64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
}
- public BooleanComparisonOpTest__TestAllOnesInt64()
+ public BooleanUnaryOpTest__TestAllOnesInt64()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesInt64();
+ var test = new BooleanUnaryOpTest__TestAllOnesInt64();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.SByte.cs
index 23ba8fd8f8..36acdef4ab 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.SByte.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesSByte()
{
- var test = new BooleanComparisonOpTest__TestAllOnesSByte();
+ var test = new BooleanUnaryOpTest__TestAllOnesSByte();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesSByte
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesSByte testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<SByte> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesSByte()
+ static BooleanUnaryOpTest__TestAllOnesSByte()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref _clsVar), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
}
- public BooleanComparisonOpTest__TestAllOnesSByte()
+ public BooleanUnaryOpTest__TestAllOnesSByte()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesSByte();
+ var test = new BooleanUnaryOpTest__TestAllOnesSByte();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt16.cs
index 25a81c9d84..334df4a2c6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt16.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesUInt16()
{
- var test = new BooleanComparisonOpTest__TestAllOnesUInt16();
+ var test = new BooleanUnaryOpTest__TestAllOnesUInt16();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesUInt16
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesUInt16 testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<UInt16> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesUInt16()
+ static BooleanUnaryOpTest__TestAllOnesUInt16()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref _clsVar), ref Unsafe.As<UInt16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
}
- public BooleanComparisonOpTest__TestAllOnesUInt16()
+ public BooleanUnaryOpTest__TestAllOnesUInt16()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesUInt16();
+ var test = new BooleanUnaryOpTest__TestAllOnesUInt16();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt32.cs
index 35fac0dd30..06cad7218e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt32.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesUInt32()
{
- var test = new BooleanComparisonOpTest__TestAllOnesUInt32();
+ var test = new BooleanUnaryOpTest__TestAllOnesUInt32();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesUInt32
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesUInt32 testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<UInt32> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesUInt32()
+ static BooleanUnaryOpTest__TestAllOnesUInt32()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref _clsVar), ref Unsafe.As<UInt32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
}
- public BooleanComparisonOpTest__TestAllOnesUInt32()
+ public BooleanUnaryOpTest__TestAllOnesUInt32()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesUInt32();
+ var test = new BooleanUnaryOpTest__TestAllOnesUInt32();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt64.cs
index e03327885b..66a25cf073 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllOnes.UInt64.cs
@@ -22,7 +22,7 @@ namespace JIT.HardwareIntrinsics.X86
{
private static void TestAllOnesUInt64()
{
- var test = new BooleanComparisonOpTest__TestAllOnesUInt64();
+ var test = new BooleanUnaryOpTest__TestAllOnesUInt64();
if (test.IsSupported)
{
@@ -65,11 +65,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -84,8 +90,30 @@ namespace JIT.HardwareIntrinsics.X86
}
}
- public sealed unsafe class BooleanComparisonOpTest__TestAllOnesUInt64
+ public sealed unsafe class BooleanUnaryOpTest__TestAllOnesUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanUnaryOpTest__TestAllOnesUInt64 testClass)
+ {
+ var result = Sse41.TestAllOnes(_fld);
+ testClass.ValidateResult(_fld, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -98,7 +126,7 @@ namespace JIT.HardwareIntrinsics.X86
private BooleanUnaryOpTest__DataTable<UInt64> _dataTable;
- static BooleanComparisonOpTest__TestAllOnesUInt64()
+ static BooleanUnaryOpTest__TestAllOnesUInt64()
{
var random = new Random();
@@ -106,7 +134,7 @@ namespace JIT.HardwareIntrinsics.X86
Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref _clsVar), ref Unsafe.As<UInt64, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
}
- public BooleanComparisonOpTest__TestAllOnesUInt64()
+ public BooleanUnaryOpTest__TestAllOnesUInt64()
{
Succeeded = true;
@@ -213,21 +241,34 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(value, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
- var test = new BooleanComparisonOpTest__TestAllOnesUInt64();
+ var test = new BooleanUnaryOpTest__TestAllOnesUInt64();
var result = Sse41.TestAllOnes(test._fld);
ValidateResult(test._fld, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllOnes(_fld);
ValidateResult(_fld, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllOnes(test._fld);
+ ValidateResult(test._fld, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Byte.cs
index d329b3cf24..3d3820cf9b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosByte testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosByte();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int16.cs
index 7f190d7573..425b2cf73f 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosInt16 testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosInt16();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int32.cs
index 2cb24b400a..4749fd54ee 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosInt32 testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosInt32();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int64.cs
index f9747826ac..22d16e0056 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosInt64 testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosInt64();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.SByte.cs
index 89147982bd..5eeb1ce245 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosSByte testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosSByte();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt16.cs
index b307e480a9..4013108284 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosUInt16 testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosUInt16();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt32.cs
index bbe9c771d6..7c8a54802d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosUInt32 testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosUInt32();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt64.cs
index 4dd5c9fe49..da53d7f17c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestAllZeros.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestAllZerosUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestAllZerosUInt64 testClass)
+ {
+ var result = Sse41.TestAllZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestAllZeros), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestAllZerosUInt64();
var result = Sse41.TestAllZeros(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestAllZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestAllZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Byte.cs
index ea33829664..6d234f7dfa 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCByte testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCByte();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int16.cs
index d677f97e45..7a1889e724 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCInt16 testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCInt16();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int32.cs
index cc53b741dd..813047d284 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCInt32 testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCInt32();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int64.cs
index 951ab0a56f..518bc7f0dd 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCInt64 testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCInt64();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.SByte.cs
index c69e298f16..69fe53c19d 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCSByte testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCSByte();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt16.cs
index c071eb873f..6b4c22200a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCUInt16 testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCUInt16();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt32.cs
index 54efe4c3a7..fce8e689be 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCUInt32 testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCUInt32();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt64.cs
index 25b5691478..ca9c589138 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestC.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestCUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestCUInt64 testClass)
+ {
+ var result = Sse41.TestC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestC), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestCUInt64();
var result = Sse41.TestC(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Byte.cs
index a044b9622b..0b70512fbf 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosByte testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosByte();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int16.cs
index 1ffc56b094..832344886b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosInt16 testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosInt16();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int32.cs
index f2d75b6ce6..3fa11776bb 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosInt32 testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosInt32();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int64.cs
index a9e44fea5e..7ddd00ff81 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosInt64 testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosInt64();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs
index db9e226655..860b830707 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosSByte testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosSByte();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt16.cs
index 082d5b2dfe..f339775294 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosUInt16 testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosUInt16();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt32.cs
index b03d93278e..5afaa7ff1e 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosUInt32 testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosUInt32();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt64.cs
index d4b5693b83..ca2b1cd991 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestMixOnesZeros.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestMixOnesZerosUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestMixOnesZerosUInt64 testClass)
+ {
+ var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestMixOnesZeros), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestMixOnesZerosUInt64();
var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestMixOnesZeros(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestMixOnesZeros(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Byte.cs
index bd5c61caa4..0effd4cce7 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCByte testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCByte();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int16.cs
index f9d7dbd778..63073e70c3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCInt16 testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCInt16();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int32.cs
index 207c6d7c02..9fc94c00a4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCInt32 testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCInt32();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int64.cs
index 7fd51e2c00..c8f652ff91 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCInt64 testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCInt64();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.SByte.cs
index af0aeb2f48..e820b08cef 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCSByte testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCSByte();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt16.cs
index b3e015a461..b9efa00998 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCUInt16 testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCUInt16();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt32.cs
index 8b20066446..d5a15bdf15 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCUInt32 testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCUInt32();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt64.cs
index 51910e00cd..cc9880143a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestNotZAndNotC.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanTwoComparisonOpTest__TestNotZAndNotCUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanTwoComparisonOpTest__TestNotZAndNotCUInt64 testClass)
+ {
+ var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -193,7 +224,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{var method = typeof(Sse41).GetMethod(nameof(Sse41.TestNotZAndNotC), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -242,7 +273,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanTwoComparisonOpTest__TestNotZAndNotCUInt64();
var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
@@ -250,13 +281,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestNotZAndNotC(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestNotZAndNotC(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Byte.cs
index b4be6da0dd..f92d6bd3c5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZByte testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Byte>), typeof(Vector128<Byte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZByte();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int16.cs
index c5311a0648..f6efc4d6e6 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZInt16 testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int16>), typeof(Vector128<Int16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZInt16();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int32.cs
index 517be60540..dc28e35de3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZInt32 testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int32>), typeof(Vector128<Int32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZInt32();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int64.cs
index 73f604343a..ef295e3a1b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZInt64 testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<Int64>), typeof(Vector128<Int64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZInt64();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.SByte.cs
index 2c1e944101..dee2615529 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZSByte testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<SByte>), typeof(Vector128<SByte>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZSByte();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt16.cs
index d7ca475697..af67bfa214 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<UInt16> _fld1;
+ public Vector128<UInt16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ushort)(random.Next(0, ushort.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt16>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZUInt16 testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt16>>() / sizeof(UInt16);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt16>), typeof(Vector128<UInt16>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZUInt16();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt32.cs
index c741395f48..c1284297dc 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<UInt32> _fld1;
+ public Vector128<UInt32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (uint)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt32>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZUInt32 testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt32>>() / sizeof(UInt32);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt32>), typeof(Vector128<UInt32>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZUInt32();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt64.cs
index 82717fa638..948078f663 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse41/TestZ.UInt64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,31 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class BooleanBinaryOpTest__TestZUInt64
{
+ private struct TestStruct
+ {
+ public Vector128<UInt64> _fld1;
+ public Vector128<UInt64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld1), ref Unsafe.As<UInt64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (ulong)(random.Next(0, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<UInt64>, byte>(ref testStruct._fld2), ref Unsafe.As<UInt64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<UInt64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(BooleanBinaryOpTest__TestZUInt64 testClass)
+ {
+ var result = Sse41.TestZ(_fld1, _fld2);
+ testClass.ValidateResult(_fld1, _fld2, result);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<UInt64>>() / sizeof(UInt64);
@@ -164,7 +195,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_UnsafeRead()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -179,7 +210,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_Load()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -194,7 +225,7 @@ namespace JIT.HardwareIntrinsics.X86
public void RunReflectionScenario_LoadAligned()
{
var method = typeof(Sse41).GetMethod(nameof(Sse41.TestZ), new Type[] { typeof(Vector128<UInt64>), typeof(Vector128<UInt64>) });
-
+
if (method != null)
{
var result = method.Invoke(null, new object[] {
@@ -243,7 +274,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, result);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new BooleanBinaryOpTest__TestZUInt64();
var result = Sse41.TestZ(test._fld1, test._fld2);
@@ -251,13 +282,26 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, result);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse41.TestZ(_fld1, _fld2);
ValidateResult(_fld1, _fld2, result);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse41.TestZ(test._fld1, test._fld2);
+ ValidateResult(test._fld1, test._fld2, result);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Sse42/CompareGreaterThan.Int64.cs b/tests/src/JIT/HardwareIntrinsics/X86/Sse42/CompareGreaterThan.Int64.cs
index 0520e3ea12..df6dfc78fa 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Sse42/CompareGreaterThan.Int64.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Sse42/CompareGreaterThan.Int64.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__CompareGreaterThanInt64
{
+ private struct TestStruct
+ {
+ public Vector128<Int64> _fld1;
+ public Vector128<Int64> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld1), ref Unsafe.As<Int64, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (long)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int64>, byte>(ref testStruct._fld2), ref Unsafe.As<Int64, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int64>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__CompareGreaterThanInt64 testClass)
+ {
+ var result = Sse42.CompareGreaterThan(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int64>>() / sizeof(Int64);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__CompareGreaterThanInt64();
var result = Sse42.CompareGreaterThan(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Sse42.CompareGreaterThan(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Sse42.CompareGreaterThan(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.Byte.cs
index 43f6a6ab4f..f056f4859c 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__AbsByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (sbyte)(random.Next(sbyte.MinValue + 1, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld), ref Unsafe.As<SByte, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__AbsByte testClass)
+ {
+ var result = Ssse3.Abs(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__AbsByte();
var result = Ssse3.Abs(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Abs(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Abs(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt16.cs
index f1ead046a0..984782086a 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__AbsUInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (short)(random.Next(short.MinValue + 1, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld), ref Unsafe.As<Int16, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__AbsUInt16 testClass)
+ {
+ var result = Ssse3.Abs(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__AbsUInt16();
var result = Ssse3.Abs(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Abs(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Abs(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt32.cs
index 5a8fd7d919..2ae298b309 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Abs.UInt32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,30 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleUnaryOpTest__AbsUInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data[i] = (int)(random.Next(int.MinValue + 1, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld), ref Unsafe.As<Int32, byte>(ref _data[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleUnaryOpTest__AbsUInt32 testClass)
+ {
+ var result = Ssse3.Abs(_fld);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -223,7 +253,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(firstOp, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleUnaryOpTest__AbsUInt32();
var result = Ssse3.Abs(test._fld);
@@ -232,7 +262,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Abs(_fld);
@@ -240,6 +270,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Abs(test._fld);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int16.cs
index 0ea25e566f..4e1e2f01f9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalAddInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalAddInt16 testClass)
+ {
+ var result = Ssse3.HorizontalAdd(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalAddInt16();
var result = Ssse3.HorizontalAdd(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.HorizontalAdd(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.HorizontalAdd(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int32.cs
index e6f00bb4b9..5065681bec 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAdd.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalAddInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalAddInt32 testClass)
+ {
+ var result = Ssse3.HorizontalAdd(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalAddInt32();
var result = Ssse3.HorizontalAdd(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.HorizontalAdd(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.HorizontalAdd(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAddSaturate.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAddSaturate.Int16.cs
index 90406774b9..5dc5d9d58b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAddSaturate.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalAddSaturate.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalAddSaturateInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalAddSaturateInt16 testClass)
+ {
+ var result = Ssse3.HorizontalAddSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalAddSaturateInt16();
var result = Ssse3.HorizontalAddSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.HorizontalAddSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.HorizontalAddSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int16.cs
index 6ce559137a..cab677116b 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalSubtractInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalSubtractInt16 testClass)
+ {
+ var result = Ssse3.HorizontalSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalSubtractInt16();
var result = Ssse3.HorizontalSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.HorizontalSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.HorizontalSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int32.cs
index b947270472..fff6e43e03 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtract.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalSubtractInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalSubtractInt32 testClass)
+ {
+ var result = Ssse3.HorizontalSubtract(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalSubtractInt32();
var result = Ssse3.HorizontalSubtract(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.HorizontalSubtract(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.HorizontalSubtract(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtractSaturate.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtractSaturate.Int16.cs
index ec96f733f0..a5ccd486b3 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtractSaturate.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/HorizontalSubtractSaturate.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class HorizontalBinaryOpTest__HorizontalSubtractSaturateInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(HorizontalBinaryOpTest__HorizontalSubtractSaturateInt16 testClass)
+ {
+ var result = Ssse3.HorizontalSubtractSaturate(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new HorizontalBinaryOpTest__HorizontalSubtractSaturateInt16();
var result = Ssse3.HorizontalSubtractSaturate(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.HorizontalSubtractSaturate(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.HorizontalSubtractSaturate(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyAddAdjacent.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyAddAdjacent.Int16.cs
index 6b24d63c3f..f05d44cbb9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyAddAdjacent.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyAddAdjacent.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplyAddAdjacentInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplyAddAdjacentInt16 testClass)
+ {
+ var result = Ssse3.MultiplyAddAdjacent(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplyAddAdjacentInt16();
var result = Ssse3.MultiplyAddAdjacent(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.MultiplyAddAdjacent(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.MultiplyAddAdjacent(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyHighRoundScale.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyHighRoundScale.Int16.cs
index 9e6225e8c5..5325c190b1 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyHighRoundScale.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/MultiplyHighRoundScale.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__MultiplyHighRoundScaleInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__MultiplyHighRoundScaleInt16 testClass)
+ {
+ var result = Ssse3.MultiplyHighRoundScale(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__MultiplyHighRoundScaleInt16();
var result = Ssse3.MultiplyHighRoundScale(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.MultiplyHighRoundScale(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.MultiplyHighRoundScale(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.Byte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.Byte.cs
index 7363d6143b..cb33d761ca 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.Byte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.Byte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__ShuffleByte
{
+ private struct TestStruct
+ {
+ public Vector128<Byte> _fld1;
+ public Vector128<Byte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld1), ref Unsafe.As<Byte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (byte)(random.Next(0, byte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Byte>, byte>(ref testStruct._fld2), ref Unsafe.As<Byte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Byte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__ShuffleByte testClass)
+ {
+ var result = Ssse3.Shuffle(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Byte>>() / sizeof(Byte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__ShuffleByte();
var result = Ssse3.Shuffle(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Shuffle(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Shuffle(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.SByte.cs
index b1adce8c1c..8ea8c4e2d4 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Shuffle.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__ShuffleSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__ShuffleSByte testClass)
+ {
+ var result = Ssse3.Shuffle(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__ShuffleSByte();
var result = Ssse3.Shuffle(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Shuffle(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Shuffle(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int16.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int16.cs
index aac13e9752..bff9f21633 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int16.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int16.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SignInt16
{
+ private struct TestStruct
+ {
+ public Vector128<Int16> _fld1;
+ public Vector128<Int16> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (short)(random.Next(short.MinValue + 1, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld1), ref Unsafe.As<Int16, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (short)(random.Next(short.MinValue, short.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int16>, byte>(ref testStruct._fld2), ref Unsafe.As<Int16, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int16>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SignInt16 testClass)
+ {
+ var result = Ssse3.Sign(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int16>>() / sizeof(Int16);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SignInt16();
var result = Ssse3.Sign(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Sign(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Sign(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int32.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int32.cs
index 541ed84282..93a376bcc5 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int32.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.Int32.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SignInt32
{
+ private struct TestStruct
+ {
+ public Vector128<Int32> _fld1;
+ public Vector128<Int32> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (int)(random.Next(int.MinValue + 1, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld1), ref Unsafe.As<Int32, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (int)(random.Next(int.MinValue, int.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<Int32>, byte>(ref testStruct._fld2), ref Unsafe.As<Int32, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<Int32>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SignInt32 testClass)
+ {
+ var result = Ssse3.Sign(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<Int32>>() / sizeof(Int32);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SignInt32();
var result = Ssse3.Sign(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Sign(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Sign(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;
diff --git a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.SByte.cs b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.SByte.cs
index 21e07f5804..085cbf04d9 100644
--- a/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.SByte.cs
+++ b/tests/src/JIT/HardwareIntrinsics/X86/Ssse3/Sign.SByte.cs
@@ -64,11 +64,17 @@ namespace JIT.HardwareIntrinsics.X86
test.RunLclVarScenario_LoadAligned();
}
- // Validates passing the field of a local works
- test.RunLclFldScenario();
+ // Validates passing the field of a local class works
+ test.RunClassLclFldScenario();
- // Validates passing an instance member works
- test.RunFldScenario();
+ // Validates passing an instance member of a class works
+ test.RunClassFldScenario();
+
+ // Validates passing the field of a local struct works
+ test.RunStructLclFldScenario();
+
+ // Validates passing an instance member of a struct works
+ test.RunStructFldScenario();
}
else
{
@@ -85,6 +91,33 @@ namespace JIT.HardwareIntrinsics.X86
public sealed unsafe class SimpleBinaryOpTest__SignSByte
{
+ private struct TestStruct
+ {
+ public Vector128<SByte> _fld1;
+ public Vector128<SByte> _fld2;
+
+ public static TestStruct Create()
+ {
+ var testStruct = new TestStruct();
+ var random = new Random();
+
+ for (var i = 0; i < Op1ElementCount; i++) { _data1[i] = (sbyte)(random.Next(sbyte.MinValue + 1, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld1), ref Unsafe.As<SByte, byte>(ref _data1[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+ for (var i = 0; i < Op2ElementCount; i++) { _data2[i] = (sbyte)(random.Next(sbyte.MinValue, sbyte.MaxValue)); }
+ Unsafe.CopyBlockUnaligned(ref Unsafe.As<Vector128<SByte>, byte>(ref testStruct._fld2), ref Unsafe.As<SByte, byte>(ref _data2[0]), (uint)Unsafe.SizeOf<Vector128<SByte>>());
+
+ return testStruct;
+ }
+
+ public void RunStructFldScenario(SimpleBinaryOpTest__SignSByte testClass)
+ {
+ var result = Ssse3.Sign(_fld1, _fld2);
+
+ Unsafe.Write(testClass._dataTable.outArrayPtr, result);
+ testClass.ValidateResult(_fld1, _fld2, testClass._dataTable.outArrayPtr);
+ }
+ }
+
private static readonly int LargestVectorSize = 16;
private static readonly int Op1ElementCount = Unsafe.SizeOf<Vector128<SByte>>() / sizeof(SByte);
@@ -242,7 +275,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(left, right, _dataTable.outArrayPtr);
}
- public void RunLclFldScenario()
+ public void RunClassLclFldScenario()
{
var test = new SimpleBinaryOpTest__SignSByte();
var result = Ssse3.Sign(test._fld1, test._fld2);
@@ -251,7 +284,7 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
}
- public void RunFldScenario()
+ public void RunClassFldScenario()
{
var result = Ssse3.Sign(_fld1, _fld2);
@@ -259,6 +292,21 @@ namespace JIT.HardwareIntrinsics.X86
ValidateResult(_fld1, _fld2, _dataTable.outArrayPtr);
}
+ public void RunStructLclFldScenario()
+ {
+ var test = TestStruct.Create();
+ var result = Ssse3.Sign(test._fld1, test._fld2);
+
+ Unsafe.Write(_dataTable.outArrayPtr, result);
+ ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
+ }
+
+ public void RunStructFldScenario()
+ {
+ var test = TestStruct.Create();
+ test.RunStructFldScenario(this);
+ }
+
public void RunUnsupportedScenario()
{
Succeeded = false;