[ ]+[0-9a-f]+:[ ]+928f9877[ ]+vfwdota.vv[ ]+v16,v8,v31
[ ]+[0-9a-f]+:[ ]+9a8f9877[ ]+vfqwdota.vv[ ]+v16,v8,v31
[ ]+[0-9a-f]+:[ ]+9e8f9877[ ]+vfqwdota.alt.vv[ ]+v16,v8,v31
-[ ]+[0-9a-f]+:[ ]+988f8877[ ]+vqwdotau.vv[ ]+v16,v8,v31
-[ ]+[0-9a-f]+:[ ]+9c8f8877[ ]+vqwdotas.vv[ ]+v16,v8,v31
-[ ]+[0-9a-f]+:[ ]+928f9877[ ]+vfwdota.vv[ ]+v16,v8,v31
+[ ]+[0-9a-f]+:[ ]+988f8877[ ]+vqwdotau.vv[ ]+v16,v8,v31,v0.t
+[ ]+[0-9a-f]+:[ ]+9c8f8877[ ]+vqwdotas.vv[ ]+v16,v8,v31,v0.t
+[ ]+[0-9a-f]+:[ ]+908f9877[ ]+vfwdota.vv[ ]+v16,v8,v31,v0.t
[ ]+[0-9a-f]+:[ ]+980f9877[ ]+vfqwdota.vv[ ]+v16,v0,v31,v0.t
[ ]+[0-9a-f]+:[ ]+9c0f9877[ ]+vfqwdota.alt.vv[ ]+v16,v0,v31,v0.t
return true;
}
+static bool
+riscv_vtype_altfmt_supported (struct riscv_private_data *pd)
+{
+ return (pd->all_ext
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvfbfa")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvfofp8min")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvfqwbdota8f")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvfqwdota8f")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvfwbdota16bf")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvfwdota16bf")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvqwbdota8i")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvqwbdota16i")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvqwdota8i")
+ || riscv_subset_supports (&pd->riscv_rps_dis, "zvqwdota16i"));
+}
+
/* Parse RISC-V disassembler option (possibly with arguments). */
static void
unsigned int imm_vma = EXTRACT_OPERAND (VMA, imm);
unsigned int imm_vtype_altfmt
= EXTRACT_OPERAND (VTYPE_ALTFMT, imm);
+ bool imm_vtype_altfmt_supported
+ = (imm_vtype_altfmt
+ && riscv_vtype_altfmt_supported (pd));
unsigned int imm_vtype_res = (imm >> 9);
if (imm_vsew < ARRAY_SIZE (riscv_vsew)
&& imm_vma < ARRAY_SIZE (riscv_vma)
&& !imm_vtype_res
&& (imm_vtype_altfmt == 0
- || imm_vsew < ARRAY_SIZE (riscv_vsew_altfmt))
+ || (imm_vtype_altfmt_supported
+ && imm_vsew < ARRAY_SIZE (riscv_vsew_altfmt)))
&& riscv_vsew[imm_vsew] != NULL
&& riscv_vlmul[imm_vlmul] != NULL)
print (info->stream, dis_style_text, "%s,%s,%s,%s",