-
Notifications
You must be signed in to change notification settings - Fork 77
Description
Several projects utilize encoding.h header provided by riscv-opcodes. These projects can benefit from using the header provided from UDB containing up to date information. These projects include:
OpenOCD: https://github.com/openocd-org/openocd/blob/master/src/target/riscv/encoding.h
Spike: https://github.com/riscv-software-src/riscv-isa-sim/blob/master/riscv/encoding.h
The header can be generated using the command ./do gen:c_header. Summary of the following information:
- Hardcoded information present as a seperate header in riscv-opcodes
- Missing causes in
DECLARE_CAUSEor have slightly different naming. Ex:CAUSE_DOUBLE_TRAPis not present in current generator - Missing CSRs. Ex:
DECLARE_CSR(dscratch0, CSR_DSCRATCH0)is not present - Missing instruction declarations. Ex:
DECLARE_INSN(add_uw, ...)
By filling these gaps, the C header generator is a viable option for the above mentioned projects and possibly others. @AFOliveira
List of Missing Information
Missing CSR entries
- Many CSRs are directly present in the header
encoding.hin riscv-opcodes, which are not part of the generated header. - The 'High' bit CSRs are present with
_RV32suffix, so there is a naming difference to the ones present in riscv-opcodes. Ex:CSR_MHPMCOUNTER10His present asCSR_MHPMCOUNTER10H_RV32. - Excluding the ones in
encoding.h, the following are missing:
List
- CSR_DSCRATCH0
- CSR_DSCRATCH1
- CSR_HGEIE
- CSR_HGEIP
- CSR_HIDELEG
- CSR_HIDELEGH
- CSR_HIE
- CSR_HIP
- CSR_MCTRCTL
- CSR_HVICTL
- CSR_HVIEN
- CSR_HVIENH
- CSR_HVIP
- CSR_HVIPH
- CSR_HVIPRIO1
- CSR_HVIPRIO1H
- CSR_HVIPRIO2
- CSR_HVIPRIO2H
- The following CSRs are missing and in the form
MASK_*orMATCH_*:
List
- MASK_ADD_UW
- MASK_ANDN
- MASK_BEQI
- MASK_BNEI
- MASK_CLMUL
- MASK_CLMULH
- MASK_CM_JALT
- MASK_C_MOP_1
- MASK_C_MOP_11
- MASK_C_MOP_13
- MASK_C_MOP_15
- MASK_C_MOP_3
- MASK_C_MOP_5
- MASK_C_MOP_7
- MASK_C_MOP_9
- MASK_C_SSPOPCHK_X5
- MASK_C_SSPUSH_X1
- MASK_GORCI
- MASK_GREVI
- MASK_MOP_RR_0
- MASK_MOP_RR_1
- MASK_MOP_RR_2
- MASK_MOP_RR_3
- MASK_MOP_RR_4
- MASK_MOP_RR_5
- MASK_MOP_RR_6
- MASK_MOP_RR_7
- MASK_MOP_R_0
- MASK_MOP_R_1
- MASK_MOP_R_10
- MASK_MOP_R_11
- MASK_MOP_R_12
- MASK_MOP_R_13
- MASK_MOP_R_14
- MASK_MOP_R_15
- MASK_MOP_R_16
- MASK_MOP_R_17
- MASK_MOP_R_18
- MASK_MOP_R_19
- MASK_MOP_R_2
- MASK_MOP_R_20
- MASK_MOP_R_21
- MASK_MOP_R_22
- MASK_MOP_R_23
- MASK_MOP_R_24
- MASK_MOP_R_25
- MASK_MOP_R_26
- MASK_MOP_R_27
- MASK_MOP_R_28
- MASK_MOP_R_29
- MASK_MOP_R_3
- MASK_MOP_R_30
- MASK_MOP_R_31
- MASK_MOP_R_4
- MASK_MOP_R_5
- MASK_MOP_R_6
- MASK_MOP_R_7
- MASK_MOP_R_8
- MASK_MOP_R_9
- MASK_ORN
- MASK_PAUSE
- MASK_PREFETCH_I
- MASK_PREFETCH_R
- MASK_PREFETCH_W
- MASK_ROL
- MASK_ROLW
- MASK_ROR
- MASK_RORW
- MASK_SHFLI
- MASK_UNSHFLI
- MASK_VFBDOT_VV
- MASK_VFEXT_VF2
- MASK_VFNCVTBF16_SAT_F_F_W
- MASK_VFNCVT_F_F_Q
- MASK_VFNCVT_SAT_F_F_Q
- MASK_VFQBDOT_ALT_VV
- MASK_VFQBDOT_VV
- MASK_VFQLDOT_ALT_VV
- MASK_VFQLDOT_VV
- MASK_VFWBDOT_VV
- MASK_VFWLDOT_VV
- MASK_VQBDOTS_VV
- MASK_VQBDOTU_VV
- MASK_VQDOTSU_VV
- MASK_VQDOTSU_VX
- MASK_VQDOTUS_VX
- MASK_VQDOTU_VV
- MASK_VQDOTU_VX
- MASK_VQDOT_VV
- MASK_VQDOT_VX
- MASK_VQLDOTS_VV
- MASK_VQLDOTU_VV
- MASK_XNOR
- MASK_XPERM16
- MASK_XPERM32
- MATCH_ADD_UW
- MATCH_ANDN
- MATCH_BEQI
- MATCH_BNEI
- MATCH_CLMUL
- MATCH_CLMULH
- MATCH_CM_JALT
- MATCH_C_MOP_1
- MATCH_C_MOP_11
- MATCH_C_MOP_13
- MATCH_C_MOP_15
- MATCH_C_MOP_3
- MATCH_C_MOP_5
- MATCH_C_MOP_7
- MATCH_C_MOP_9
- MATCH_C_SSPOPCHK_X5
- MATCH_C_SSPUSH_X1
- MATCH_GORCI
- MATCH_GREVI
- MATCH_MOP_RR_0
- MATCH_MOP_RR_1
- MATCH_MOP_RR_2
- MATCH_MOP_RR_3
- MATCH_MOP_RR_4
- MATCH_MOP_RR_5
- MATCH_MOP_RR_6
- MATCH_MOP_RR_7
- MATCH_MOP_R_0
- MATCH_MOP_R_1
- MATCH_MOP_R_10
- MATCH_MOP_R_11
- MATCH_MOP_R_12
- MATCH_MOP_R_13
- MATCH_MOP_R_14
- MATCH_MOP_R_15
- MATCH_MOP_R_16
- MATCH_MOP_R_17
- MATCH_MOP_R_18
- MATCH_MOP_R_19
- MATCH_MOP_R_2
- MATCH_MOP_R_20
- MATCH_MOP_R_21
- MATCH_MOP_R_22
- MATCH_MOP_R_23
- MATCH_MOP_R_24
- MATCH_MOP_R_25
- MATCH_MOP_R_26
- MATCH_MOP_R_27
- MATCH_MOP_R_28
- MATCH_MOP_R_29
- MATCH_MOP_R_3
- MATCH_MOP_R_30
- MATCH_MOP_R_31
- MATCH_MOP_R_4
- MATCH_MOP_R_5
- MATCH_MOP_R_6
- MATCH_MOP_R_7
- MATCH_MOP_R_8
- MATCH_MOP_R_9
- MATCH_ORN
- MATCH_PAUSE
Missing INSN_FIELD entries
Currently the generator only creates 18 INSN_FIELD entries. The following are missing:
List
- INSN_FIELD_AMOOP
- INSN_FIELD_AQ
- INSN_FIELD_AQRL
- INSN_FIELD_BIMM12HI
- INSN_FIELD_BIMM12LO
- INSN_FIELD_BS
- INSN_FIELD_C_BIMM9HI
- INSN_FIELD_C_BIMM9LO
- INSN_FIELD_C_IMM12
- INSN_FIELD_C_IMM6HI
- INSN_FIELD_C_IMM6LO
- INSN_FIELD_C_INDEX
- INSN_FIELD_C_MOP_T
- INSN_FIELD_C_NZIMM10HI
- INSN_FIELD_C_NZIMM10LO
- INSN_FIELD_C_NZIMM18HI
- INSN_FIELD_C_NZIMM18LO
- INSN_FIELD_C_NZIMM6HI
- INSN_FIELD_C_NZIMM6LO
- INSN_FIELD_C_NZUIMM10
- INSN_FIELD_C_NZUIMM5
- INSN_FIELD_C_NZUIMM6HI
- INSN_FIELD_C_NZUIMM6LO
- INSN_FIELD_C_RLIST
- INSN_FIELD_C_RS1_N0
- INSN_FIELD_C_RS2
- INSN_FIELD_C_RS2_E
- INSN_FIELD_C_RS2_N0
- INSN_FIELD_C_SPIMM
- INSN_FIELD_C_SREG1
- INSN_FIELD_C_SREG2
- INSN_FIELD_C_UIMM1
- INSN_FIELD_C_UIMM10SPHI
- INSN_FIELD_C_UIMM10SPLO
- INSN_FIELD_C_UIMM10SP_S
- INSN_FIELD_C_UIMM2
- INSN_FIELD_C_UIMM7HI
- INSN_FIELD_C_UIMM7LO
- INSN_FIELD_C_UIMM8HI
- INSN_FIELD_C_UIMM8LO
- INSN_FIELD_C_UIMM8SPHI
- INSN_FIELD_C_UIMM8SPLO
- INSN_FIELD_C_UIMM8SP_S
- INSN_FIELD_C_UIMM9HI
- INSN_FIELD_C_UIMM9LO
- INSN_FIELD_C_UIMM9SPHI
- INSN_FIELD_C_UIMM9SPLO
- INSN_FIELD_C_UIMM9SP_S
- INSN_FIELD_FM
- INSN_FIELD_FUNCT2
- INSN_FIELD_IMM12
- INSN_FIELD_IMM12HI
- INSN_FIELD_IMM12LO
- INSN_FIELD_IMM2
- INSN_FIELD_IMM20
- INSN_FIELD_IMM3
- INSN_FIELD_IMM4
- INSN_FIELD_IMM5
- INSN_FIELD_IMM6
- INSN_FIELD_JIMM20
- INSN_FIELD_MOP_RR_T_27_26
- INSN_FIELD_MOP_RR_T_30
- INSN_FIELD_MOP_R_T_21_20
- INSN_FIELD_MOP_R_T_27_26
- INSN_FIELD_MOP_R_T_30
- INSN_FIELD_NF
- INSN_FIELD_RC
- INSN_FIELD_RD_E
- INSN_FIELD_RD_N0
- INSN_FIELD_RD_N0_E
- INSN_FIELD_RD_N2
- INSN_FIELD_RD_P
- INSN_FIELD_RD_P_E
- INSN_FIELD_RD_RS1
- INSN_FIELD_RD_RS1_N0
- INSN_FIELD_RD_RS1_P
- INSN_FIELD_RL
- INSN_FIELD_RNUM
- INSN_FIELD_RS1_N0
- INSN_FIELD_RS1_P
- INSN_FIELD_RS2_E
- INSN_FIELD_RS2_EQ_RS1
- INSN_FIELD_RS2_P
- INSN_FIELD_RS2_P_E
- INSN_FIELD_RT
- INSN_FIELD_SHAMTD
- INSN_FIELD_SHAMTQ
- INSN_FIELD_SHAMTW
- INSN_FIELD_SHAMTW4
- INSN_FIELD_SIMM5
- INSN_FIELD_VD
- INSN_FIELD_VM
- INSN_FIELD_VS1
- INSN_FIELD_VS2
- INSN_FIELD_VS3
- INSN_FIELD_WD
- INSN_FIELD_ZIMM10
- INSN_FIELD_ZIMM11
- INSN_FIELD_ZIMM5
- INSN_FIELD_ZIMM6HI
- INSN_FIELD_ZIMM6LO
Missing DECLARE_INSN entries
Missing instructions in generated header:
List
- add_uw
- andn
- beqi
- bnei
- c_mop_1
- c_mop_11
- c_mop_13
- c_mop_15
- c_mop_3
- c_mop_5
- c_mop_7
- c_mop_9
- c_mop_N
- c_sspopchk_x5
- c_sspush_x1
- clmul
- clmulh
- cm_jalt
- gorci
- grevi
- mop_r_0
- mop_r_1
- mop_r_10
- mop_r_11
- mop_r_12
- mop_r_13
- mop_r_14
- mop_r_15
- mop_r_16
- mop_r_17
- mop_r_18
- mop_r_19
- mop_r_2
- mop_r_20
- mop_r_21
- mop_r_22
- mop_r_23
- mop_r_24
- mop_r_25
- mop_r_26
- mop_r_27
- mop_r_28
- mop_r_29
- mop_r_3
- mop_r_30
- mop_r_31
- mop_r_4
- mop_r_5
- mop_r_6
- mop_r_7
- mop_r_8
- mop_r_9
- mop_r_N
- mop_rr_0
- mop_rr_1
- mop_rr_2
- mop_rr_3
- mop_rr_4
- mop_rr_5
- mop_rr_6
- mop_rr_7
- mop_rr_N
- orn
- pause
- prefetch_i
- prefetch_r
- prefetch_w
- rol
- rolw
- ror
- rorw
- shfli
- unshfli
- vfbdot_vv
- vfext_vf2
- vfncvt_f_f_q
- vfncvt_sat_f_f_q
- vfncvtbf16_sat_f_f_w
- vfqbdot_alt_vv
- vfqbdot_vv
- vfqldot_alt_vv
- vfqldot_vv
- vfwbdot_vv
- vfwldot_vv
- vqbdots_vv
- vqbdotu_vv
- vqdot_vv
- vqdot_vx
- vqdotsu_vv
- vqdotsu_vx
- vqdotu_vv
- vqdotu_vx
- vqdotus_vx
- vqldots_vv
- vqldotu_vv
- xnor
- xperm16
- xperm32
Missing DECLARE_CAUSE entries
There are 22 DECLARE_CAUSE entries in the riscv-opcodes encoding header and 20 in the one generated by the UDB generator. Some of the names are different in UDB but refer to the same cause, so it is better to check these manually.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status