aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorHau Hsu <hau.hsu@sifive.com>2024-02-23 14:17:28 +0800
committerNelson Chu <nelson@rivosinc.com>2024-03-13 13:47:34 +0800
commit90840a86569c32f63feb549f87507a7b6c84e070 (patch)
tree1de7eafba1ddddcfae8e1a68d3cd5a016d69d55f /gas
parentef11c1eaffeda578985b2b28f1e64db67bf3b224 (diff)
downloadbinutils-90840a86569c32f63feb549f87507a7b6c84e070.zip
binutils-90840a86569c32f63feb549f87507a7b6c84e070.tar.gz
binutils-90840a86569c32f63feb549f87507a7b6c84e070.tar.bz2
RISC-V: Add -march=help for gas
Use -march=help for gas to print all supported extensions and versions. Here is part of the output of `as -march=help`: All available -march extensions for RISC-V: e 1.9 i 2.1, 2.0 m 2.0 a 2.1, 2.0 f 2.2, 2.0 d 2.2, 2.0 q 2.2, 2.0 c 2.0 v 1.0 h 1.0 zicbom 1.0 zicbop 1.0 ... This patch assumes that the supported extensions with the same versions are listed together. For example: static struct riscv_supported_ext riscv_supported_std_ext[] = { ... {"i", ISA_SPEC_CLASS_20191213, 2, 1, 0 }, {"i", ISA_SPEC_CLASS_20190608, 2, 1, 0 }, {"i", ISA_SPEC_CLASS_2P2, 2, 0, 0 }, ... }; For the "i" extension, 2.1.0 with different spec class are listed together. This patch records the previous printed extension and version. If the current extension and version are the same as the previous one, skip printing. bfd/ * elfxx-riscv.c (riscv_print_extensions): New function. Print available extensions and versions. * elfxx-riscv.h (riscv_print_extensions): New declaration. gas/ * gas/config/tc-riscv.c (md_parse_option): Parse 'help' keyword in -march option to print available extensions and versions. * testsuite/gas/riscv/march-help.l: New testcase for -march=help. * testsuite/gas/riscv/riscv.exp: Updated.
Diffstat (limited to 'gas')
-rw-r--r--gas/config/tc-riscv.c6
-rw-r--r--gas/testsuite/gas/riscv/march-help.l119
-rw-r--r--gas/testsuite/gas/riscv/riscv.exp1
3 files changed, 126 insertions, 0 deletions
diff --git a/gas/config/tc-riscv.c b/gas/config/tc-riscv.c
index 0966b7b..2a2948f 100644
--- a/gas/config/tc-riscv.c
+++ b/gas/config/tc-riscv.c
@@ -4038,6 +4038,12 @@ md_parse_option (int c, const char *arg)
switch (c)
{
case OPTION_MARCH:
+ /* List all avaiable extensions. */
+ if (strcmp (arg, "help") == 0)
+ {
+ riscv_print_extensions ();
+ exit (EXIT_SUCCESS);
+ }
default_arch_with_ext = arg;
break;
diff --git a/gas/testsuite/gas/riscv/march-help.l b/gas/testsuite/gas/riscv/march-help.l
new file mode 100644
index 0000000..7f92194
--- /dev/null
+++ b/gas/testsuite/gas/riscv/march-help.l
@@ -0,0 +1,119 @@
+All available -march extensions for RISC-V:
+ e 1.9
+ i 2.1, 2.0
+ m 2.0
+ a 2.1, 2.0
+ f 2.2, 2.0
+ d 2.2, 2.0
+ q 2.2, 2.0
+ c 2.0
+ v 1.0
+ h 1.0
+ zicbom 1.0
+ zicbop 1.0
+ zicboz 1.0
+ zicond 1.0
+ zicntr 2.0
+ zicsr 2.0
+ zifencei 2.0
+ zihintntl 1.0
+ zihintpause 2.0
+ zihpm 2.0
+ zmmul 1.0
+ zabha 1.0
+ zawrs 1.0
+ zfa 1.0
+ zfh 1.0
+ zfhmin 1.0
+ zfinx 1.0
+ zdinx 1.0
+ zqinx 1.0
+ zhinx 1.0
+ zhinxmin 1.0
+ zbb 1.0
+ zba 1.0
+ zbc 1.0
+ zbs 1.0
+ zbkb 1.0
+ zbkc 1.0
+ zbkx 1.0
+ zk 1.0
+ zkn 1.0
+ zknd 1.0
+ zkne 1.0
+ zknh 1.0
+ zkr 1.0
+ zks 1.0
+ zksed 1.0
+ zksh 1.0
+ zkt 1.0
+ zve32x 1.0
+ zve32f 1.0
+ zve64x 1.0
+ zve64f 1.0
+ zve64d 1.0
+ zvbb 1.0
+ zvbc 1.0
+ zvfh 1.0
+ zvfhmin 1.0
+ zvkb 1.0
+ zvkg 1.0
+ zvkn 1.0
+ zvkng 1.0
+ zvknc 1.0
+ zvkned 1.0
+ zvknha 1.0
+ zvknhb 1.0
+ zvksed 1.0
+ zvksh 1.0
+ zvks 1.0
+ zvksg 1.0
+ zvksc 1.0
+ zvkt 1.0
+ zvl32b 1.0
+ zvl64b 1.0
+ zvl128b 1.0
+ zvl256b 1.0
+ zvl512b 1.0
+ zvl1024b 1.0
+ zvl2048b 1.0
+ zvl4096b 1.0
+ zvl8192b 1.0
+ zvl16384b 1.0
+ zvl32768b 1.0
+ zvl65536b 1.0
+ ztso 1.0
+ zca 1.0
+ zcb 1.0
+ zcf 1.0
+ zcd 1.0
+ smaia 1.0
+ smcntrpmf 1.0
+ smepmp 1.0
+ smstateen 1.0
+ ssaia 1.0
+ sscofpmf 1.0
+ ssstateen 1.0
+ sstc 1.0
+ svadu 1.0
+ svinval 1.0
+ svnapot 1.0
+ svpbmt 1.0
+ xcvmac 1.0
+ xcvalu 1.0
+ xtheadba 1.0
+ xtheadbb 1.0
+ xtheadbs 1.0
+ xtheadcmo 1.0
+ xtheadcondmov 1.0
+ xtheadfmemidx 1.0
+ xtheadfmv 1.0
+ xtheadint 1.0
+ xtheadmac 1.0
+ xtheadmemidx 1.0
+ xtheadmempair 1.0
+ xtheadsync 1.0
+ xtheadvector 1.0
+ xtheadzvamo 1.0
+ xventanacondops 1.0
+ xsfvcp 1.0
diff --git a/gas/testsuite/gas/riscv/riscv.exp b/gas/testsuite/gas/riscv/riscv.exp
index 2c7e950..069e9a6 100644
--- a/gas/testsuite/gas/riscv/riscv.exp
+++ b/gas/testsuite/gas/riscv/riscv.exp
@@ -21,4 +21,5 @@
if [istarget riscv*-*-*] {
run_dump_tests [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
run_list_test "align-1"
+ run_list_test "march-help" "-march=help"
}