aboutsummaryrefslogtreecommitdiff
path: root/bfd/elfxx-riscv.c
diff options
context:
space:
mode:
authorNelson Chu <nelson.chu@sifive.com>2024-11-20 16:30:39 +0800
committerNelson Chu <nelson@rivosinc.com>2024-11-22 09:56:54 +0800
commit595e49a4b7c6769ef23a2573148db72872c61935 (patch)
tree4cb033daf7e71ae46317ed497db4e9260fe66d93 /bfd/elfxx-riscv.c
parent87480dcfb62faa25b9fc6e46ae58a090ac2e43dc (diff)
downloadgdb-595e49a4b7c6769ef23a2573148db72872c61935.zip
gdb-595e49a4b7c6769ef23a2573148db72872c61935.tar.gz
gdb-595e49a4b7c6769ef23a2573148db72872c61935.tar.bz2
RISC-V: Support SiFive extensions: xsfvqmaccdod, xsfvqmaccqoq and xsfvfnrclipxfqf
Those SiFive extensions have been published on the web for a while, and we plan to implement intrinsics in GCC for those instructions soon. NOTE: The original patch was written by Nelson when he was still working at SiFive, and Kito rebased it to the trunk. Therefore, I kept the author as Nelson with his SiFive email. Document links: xsfvqmaccdod: https://www.sifive.com/document-file/sifive-int8-matrix-multiplication-extensions-specification xsfvqmaccqoq: https://www.sifive.com/document-file/sifive-int8-matrix-multiplication-extensions-specification xsfvfnrclipxfqf: https://www.sifive.com/document-file/fp32-to-int8-ranged-clip-instructions Co-authored-by: Kito Cheng <kito.cheng@sifive.com>
Diffstat (limited to 'bfd/elfxx-riscv.c')
-rw-r--r--bfd/elfxx-riscv.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/bfd/elfxx-riscv.c b/bfd/elfxx-riscv.c
index 701c724..45da83e 100644
--- a/bfd/elfxx-riscv.c
+++ b/bfd/elfxx-riscv.c
@@ -1187,6 +1187,11 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
{"a", "+zaamo,+zalrsc", check_implicit_always},
{"xsfvcp", "+zve32x", check_implicit_always},
+ {"xsfvqmaccqoq", "+zve32x,+zvl256b", check_implicit_always},
+ {"xsfvqmaccqoq", "+zvl256b", check_implicit_always},
+ {"xsfvqmaccdod", "+zve32x,+zvl128b", check_implicit_always},
+ {"xsfvfnrclipxfqf", "+zve32f", check_implicit_always},
+
{"v", "+zve64d,+zvl128b", check_implicit_always},
{"zvfh", "+zvfhmin,+zfhmin", check_implicit_always},
{"zvfhmin", "+zve32f", check_implicit_always},
@@ -1493,6 +1498,9 @@ static struct riscv_supported_ext riscv_supported_vendor_x_ext[] =
{"xventanacondops", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"xsfvcp", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
{"xsfcease", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
+ {"xsfvqmaccqoq", ISA_SPEC_CLASS_DRAFT, 1, 0, 0},
+ {"xsfvqmaccdod", ISA_SPEC_CLASS_DRAFT, 1, 0, 0},
+ {"xsfvfnrclipxfqf", ISA_SPEC_CLASS_DRAFT, 1, 0, 0},
{NULL, 0, 0, 0, 0}
};
@@ -2776,6 +2784,12 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
return riscv_subset_supports (rps, "xsfvcp");
case INSN_CLASS_XSFCEASE:
return riscv_subset_supports (rps, "xsfcease");
+ case INSN_CLASS_XSFVQMACCQOQ:
+ return riscv_subset_supports (rps, "xsfvqmaccqoq");
+ case INSN_CLASS_XSFVQMACCDOD:
+ return riscv_subset_supports (rps, "xsfvqmaccdod");
+ case INSN_CLASS_XSFVFNRCLIPXFQF:
+ return riscv_subset_supports (rps, "xsfvfnrclipxfqf");
default:
rps->error_handler
(_("internal: unreachable INSN_CLASS_*"));