#define MASK_CBO_INVAL 0xfff07fff
#define MATCH_CBO_ZERO 0x40200f
#define MASK_CBO_ZERO 0xfff07fff
+/* Xcheri instructions. */
+#define MATCH_CGETPERM 0xfe00005b
+#define MASK_CGETPERM 0xfff0707f
+#define MATCH_CGETTYPE 0xfe10005b
+#define MASK_CGETTYPE 0xfff0707f
+#define MATCH_CGETBASE 0xfe20005b
+#define MASK_CGETBASE 0xfff0707f
+#define MATCH_CGETLEN 0xfe30005b
+#define MASK_CGETLEN 0xfff0707f
+#define MATCH_CGETTAG 0xfe40005b
+#define MASK_CGETTAG 0xfff0707f
+#define MATCH_CGETSEALED 0xfe50005b
+#define MASK_CGETSEALED 0xfff0707f
+#define MATCH_CGETOFFSET 0xfe60005b
+#define MASK_CGETOFFSET 0xfff0707f
+#define MATCH_CGETFLAGS 0xfe70005b
+#define MASK_CGETFLAGS 0xfff0707f
+#define MATCH_CGETADDR 0xfef0005b
+#define MASK_CGETADDR 0xfff0707f
+#define MATCH_CSEAL 0x1600005b
+#define MASK_CSEAL 0xfe00707f
+#define MATCH_CSEALENTRY 0xff10005b
+#define MASK_CSEALENTRY 0xfff0707f
+#define MATCH_CUNSEAL 0x1800005b
+#define MASK_CUNSEAL 0xfe00707f
+#define MATCH_CANDPERM 0x1a00005b
+#define MASK_CANDPERM 0xfe00707f
+#define MATCH_CSETFLAGS 0x1c00005b
+#define MASK_CSETFLAGS 0xfe00707f
+#define MATCH_CSETOFFSET 0x1e00005b
+#define MASK_CSETOFFSET 0xfe00707f
+#define MATCH_CSETADDR 0x2000005b
+#define MASK_CSETADDR 0xfe00707f
+#define MATCH_CINCOFFSET 0x2200005b
+#define MASK_CINCOFFSET 0xfe00707f
+#define MATCH_CINCOFFSETIMMEDIATE 0x105b
+#define MASK_CINCOFFSETIMMEDIATE 0x707f
+#define MATCH_CSETBOUNDS 0x1000005b
+#define MASK_CSETBOUNDS 0xfe00707f
+#define MATCH_CSETBOUNDSEXACT 0x1200005b
+#define MASK_CSETBOUNDSEXACT 0xfe00707f
+#define MATCH_CSETBOUNDSIMMEDIATE 0x205b
+#define MASK_CSETBOUNDSIMMEDIATE 0x707f
+#define MATCH_CCLEARTAG 0xfeb0005b
+#define MASK_CCLEARTAG 0xfff0707f
+#define MATCH_CBUILDCAP 0x3a00005b
+#define MASK_CBUILDCAP 0xfe00707f
+#define MATCH_CCOPYTYPE 0x3c00005b
+#define MASK_CCOPYTYPE 0xfe00707f
+#define MATCH_CCSEAL 0x3e00005b
+#define MASK_CCSEAL 0xfe00707f
+#define MATCH_CTOPTR 0x2400005b
+#define MASK_CTOPTR 0xfe00707f
+#define MATCH_CFROMPTR 0x2600005b
+#define MASK_CFROMPTR 0xfe00707f
+#define MATCH_CSUB 0x2800005b
+#define MASK_CSUB 0xfe00707f
+#define MATCH_CMOVE 0xfea0005b
+#define MASK_CMOVE 0xfff0707f
+#define MATCH_CTESTSUBSET 0x4000005b
+#define MASK_CTESTSUBSET 0xfe00707f
+#define MATCH_CSETEQUALEXACT 0x4200005b
+#define MASK_CSETEQUALEXACT 0xfe00707f
+#define MATCH_CINVOKE 0xfc0000db
+#define MASK_CINVOKE 0xfe007fff
+#define MATCH_CSPECIALRW 0x200005b
+#define MASK_CSPECIALRW 0xfe00707f
+#define MATCH_CROUNDREPRESENTABLELENGTH 0xfe80005b
+#define MASK_CROUNDREPRESENTABLELENGTH 0xfff0707f
+#define MATCH_CREPRESENTABLEALIGNMENTMASK 0xfe90005b
+#define MASK_CREPRESENTABLEALIGNMENTMASK 0xfff0707f
+#define MATCH_JALR_CAP 0xfec0005b
+#define MASK_JALR_CAP 0xfff0707f
+#define MATCH_LB_DDC 0xfa00005b
+#define MASK_LB_DDC 0xfff0707f
+#define MATCH_LH_DDC 0xfa10005b
+#define MASK_LH_DDC 0xfff0707f
+#define MATCH_LW_DDC 0xfa20005b
+#define MASK_LW_DDC 0xfff0707f
+#define MATCH_LD_DDC 0xfa30005b
+#define MASK_LD_DDC 0xfff0707f
+#define MATCH_LQ_DDC 0xfb70005b
+#define MASK_LQ_DDC 0xfff0707f
+#define MATCH_LBU_DDC 0xfa40005b
+#define MASK_LBU_DDC 0xfff0707f
+#define MATCH_LHU_DDC 0xfa50005b
+#define MASK_LHU_DDC 0xfff0707f
+#define MATCH_LWU_DDC 0xfa60005b
+#define MASK_LWU_DDC 0xfff0707f
+#define MATCH_LDU_DDC 0xfa70005b
+#define MASK_LDU_DDC 0xfff0707f
+#define MATCH_LB_CAP 0xfa80005b
+#define MASK_LB_CAP 0xfff0707f
+#define MATCH_LH_CAP 0xfa90005b
+#define MASK_LH_CAP 0xfff0707f
+#define MATCH_LW_CAP 0xfaa0005b
+#define MASK_LW_CAP 0xfff0707f
+#define MATCH_LD_CAP 0xfab0005b
+#define MASK_LD_CAP 0xfff0707f
+#define MATCH_LQ_CAP 0xfbf0005b
+#define MASK_LQ_CAP 0xfff0707f
+#define MATCH_LBU_CAP 0xfac0005b
+#define MASK_LBU_CAP 0xfff0707f
+#define MATCH_LHU_CAP 0xfad0005b
+#define MASK_LHU_CAP 0xfff0707f
+#define MATCH_LWU_CAP 0xfae0005b
+#define MASK_LWU_CAP 0xfff0707f
+#define MATCH_LDU_CAP 0xfaf0005b
+#define MASK_LDU_CAP 0xfff0707f
+#define MATCH_LR_B_DDC 0xfb00005b
+#define MASK_LR_B_DDC 0xfff0707f
+#define MATCH_LR_H_DDC 0xfb10005b
+#define MASK_LR_H_DDC 0xfff0707f
+#define MATCH_LR_W_DDC 0xfb20005b
+#define MASK_LR_W_DDC 0xfff0707f
+#define MATCH_LR_D_DDC 0xfb30005b
+#define MASK_LR_D_DDC 0xfff0707f
+#define MATCH_LR_Q_DDC 0xfb40005b
+#define MASK_LR_Q_DDC 0xfff0707f
+#define MATCH_LR_B_CAP 0xfb80005b
+#define MASK_LR_B_CAP 0xfff0707f
+#define MATCH_LR_H_CAP 0xfb90005b
+#define MASK_LR_H_CAP 0xfff0707f
+#define MATCH_LR_W_CAP 0xfba0005b
+#define MASK_LR_W_CAP 0xfff0707f
+#define MATCH_LR_D_CAP 0xfbb0005b
+#define MASK_LR_D_CAP 0xfff0707f
+#define MATCH_LR_Q_CAP 0xfbc0005b
+#define MASK_LR_Q_CAP 0xfff0707f
+#define MATCH_SB_DDC 0xf800005b
+#define MASK_SB_DDC 0xfe007fff
+#define MATCH_SH_DDC 0xf80000db
+#define MASK_SH_DDC 0xfe007fff
+#define MATCH_SW_DDC 0xf800015b
+#define MASK_SW_DDC 0xfe007fff
+#define MATCH_SD_DDC 0xf80001db
+#define MASK_SD_DDC 0xfe007fff
+#define MATCH_SQ_DDC 0xf800025b
+#define MASK_SQ_DDC 0xfe007fff
+#define MATCH_SB_CAP 0xf800045b
+#define MASK_SB_CAP 0xfe007fff
+#define MATCH_SH_CAP 0xf80004db
+#define MASK_SH_CAP 0xfe007fff
+#define MATCH_SW_CAP 0xf800055b
+#define MASK_SW_CAP 0xfe007fff
+#define MATCH_SD_CAP 0xf80005db
+#define MASK_SD_CAP 0xfe007fff
+#define MATCH_SQ_CAP 0xf800065b
+#define MASK_SQ_CAP 0xfe007fff
+#define MATCH_SC_B_DDC 0xf800085b
+#define MASK_SC_B_DDC 0xfe007fff
+#define MATCH_SC_H_DDC 0xf80008db
+#define MASK_SC_H_DDC 0xfe007fff
+#define MATCH_SC_W_DDC 0xf800095b
+#define MASK_SC_W_DDC 0xfe007fff
+#define MATCH_SC_D_DDC 0xf80009db
+#define MASK_SC_D_DDC 0xfe007fff
+#define MATCH_SC_Q_DDC 0xf8000a5b
+#define MASK_SC_Q_DDC 0xfe007fff
+#define MATCH_SC_B_CAP 0xf8000c5b
+#define MASK_SC_B_CAP 0xfe007fff
+#define MATCH_SC_H_CAP 0xf8000cdb
+#define MASK_SC_H_CAP 0xfe007fff
+#define MATCH_SC_W_CAP 0xf8000d5b
+#define MASK_SC_W_CAP 0xfe007fff
+#define MATCH_SC_D_CAP 0xf8000ddb
+#define MASK_SC_D_CAP 0xfe007fff
+#define MATCH_SC_Q_CAP 0xf8000e5b
+#define MASK_SC_Q_CAP 0xfe007fff
+#define MATCH_LQ 0x200f
+#define MASK_LQ 0x707f
+#define MATCH_SQ 0x4023
+#define MASK_SQ 0x707f
+#define MATCH_LR_B 0x1000002f
+#define MASK_LR_B 0xf9f0707f
+#define MATCH_SC_B 0x1800002f
+#define MASK_SC_B 0xf800707f
+#define MATCH_LR_H 0x1000102f
+#define MASK_LR_H 0xf9f0707f
+#define MATCH_SC_H 0x1800102f
+#define MASK_SC_H 0xf800707f
+#define MATCH_LR_Q 0x1000402f
+#define MASK_LR_Q 0xf9f0707f
+#define MATCH_SC_Q 0x1800402f
+#define MASK_SC_Q 0xf800707f
+#define MATCH_AMOSWAP_Q 0x800402f
+#define MASK_AMOSWAP_Q 0xf800707f
/* Unprivileged Counter/Timers CSR addresses. */
#define CSR_CYCLE 0xc00
#define CSR_TIME 0xc01
#define CSR_VL 0xc20
#define CSR_VTYPE 0xc21
#define CSR_VLENB 0xc22
+/* CHERI SCRs. */
+#define CHERI_SCR_PCC 0x0
+#define CHERI_SCR_DDC 0x1
+#define CHERI_SCR_UTCC 0x4
+#define CHERI_SCR_UTDC 0x5
+#define CHERI_SCR_USCRATCHC 0x6
+#define CHERI_SCR_UEPCC 0x7
+#define CHERI_SCR_STCC 0xc
+#define CHERI_SCR_STDC 0xd
+#define CHERI_SCR_SSCRATCHC 0xe
+#define CHERI_SCR_SEPCC 0xf
+#define CHERI_SCR_MTCC 0x1c
+#define CHERI_SCR_MTDC 0x1d
+#define CHERI_SCR_MSCRATCHC 0x1e
+#define CHERI_SCR_MEPCC 0x1f
#endif /* RISCV_ENCODING_H */
#ifdef DECLARE_INSN
DECLARE_INSN(slli_rv32, MATCH_SLLI_RV32, MASK_SLLI_RV32)
DECLARE_INSN(hsv_h, MATCH_HSV_H, MASK_HSV_H)
DECLARE_INSN(hsv_w, MATCH_HSV_W, MASK_HSV_W)
DECLARE_INSN(hsv_d, MATCH_HSV_D, MASK_HSV_D)
+DECLARE_INSN(cgetperm, MATCH_CGETPERM, MASK_CGETPERM)
+DECLARE_INSN(cgettype, MATCH_CGETTYPE, MASK_CGETTYPE)
+DECLARE_INSN(cgetbase, MATCH_CGETBASE, MASK_CGETBASE)
+DECLARE_INSN(cgetlen, MATCH_CGETLEN, MASK_CGETLEN)
+DECLARE_INSN(cgettag, MATCH_CGETTAG, MASK_CGETTAG)
+DECLARE_INSN(cgetsealed, MATCH_CGETSEALED, MASK_CGETSEALED)
+DECLARE_INSN(cgetoffset, MATCH_CGETOFFSET, MASK_CGETOFFSET)
+DECLARE_INSN(cgetflags, MATCH_CGETFLAGS, MASK_CGETFLAGS)
+DECLARE_INSN(cgetaddr, MATCH_CGETADDR, MASK_CGETADDR)
+DECLARE_INSN(cseal, MATCH_CSEAL, MASK_CSEAL)
+DECLARE_INSN(csealentry, MATCH_CSEALENTRY, MASK_CSEALENTRY)
+DECLARE_INSN(cunseal, MATCH_CUNSEAL, MASK_CUNSEAL)
+DECLARE_INSN(candperm, MATCH_CANDPERM, MASK_CANDPERM)
+DECLARE_INSN(csetflags, MATCH_CSETFLAGS, MASK_CSETFLAGS)
+DECLARE_INSN(csetoffset, MATCH_CSETOFFSET, MASK_CSETOFFSET)
+DECLARE_INSN(csetaddr, MATCH_CSETADDR, MASK_CSETADDR)
+DECLARE_INSN(cincoffset, MATCH_CINCOFFSET, MASK_CINCOFFSET)
+DECLARE_INSN(cincoffsetimmediate, MATCH_CINCOFFSETIMMEDIATE, MASK_CINCOFFSETIMMEDIATE)
+DECLARE_INSN(csetbounds, MATCH_CSETBOUNDS, MASK_CSETBOUNDS)
+DECLARE_INSN(csetboundsexact, MATCH_CSETBOUNDSEXACT, MASK_CSETBOUNDSEXACT)
+DECLARE_INSN(csetboundsimmediate, MATCH_CSETBOUNDSIMMEDIATE, MASK_CSETBOUNDSIMMEDIATE)
+DECLARE_INSN(ccleartag, MATCH_CCLEARTAG, MASK_CCLEARTAG)
+DECLARE_INSN(cbuildcap, MATCH_CBUILDCAP, MASK_CBUILDCAP)
+DECLARE_INSN(ccopytype, MATCH_CCOPYTYPE, MASK_CCOPYTYPE)
+DECLARE_INSN(ccseal, MATCH_CCSEAL, MASK_CCSEAL)
+DECLARE_INSN(ctoptr, MATCH_CTOPTR, MASK_CTOPTR)
+DECLARE_INSN(cfromptr, MATCH_CFROMPTR, MASK_CFROMPTR)
+DECLARE_INSN(csub, MATCH_CSUB, MASK_CSUB)
+DECLARE_INSN(cmove, MATCH_CMOVE, MASK_CMOVE)
+DECLARE_INSN(ctestsubset, MATCH_CTESTSUBSET, MASK_CTESTSUBSET)
+DECLARE_INSN(csetequalexact, MATCH_CSETEQUALEXACT, MASK_CSETEQUALEXACT)
+DECLARE_INSN(jalr_cap, MATCH_JALR_CAP, MASK_JALR_CAP)
+DECLARE_INSN(cinvoke, MATCH_CINVOKE, MASK_CINVOKE)
+DECLARE_INSN(cspecialrw, MATCH_CSPECIALRW, MASK_CSPECIALRW)
+DECLARE_INSN(croundrepresentablelength, MATCH_CROUNDREPRESENTABLELENGTH, MASK_CROUNDREPRESENTABLELENGTH)
+DECLARE_INSN(crepresentablealignmentmask, MATCH_CREPRESENTABLEALIGNMENTMASK, MASK_CREPRESENTABLEALIGNMENTMASK)
+DECLARE_INSN(lb_ddc, MATCH_LB_DDC, MASK_LB_DDC)
+DECLARE_INSN(lh_ddc, MATCH_LH_DDC, MASK_LH_DDC)
+DECLARE_INSN(lw_ddc, MATCH_LW_DDC, MASK_LW_DDC)
+DECLARE_INSN(ld_ddc, MATCH_LD_DDC, MASK_LD_DDC)
+DECLARE_INSN(lq_ddc, MATCH_LQ_DDC, MASK_LQ_DDC)
+DECLARE_INSN(lbu_ddc, MATCH_LBU_DDC, MASK_LBU_DDC)
+DECLARE_INSN(lhu_ddc, MATCH_LHU_DDC, MASK_LHU_DDC)
+DECLARE_INSN(lwu_ddc, MATCH_LWU_DDC, MASK_LWU_DDC)
+DECLARE_INSN(ldu_ddc, MATCH_LDU_DDC, MASK_LDU_DDC)
+DECLARE_INSN(lb_cap, MATCH_LB_CAP, MASK_LB_CAP)
+DECLARE_INSN(lh_cap, MATCH_LH_CAP, MASK_LH_CAP)
+DECLARE_INSN(lw_cap, MATCH_LW_CAP, MASK_LW_CAP)
+DECLARE_INSN(ld_cap, MATCH_LD_CAP, MASK_LD_CAP)
+DECLARE_INSN(lq_cap, MATCH_LQ_CAP, MASK_LQ_CAP)
+DECLARE_INSN(lbu_cap, MATCH_LBU_CAP, MASK_LBU_CAP)
+DECLARE_INSN(lhu_cap, MATCH_LHU_CAP, MASK_LHU_CAP)
+DECLARE_INSN(lwu_cap, MATCH_LWU_CAP, MASK_LWU_CAP)
+DECLARE_INSN(ldu_cap, MATCH_LDU_CAP, MASK_LDU_CAP)
+DECLARE_INSN(lr_b_ddc, MATCH_LR_B_DDC, MASK_LR_B_DDC)
+DECLARE_INSN(lr_h_ddc, MATCH_LR_H_DDC, MASK_LR_H_DDC)
+DECLARE_INSN(lr_w_ddc, MATCH_LR_W_DDC, MASK_LR_W_DDC)
+DECLARE_INSN(lr_d_ddc, MATCH_LR_D_DDC, MASK_LR_D_DDC)
+DECLARE_INSN(lr_q_ddc, MATCH_LR_Q_DDC, MASK_LR_Q_DDC)
+DECLARE_INSN(lr_b_cap, MATCH_LR_B_CAP, MASK_LR_B_CAP)
+DECLARE_INSN(lr_h_cap, MATCH_LR_H_CAP, MASK_LR_H_CAP)
+DECLARE_INSN(lr_w_cap, MATCH_LR_W_CAP, MASK_LR_W_CAP)
+DECLARE_INSN(lr_d_cap, MATCH_LR_D_CAP, MASK_LR_D_CAP)
+DECLARE_INSN(lr_q_cap, MATCH_LR_Q_CAP, MASK_LR_Q_CAP)
+DECLARE_INSN(sb_ddc, MATCH_SB_DDC, MASK_SB_DDC)
+DECLARE_INSN(sh_ddc, MATCH_SH_DDC, MASK_SH_DDC)
+DECLARE_INSN(sw_ddc, MATCH_SW_DDC, MASK_SW_DDC)
+DECLARE_INSN(sd_ddc, MATCH_SD_DDC, MASK_SD_DDC)
+DECLARE_INSN(sq_ddc, MATCH_SQ_DDC, MASK_SQ_DDC)
+DECLARE_INSN(sb_cap, MATCH_SB_CAP, MASK_SB_CAP)
+DECLARE_INSN(sh_cap, MATCH_SH_CAP, MASK_SH_CAP)
+DECLARE_INSN(sw_cap, MATCH_SW_CAP, MASK_SW_CAP)
+DECLARE_INSN(sd_cap, MATCH_SD_CAP, MASK_SD_CAP)
+DECLARE_INSN(sq_cap, MATCH_SQ_CAP, MASK_SQ_CAP)
+DECLARE_INSN(sc_b_ddc, MATCH_SC_B_DDC, MASK_SC_B_DDC)
+DECLARE_INSN(sc_h_ddc, MATCH_SC_H_DDC, MASK_SC_H_DDC)
+DECLARE_INSN(sc_w_ddc, MATCH_SC_W_DDC, MASK_SC_W_DDC)
+DECLARE_INSN(sc_d_ddc, MATCH_SC_D_DDC, MASK_SC_D_DDC)
+DECLARE_INSN(sc_q_ddc, MATCH_SC_Q_DDC, MASK_SC_Q_DDC)
+DECLARE_INSN(sc_b_cap, MATCH_SC_B_CAP, MASK_SC_B_CAP)
+DECLARE_INSN(sc_h_cap, MATCH_SC_H_CAP, MASK_SC_H_CAP)
+DECLARE_INSN(sc_w_cap, MATCH_SC_W_CAP, MASK_SC_W_CAP)
+DECLARE_INSN(sc_d_cap, MATCH_SC_D_CAP, MASK_SC_D_CAP)
+DECLARE_INSN(sc_q_cap, MATCH_SC_Q_CAP, MASK_SC_Q_CAP)
+DECLARE_INSN(lq, MATCH_LQ, MASK_LQ)
+DECLARE_INSN(sq, MATCH_SQ, MASK_SQ)
+DECLARE_INSN(lr_b, MATCH_LR_B, MASK_LR_B)
+DECLARE_INSN(sc_b, MATCH_SC_B, MASK_SC_B)
+DECLARE_INSN(lr_h, MATCH_LR_H, MASK_LR_H)
+DECLARE_INSN(sc_h, MATCH_SC_H, MASK_SC_H)
+DECLARE_INSN(lr_q, MATCH_LR_Q, MASK_LR_Q)
+DECLARE_INSN(sc_q, MATCH_SC_Q, MASK_SC_Q)
+DECLARE_INSN(amoswap_q, MATCH_AMOSWAP_Q, MASK_AMOSWAP_Q)
#endif /* DECLARE_INSN */
#ifdef DECLARE_CSR
/* Unprivileged Counter/Timers CSRs. */
DECLARE_CSR_ALIAS(textra32, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
DECLARE_CSR_ALIAS(textra64, CSR_TDATA3, CSR_CLASS_DEBUG, PRIV_SPEC_CLASS_NONE, PRIV_SPEC_CLASS_NONE)
#endif /* DECLARE_CSR_ALIAS */
+#ifdef DECLARE_CHERI_SCR
+DECLARE_CHERI_SCR(pcc, CHERI_SCR_PCC)
+DECLARE_CHERI_SCR(ddc, CHERI_SCR_DDC)
+DECLARE_CHERI_SCR(utcc, CHERI_SCR_UTCC)
+DECLARE_CHERI_SCR(utdc, CHERI_SCR_UTDC)
+DECLARE_CHERI_SCR(uscratchc, CHERI_SCR_USCRATCHC)
+DECLARE_CHERI_SCR(uepcc, CHERI_SCR_UEPCC)
+DECLARE_CHERI_SCR(stcc, CHERI_SCR_STCC)
+DECLARE_CHERI_SCR(stdc, CHERI_SCR_STDC)
+DECLARE_CHERI_SCR(sscratchc, CHERI_SCR_SSCRATCHC)
+DECLARE_CHERI_SCR(sepcc, CHERI_SCR_SEPCC)
+DECLARE_CHERI_SCR(mtcc, CHERI_SCR_MTCC)
+DECLARE_CHERI_SCR(mtdc, CHERI_SCR_MTDC)
+DECLARE_CHERI_SCR(mscratchc, CHERI_SCR_MSCRATCHC)
+DECLARE_CHERI_SCR(mepcc, CHERI_SCR_MEPCC)
+#endif
/* RISC-V opcode list
Copyright (C) 2011-2022 Free Software Foundation, Inc.
+ Copyright (c) 2018 Hesham Almatary <Hesham.Almatary@cl.cam.ac.uk>
+ All rights reserved.
+
+ This software was, in part, developed by SRI International and the
+ University of Cambridge Computer Laboratory (Department of Computer
+ Science and Technology) under DARPA contract HR0011-18-C-0016
+ ("ECATS"), as part of the DARPA SSITH research programme.
Contributed by Andrew Waterman (andrew@sifive.com).
Based on MIPS target.
"fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11"
};
+const char * const riscv_gpcr_names_numeric[NGPCR] = {
+ "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7",
+ "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c15",
+ "c16", "c17", "c18", "c19", "c20", "c21", "c22", "c23",
+ "c24", "c25", "c26", "c27", "c28", "c29", "c30", "c31"
+};
+
+const char * const riscv_gpcr_names_abi[NGPCR] = {
+ "cnull", "cra", "csp", "cgp", "ctp", "ct0", "ct1", "ct2",
+ "cs0", "cs1", "ca0", "ca1", "ca2", "ca3", "ca4", "ca5",
+ "ca6", "ca7", "cs2", "cs3", "cs4", "cs5", "cs6", "cs7",
+ "cs8", "cs9", "cs10", "cs11", "ct3", "ct4", "ct5", "ct6"
+};
+
/* RVV registers. */
const char * const riscv_vecr_names_numeric[NVECR] =
{
#define MASK_VS2 (OP_MASK_VS2 << OP_SH_VS2)
#define MASK_VMASK (OP_MASK_VMASK << OP_SH_VMASK)
+/* CHERI */
+#define MASK_CS1 (OP_MASK_RS1 << OP_SH_RS1)
+#define MASK_CS2 (OP_MASK_RS2 << OP_SH_RS2)
+#define MASK_CD (OP_MASK_RD << OP_SH_RD)
+
static int
match_opcode (const struct riscv_opcode *op, insn_t insn)
{
{"hsv.w", 0, INSN_CLASS_I, "t,0(s)", MATCH_HSV_W, MASK_HSV_W, match_opcode, INSN_DREF|INSN_4_BYTE },
{"hsv.d", 64, INSN_CLASS_I, "t,0(s)", MATCH_HSV_D, MASK_HSV_D, match_opcode, INSN_DREF|INSN_8_BYTE },
+/* CHERI */
+
+/* Capability-Inspection Instructions */
+{"cgetperm", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETPERM, MASK_CGETPERM, match_opcode, 0},
+{"cgetype", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETTYPE, MASK_CGETTYPE, match_opcode, 0},
+{"cgetbase", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETBASE, MASK_CGETBASE, match_opcode, 0},
+{"cgetlen", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETLEN, MASK_CGETLEN, match_opcode, 0},
+{"cgettag", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETTAG, MASK_CGETTAG, match_opcode, 0},
+{"cgetsealed", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETSEALED, MASK_CGETSEALED, match_opcode, 0},
+{"cgetoffset", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETOFFSET, MASK_CGETOFFSET, match_opcode, 0},
+{"cgetflags", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETFLAGS, MASK_CGETFLAGS, match_opcode, 0},
+{"cgetaddr", 0, INSN_CLASS_XCHERI, "d,Xs", MATCH_CGETADDR, MASK_CGETADDR, match_opcode, 0},
+
+/* Capability-Modification Instructions */
+{"cseal", 0, INSN_CLASS_XCHERI, "Xd,Xs,Xt", MATCH_CSEAL, MASK_CSEAL, match_opcode, 0},
+{"cunseal", 0, INSN_CLASS_XCHERI, "Xd,Xs,Xt", MATCH_CUNSEAL, MASK_CUNSEAL, match_opcode, 0},
+
+{"candperm", 0, INSN_CLASS_XCHERI, "Xd,Xs,t", MATCH_CANDPERM, MASK_CANDPERM, match_opcode, 0},
+{"csetflags", 0, INSN_CLASS_XCHERI, "Xd,Xs,t", MATCH_CSETFLAGS, MASK_CSETFLAGS, match_opcode, 0},
+{"csetoffset", 0, INSN_CLASS_XCHERI, "Xd,Xs,t", MATCH_CSETOFFSET, MASK_CSETOFFSET, match_opcode, 0},
+{"csetaddr", 0, INSN_CLASS_XCHERI, "Xd,Xs,t", MATCH_CSETADDR, MASK_CSETADDR, match_opcode, 0},
+{"cincoffset", 0, INSN_CLASS_XCHERI, "Xd,Xs,t", MATCH_CINCOFFSET, MASK_CINCOFFSET, match_opcode, 0},
+{"cincoffset", 0, INSN_CLASS_XCHERI, "Xd,Xs,j", MATCH_CINCOFFSETIMMEDIATE, MASK_CINCOFFSETIMMEDIATE, match_opcode, 0},
+{"cincoffsetimm", 0, INSN_CLASS_XCHERI, "Xd,Xs,j", MATCH_CINCOFFSETIMMEDIATE, MASK_CINCOFFSETIMMEDIATE, match_opcode, INSN_ALIAS},
+{"csetbounds", 0, INSN_CLASS_XCHERI, "Xd,Xs,t", MATCH_CSETBOUNDS, MASK_CSETBOUNDS, match_opcode, 0},
+{"csetbounds", 0, INSN_CLASS_XCHERI, "Xd,Xs,j", MATCH_CSETBOUNDSIMMEDIATE, MASK_CSETBOUNDSIMMEDIATE, match_opcode, 0},
+{"csetboundsimm", 0, INSN_CLASS_XCHERI, "Xd,Xs,j", MATCH_CSETBOUNDSIMMEDIATE, MASK_CSETBOUNDSIMMEDIATE, match_opcode, INSN_ALIAS},
+{"csetboundsexact", 0, INSN_CLASS_XCHERI, "Xd,Xs,t", MATCH_CSETBOUNDSEXACT, MASK_CSETBOUNDSEXACT, match_opcode, 0},
+
+{"ccleartag", 0, INSN_CLASS_XCHERI, "Xd,Xs", MATCH_CCLEARTAG, MASK_CCLEARTAG, match_opcode, 0},
+{"cbuildcap", 0, INSN_CLASS_XCHERI, "Xd,XDs,Xt", MATCH_CBUILDCAP, MASK_CBUILDCAP, match_opcode, 0},
+{"ccopytype", 0, INSN_CLASS_XCHERI, "Xd,Xs,Xt", MATCH_CCOPYTYPE, MASK_CCOPYTYPE, match_opcode, 0},
+{"ccseal", 0, INSN_CLASS_XCHERI, "Xd,Xs,Xt", MATCH_CCSEAL, MASK_CCSEAL, match_opcode, 0},
+{"csealentry", 0, INSN_CLASS_XCHERI, "Xd,Xs", MATCH_CSEALENTRY, MASK_CSEALENTRY, match_opcode, 0},
+
+/* Pointer-Arithmetic Instructions */
+{"ctoptr", 0, INSN_CLASS_XCHERI, "d,Xs,XDt", MATCH_CTOPTR, MASK_CTOPTR, match_opcode, 0},
+{"cfromptr", 0, INSN_CLASS_XCHERI, "Xd,XDs,t", MATCH_CFROMPTR, MASK_CFROMPTR, match_opcode, 0},
+{"csub", 0, INSN_CLASS_XCHERI, "d,Xs,Xt", MATCH_CSUB, MASK_CSUB, match_opcode, 0},
+
+{"cmove", 0, INSN_CLASS_XCHERI, "Xd,Xs", MATCH_CMOVE, MASK_CMOVE, match_opcode, 0},
+
+/* Pointer-Comparison Instructions */
+{"ctestsubset", 0, INSN_CLASS_XCHERI, "d,XDs,Xt", MATCH_CTESTSUBSET, MASK_CTESTSUBSET, match_opcode, 0},
+{"cseqx", 0, INSN_CLASS_XCHERI, "d,Xs,Xt", MATCH_CSETEQUALEXACT, MASK_CSETEQUALEXACT, match_opcode, INSN_ALIAS},
+{"csetequalexact", 0, INSN_CLASS_XCHERI, "d,Xs,Xt", MATCH_CSETEQUALEXACT, MASK_CSETEQUALEXACT, match_opcode, 0},
+
+/* Control-Flow Instructions */
+{"ret.cap", 0, INSN_CLASS_XCHERI, "", MATCH_JALR_CAP | (C_CRA << OP_SH_RS1), MASK_JALR_CAP | MASK_CD | MASK_CS1, match_opcode, INSN_ALIAS|INSN_BRANCH },
+{"jr.cap", 0, INSN_CLASS_XCHERI, "Xs", MATCH_JALR_CAP, MASK_JALR_CAP | MASK_CD, match_opcode, INSN_ALIAS|INSN_BRANCH },
+{"jalr.cap", 0, INSN_CLASS_XCHERI, "Xd,Xs", MATCH_JALR_CAP, MASK_JALR_CAP, match_opcode, INSN_JSR},
+
+{"cinvoke", 0, INSN_CLASS_XCHERI, "Xs,Xt", MATCH_CINVOKE, MASK_CINVOKE, match_opcode, INSN_BRANCH},
+
+/* Special Capability Register Access Instructions */
+{"cspecialr", 0, INSN_CLASS_XCHERI, "Xd,XE", MATCH_CSPECIALRW, MASK_CSPECIALRW | MASK_RS1, match_opcode, INSN_ALIAS},
+{"cspecialw", 0, INSN_CLASS_XCHERI, "Xs,XE", MATCH_CSPECIALRW, MASK_CSPECIALRW | MASK_RD, match_opcode, INSN_ALIAS},
+{"cspecialrw", 0, INSN_CLASS_XCHERI, "Xd,Xs,XE",MATCH_CSPECIALRW, MASK_CSPECIALRW, match_opcode, 0},
+
+/* Fast Register-Clearing Instructions */
+/*
+{"cclearlo", 0, INSN_CLASS_XCHERI, "XI", MATCH_CCLEARLO, MASK_CCLEARLO, match_opcode, 0},
+{"cclearhi", 0, INSN_CLASS_XCHERI, "XI", MATCH_CCLEARHI, MASK_CCLEARHI, match_opcode, 0},
+{"fpclearlo", 0, INSN_CLASS_XCHERI, "XI", MATCH_FPCLEARLO, MASK_FPCLEARLO, match_opcode, 0},
+{"fpclearhi", 0, INSN_CLASS_XCHERI, "XI", MATCH_FPCLEARHI, MASK_FPCLEARHI, match_opcode, 0},
+*/
+
+/* Adjusting to Compressed Capability Precision Instructions */
+{"crrl", 0, INSN_CLASS_XCHERI, "d,s", MATCH_CROUNDREPRESENTABLELENGTH, MASK_CROUNDREPRESENTABLELENGTH, match_opcode, INSN_ALIAS},
+{"croundrepresentablelength", 0, INSN_CLASS_XCHERI, "d,s", MATCH_CROUNDREPRESENTABLELENGTH, MASK_CROUNDREPRESENTABLELENGTH, match_opcode, 0},
+{"cram", 0, INSN_CLASS_XCHERI, "d,s", MATCH_CREPRESENTABLEALIGNMENTMASK, MASK_CREPRESENTABLEALIGNMENTMASK, match_opcode, INSN_ALIAS},
+{"crepresentablealignmentmask", 0, INSN_CLASS_XCHERI, "d,s", MATCH_CREPRESENTABLEALIGNMENTMASK, MASK_CREPRESENTABLEALIGNMENTMASK, match_opcode, 0},
+
+/* Memory Loads with Explicit Address Type Instructions */
+{"lb.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LB_DDC, MASK_LB_DDC, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lh.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LH_DDC, MASK_LH_DDC, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lw.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LW_DDC, MASK_LW_DDC, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"ld.ddc", 64, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LD_DDC, MASK_LD_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lc.ddc", 32, INSN_CLASS_XCHERI, "Xd,0(s)", MATCH_LD_DDC, MASK_LD_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lc.ddc", 64, INSN_CLASS_XCHERI, "Xd,0(s)", MATCH_LQ_DDC, MASK_LQ_DDC, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"lbu.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LBU_DDC, MASK_LBU_DDC, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lhu.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LHU_DDC, MASK_LHU_DDC, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lwu.ddc", 64, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LWU_DDC, MASK_LWU_DDC, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"lb.cap", 0, INSN_CLASS_XCHERI, "d,0(Xs)", MATCH_LB_CAP, MASK_LB_CAP, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lh.cap", 0, INSN_CLASS_XCHERI, "d,0(Xs)", MATCH_LH_CAP, MASK_LH_CAP, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lw.cap", 0, INSN_CLASS_XCHERI, "d,0(Xs)", MATCH_LW_CAP, MASK_LW_CAP, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"ld.cap", 64, INSN_CLASS_XCHERI, "d,0(Xs)", MATCH_LD_CAP, MASK_LD_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lc.cap", 32, INSN_CLASS_XCHERI, "Xd,0(Xs)",MATCH_LD_CAP, MASK_LD_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lc.cap", 64, INSN_CLASS_XCHERI, "Xd,0(Xs)",MATCH_LQ_CAP, MASK_LQ_CAP, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"lbu.cap", 0, INSN_CLASS_XCHERI, "d,0(Xs)", MATCH_LBU_CAP, MASK_LBU_CAP, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lhu.cap", 0, INSN_CLASS_XCHERI, "d,0(Xs)", MATCH_LHU_CAP, MASK_LHU_CAP, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lwu.cap", 64, INSN_CLASS_XCHERI, "d,0(Xs)", MATCH_LWU_CAP, MASK_LWU_CAP, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"lr.b.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_B_DDC, MASK_LR_B_DDC, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lr.h.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_H_DDC, MASK_LR_H_DDC, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lr.w.ddc", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_W_DDC, MASK_LR_W_DDC, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"lr.d.ddc", 64, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_D_DDC, MASK_LR_D_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c.ddc", 32, INSN_CLASS_XCHERI, "Xd,0(s)", MATCH_LR_D_DDC, MASK_LR_D_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c.ddc", 64, INSN_CLASS_XCHERI, "Xd,0(s)", MATCH_LR_Q_DDC, MASK_LR_Q_DDC, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"lr.b.cap", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_B_CAP, MASK_LR_B_CAP, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lr.h.cap", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_H_CAP, MASK_LR_H_CAP, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lr.w.cap", 0, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_W_CAP, MASK_LR_W_CAP, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"lr.d.cap", 64, INSN_CLASS_XCHERI, "d,0(s)", MATCH_LR_D_CAP, MASK_LR_D_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c.cap", 32, INSN_CLASS_XCHERI, "Xd,0(s)", MATCH_LR_D_CAP, MASK_LR_D_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c.cap", 64, INSN_CLASS_XCHERI, "Xd,0(s)", MATCH_LR_Q_CAP, MASK_LR_Q_CAP, match_opcode, INSN_DREF|INSN_16_BYTE},
+
+/* Memory Stores with Explicit Address Type Instructions */
+{"sb.ddc", 0, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SB_DDC, MASK_SB_DDC, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sh.ddc", 0, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SH_DDC, MASK_SH_DDC, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sw.ddc", 0, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SW_DDC, MASK_SW_DDC, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"sd.ddc", 64, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SD_DDC, MASK_SD_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.ddc", 32, INSN_CLASS_XCHERI, "Xt,0(s)", MATCH_SD_DDC, MASK_SD_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.ddc", 64, INSN_CLASS_XCHERI, "Xt,0(s)", MATCH_SQ_DDC, MASK_SQ_DDC, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sb.cap", 0, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SB_CAP, MASK_SB_CAP, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sh.cap", 0, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SH_CAP, MASK_SH_CAP, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sw.cap", 0, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SW_CAP, MASK_SW_CAP, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"sd.cap", 64, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SD_CAP, MASK_SD_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.cap", 32, INSN_CLASS_XCHERI, "Xt,0(Xs)",MATCH_SD_CAP, MASK_SD_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.cap", 64, INSN_CLASS_XCHERI, "Xt,0(Xs)",MATCH_SQ_CAP, MASK_SQ_CAP, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sc.b.ddc", 0, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SC_B_DDC, MASK_SC_B_DDC, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sc.h.ddc", 0, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SC_H_DDC, MASK_SC_H_DDC, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sc.w.ddc", 0, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SC_W_DDC, MASK_SC_W_DDC, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"sc.d.ddc", 64, INSN_CLASS_XCHERI, "t,0(s)", MATCH_SC_D_DDC, MASK_SC_D_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c.ddc", 32, INSN_CLASS_XCHERI, "Xt,0(s)", MATCH_SC_D_DDC, MASK_SC_D_DDC, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c.ddc", 64, INSN_CLASS_XCHERI, "Xt,0(s)", MATCH_SC_Q_DDC, MASK_SC_Q_DDC, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sc.b.cap", 0, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SC_B_CAP, MASK_SC_B_CAP, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sc.h.cap", 0, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SC_H_CAP, MASK_SC_H_CAP, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sc.w.cap", 0, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SC_W_CAP, MASK_SC_W_CAP, match_opcode, INSN_DREF|INSN_4_BYTE},
+{"sc.d.cap", 64, INSN_CLASS_XCHERI, "t,0(Xs)", MATCH_SC_D_CAP, MASK_SC_D_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c.cap", 32, INSN_CLASS_XCHERI, "Xt,0(Xs)",MATCH_SC_D_CAP, MASK_SC_D_CAP, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c.cap", 64, INSN_CLASS_XCHERI, "Xt,0(Xs)",MATCH_SC_Q_CAP, MASK_SC_Q_CAP, match_opcode, INSN_DREF|INSN_16_BYTE},
+
+/* Memory-Access Instructions */
+{"lc", 32, INSN_CLASS_XCHERI, "Xd,o(s)", MATCH_LD, MASK_LD, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lc", 64, INSN_CLASS_XCHERI, "Xd,o(s)", MATCH_LQ, MASK_LQ, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sc", 32, INSN_CLASS_XCHERI, "Xt,q(s)", MATCH_SD, MASK_SD, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc", 64, INSN_CLASS_XCHERI, "Xt,q(s)", MATCH_SQ, MASK_SQ, match_opcode, INSN_DREF|INSN_16_BYTE},
+
+/* Atomic Memory-Access Instructions */
+{"lr.b", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_B, MASK_LR_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sc.b", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_B, MASK_SC_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lr.b.aq", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_B | MASK_AQ, MASK_LR_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sc.b.aq", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_B | MASK_AQ, MASK_SC_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lr.b.rl", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_B | MASK_RL, MASK_LR_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sc.b.rl", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_B | MASK_RL, MASK_SC_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lr.b.aqrl", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_B | MASK_AQRL, MASK_LR_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"sc.b.aqrl", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_B | MASK_AQRL, MASK_SC_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_1_BYTE},
+{"lr.h", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_B, MASK_LR_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sc.h", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_B, MASK_SC_B | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lr.h.aq", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_H | MASK_AQ, MASK_LR_H | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sc.h.aq", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_H | MASK_AQ, MASK_SC_H | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lr.h.rl", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_H | MASK_RL, MASK_LR_H | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sc.h.rl", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_H | MASK_RL, MASK_SC_H | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lr.h.aqrl", 0, INSN_CLASS_XCHERI_AND_A, "d,0(s)", MATCH_LR_H | MASK_AQRL, MASK_LR_H | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"sc.h.aqrl", 0, INSN_CLASS_XCHERI_AND_A, "d,t,0(s)", MATCH_SC_H | MASK_AQRL, MASK_SC_H | MASK_AQRL, match_opcode, INSN_DREF|INSN_2_BYTE},
+{"lr.c", 32, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_D, MASK_LR_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c", 64, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_Q, MASK_LR_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sc.c", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_D, MASK_SC_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_Q, MASK_SC_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"lr.c.aq", 32, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_D | MASK_AQ, MASK_LR_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c.aq", 64, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_Q | MASK_AQ, MASK_LR_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sc.c.aq", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_D | MASK_AQ, MASK_SC_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c.aq", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_Q | MASK_AQ, MASK_SC_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"lr.c.rl", 32, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_D | MASK_RL, MASK_LR_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c.rl", 64, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_Q | MASK_RL, MASK_LR_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sc.c.rl", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_D | MASK_RL, MASK_SC_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c.rl", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_Q | MASK_RL, MASK_SC_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"lr.c.aqrl", 32, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_D | MASK_AQRL, MASK_LR_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"lr.c.aqrl", 64, INSN_CLASS_XCHERI_AND_A, "Xd,0(s)", MATCH_LR_Q | MASK_AQRL, MASK_LR_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"sc.c.aqrl", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_D | MASK_AQRL, MASK_SC_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE},
+{"sc.c.aqrl", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_SC_Q | MASK_AQRL, MASK_SC_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE},
+{"amoswap.c", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_D, MASK_AMOSWAP_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE },
+{"amoswap.c", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_Q, MASK_AMOSWAP_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE },
+{"amoswap.c.aq", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_D | MASK_AQ, MASK_AMOSWAP_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE },
+{"amoswap.c.aq", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_Q | MASK_AQ, MASK_AMOSWAP_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE },
+{"amoswap.c.rl", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_D | MASK_RL, MASK_AMOSWAP_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE },
+{"amoswap.c.rl", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_Q | MASK_RL, MASK_AMOSWAP_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE },
+{"amoswap.c.aqrl", 32, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_D | MASK_AQRL, MASK_AMOSWAP_D | MASK_AQRL, match_opcode, INSN_DREF|INSN_8_BYTE },
+{"amoswap.c.aqrl", 64, INSN_CLASS_XCHERI_AND_A, "Xd,t,0(s)", MATCH_AMOSWAP_Q | MASK_AQRL, MASK_AMOSWAP_Q | MASK_AQRL, match_opcode, INSN_DREF|INSN_16_BYTE },
+
/* Terminate the list. */
{0, 0, INSN_CLASS_NONE, 0, 0, 0, 0, 0}
};