From 8366ac280db12b2ecec0e5f6526bd13967f12f86 Mon Sep 17 00:00:00 2001 From: Larry Ewing Date: Tue, 8 Apr 2025 14:07:02 -0500 Subject: [PATCH 1/2] Add Round --- src/mono/mono/mini/interp/simd-methods.def | 1 + src/mono/mono/mini/interp/transform-simd.c | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/mono/mono/mini/interp/simd-methods.def b/src/mono/mono/mini/interp/simd-methods.def index 36d993fdec5678..5cb79a74ca3a5a 100644 --- a/src/mono/mono/mini/interp/simd-methods.def +++ b/src/mono/mono/mini/interp/simd-methods.def @@ -67,6 +67,7 @@ SIMD_METHOD(Negate) SIMD_METHOD(Max) SIMD_METHOD(Min) SIMD_METHOD(OnesComplement) +SIMD_METHOD(Round) SIMD_METHOD(ShiftLeft) SIMD_METHOD(ShiftRightArithmetic) SIMD_METHOD(ShiftRightLogical) diff --git a/src/mono/mono/mini/interp/transform-simd.c b/src/mono/mono/mini/interp/transform-simd.c index fe98b1c05a0cba..94894f378138bb 100644 --- a/src/mono/mono/mini/interp/transform-simd.c +++ b/src/mono/mono/mini/interp/transform-simd.c @@ -166,6 +166,7 @@ static guint16 packedsimd_alias_methods [] = { SN_Multiply, SN_Negate, SN_OnesComplement, + SN_Round, SN_ShiftLeft, SN_ShiftRightArithmetic, SN_ShiftRightLogical, @@ -1167,6 +1168,9 @@ emit_sri_packedsimd (TransformData *td, MonoMethod *cmethod, MonoMethodSignature case SN_LoadUnsafe: cmethod_name = "LoadVector128"; break; + case SN_Round: + cmethod_name = "RoundToNearest"; + break; case SN_WidenLower: cmethod_name = is_unsigned ? "ZeroExtendWideningLower" : "SignExtendWideningLower"; break; From fb7b613877b45e04af943e72c4ac312e710322f9 Mon Sep 17 00:00:00 2001 From: Larry Ewing Date: Tue, 8 Apr 2025 16:51:06 -0500 Subject: [PATCH 2/2] Skip multiple argument version --- src/mono/mono/mini/interp/transform-simd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mono/mono/mini/interp/transform-simd.c b/src/mono/mono/mini/interp/transform-simd.c index 94894f378138bb..c4a47db328cf9a 100644 --- a/src/mono/mono/mini/interp/transform-simd.c +++ b/src/mono/mono/mini/interp/transform-simd.c @@ -1169,6 +1169,8 @@ emit_sri_packedsimd (TransformData *td, MonoMethod *cmethod, MonoMethodSignature cmethod_name = "LoadVector128"; break; case SN_Round: + if (csignature->param_count != 1) + return FALSE; cmethod_name = "RoundToNearest"; break; case SN_WidenLower: