[mono][interp] Fix incorrect masking (#82890)
authorVlad Brezae <brezaevlad@gmail.com>
Thu, 2 Mar 2023 14:32:21 +0000 (16:32 +0200)
committerGitHub <noreply@github.com>
Thu, 2 Mar 2023 14:32:21 +0000 (09:32 -0500)
* [mono][interp] Fix incorrect masking

* [mono][interp] Fix warning

src/mono/mono/mini/interp/interp-simd.c
src/mono/mono/mini/interp/transform-simd.c

index 2d5bb6b50ae276948258905f2dd0491bf1d65249..f67370e478d1ab786c714be1ab5ddcd3e9b04a38 100644 (file)
@@ -147,13 +147,13 @@ interp_v128_i4_op_negation (gpointer res, gpointer v1)
 static void
 interp_v128_i1_op_left_shift (gpointer res, gpointer v1, gpointer s1)
 {
-       *(v128_i1*)res = *(v128_i1*)v1 << (*(gint32*)s1 & 0x7);
+       *(v128_i1*)res = *(v128_i1*)v1 << (*(gint32*)s1 & 7);
 }
 
 static void
 interp_v128_i2_op_left_shift (gpointer res, gpointer v1, gpointer s1)
 {
-       *(v128_i2*)res = *(v128_i2*)v1 << (*(gint32*)s1 & 0x15);
+       *(v128_i2*)res = *(v128_i2*)v1 << (*(gint32*)s1 & 15);
 }
 
 static void
index ed2ef76c880efc2a0277db17b84d47c0d73c8370..a46f7555e14fe7620f071804be5929ba32f30da3 100644 (file)
@@ -91,6 +91,7 @@ emit_sri_vector128 (TransformData *td, MonoMethod *cmethod, MonoMethodSignature
        if (id == -1)
                return FALSE;
 
+       MonoClass *vector_klass = mono_class_from_mono_type_internal (csignature->ret);
        if (id == SN_get_IsHardwareAccelerated) {
                interp_add_ins (td, MINT_LDC_I4_1);
                goto opcode_added;
@@ -98,8 +99,6 @@ emit_sri_vector128 (TransformData *td, MonoMethod *cmethod, MonoMethodSignature
 
        gint16 simd_opcode = -1;
        gint16 simd_intrins = -1;
-
-       MonoClass *vector_klass = mono_class_from_mono_type_internal (csignature->ret);
        if (!m_class_is_simd_type (vector_klass))
                vector_klass = mono_class_from_mono_type_internal (csignature->params [0]);
        if (!m_class_is_simd_type (vector_klass))