On 02/27/2018 06:38 AM, Alex Bennée wrote:
> @@ -11244,7 +11245,7 @@ static void disas_simd_indexed(DisasContext *s,
> uint32_t insn)
> }
> /* fall through */
> case 0x9: /* FMUL, FMULX */
> - if (!extract32(size, 1, 1)) {
> + if (size == 1) {
> unallocated_encoding(s);
> return;
> }
This is still redundant, since size == 1 is handled...
> @@ -11256,18 +11257,34 @@ static void disas_simd_indexed(DisasContext *s,
> uint32_t insn)
> }
>
> if (is_fp) {
> - /* low bit of size indicates single/double */
> - size = extract32(size, 0, 1) ? 3 : 2;
> - if (size == 2) {
> + /* convert insn encoded size to TCGMemOp size */
> + switch (size) {
> + case 2: /* single precision */
> + size = MO_32;
> index = h << 1 | l;
> - } else {
> + rm |= (m << 4);
> + break;
> + case 3: /* double precision */
> + size = MO_64;
> if (l || !is_q) {
> unallocated_encoding(s);
> return;
> }
> index = h;
> + rm |= (m << 4);
> + break;
> + case 0: /* half precision */
> + size = MO_16;
> + index = h << 2 | l << 1 | m;
> + is_fp16 = true;
> + if (arm_dc_feature(s, ARM_FEATURE_V8_FP16)) {
> + break;
> + }
> + /* fallthru */
> + default: /* unallocated */
> + unallocated_encoding(s);
> + return;
> }
... here. But it's not wrong and I can clean this up along with the additional
changes I need to make to this function for fcmla support. So,
Reviewed-by: Richard Henderson <[email protected]>
r~