3 #ifndef OPENOCD_TARGET_RISCV_OPCODES_H
4 #define OPENOCD_TARGET_RISCV_OPCODES_H
16 #define MAX_GPR_NUM 31
17 #define MAX_FPR_NUM 31
18 #define MAX_VREG_NUM 31
19 #define MAX_CSR_NUM 4095
21 #define MIN_INT12 (-0x800)
22 #define MAX_INT12 0x7ff
24 #define MIN_INT13 (-0x1000)
25 #define MAX_INT13 0xfff
27 #define MIN_INT21 (-0x100000)
28 #define MAX_INT21 0xfffff
30 #define MAX_UINT5 0x1f
31 #define MAX_UINT11 0x7ff
32 #define MAX_UINT12 0xfff
34 static uint32_t
bits(uint32_t value,
unsigned int hi,
unsigned int lo)
36 return (value >> lo) & (((uint32_t)1 << (hi + 1 - lo)) - 1);
39 static uint32_t
bit(uint32_t value,
unsigned int b)
41 return (value >> b) & 1;
47 return bits(r, 4, 0) << 7;
53 return bits(r, 4, 0) << 15;
59 return bits(r, 4, 0) << 20;
63 static uint32_t
imm_i(uint32_t imm)
65 return bits(imm, 11, 0) << 20;
69 static uint32_t
imm_s(uint32_t imm)
71 return (
bits(imm, 4, 0) << 7) | (
bits(imm, 11, 5) << 25);
75 static uint32_t
imm_b(uint32_t imm)
77 return (
bit(imm, 11) << 7) | (
bits(imm, 4, 1) << 8) | (
bits(imm, 10, 5) << 25) | (
bit(imm, 12) << 31);
81 static uint32_t
imm_u(uint32_t imm)
83 return bits(imm, 31, 12) << 12;
87 static uint32_t
imm_j(uint32_t imm)
89 return (
bits(imm, 19, 12) << 12) | (
bit(imm, 11) << 20) | (
bits(imm, 10, 1) << 21) | (
bit(imm, 20) << 31);
93 static uint32_t
jal(
unsigned int rd, int32_t imm)
97 assert((imm & 1) == 0);
103 static uint32_t
csrsi(
unsigned int csr, uint8_t imm)
112 static uint32_t
sw(
unsigned int src,
unsigned int base, int16_t
offset)
122 static uint32_t
sd(
unsigned int src,
unsigned int base, int16_t
offset)
132 static uint32_t
sh(
unsigned int src,
unsigned int base, int16_t
offset)
142 static uint32_t
sb(
unsigned int src,
unsigned int base, int16_t
offset)
152 static uint32_t
ld(
unsigned int rd,
unsigned int base, int16_t
offset)
162 static uint32_t
lw(
unsigned int rd,
unsigned int base, int16_t
offset)
172 static uint32_t
lh(
unsigned int rd,
unsigned int base, int16_t
offset)
182 static uint32_t
lb(
unsigned int rd,
unsigned int base, int16_t
offset)
200 static uint32_t
addi(
unsigned int dest,
unsigned int src, int16_t imm)
__attribute__ ((unused));
201 static uint32_t
addi(
unsigned int dest,
unsigned int src, int16_t imm)
211 static uint32_t
csrr(
unsigned int rd,
unsigned int csr)
220 static uint32_t
csrrs(
unsigned int rd,
unsigned int rs,
unsigned int csr)
230 static uint32_t
csrrw(
unsigned int rd,
unsigned int rs,
unsigned int csr)
240 static uint32_t
csrrci(
unsigned int rd, uint8_t zimm,
unsigned int csr)
250 static uint32_t
csrrsi(
unsigned int rd, uint8_t zimm,
unsigned int csr)
260 static uint32_t
fsw(
unsigned int src,
unsigned int base, int16_t
offset)
270 static uint32_t
fsd(
unsigned int src,
unsigned int base, int16_t
offset)
280 static uint32_t
flw(
unsigned int dest,
unsigned int base, int16_t
offset)
290 static uint32_t
fld(
unsigned int dest,
unsigned int base, int16_t
offset)
300 static uint32_t
fmv_x_w(
unsigned int dest,
unsigned int src)
309 static uint32_t
fmv_x_d(
unsigned int dest,
unsigned int src)
318 static uint32_t
fmv_w_x(
unsigned int dest,
unsigned int src)
327 static uint32_t
fmv_d_x(
unsigned int dest,
unsigned int src)
355 static uint32_t
lui(
unsigned int dest, uint32_t imm)
__attribute__ ((unused));
356 static uint32_t
lui(
unsigned int dest, uint32_t imm)
359 assert(
bits(imm, 11, 0) == 0);
364 static uint32_t
xori(
unsigned int dest,
unsigned int src, int16_t imm)
__attribute__ ((unused));
365 static uint32_t
xori(
unsigned int dest,
unsigned int src, int16_t imm)
374 static uint32_t
srli(
unsigned int dest,
unsigned int src, uint8_t shamt)
__attribute__ ((unused));
375 static uint32_t
srli(
unsigned int dest,
unsigned int src, uint8_t shamt)
392 static uint32_t
auipc(
unsigned int dest)
399 static uint32_t
vsetvli(
unsigned int dest,
unsigned int src, uint16_t vtypei)
__attribute__((unused));
400 static uint32_t
vsetvli(
unsigned int dest,
unsigned int src, uint16_t vtypei)
409 static uint32_t
vsetvl(
unsigned int rd,
unsigned int rs1,
unsigned int rs2)
__attribute__((unused));
410 static uint32_t
vsetvl(
unsigned int rd,
unsigned int rs1,
unsigned int rs2)
420 static uint32_t
vmv_x_s(
unsigned int rd,
unsigned int vs2)
429 static uint32_t
vmv_s_x(
unsigned int vd,
unsigned int rs2)
440 unsigned int rs1,
bool vm)
#define MATCH_VSLIDE1DOWN_VX
static uint32_t inst_rd(uint32_t r) __attribute__((unused))
static uint32_t fence_rw_rw(void) __attribute__((unused))
static uint32_t imm_i(uint32_t imm) __attribute__((unused))
static uint32_t bits(uint32_t value, unsigned int hi, unsigned int lo)
static uint32_t csrrw(unsigned int rd, unsigned int rs, unsigned int csr) __attribute__((unused))
static uint32_t bit(uint32_t value, unsigned int b)
static uint32_t sb(unsigned int src, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t fmv_d_x(unsigned int dest, unsigned int src) __attribute__((unused))
static uint32_t wfi(void) __attribute__((unused))
static uint32_t sd(unsigned int src, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t csrw(unsigned int source, unsigned int csr) __attribute__((unused))
static uint32_t csrrs(unsigned int rd, unsigned int rs, unsigned int csr) __attribute__((unused))
static uint32_t inst_rs2(uint32_t r) __attribute__((unused))
static uint32_t ld(unsigned int rd, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t fence_i(void) __attribute__((unused))
static uint32_t fsw(unsigned int src, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t lw(unsigned int rd, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t lh(unsigned int rd, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t imm_s(uint32_t imm) __attribute__((unused))
static uint32_t csrr(unsigned int rd, unsigned int csr) __attribute__((unused))
static uint32_t imm_b(uint32_t imm) __attribute__((unused))
static uint32_t ebreak(void) __attribute__((unused))
static uint32_t csrsi(unsigned int csr, uint8_t imm) __attribute__((unused))
static uint32_t vsetvl(unsigned int rd, unsigned int rs1, unsigned int rs2) __attribute__((unused))
static uint32_t flw(unsigned int dest, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t vmv_s_x(unsigned int vd, unsigned int rs2) __attribute__((unused))
static uint32_t lui(unsigned int dest, uint32_t imm) __attribute__((unused))
static uint32_t vmv_x_s(unsigned int rd, unsigned int vs2) __attribute__((unused))
static uint32_t fsd(unsigned int src, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t srli(unsigned int dest, unsigned int src, uint8_t shamt) __attribute__((unused))
static uint32_t fmv_x_w(unsigned int dest, unsigned int src) __attribute__((unused))
static uint32_t fmv_w_x(unsigned int dest, unsigned int src) __attribute__((unused))
static uint32_t jal(unsigned int rd, int32_t imm) __attribute__((unused))
static uint32_t inst_rs1(uint32_t r) __attribute__((unused))
static uint32_t vslide1down_vx(unsigned int vd, unsigned int vs2, unsigned int rs1, bool vm) __attribute__((unused))
static uint32_t csrrsi(unsigned int rd, uint8_t zimm, unsigned int csr) __attribute__((unused))
static uint32_t imm_j(uint32_t imm) __attribute__((unused))
static uint32_t xori(unsigned int dest, unsigned int src, int16_t imm) __attribute__((unused))
static uint32_t csrrci(unsigned int rd, uint8_t zimm, unsigned int csr) __attribute__((unused))
static uint32_t sh(unsigned int src, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t addi(unsigned int dest, unsigned int src, int16_t imm) __attribute__((unused))
static uint32_t auipc(unsigned int dest) __attribute__((unused))
static uint32_t sw(unsigned int src, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t ebreak_c(void) __attribute__((unused))
static uint32_t lb(unsigned int rd, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t fmv_x_d(unsigned int dest, unsigned int src) __attribute__((unused))
static uint32_t imm_u(uint32_t imm) __attribute__((unused))
static uint32_t fld(unsigned int dest, unsigned int base, int16_t offset) __attribute__((unused))
static uint32_t vsetvli(unsigned int dest, unsigned int src, uint16_t vtypei) __attribute__((unused))
struct qn908x_flash_bank __attribute__