From 78da0216d20d554cb7f801ee97709a8e521df01a Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Mon, 27 Feb 2017 17:55:54 +0100 Subject: [interpreter] add basic-vectors.cs to richeck target --- mono/mini/Makefile.am.in | 3 ++- mono/mini/basic-vectors.cs | 3 +++ mono/mini/interpreter/interp.c | 3 +++ mono/mini/interpreter/transform.c | 42 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 50 insertions(+), 1 deletion(-) diff --git a/mono/mini/Makefile.am.in b/mono/mini/Makefile.am.in index 3474a35a28a..e231385c8c8 100755 --- a/mono/mini/Makefile.am.in +++ b/mono/mini/Makefile.am.in @@ -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) diff --git a/mono/mini/basic-vectors.cs b/mono/mini/basic-vectors.cs index a2cf101450e..1174292433a 100644 --- a/mono/mini/basic-vectors.cs +++ b/mono/mini/basic-vectors.cs @@ -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); diff --git a/mono/mini/interpreter/interp.c b/mono/mini/interpreter/interp.c index e604233bec0..a459917bfae 100644 --- a/mono/mini/interpreter/interp.c +++ b/mono/mini/interpreter/interp.c @@ -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; diff --git a/mono/mini/interpreter/transform.c b/mono/mini/interpreter/transform.c index 4e6105f0f8f..e5e2ec931d3 100644 --- a/mono/mini/interpreter/transform.c +++ b/mono/mini/interpreter/transform.c @@ -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); -- cgit v1.2.3