From 87e07fac3ca1ad8ba3b8633068aaf5c653e2d781 Mon Sep 17 00:00:00 2001 From: Sebastian Nickolls Date: Thu, 31 Jul 2025 15:16:23 +0000 Subject: [PATCH 1/2] Remove some uses of dynamic from HardwareIntrinsic test code This is preventing the AdvSimd tests from running in NativeAOT contexts. Fixes #118234 --- .../Arm/AdvSimd/AdvSimd_r.csproj | 2 -- .../Arm/AdvSimd/AdvSimd_ro.csproj | 2 -- .../HardwareIntrinsics/Arm/Shared/Helpers.cs | 36 +++++++++---------- 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_r.csproj b/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_r.csproj index 25a3222f902b7d..7374603fc1dd75 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_r.csproj +++ b/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_r.csproj @@ -1,8 +1,6 @@ true - - true Embedded diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_ro.csproj b/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_ro.csproj index 5e50529a88dc69..623aa40222ca95 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_ro.csproj +++ b/src/tests/JIT/HardwareIntrinsics/Arm/AdvSimd/AdvSimd_ro.csproj @@ -1,8 +1,6 @@ true - - true Embedded diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs index a63ba615cacbaf..c969a67c5979ee 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs @@ -7789,22 +7789,20 @@ public static W MultiplyAddWidening(W op1, N op2, N op3) where W : IBinaryInteger where N : IBinaryInteger { - dynamic a = op2; - dynamic b = op3; - W product = (W)((W)a * (W)b); - W r = (W)(op1 + product); - return r; + W a = W.CreateChecked(op2); + W b = W.CreateChecked(op3); + W product = W.CreateTruncating(a * b); + return W.CreateTruncating(op1 + product); } public static W MultiplySubtractWidening(W op1, N op2, N op3) where W : IBinaryInteger where N : IBinaryInteger { - dynamic a = op2; - dynamic b = op3; - W product = (W)((W)a * (W)b); - W r = (W)(op1 - product); - return r; + W a = W.CreateChecked(op2); + W b = W.CreateChecked(op3); + W product = W.CreateTruncating(a * b); + return W.CreateTruncating(op1 - product); } public static N AddRoundedHighNarrowing(W op1, W op2) @@ -7812,12 +7810,12 @@ public static N AddRoundedHighNarrowing(W op1, W op2) where N : IBinaryInteger { int halfsize = default(N).GetByteCount() * 8; - dynamic a = op1; - dynamic b = op2; - ulong sum = (ulong)a + (ulong)b; + ulong a = Convert.ToUInt64(op1); + ulong b = Convert.ToUInt64(op2); + ulong sum = a + b; ulong bias = 1UL << (halfsize - 1); - dynamic result = sum + bias; - return (N)(result >> halfsize); + ulong result = (sum + bias) >> halfsize; + return N.CreateTruncating(result); } public static N AddRoundedHighNarrowingEven(W op1, W op2, int i) @@ -7839,12 +7837,12 @@ public static N SubtractRoundedHighNarrowing(W op1, W op2) where N : IBinaryInteger { int halfsize = default(N).GetByteCount() * 8; - dynamic a = op1; - dynamic b = op2; + ulong a = Convert.ToUInt64(op1); + ulong b = Convert.ToUInt64(op2); ulong sum = (ulong)a - (ulong)b; ulong bias = 1UL << (halfsize - 1); - dynamic result = sum + bias; - return (N)(result >> halfsize); + ulong result = (sum + bias) >> halfsize; + return N.CreateTruncating(result); } public static N SubtractRoundedHighNarrowingEven(W op1, W op2, int i) From 0a4fb2b67e16b045daebcd635751bb4d956d060e Mon Sep 17 00:00:00 2001 From: Sebastian Nickolls Date: Tue, 5 Aug 2025 15:47:07 +0000 Subject: [PATCH 2/2] Use ulong.CreateChecked over Convert.ToUInt64 --- src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs index c969a67c5979ee..b219a46fe58a78 100644 --- a/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs +++ b/src/tests/JIT/HardwareIntrinsics/Arm/Shared/Helpers.cs @@ -7810,8 +7810,8 @@ public static N AddRoundedHighNarrowing(W op1, W op2) where N : IBinaryInteger { int halfsize = default(N).GetByteCount() * 8; - ulong a = Convert.ToUInt64(op1); - ulong b = Convert.ToUInt64(op2); + ulong a = ulong.CreateChecked(op1); + ulong b = ulong.CreateChecked(op2); ulong sum = a + b; ulong bias = 1UL << (halfsize - 1); ulong result = (sum + bias) >> halfsize; @@ -7837,8 +7837,8 @@ public static N SubtractRoundedHighNarrowing(W op1, W op2) where N : IBinaryInteger { int halfsize = default(N).GetByteCount() * 8; - ulong a = Convert.ToUInt64(op1); - ulong b = Convert.ToUInt64(op2); + ulong a = ulong.CreateChecked(op1); + ulong b = ulong.CreateChecked(op2); ulong sum = (ulong)a - (ulong)b; ulong bias = 1UL << (halfsize - 1); ulong result = (sum + bias) >> halfsize;