mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
RISC-V: Add Zawrs ISA extension support
This patch adds support for the Zawrs ISA extension ("wrs.nto" and "wrs.sto" instructions). The specification can be found here: https://github.com/riscv/riscv-zawrs/blob/main/zawrs.adoc Signed-off-by: Christoph Müllner <christoph.muellner@vrull.eu>
This commit is contained in:

committed by
Philipp Tomsich

parent
618ba27878
commit
eb668e5003
@ -1162,6 +1162,7 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
|
||||
{"zifencei", ISA_SPEC_CLASS_20190608, 2, 0, 0 },
|
||||
{"zihintpause", ISA_SPEC_CLASS_DRAFT, 2, 0, 0 },
|
||||
{"zmmul", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||
{"zawrs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||
{"zfh", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||
{"zfhmin", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||
{"zfinx", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||
@ -2309,6 +2310,8 @@ riscv_multi_subset_supports (riscv_parse_subset_t *rps,
|
||||
return riscv_subset_supports (rps, "zmmul");
|
||||
case INSN_CLASS_A:
|
||||
return riscv_subset_supports (rps, "a");
|
||||
case INSN_CLASS_ZAWRS:
|
||||
return riscv_subset_supports (rps, "zawrs");
|
||||
case INSN_CLASS_F:
|
||||
return riscv_subset_supports (rps, "f");
|
||||
case INSN_CLASS_D:
|
||||
@ -2446,6 +2449,8 @@ riscv_multi_subset_supports_ext (riscv_parse_subset_t *rps,
|
||||
return _ ("m' or `zmmul");
|
||||
case INSN_CLASS_A:
|
||||
return "a";
|
||||
case INSN_CLASS_ZAWRS:
|
||||
return "zawrs";
|
||||
case INSN_CLASS_F:
|
||||
return "f";
|
||||
case INSN_CLASS_D:
|
||||
|
11
gas/testsuite/gas/riscv/zawrs-32.d
Normal file
11
gas/testsuite/gas/riscv/zawrs-32.d
Normal file
@ -0,0 +1,11 @@
|
||||
#as: -march=rv32i_zawrs
|
||||
#source: zawrs.s
|
||||
#objdump: -dr
|
||||
|
||||
.*:[ ]+file format .*
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0+000 <target>:
|
||||
[ ]+[0-9a-f]+:[ ]+00d00073[ ]+wrs.nto
|
||||
[ ]+[0-9a-f]+:[ ]+01d00073[ ]+wrs.sto
|
11
gas/testsuite/gas/riscv/zawrs.d
Normal file
11
gas/testsuite/gas/riscv/zawrs.d
Normal file
@ -0,0 +1,11 @@
|
||||
#as: -march=rv64i_zawrs
|
||||
#source: zawrs.s
|
||||
#objdump: -dr
|
||||
|
||||
.*:[ ]+file format .*
|
||||
|
||||
Disassembly of section .text:
|
||||
|
||||
0+000 <target>:
|
||||
[ ]+[0-9a-f]+:[ ]+00d00073[ ]+wrs.nto
|
||||
[ ]+[0-9a-f]+:[ ]+01d00073[ ]+wrs.sto
|
3
gas/testsuite/gas/riscv/zawrs.s
Normal file
3
gas/testsuite/gas/riscv/zawrs.s
Normal file
@ -0,0 +1,3 @@
|
||||
target:
|
||||
wrs.nto
|
||||
wrs.sto
|
@ -2113,6 +2113,11 @@
|
||||
#define MASK_CBO_INVAL 0xfff07fff
|
||||
#define MATCH_CBO_ZERO 0x40200f
|
||||
#define MASK_CBO_ZERO 0xfff07fff
|
||||
/* Zawrs intructions. */
|
||||
#define MATCH_WRS_NTO 0x00d00073
|
||||
#define MASK_WRS_NTO 0xffffffff
|
||||
#define MATCH_WRS_STO 0x01d00073
|
||||
#define MASK_WRS_STO 0xffffffff
|
||||
/* Vendor-specific (T-Head) XTheadBa instructions. */
|
||||
#define MATCH_TH_ADDSL 0x0000100b
|
||||
#define MASK_TH_ADDSL 0xf800707f
|
||||
@ -3066,6 +3071,9 @@ DECLARE_INSN(cbo_clean, MATCH_CBO_CLEAN, MASK_CBO_CLEAN);
|
||||
DECLARE_INSN(cbo_flush, MATCH_CBO_FLUSH, MASK_CBO_FLUSH);
|
||||
DECLARE_INSN(cbo_inval, MATCH_CBO_INVAL, MASK_CBO_INVAL);
|
||||
DECLARE_INSN(cbo_zero, MATCH_CBO_ZERO, MASK_CBO_ZERO);
|
||||
/* Zawrs instructions. */
|
||||
DECLARE_INSN(wrs_nto, MATCH_WRS_NTO, MASK_WRS_NTO)
|
||||
DECLARE_INSN(wrs_sto, MATCH_WRS_STO, MASK_WRS_STO)
|
||||
/* Vendor-specific (T-Head) XTheadBa instructions. */
|
||||
DECLARE_INSN(th_addsl, MATCH_TH_ADDSL, MASK_TH_ADDSL)
|
||||
/* Vendor-specific (T-Head) XTheadBb instructions. */
|
||||
|
@ -385,6 +385,7 @@ enum riscv_insn_class
|
||||
INSN_CLASS_ZIFENCEI,
|
||||
INSN_CLASS_ZIHINTPAUSE,
|
||||
INSN_CLASS_ZMMUL,
|
||||
INSN_CLASS_ZAWRS,
|
||||
INSN_CLASS_F_OR_ZFINX,
|
||||
INSN_CLASS_D_OR_ZDINX,
|
||||
INSN_CLASS_Q_OR_ZQINX,
|
||||
|
@ -950,6 +950,10 @@ const struct riscv_opcode riscv_opcodes[] =
|
||||
{"cbo.inval", 0, INSN_CLASS_ZICBOM, "0(s)", MATCH_CBO_INVAL, MASK_CBO_INVAL, match_opcode, 0 },
|
||||
{"cbo.zero", 0, INSN_CLASS_ZICBOZ, "0(s)", MATCH_CBO_ZERO, MASK_CBO_ZERO, match_opcode, 0 },
|
||||
|
||||
/* Zawrs instructions. */
|
||||
{"wrs.nto", 0, INSN_CLASS_ZAWRS, "", MATCH_WRS_NTO, MASK_WRS_NTO, match_opcode, 0 },
|
||||
{"wrs.sto", 0, INSN_CLASS_ZAWRS, "", MATCH_WRS_STO, MASK_WRS_STO, match_opcode, 0 },
|
||||
|
||||
/* Zbb or zbkb instructions. */
|
||||
{"clz", 0, INSN_CLASS_ZBB, "d,s", MATCH_CLZ, MASK_CLZ, match_opcode, 0 },
|
||||
{"ctz", 0, INSN_CLASS_ZBB, "d,s", MATCH_CTZ, MASK_CTZ, match_opcode, 0 },
|
||||
|
Reference in New Issue
Block a user