target/arm: Decode aa64 armv8.1 scalar/vector x indexed element

Backports commit d345df7a3f1336ceb0537c1fa0a7261030426768 from qemu
This commit is contained in:
Richard Henderson 2018-03-09 00:11:53 -05:00 committed by Lioncash
parent 12fd2cc113
commit 152c9484bd
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7

View file

@ -12144,6 +12144,13 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
case 0x19: /* FMULX */
is_fp = true;
break;
case 0x1d: /* SQRDMLAH */
case 0x1f: /* SQRDMLSH */
if (!arm_dc_feature(s, ARM_FEATURE_V8_RDM)) {
unallocated_encoding(s);
return;
}
break;
default:
unallocated_encoding(s);
return;
@ -12387,6 +12394,28 @@ static void disas_simd_indexed(DisasContext *s, uint32_t insn)
tcg_op, tcg_idx);
}
break;
case 0x1d: /* SQRDMLAH */
read_vec_element_i32(s, tcg_res, rd, pass,
is_scalar ? size : MO_32);
if (size == 1) {
gen_helper_neon_qrdmlah_s16(tcg_ctx, tcg_res, tcg_ctx->cpu_env,
tcg_op, tcg_idx, tcg_res);
} else {
gen_helper_neon_qrdmlah_s32(tcg_ctx, tcg_res, tcg_ctx->cpu_env,
tcg_op, tcg_idx, tcg_res);
}
break;
case 0x1f: /* SQRDMLSH */
read_vec_element_i32(s, tcg_res, rd, pass,
is_scalar ? size : MO_32);
if (size == 1) {
gen_helper_neon_qrdmlsh_s16(tcg_ctx, tcg_res, tcg_ctx->cpu_env,
tcg_op, tcg_idx, tcg_res);
} else {
gen_helper_neon_qrdmlsh_s32(tcg_ctx, tcg_res, tcg_ctx->cpu_env,
tcg_op, tcg_idx, tcg_res);
}
break;
default:
g_assert_not_reached();
}