From e631031c93175bf5a1ec01aa6a8cf8330f168153 Mon Sep 17 00:00:00 2001 From: Egor Bogatov Date: Tue, 3 Mar 2020 01:09:40 +0300 Subject: [PATCH] Implement missing Sse2 intrinsics (#33056) --- src/mono/mono/mini/simd-intrinsics-netcore.c | 12 ++++++++++++ src/mono/mono/mini/simd-methods-netcore.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/src/mono/mono/mini/simd-intrinsics-netcore.c b/src/mono/mono/mini/simd-intrinsics-netcore.c index 0c32bce2bea8a..5d5ef350655fd 100644 --- a/src/mono/mono/mini/simd-intrinsics-netcore.c +++ b/src/mono/mono/mini/simd-intrinsics-netcore.c @@ -673,6 +673,10 @@ static guint16 sse2_methods [] = { SN_CompareGreaterThan, SN_CompareLessThan, SN_CompareNotEqual, + SN_ConvertScalarToVector128UInt32, + SN_ConvertScalarToVector128UInt64, + SN_ConvertToUInt32, + SN_ConvertToUInt64, SN_LoadAlignedVector128, SN_LoadVector128, SN_MoveMask, @@ -849,6 +853,14 @@ emit_x86_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSignature return emit_simd_ins_for_sig (cfg, klass, arg0_type == MONO_TYPE_R8 ? OP_XCOMPARE_FP : OP_XCOMPARE, CMP_GT, arg0_type, fsig, args); case SN_CompareLessThan: return emit_simd_ins_for_sig (cfg, klass, arg0_type == MONO_TYPE_R8 ? OP_XCOMPARE_FP : OP_XCOMPARE, CMP_LT, arg0_type, fsig, args); + case SN_ConvertScalarToVector128UInt32: + return emit_simd_ins_for_sig (cfg, klass, OP_EXPAND_I4, -1, arg0_type, fsig, args); + case SN_ConvertScalarToVector128UInt64: + return emit_simd_ins_for_sig (cfg, klass, OP_EXPAND_I8, -1, arg0_type, fsig, args); + case SN_ConvertToUInt32: + return emit_simd_ins_for_sig (cfg, klass, OP_EXTRACT_I4, 0 /*element index*/, arg0_type, fsig, args); + case SN_ConvertToUInt64: + return emit_simd_ins_for_sig (cfg, klass, OP_EXTRACT_I8, 0 /*element index*/, arg0_type, fsig, args); case SN_LoadAlignedVector128: return emit_simd_ins_for_sig (cfg, klass, OP_SSE_LOADU, 16 /*alignment*/, arg0_type, fsig, args); case SN_LoadVector128: diff --git a/src/mono/mono/mini/simd-methods-netcore.h b/src/mono/mono/mini/simd-methods-netcore.h index 02af73508c3d2..864ab35befce7 100644 --- a/src/mono/mono/mini/simd-methods-netcore.h +++ b/src/mono/mono/mini/simd-methods-netcore.h @@ -83,6 +83,8 @@ METHOD(Or) METHOD(LoadAlignedVector128) METHOD(Xor) METHOD(CompareGreaterThan) +METHOD(ConvertScalarToVector128UInt32) +METHOD(ConvertScalarToVector128UInt64) METHOD(PackUnsignedSaturate) METHOD(StoreScalar) METHOD(StoreAligned)