Skip to content

Commit e1e7a87

Browse files
authored
Add SN Vector intrinsics (#113456)
1 parent 721686e commit e1e7a87

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,8 @@ get_common_simd_info (MonoClass *vector_klass, MonoMethodSignature *csignature,
308308
if (!m_class_is_simd_type (vector_klass))
309309
return FALSE;
310310

311+
if (!mono_class_is_ginst (vector_klass))
312+
return FALSE;
311313
MonoType *arg_type = mono_class_get_context (vector_klass)->class_inst->type_argv [0];
312314
if (!mono_type_is_primitive (arg_type))
313315
return FALSE;
@@ -443,7 +445,7 @@ emit_sri_vector128 (TransformData *td, MonoMethod *cmethod, MonoMethodSignature
443445

444446
if (csignature->ret->type == MONO_TYPE_GENERICINST) {
445447
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) {
447449
vector_klass = mono_class_from_mono_type_internal (csignature->params [0]);
448450
} else {
449451
return FALSE;
@@ -506,6 +508,9 @@ emit_sri_vector128 (TransformData *td, MonoMethod *cmethod, MonoMethodSignature
506508
simd_intrins = INTERP_SIMD_INTRINSIC_V128_CONDITIONAL_SELECT;
507509
break;
508510
case SN_Create:
511+
if (!is_element_type_primitive (csignature->ret))
512+
return FALSE;
513+
509514
if (csignature->param_count == 1 && atype == csignature->params [0]->type) {
510515
simd_opcode = MINT_SIMD_INTRINS_P_P;
511516
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
10721077
else if (!strcmp (class_name, "Vector128`1"))
10731078
return emit_sri_vector128_t (td, cmethod, csignature);
10741079
} 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"))
10761083
return emit_sn_vector_t (td, cmethod, csignature, newobj);
10771084
else if (!strcmp (class_name, "Vector4"))
10781085
return emit_sn_vector4 (td, cmethod, csignature, newobj);

0 commit comments

Comments
 (0)