-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
RISC-V: Add 'Zicntr' and 'Zihpm' support with compatibility measures
This commit adds support for 'Zicntr' and 'Zihpm' extensions (version 2.0). However, because GNU Binutils handled those as a part of 'I' and there was a time when a ratified specification did split counters from the 'I' extension without separate extension names, we need to take care of possible compatibility issues. So, if 'Zicntr' pseudoinstructions are used without that extension, it generates not an error but a warning. bfd/ChangeLog: * elfxx-riscv.c (riscv_implicit_subsets): Add implications related to counter extensions. (riscv_supported_std_z_ext): Add 'Zicntr' and 'Zihpm' extensions. (riscv_parse_add_subset): Add "zicntr" and "zihpm" to exceptions to recognize on older ISAs if there's no version number. (riscv_multi_subset_supports, riscv_multi_subset_supports_ext): Add support for the 'Zicntr' extension with compatibility measure. gas/ChangeLog: * config/tc-riscv.c (enum riscv_csr_class): Add new CSR classes corresponding 'Zicntr' and 'Zihpm' extensions. (riscv_csr_address): Add handling for new CSR classes. (riscv_ip): Raise a warning if a 'Zicntr' pseudoinstruction is used without that extension. * testsuite/gas/riscv/csr-insns-pseudo.s: Rename section names to indicate that the extension 'Zicntr' is needed. * testsuite/gas/riscv/csr-insns-pseudo.d: Add "zicntr" to arch. * testsuite/gas/riscv/csr-insns-pseudo-noalias.d: Likewise. * testsuite/gas/riscv/csr-insns-pseudo-zfinx.d: Likewise. * testsuite/gas/riscv/csr-insns-read-only.d: Likewise. * testsuite/gas/riscv/csr-version-1p9p1.l: Add warnings regarding 'Zicntr' and 'Zihpm' extension recategorization. * testsuite/gas/riscv/csr-version-1p10.l: Likewise. * testsuite/gas/riscv/csr-version-1p11.l: Likewise. * testsuite/gas/riscv/csr-version-1p12.l: Likewise. * testsuite/gas/riscv/csr-insns-pseudo-nozicntr.d: New test to see warnings are generated when the 'Zicntr' extension is not specified. * testsuite/gas/riscv/csr-insns-pseudo-nozicntr.l: Likewise. include/ChangeLog: * opcode/riscv-opc.h: Recategorize user counter CSRs. * opcode/riscv.h (enum riscv_insn_class): Add INSN_CLASS_ZICNTR for 'Zicntr' pseudoinstructions. opcodes/ChangeLog: * riscv-opc.c (riscv_opcodes): Recategorize counter pseudoinstructions to the 'Zicntr' extension.
- Loading branch information
Showing
16 changed files
with
1,184 additions
and
77 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
#source: csr-insns-pseudo.s | ||
#as: -march=rv32if | ||
#warning_output: csr-insns-pseudo-nozicntr.l | ||
#objdump: -dr | ||
|
||
.*:[ ]+file format .* | ||
|
||
|
||
Disassembly of section .text: | ||
|
||
0+000 <pseudo_csr_insn>: | ||
[ ]+[0-9a-f]+:[ ]+000022f3[ ]+csrr[ ]+t0,ustatus | ||
[ ]+[0-9a-f]+:[ ]+00029073[ ]+csrw[ ]+ustatus,t0 | ||
[ ]+[0-9a-f]+:[ ]+0002a073[ ]+csrs[ ]+ustatus,t0 | ||
[ ]+[0-9a-f]+:[ ]+0002b073[ ]+csrc[ ]+ustatus,t0 | ||
[ ]+[0-9a-f]+:[ ]+000fd073[ ]+csrwi[ ]+ustatus,31 | ||
[ ]+[0-9a-f]+:[ ]+000fe073[ ]+csrsi[ ]+ustatus,31 | ||
[ ]+[0-9a-f]+:[ ]+000ff073[ ]+csrci[ ]+ustatus,31 | ||
[ ]+[0-9a-f]+:[ ]+c00022f3[ ]+rdcycle[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+c01022f3[ ]+rdtime[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+c02022f3[ ]+rdinstret[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+c80022f3[ ]+rdcycleh[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+c81022f3[ ]+rdtimeh[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+c82022f3[ ]+rdinstreth[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+003022f3[ ]+frcsr[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+003392f3[ ]+fscsr[ ]+t0,t2 | ||
[ ]+[0-9a-f]+:[ ]+00339073[ ]+fscsr[ ]+t2 | ||
[ ]+[0-9a-f]+:[ ]+002022f3[ ]+frrm[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+002312f3[ ]+fsrm[ ]+t0,t1 | ||
[ ]+[0-9a-f]+:[ ]+00231073[ ]+fsrm[ ]+t1 | ||
[ ]+[0-9a-f]+:[ ]+002fd2f3[ ]+fsrmi[ ]+t0,31 | ||
[ ]+[0-9a-f]+:[ ]+002fd073[ ]+fsrmi[ ]+zero,31 | ||
[ ]+[0-9a-f]+:[ ]+001022f3[ ]+frflags[ ]+t0 | ||
[ ]+[0-9a-f]+:[ ]+001312f3[ ]+fsflags[ ]+t0,t1 | ||
[ ]+[0-9a-f]+:[ ]+00131073[ ]+fsflags[ ]+t1 | ||
[ ]+[0-9a-f]+:[ ]+001fd2f3[ ]+fsflagsi[ ]+t0,31 | ||
[ ]+[0-9a-f]+:[ ]+001fd073[ ]+fsflagsi[ ]+zero,31 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
.*Assembler messages: | ||
.*Warning: `rdcycle' needs `zicntr' extension | ||
.*Warning: `rdtime' needs `zicntr' extension | ||
.*Warning: `rdinstret' needs `zicntr' extension | ||
.*Warning: `rdcycleh' needs `zicntr' extension | ||
.*Warning: `rdtimeh' needs `zicntr' extension | ||
.*Warning: `rdinstreth' needs `zicntr' extension |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,5 @@ | ||
#source: csr-insns-pseudo.s | ||
#as: -march=rv32if | ||
#as: -march=rv32if_zicntr | ||
#objdump: -dr | ||
|
||
.*:[ ]+file format .* | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
#as: -march=rv32if -mcsr-check -mpriv-spec=1.11 | ||
#as: -march=rv32if_zicntr -mcsr-check -mpriv-spec=1.11 | ||
#source: csr-insns-read-only.s | ||
#warning_output: csr-insns-read-only.l |
Oops, something went wrong.