Skip to content
Prev Previous commit
Next Next commit
[mono][interp] Remove op_Division
It is actually not used in bcl, it is not really vectorized on any platforms and the codegen for the interp implementation is massive and inefficient.
  • Loading branch information
BrzVlad committed Feb 21, 2023
commit 8ffac0787d3c6a71bd6f8ae08c2c11861e970c51
7 changes: 0 additions & 7 deletions src/mono/mono/mini/interp/interp-simd-intrins.def
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,6 @@ INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_I4_SUB, interp_v128_i4_op
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_BITWISE_AND, interp_v128_op_bitwise_and)
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_BITWISE_OR, interp_v128_op_bitwise_or)

INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_I1_DIVISION, interp_v128_i1_op_division)
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_U1_DIVISION, interp_v128_u1_op_division)
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_I2_DIVISION, interp_v128_i2_op_division)
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_U2_DIVISION, interp_v128_u2_op_division)
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_I4_DIVISION, interp_v128_i4_op_division)
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_U4_DIVISION, interp_v128_u4_op_division)

INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_BITWISE_EQUALITY, interp_v128_op_bitwise_equality)
INTERP_SIMD_INTRINSIC_P_PP (INTERP_SIMD_INTRINSIC_V128_BITWISE_INEQUALITY, interp_v128_op_bitwise_inequality)

Expand Down
37 changes: 0 additions & 37 deletions src/mono/mono/mini/interp/interp-simd.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,43 +72,6 @@ interp_v128_op_bitwise_or (gpointer res, gpointer v1, gpointer v2)
*(v128_i4*)res = *(v128_i4*)v1 | *(v128_i4*)v2;
}

// op_Division
static void
interp_v128_i1_op_division (gpointer res, gpointer v1, gpointer v2)
{
*(v128_i1*)res = *(v128_i1*)v1 / *(v128_i1*)v2;
}

static void
interp_v128_u1_op_division (gpointer res, gpointer v1, gpointer v2)
{
*(v128_u1*)res = *(v128_u1*)v1 / *(v128_u1*)v2;
}

static void
interp_v128_i2_op_division (gpointer res, gpointer v1, gpointer v2)
{
*(v128_i2*)res = *(v128_i2*)v1 / *(v128_i2*)v2;
}

static void
interp_v128_u2_op_division (gpointer res, gpointer v1, gpointer v2)
{
*(v128_u2*)res = *(v128_u2*)v1 / *(v128_u2*)v2;
}

static void
interp_v128_i4_op_division (gpointer res, gpointer v1, gpointer v2)
{
*(v128_i4*)res = *(v128_i4*)v1 / *(v128_i4*)v2;
}

static void
interp_v128_u4_op_division (gpointer res, gpointer v1, gpointer v2)
{
*(v128_u4*)res = *(v128_u4*)v1 / *(v128_u4*)v2;
}

// op_Equality
static void
interp_v128_op_bitwise_equality (gpointer res, gpointer v1, gpointer v2)
Expand Down
1 change: 0 additions & 1 deletion src/mono/mono/mini/interp/simd-methods.def
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ SIMD_METHOD(get_Zero)
SIMD_METHOD(op_Addition)
SIMD_METHOD(op_BitwiseAnd)
SIMD_METHOD(op_BitwiseOr)
SIMD_METHOD(op_Division)
SIMD_METHOD(op_Equality)
SIMD_METHOD(op_ExclusiveOr)
SIMD_METHOD(op_Explicit)
Expand Down
11 changes: 0 additions & 11 deletions src/mono/mono/mini/interp/transform-simd.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ static guint16 sri_vector128_t_methods [] = {
SN_op_Addition,
SN_op_BitwiseAnd,
SN_op_BitwiseOr,
SN_op_Division,
SN_op_Equality,
SN_op_ExclusiveOr,
SN_op_Inequality,
Expand Down Expand Up @@ -349,16 +348,6 @@ emit_sri_vector128_t (TransformData *td, MonoMethod *cmethod, MonoMethodSignatur
simd_opcode = MINT_SIMD_INTRINS_P_PP;
simd_intrins = INTERP_SIMD_INTRINSIC_V128_BITWISE_OR;
break;
case SN_op_Division:
g_assert (scalar_arg == -1);
simd_opcode = MINT_SIMD_INTRINS_P_PP;
if (atype == MONO_TYPE_I1) simd_intrins = INTERP_SIMD_INTRINSIC_V128_I1_DIVISION;
else if (atype == MONO_TYPE_U1) simd_intrins = INTERP_SIMD_INTRINSIC_V128_U1_DIVISION;
else if (atype == MONO_TYPE_I2) simd_intrins = INTERP_SIMD_INTRINSIC_V128_I2_DIVISION;
else if (atype == MONO_TYPE_U2) simd_intrins = INTERP_SIMD_INTRINSIC_V128_U2_DIVISION;
else if (atype == MONO_TYPE_I4) simd_intrins = INTERP_SIMD_INTRINSIC_V128_I4_DIVISION;
else if (atype == MONO_TYPE_U4) simd_intrins = INTERP_SIMD_INTRINSIC_V128_U4_DIVISION;
break;
case SN_op_Equality:
if (atype != MONO_TYPE_R4 && atype != MONO_TYPE_R8) {
simd_opcode = MINT_SIMD_INTRINS_P_PP;
Expand Down