<div dir="ltr">Thanks, looks good, so committed after passing rv32/64-elf/linux binutils testsuites.<div><br></div><div>Nelson</div></div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Wed, Nov 5, 2025 at 10:20 AM Jerry Zhang Jian via Binutils <<a href="mailto:binutils@sourceware.org">binutils@sourceware.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Add 6 missing instruction class cases to riscv_multi_subset_supports_ext()<br>
to provide proper extension names in error messages instead of producing<br>
"internal: unreachable INSN_CLASS_*" errors.<br>
<br>
These instruction classes exist in riscv_multi_subset_supports() but were<br>
missing from riscv_multi_subset_supports_ext(), causing the assembler to<br>
produce internal errors when instructions are used without the required<br>
-march specification.<br>
<br>
Missing classes added:<br>
- INSN_CLASS_ZABHA_AND_ZACAS (zabha and zacas)<br>
- INSN_CLASS_XVENTANACONDOPS (xventanacondops)<br>
- INSN_CLASS_XSFVCP (xsfvcp)<br>
- INSN_CLASS_XSFVQMACCQOQ (xsfvqmaccqoq)<br>
- INSN_CLASS_XSFVQMACCDOD (xsfvqmaccdod)<br>
- INSN_CLASS_XSFVFNRCLIPXFQF (xsfvfnrclipxfqf)<br>
<br>
Before this fix:<br>
Error: internal: unreachable INSN_CLASS_*<br>
Error: unrecognized opcode `amocas.b a0,a1,(a2)'<br>
<br>
After this fix:<br>
Error: unrecognized opcode `amocas.b a0,a1,(a2)', extension `zabha' and `zacas' required<br>
<br>
bfd/<br>
* elfxx-riscv.c (riscv_multi_subset_supports_ext): Add 6<br>
missing instruction class cases.<br>
<br>
Signed-off-by: Jerry Zhang Jian <<a href="mailto:jerry.zhangjian@sifive.com" target="_blank">jerry.zhangjian@sifive.com</a>><br>
---<br>
bfd/elfxx-riscv.c | 19 +++++++++++++++++++<br>
1 file changed, 19 insertions(+)<br>
<br>
diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c<br>
index 085d77923a0..3b92fbed5f0 100644<br>
--- a/bfd/elfxx-riscv.c<br>
+++ b/bfd/elfxx-riscv.c<br>
@@ -3128,6 +3128,15 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,<br>
return "zabha";<br>
case INSN_CLASS_ZACAS:<br>
return "zacas";<br>
+ case INSN_CLASS_ZABHA_AND_ZACAS:<br>
+ if (!riscv_subset_supports (rps, "zabha"))<br>
+ {<br>
+ if (!riscv_subset_supports (rps, "zacas"))<br>
+ return _ ("zabha' and `zacas");<br>
+ else<br>
+ return "zabha";<br>
+ }<br>
+ return "zacas";<br>
case INSN_CLASS_ZALRSC:<br>
return "zalrsc";<br>
case INSN_CLASS_ZAWRS:<br>
@@ -3341,8 +3350,18 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,<br>
return "xtheadvdot";<br>
case INSN_CLASS_XTHEADZVAMO:<br>
return "xtheadzvamo";<br>
+ case INSN_CLASS_XVENTANACONDOPS:<br>
+ return "xventanacondops";<br>
+ case INSN_CLASS_XSFVCP:<br>
+ return "xsfvcp";<br>
case INSN_CLASS_XSFCEASE:<br>
return "xsfcease";<br>
+ case INSN_CLASS_XSFVQMACCQOQ:<br>
+ return "xsfvqmaccqoq";<br>
+ case INSN_CLASS_XSFVQMACCDOD:<br>
+ return "xsfvqmaccdod";<br>
+ case INSN_CLASS_XSFVFNRCLIPXFQF:<br>
+ return "xsfvfnrclipxfqf";<br>
default:<br>
rps->error_handler<br>
(_("internal: unreachable INSN_CLASS_*"));<br>
-- <br>
2.51.1<br>
<br>
</blockquote></div>