Skip to content

Commit 28322e3

Browse files
committed
Incorrect decomposition of simd calls
simd decomposition for OP_ARG cases for simd calls in handled incorrectly currently the decomposition intrinsic takes place based on a xcall but later on this xcall is decomposed into a vcall where the return register is removed. fixes #116287
1 parent 11d3c57 commit 28322e3

File tree

1 file changed

+7
-12
lines changed

1 file changed

+7
-12
lines changed

src/mono/mono/mini/simd-intrinsics.c

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6717,21 +6717,16 @@ mono_emit_common_intrinsics (MonoCompile *cfg, MonoMethod *cmethod, MonoMethodSi
67176717
static gboolean
67186718
decompose_vtype_opt_uses_simd_intrinsics (MonoCompile *cfg, MonoInst *ins)
67196719
{
6720+
switch (ins->opcode){
6721+
case OP_XCALL:
6722+
case OP_XCALL_MEMBASE:
6723+
case OP_XCALL_REG:
6724+
return FALSE;
6725+
}
6726+
67206727
if (cfg->uses_simd_intrinsics)
67216728
return TRUE;
67226729

6723-
switch (ins->opcode) {
6724-
case OP_XMOVE:
6725-
case OP_XZERO:
6726-
case OP_XPHI:
6727-
case OP_LOADX_MEMBASE:
6728-
case OP_LOADX_ALIGNED_MEMBASE:
6729-
case OP_STOREX_MEMBASE:
6730-
case OP_STOREX_ALIGNED_MEMBASE_REG:
6731-
return TRUE;
6732-
default:
6733-
return FALSE;
6734-
}
67356730
}
67366731

67376732
static void

0 commit comments

Comments
 (0)