forked from Imagelibrary/binutils-gdb
RISC-V: Support Zabha extension.
The Zabha extension[1] supports for byte and halfword atomic memory operations. This patch add all instructions include in Zabha. Further work is waiting Zacas[2] merge. [1] https://github.com/riscv/riscv-zabha/tags [2] https://sourceware.org/pipermail/binutils/2023-May/127700.html Version log: Add new imply relation that Zabha extension implies A extension. bfd/ChangeLog: * elfxx-riscv.c (riscv_implicit_subsets): New imply. (riscv_multi_subset_supports): New extension. (riscv_multi_subset_supports_ext): Ditto. gas/ChangeLog: * testsuite/gas/riscv/zabha-32.d: New test. * testsuite/gas/riscv/zabha.d: New test. * testsuite/gas/riscv/zabha.s: New test. include/ChangeLog: * opcode/riscv-opc.h (MATCH_AMOADD_B): New opcodes. (MASK_AMOADD_B): Ditto. (MATCH_AMOXOR_B): Ditto. (MASK_AMOXOR_B): Ditto. (MATCH_AMOOR_B): Ditto. (MASK_AMOOR_B): Ditto. (MATCH_AMOAND_B): Ditto. (MASK_AMOAND_B): Ditto. (MATCH_AMOMIN_B): Ditto. (MASK_AMOMIN_B): Ditto. (MATCH_AMOMAX_B): Ditto. (MASK_AMOMAX_B): Ditto. (MATCH_AMOMINU_B): Ditto. (MASK_AMOMINU_B): Ditto. (MATCH_AMOMAXU_B): Ditto. (MASK_AMOMAXU_B): Ditto. (MATCH_AMOSWAP_B): Ditto. (MASK_AMOSWAP_B): Ditto. (MATCH_AMOADD_H): Ditto. (MASK_AMOADD_H): Ditto. (MATCH_AMOXOR_H): Ditto. (MASK_AMOXOR_H): Ditto. (MATCH_AMOOR_H): Ditto. (MASK_AMOOR_H): Ditto. (MATCH_AMOAND_H): Ditto. (MASK_AMOAND_H): Ditto. (MATCH_AMOMIN_H): Ditto. (MASK_AMOMIN_H): Ditto. (MATCH_AMOMAX_H): Ditto. (MASK_AMOMAX_H): Ditto. (MATCH_AMOMINU_H): Ditto. (MASK_AMOMINU_H): Ditto. (MATCH_AMOMAXU_H): Ditto. (MASK_AMOMAXU_H): Ditto. (MATCH_AMOSWAP_H): Ditto. (MASK_AMOSWAP_H): Ditto. (DECLARE_INSN): New declare. * opcode/riscv.h (enum riscv_insn_class): New class. opcodes/ChangeLog: * riscv-opc.c: New instructions.
This commit is contained in:
@@ -235,6 +235,42 @@
|
||||
#define MASK_LR_D 0xf9f0707f
|
||||
#define MATCH_SC_D 0x1800302f
|
||||
#define MASK_SC_D 0xf800707f
|
||||
#define MATCH_AMOADD_B 0x02f
|
||||
#define MASK_AMOADD_B 0xf800707f
|
||||
#define MATCH_AMOXOR_B 0x2000002f
|
||||
#define MASK_AMOXOR_B 0xf800707f
|
||||
#define MATCH_AMOOR_B 0x4000002f
|
||||
#define MASK_AMOOR_B 0xf800707f
|
||||
#define MATCH_AMOAND_B 0x6000002f
|
||||
#define MASK_AMOAND_B 0xf800707f
|
||||
#define MATCH_AMOMIN_B 0x8000002f
|
||||
#define MASK_AMOMIN_B 0xf800707f
|
||||
#define MATCH_AMOMAX_B 0xa000002f
|
||||
#define MASK_AMOMAX_B 0xf800707f
|
||||
#define MATCH_AMOMINU_B 0xc000002f
|
||||
#define MASK_AMOMINU_B 0xf800707f
|
||||
#define MATCH_AMOMAXU_B 0xe000002f
|
||||
#define MASK_AMOMAXU_B 0xf800707f
|
||||
#define MATCH_AMOSWAP_B 0x800002f
|
||||
#define MASK_AMOSWAP_B 0xf800707f
|
||||
#define MATCH_AMOADD_H 0x102f
|
||||
#define MASK_AMOADD_H 0xf800707f
|
||||
#define MATCH_AMOXOR_H 0x2000102f
|
||||
#define MASK_AMOXOR_H 0xf800707f
|
||||
#define MATCH_AMOOR_H 0x4000102f
|
||||
#define MASK_AMOOR_H 0xf800707f
|
||||
#define MATCH_AMOAND_H 0x6000102f
|
||||
#define MASK_AMOAND_H 0xf800707f
|
||||
#define MATCH_AMOMIN_H 0x8000102f
|
||||
#define MASK_AMOMIN_H 0xf800707f
|
||||
#define MATCH_AMOMAX_H 0xa000102f
|
||||
#define MASK_AMOMAX_H 0xf800707f
|
||||
#define MATCH_AMOMINU_H 0xc000102f
|
||||
#define MASK_AMOMINU_H 0xf800707f
|
||||
#define MATCH_AMOMAXU_H 0xe000102f
|
||||
#define MASK_AMOMAXU_H 0xf800707f
|
||||
#define MATCH_AMOSWAP_H 0x800102f
|
||||
#define MASK_AMOSWAP_H 0xf800707f
|
||||
#define MATCH_ECALL 0x73
|
||||
#define MASK_ECALL 0xffffffff
|
||||
#define MATCH_EBREAK 0x100073
|
||||
@@ -3581,6 +3617,24 @@ DECLARE_INSN(amomaxu_d, MATCH_AMOMAXU_D, MASK_AMOMAXU_D)
|
||||
DECLARE_INSN(amoswap_d, MATCH_AMOSWAP_D, MASK_AMOSWAP_D)
|
||||
DECLARE_INSN(lr_d, MATCH_LR_D, MASK_LR_D)
|
||||
DECLARE_INSN(sc_d, MATCH_SC_D, MASK_SC_D)
|
||||
DECLARE_INSN(amoadd_b, MATCH_AMOADD_B, MASK_AMOADD_B)
|
||||
DECLARE_INSN(amoxor_b, MATCH_AMOXOR_B, MASK_AMOXOR_B)
|
||||
DECLARE_INSN(amoor_b, MATCH_AMOOR_B, MASK_AMOOR_B)
|
||||
DECLARE_INSN(amoand_b, MATCH_AMOAND_B, MASK_AMOAND_B)
|
||||
DECLARE_INSN(amomin_b, MATCH_AMOMIN_B, MASK_AMOMIN_B)
|
||||
DECLARE_INSN(amomax_b, MATCH_AMOMAX_B, MASK_AMOMAX_B)
|
||||
DECLARE_INSN(amominu_b, MATCH_AMOMINU_B, MASK_AMOMINU_B)
|
||||
DECLARE_INSN(amomaxu_b, MATCH_AMOMAXU_B, MASK_AMOMAXU_B)
|
||||
DECLARE_INSN(amoswap_b, MATCH_AMOSWAP_B, MASK_AMOSWAP_B)
|
||||
DECLARE_INSN(amoadd_h, MATCH_AMOADD_H, MASK_AMOADD_H)
|
||||
DECLARE_INSN(amoxor_h, MATCH_AMOXOR_H, MASK_AMOXOR_H)
|
||||
DECLARE_INSN(amoor_h, MATCH_AMOOR_H, MASK_AMOOR_H)
|
||||
DECLARE_INSN(amoand_h, MATCH_AMOAND_H, MASK_AMOAND_H)
|
||||
DECLARE_INSN(amomin_h, MATCH_AMOMIN_H, MASK_AMOMIN_H)
|
||||
DECLARE_INSN(amomax_h, MATCH_AMOMAX_H, MASK_AMOMAX_H)
|
||||
DECLARE_INSN(amominu_h, MATCH_AMOMINU_H, MASK_AMOMINU_H)
|
||||
DECLARE_INSN(amomaxu_h, MATCH_AMOMAXU_H, MASK_AMOMAXU_H)
|
||||
DECLARE_INSN(amoswap_h, MATCH_AMOSWAP_H, MASK_AMOSWAP_H)
|
||||
DECLARE_INSN(ecall, MATCH_ECALL, MASK_ECALL)
|
||||
DECLARE_INSN(ebreak, MATCH_EBREAK, MASK_EBREAK)
|
||||
DECLARE_INSN(uret, MATCH_URET, MASK_URET)
|
||||
|
||||
@@ -468,6 +468,7 @@ enum riscv_insn_class
|
||||
INSN_CLASS_ZICBOM,
|
||||
INSN_CLASS_ZICBOP,
|
||||
INSN_CLASS_ZICBOZ,
|
||||
INSN_CLASS_ZABHA,
|
||||
INSN_CLASS_H,
|
||||
INSN_CLASS_XCVMAC,
|
||||
INSN_CLASS_XCVALU,
|
||||
|
||||
Reference in New Issue
Block a user