From: Meri Khamoyan <96171496+mkhamoyan@users.noreply.github.com> Date: Tue, 22 Feb 2022 11:58:49 +0000 (+0400) Subject: Added OnesComplement, Sqrt, Negate vector intrinsics (#65438) X-Git-Tag: accepted/tizen/unified/riscv/20231226.055536~10696 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7da602644b7088233a13d5c7202d0aabcd0e29f6;p=platform%2Fupstream%2Fdotnet%2Fruntime.git Added OnesComplement, Sqrt, Negate vector intrinsics (#65438) * Added Not, Sqrt, Negate vector intrinsics --- diff --git a/src/mono/mono/mini/simd-intrinsics.c b/src/mono/mono/mini/simd-intrinsics.c index c602de2..4bc0199 100644 --- a/src/mono/mono/mini/simd-intrinsics.c +++ b/src/mono/mono/mini/simd-intrinsics.c @@ -597,6 +597,9 @@ static guint16 sri_vector_methods [] = { SN_Max, SN_Min, SN_Multiply, + SN_Negate, + SN_OnesComplement, + SN_Sqrt, SN_Subtract, SN_ToScalar, SN_ToVector128, @@ -806,6 +809,24 @@ emit_sri_vector (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature *fsi int op = id == SN_GetLower ? OP_XLOWER : OP_XUPPER; return emit_simd_ins_for_sig (cfg, klass, op, 0, arg0_type, fsig, args); } + case SN_Negate: + case SN_OnesComplement: { +#ifdef TARGET_ARM64 + int op = id == SN_Negate ? OP_ARM64_XNEG : OP_ARM64_MVN; + return emit_simd_ins_for_sig (cfg, klass, op, -1, arg0_type, fsig, args); +#else + return NULL; +#endif + } + case SN_Sqrt: { +#ifdef TARGET_ARM64 + if ((arg0_type != MONO_TYPE_R4) && (arg0_type != MONO_TYPE_R8)) + return NULL; + return emit_simd_ins_for_sig (cfg, klass, OP_XOP_OVR_X_X, INTRINS_AARCH64_ADV_SIMD_FSQRT, arg0_type, fsig, args); +#else + return NULL; +#endif + } case SN_ToScalar: { MonoType *arg_type = get_vector_t_elem_type (fsig->params [0]); if (!MONO_TYPE_IS_INTRINSICS_VECTOR_PRIMITIVE (arg_type)) diff --git a/src/mono/mono/mini/simd-methods.h b/src/mono/mono/mini/simd-methods.h index 03ea4a8..b33a383 100644 --- a/src/mono/mono/mini/simd-methods.h +++ b/src/mono/mono/mini/simd-methods.h @@ -482,6 +482,7 @@ METHOD(NegateSaturateScalar) METHOD(NegateScalar) METHOD(Not) METHOD(OrNot) +METHOD(OnesComplement) METHOD(PolynomialMultiply) METHOD(ReciprocalEstimate) METHOD(ReciprocalEstimateScalar)