@@ -308,6 +308,8 @@ get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature,
308
308
if (!m_class_is_simd_type (vector_klass ))
309
309
return FALSE;
310
310
311
+ if (!mono_class_is_ginst (vector_klass ))
312
+ return FALSE;
311
313
MonoType * arg_type = mono_class_get_context (vector_klass )-> class_inst -> type_argv [0 ];
312
314
if (!mono_type_is_primitive (arg_type ))
313
315
return FALSE;
@@ -443,7 +445,7 @@ emit_sri_vector128 (TransformData *td, MonoMethod *cmethod, MonoMethodSignature
443
445
444
446
if (csignature -> ret -> type == MONO_TYPE_GENERICINST ) {
445
447
vector_klass = mono_class_from_mono_type_internal (csignature -> ret );
446
- } else if (csignature -> params [0 ]-> type == MONO_TYPE_GENERICINST ) {
448
+ } else if (csignature -> param_count && csignature -> params [0 ]-> type == MONO_TYPE_GENERICINST ) {
447
449
vector_klass = mono_class_from_mono_type_internal (csignature -> params [0 ]);
448
450
} else {
449
451
return FALSE;
@@ -506,6 +508,9 @@ emit_sri_vector128 (TransformData *td, MonoMethod *cmethod, MonoMethodSignature
506
508
simd_intrins = INTERP_SIMD_INTRINSIC_V128_CONDITIONAL_SELECT ;
507
509
break ;
508
510
case SN_Create :
511
+ if (!is_element_type_primitive (csignature -> ret ))
512
+ return FALSE;
513
+
509
514
if (csignature -> param_count == 1 && atype == csignature -> params [0 ]-> type ) {
510
515
simd_opcode = MINT_SIMD_INTRINS_P_P ;
511
516
if (arg_size == 1 ) simd_intrins = INTERP_SIMD_INTRINSIC_V128_I1_CREATE ;
@@ -1072,7 +1077,9 @@ interp_emit_simd_intrinsics (TransformData *td, MonoMethod *cmethod, MonoMethodS
1072
1077
else if (!strcmp (class_name , "Vector128`1" ))
1073
1078
return emit_sri_vector128_t (td , cmethod , csignature );
1074
1079
} else if (!strcmp (class_ns , "System.Numerics" )) {
1075
- if (!strcmp (class_name , "Vector`1" ))
1080
+ if (!strcmp (class_name , "Vector" ))
1081
+ return emit_sri_vector128 (td , cmethod , csignature );
1082
+ else if (!strcmp (class_name , "Vector`1" ))
1076
1083
return emit_sn_vector_t (td , cmethod , csignature , newobj );
1077
1084
else if (!strcmp (class_name , "Vector4" ))
1078
1085
return emit_sn_vector4 (td , cmethod , csignature , newobj );
0 commit comments