[interpreter] add basic-vectors.cs to richeck target
authorBernhard Urban <bernhard.urban@xamarin.com>
Mon, 27 Feb 2017 16:55:54 +0000 (17:55 +0100)
committerBernhard Urban <bernhard.urban@xamarin.com>
Tue, 28 Feb 2017 21:59:28 +0000 (22:59 +0100)
mono/mini/Makefile.am.in
mono/mini/basic-vectors.cs
mono/mini/interpreter/interp.c
mono/mini/interpreter/transform.c

index 3474a35a28a121424f1a3fe59efd3d53e039a7b3..e231385c8c8db06e95287bf59abd6d9de80fd349 100755 (executable)
@@ -540,7 +540,8 @@ iregtests = \
        exceptions.exe \
        devirtualization.exe \
        generics.exe \
-       basic-simd.exe
+       basic-simd.exe \
+       basic-vectors.exe
 
 if X86
 arch_sources = $(x86_sources)
index a2cf101450e792a1faf5177fdeb7e6b84ad06cbf..1174292433a87684b10a822ccaa3cdd8d27e9bf0 100644 (file)
@@ -113,6 +113,7 @@ public class VectorTests {
                return Vector2.Abs (v1);
        }
 
+       [Category ("!INTERPRETER")]
        public static int test_0_vector2_abs () {
                var v1 = new Vector2 (-1.0f, -2.0f);
                var v2 = new Vector2 (1.0f, 2.0f);
@@ -350,6 +351,7 @@ public class VectorTests {
                return Vector4.Abs (v1);
        }
 
+       [Category ("!INTERPRETER")]
        public static int test_0_vector4_abs () {
                var v1 = new Vector4 (-1.0f, -2.0f, -3.0f, -4.0f);
                var v2 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
@@ -588,6 +590,7 @@ public class VectorTests {
                return Vector3.Abs (v1);
        }
 
+       [Category ("!INTERPRETER")]
        public static int test_0_vector3_abs () {
                var v1 = new Vector3 (-1.0f, -2.0f, -3.0f);
                var v2 = new Vector3 (1.0f, 2.0f, 3.0f);
index e604233bec0e86cf9dca044dfa24597b21b33a83..a459917bfaec355c10f1c4d14560b00ef019d4c5 100644 (file)
@@ -772,6 +772,7 @@ static MethodArguments* build_args_from_sig (MonoMethodSignature *sig, MonoInvoc
                case MONO_TYPE_GENERICINST:
                        margs->ilen++;
                        break;
+               case MONO_TYPE_R4:
                case MONO_TYPE_R8:
                        margs->flen++;
                        break;
@@ -828,6 +829,7 @@ static MethodArguments* build_args_from_sig (MonoMethodSignature *sig, MonoInvoc
 #endif
                        int_i++;
                        break;
+               case MONO_TYPE_R4:
                case MONO_TYPE_R8:
                        margs->fargs [int_f] = frame->stack_args [i].data.f;
                        int_f++;
@@ -858,6 +860,7 @@ static MethodArguments* build_args_from_sig (MonoMethodSignature *sig, MonoInvoc
                case MONO_TYPE_GENERICINST:
                        margs->retval = &(frame->retval->data.p);
                        break;
+               case MONO_TYPE_R4:
                case MONO_TYPE_R8:
                        margs->retval = &(frame->retval->data.p);
                        margs->is_float_ret = 1;
index 4e6105f0f8f43c964f65dbbeff4dccc749eb2d06..e5e2ec931d3b174b7980f0251cc5338381bf51fe 100644 (file)
@@ -2265,12 +2265,54 @@ generate (MonoMethod *method, RuntimeMethod *rtm, unsigned char *is_bb_start, Mo
                        token = read32 (td.ip + 1);
                        klass = mono_class_get_full (image, token, generic_context);
                        switch (mint_type (&klass->byval_arg)) {
+                               case MINT_TYPE_I1:
+                                       ENSURE_I4 (&td, 1);
+                                       SIMPLE_OP (td, MINT_LDELEM_I1);
+                                       --td.sp;
+                                       SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4);
+                                       break;
+                               case MINT_TYPE_U1:
+                                       ENSURE_I4 (&td, 1);
+                                       SIMPLE_OP (td, MINT_LDELEM_U1);
+                                       --td.sp;
+                                       SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4);
+                                       break;
+                               case MINT_TYPE_U2:
+                                       ENSURE_I4 (&td, 1);
+                                       SIMPLE_OP (td, MINT_LDELEM_U2);
+                                       --td.sp;
+                                       SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4);
+                                       break;
+                               case MINT_TYPE_I2:
+                                       ENSURE_I4 (&td, 1);
+                                       SIMPLE_OP (td, MINT_LDELEM_I2);
+                                       --td.sp;
+                                       SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4);
+                                       break;
                                case MINT_TYPE_I4:
                                        ENSURE_I4 (&td, 1);
                                        SIMPLE_OP (td, MINT_LDELEM_I4);
                                        --td.sp;
                                        SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I4);
                                        break;
+                               case MINT_TYPE_I8:
+                                       ENSURE_I4 (&td, 1);
+                                       SIMPLE_OP (td, MINT_LDELEM_I8);
+                                       --td.sp;
+                                       SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_I8);
+                                       break;
+                               case MINT_TYPE_R4:
+                                       ENSURE_I4 (&td, 1);
+                                       SIMPLE_OP (td, MINT_LDELEM_R4);
+                                       --td.sp;
+                                       SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_R8);
+                                       break;
+                               case MINT_TYPE_R8:
+                                       ENSURE_I4 (&td, 1);
+                                       SIMPLE_OP (td, MINT_LDELEM_R8);
+                                       --td.sp;
+                                       SET_SIMPLE_TYPE(td.sp - 1, STACK_TYPE_R8);
+                                       break;
                                case MINT_TYPE_O:
                                        ENSURE_I4 (&td, 1);
                                        SIMPLE_OP (td, MINT_LDELEM_REF);