mirror of https://github.com/xemu-project/xemu.git
target/arm: Delete dead code from disas_simd_indexed
MLA, MLS, SQDMULH, SQRDMULH, were converted with8db93dcd3d
andf80701cb44
, and this code should have been removed then. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20240625183536.1672454-14-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
80b02a565e
commit
2cd5078d57
|
@ -11976,7 +11976,6 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
|
||||||
int h = extract32(insn, 11, 1);
|
int h = extract32(insn, 11, 1);
|
||||||
int rn = extract32(insn, 5, 5);
|
int rn = extract32(insn, 5, 5);
|
||||||
int rd = extract32(insn, 0, 5);
|
int rd = extract32(insn, 0, 5);
|
||||||
bool is_long = false;
|
|
||||||
int index;
|
int index;
|
||||||
|
|
||||||
switch (16 * u + opcode) {
|
switch (16 * u + opcode) {
|
||||||
|
@ -11990,12 +11989,10 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
|
||||||
unallocated_encoding(s);
|
unallocated_encoding(s);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
is_long = true;
|
|
||||||
break;
|
break;
|
||||||
case 0x03: /* SQDMLAL, SQDMLAL2 */
|
case 0x03: /* SQDMLAL, SQDMLAL2 */
|
||||||
case 0x07: /* SQDMLSL, SQDMLSL2 */
|
case 0x07: /* SQDMLSL, SQDMLSL2 */
|
||||||
case 0x0b: /* SQDMULL, SQDMULL2 */
|
case 0x0b: /* SQDMULL, SQDMULL2 */
|
||||||
is_long = true;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
case 0x00: /* FMLAL */
|
case 0x00: /* FMLAL */
|
||||||
|
@ -12047,96 +12044,6 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
|
||||||
|
|
||||||
if (size == 3) {
|
if (size == 3) {
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
} else if (!is_long) {
|
|
||||||
/* 32 bit floating point, or 16 or 32 bit integer.
|
|
||||||
* For the 16 bit scalar case we use the usual Neon helpers and
|
|
||||||
* rely on the fact that 0 op 0 == 0 with no side effects.
|
|
||||||
*/
|
|
||||||
TCGv_i32 tcg_idx = tcg_temp_new_i32();
|
|
||||||
int pass, maxpasses;
|
|
||||||
|
|
||||||
if (is_scalar) {
|
|
||||||
maxpasses = 1;
|
|
||||||
} else {
|
|
||||||
maxpasses = is_q ? 4 : 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
read_vec_element_i32(s, tcg_idx, rm, index, size);
|
|
||||||
|
|
||||||
if (size == 1 && !is_scalar) {
|
|
||||||
/* The simplest way to handle the 16x16 indexed ops is to duplicate
|
|
||||||
* the index into both halves of the 32 bit tcg_idx and then use
|
|
||||||
* the usual Neon helpers.
|
|
||||||
*/
|
|
||||||
tcg_gen_deposit_i32(tcg_idx, tcg_idx, tcg_idx, 16, 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (pass = 0; pass < maxpasses; pass++) {
|
|
||||||
TCGv_i32 tcg_op = tcg_temp_new_i32();
|
|
||||||
TCGv_i32 tcg_res = tcg_temp_new_i32();
|
|
||||||
|
|
||||||
read_vec_element_i32(s, tcg_op, rn, pass, is_scalar ? size : MO_32);
|
|
||||||
|
|
||||||
switch (16 * u + opcode) {
|
|
||||||
case 0x10: /* MLA */
|
|
||||||
case 0x14: /* MLS */
|
|
||||||
{
|
|
||||||
static NeonGenTwoOpFn * const fns[2][2] = {
|
|
||||||
{ gen_helper_neon_add_u16, gen_helper_neon_sub_u16 },
|
|
||||||
{ tcg_gen_add_i32, tcg_gen_sub_i32 },
|
|
||||||
};
|
|
||||||
NeonGenTwoOpFn *genfn;
|
|
||||||
bool is_sub = opcode == 0x4;
|
|
||||||
|
|
||||||
if (size == 1) {
|
|
||||||
gen_helper_neon_mul_u16(tcg_res, tcg_op, tcg_idx);
|
|
||||||
} else {
|
|
||||||
tcg_gen_mul_i32(tcg_res, tcg_op, tcg_idx);
|
|
||||||
}
|
|
||||||
if (opcode == 0x8) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
read_vec_element_i32(s, tcg_op, rd, pass, MO_32);
|
|
||||||
genfn = fns[size - 1][is_sub];
|
|
||||||
genfn(tcg_res, tcg_op, tcg_res);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 0x0c: /* SQDMULH */
|
|
||||||
if (size == 1) {
|
|
||||||
gen_helper_neon_qdmulh_s16(tcg_res, tcg_env,
|
|
||||||
tcg_op, tcg_idx);
|
|
||||||
} else {
|
|
||||||
gen_helper_neon_qdmulh_s32(tcg_res, tcg_env,
|
|
||||||
tcg_op, tcg_idx);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 0x0d: /* SQRDMULH */
|
|
||||||
if (size == 1) {
|
|
||||||
gen_helper_neon_qrdmulh_s16(tcg_res, tcg_env,
|
|
||||||
tcg_op, tcg_idx);
|
|
||||||
} else {
|
|
||||||
gen_helper_neon_qrdmulh_s32(tcg_res, tcg_env,
|
|
||||||
tcg_op, tcg_idx);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
case 0x01: /* FMLA */
|
|
||||||
case 0x05: /* FMLS */
|
|
||||||
case 0x09: /* FMUL */
|
|
||||||
case 0x19: /* FMULX */
|
|
||||||
case 0x1d: /* SQRDMLAH */
|
|
||||||
case 0x1f: /* SQRDMLSH */
|
|
||||||
g_assert_not_reached();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_scalar) {
|
|
||||||
write_fp_sreg(s, rd, tcg_res);
|
|
||||||
} else {
|
|
||||||
write_vec_element_i32(s, tcg_res, rd, pass, MO_32);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
clear_vec_high(s, is_q, rd);
|
|
||||||
} else {
|
} else {
|
||||||
/* long ops: 16x16->32 or 32x32->64 */
|
/* long ops: 16x16->32 or 32x32->64 */
|
||||||
TCGv_i64 tcg_res[2];
|
TCGv_i64 tcg_res[2];
|
||||||
|
|
Loading…
Reference in New Issue