From f044ba5a3910a17bfecdb1d76fe7d884cf415a4c Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Wed, 9 Feb 2022 01:56:03 -0800 Subject: [PATCH 1/2] Add conditional select vector intrinsic --- src/mono/mono/mini/simd-intrinsics.c | 9 +++++++++ src/mono/mono/mini/simd-methods.h | 1 + 2 files changed, 10 insertions(+) diff --git a/src/mono/mono/mini/simd-intrinsics.c b/src/mono/mono/mini/simd-intrinsics.c index f63cf472b9e038..fc374003b8d0d3 100644 --- a/src/mono/mono/mini/simd-intrinsics.c +++ b/src/mono/mono/mini/simd-intrinsics.c @@ -576,9 +576,11 @@ static guint16 sri_vector_methods [] = { SN_AsVector256, SN_AsVector3, SN_AsVector4, + SN_ConditionalSelect, SN_Create, SN_CreateScalar, SN_CreateScalarUnsafe, + SN_Floor, SN_GetElement, SN_GetLower, SN_GetUpper, @@ -650,6 +652,13 @@ emit_sri_vector (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsi return NULL; return emit_simd_ins (cfg, klass, OP_XCAST, args [0]->dreg, -1); } + case SN_ConditionalSelect: { +#ifdef TARGET_ARM64 + return emit_simd_ins_for_sig (cfg, klass, OP_ARM64_BSL, -1, arg0_type, fsig, args); +#else + return NULL; +#endif + } case SN_Create: { MonoType *etype = get_vector_t_elem_type (fsig->ret); if (fsig->param_count == 1 && mono_metadata_type_equal (fsig->params [0], etype)) diff --git a/src/mono/mono/mini/simd-methods.h b/src/mono/mono/mini/simd-methods.h index d223b2ba5aee87..4cce99c7c7c1c6 100644 --- a/src/mono/mono/mini/simd-methods.h +++ b/src/mono/mono/mini/simd-methods.h @@ -59,6 +59,7 @@ METHOD(AsVector4) METHOD(Create) METHOD(CreateScalar) METHOD(CreateScalarUnsafe) +METHOD(ConditionalSelect) METHOD(GetElement) METHOD(GetLower) METHOD(GetUpper) From f51e95e27a8fbac17bf121362c46fe597c920262 Mon Sep 17 00:00:00 2001 From: Simon Rozsival Date: Wed, 9 Feb 2022 01:58:18 -0800 Subject: [PATCH 2/2] Remove unrelated code change --- src/mono/mono/mini/simd-intrinsics.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mono/mono/mini/simd-intrinsics.c b/src/mono/mono/mini/simd-intrinsics.c index fc374003b8d0d3..17b3537973dc9a 100644 --- a/src/mono/mono/mini/simd-intrinsics.c +++ b/src/mono/mono/mini/simd-intrinsics.c @@ -580,7 +580,6 @@ static guint16 sri_vector_methods [] = { SN_Create, SN_CreateScalar, SN_CreateScalarUnsafe, - SN_Floor, SN_GetElement, SN_GetLower, SN_GetUpper,