Skip to content

Commit 1124f4e

Browse files
committed
Fix Vector128 divide by scalar
1 parent dc43d8d commit 1124f4e

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,16 @@ emit_simd_ins_for_binary_op (MonoCompile *cfg, MonoClass *klass, MonoMethodSigna
302302
break;
303303
case SN_Divide:
304304
case SN_op_Division:
305+
if (strcmp ("Vector4", m_class_get_name (klass)) && strcmp ("Vector2", m_class_get_name (klass))) {
306+
if ((fsig->params [0]->type == MONO_TYPE_GENERICINST) && (fsig->params [1]->type != MONO_TYPE_GENERICINST)) {
307+
MonoInst* ins = emit_simd_ins (cfg, klass, OP_CREATE_SCALAR_UNSAFE, args [1]->dreg, -1);
308+
ins->inst_c1 = arg_type;
309+
ins = emit_simd_ins (cfg, klass, OP_XBINOP_BYSCALAR, args [0]->dreg, ins->dreg);
310+
ins->inst_c0 = OP_FDIV;
311+
return ins;
312+
} else
313+
return NULL;
314+
}
305315
instc0 = OP_FDIV;
306316
break;
307317
case SN_Max:
@@ -325,7 +335,8 @@ emit_simd_ins_for_binary_op (MonoCompile *cfg, MonoClass *klass, MonoMethodSigna
325335
ins = emit_simd_ins (cfg, klass, OP_XBINOP_BYSCALAR, ins->dreg, args [1]->dreg);
326336
ins->inst_c0 = OP_FMUL;
327337
return ins;
328-
}
338+
} else
339+
return NULL;
329340
}
330341
instc0 = OP_FMUL;
331342
break;

0 commit comments

Comments
 (0)