Hermes/Dyforge is a program written in c++ allows you to inject a dll that can analyze all processes in a program, can be used for mod and reverse engeneering
| 1 | #ifndef CAPSTONE_RISCV_H |
| 2 | #define CAPSTONE_RISCV_H |
| 3 | |
| 4 | /* Capstone Disassembly Engine */ |
| 5 | /* RISC-V Backend By Rodrigo Cortes Porto <porto703@gmail.com> & |
| 6 | Shawn Chang <citypw@gmail.com>, HardenedLinux@2018 */ |
| 7 | |
| 8 | #ifdef __cplusplus |
| 9 | extern "C" { |
| 10 | #endif |
| 11 | |
| 12 | #if !defined(_MSC_VER) || !defined(_KERNEL_MODE) |
| 13 | #include <stdint.h> |
| 14 | #endif |
| 15 | |
| 16 | #include "platform.h" |
| 17 | #include "cs_operand.h" |
| 18 | |
| 19 | // GCC MIPS toolchain has a default macro called "mips" which breaks |
| 20 | // compilation |
| 21 | //#undef riscv |
| 22 | |
| 23 | #ifdef _MSC_VER |
| 24 | #pragma warning(disable:4201) |
| 25 | #endif |
| 26 | |
| 27 | //> Operand type for instruction's operands |
| 28 | typedef enum riscv_op_type { |
| 29 | RISCV_OP_INVALID = CS_OP_INVALID, // = CS_OP_INVALID (Uninitialized). |
| 30 | RISCV_OP_REG = CS_OP_REG, // = CS_OP_REG (Register operand). |
| 31 | RISCV_OP_IMM = CS_OP_IMM, // = CS_OP_IMM (Immediate operand). |
| 32 | RISCV_OP_MEM = CS_OP_MEM, // = CS_OP_MEM (Memory operand). |
| 33 | } riscv_op_type; |
| 34 | |
| 35 | // Instruction's operand referring to memory |
| 36 | // This is associated with RISCV_OP_MEM operand type above |
| 37 | typedef struct riscv_op_mem { |
| 38 | unsigned int base; // base register |
| 39 | int64_t disp; // displacement/offset value |
| 40 | } riscv_op_mem; |
| 41 | |
| 42 | // Instruction operand |
| 43 | typedef struct cs_riscv_op { |
| 44 | riscv_op_type type; // operand type |
| 45 | union { |
| 46 | unsigned int reg; // register value for REG operand |
| 47 | int64_t imm; // immediate value for IMM operand |
| 48 | riscv_op_mem mem; // base/disp value for MEM operand |
| 49 | }; |
| 50 | uint8_t access; ///< How is this operand accessed? (READ, WRITE or READ|WRITE) |
| 51 | } cs_riscv_op; |
| 52 | |
| 53 | #define NUM_RISCV_OPS 8 |
| 54 | |
| 55 | // Instruction structure |
| 56 | typedef struct cs_riscv { |
| 57 | // Does this instruction need effective address or not. |
| 58 | bool need_effective_addr; |
| 59 | // Number of operands of this instruction, |
| 60 | // or 0 when instruction has no operand. |
| 61 | uint8_t op_count; |
| 62 | cs_riscv_op operands[NUM_RISCV_OPS]; // operands for this instruction. |
| 63 | } cs_riscv; |
| 64 | |
| 65 | //> RISCV registers |
| 66 | typedef enum riscv_reg { |
| 67 | RISCV_REG_INVALID = 0, |
| 68 | //> General purpose registers |
| 69 | RISCV_REG_X0, // "zero" |
| 70 | RISCV_REG_ZERO = RISCV_REG_X0, // "zero" |
| 71 | RISCV_REG_X1, // "ra" |
| 72 | RISCV_REG_RA = RISCV_REG_X1, // "ra" |
| 73 | RISCV_REG_X2, // "sp" |
| 74 | RISCV_REG_SP = RISCV_REG_X2, // "sp" |
| 75 | RISCV_REG_X3, // "gp" |
| 76 | RISCV_REG_GP = RISCV_REG_X3, // "gp" |
| 77 | RISCV_REG_X4, // "tp" |
| 78 | RISCV_REG_TP = RISCV_REG_X4, // "tp" |
| 79 | RISCV_REG_X5, // "t0" |
| 80 | RISCV_REG_T0 = RISCV_REG_X5, // "t0" |
| 81 | RISCV_REG_X6, // "t1" |
| 82 | RISCV_REG_T1 = RISCV_REG_X6, // "t1" |
| 83 | RISCV_REG_X7, // "t2" |
| 84 | RISCV_REG_T2 = RISCV_REG_X7, // "t2" |
| 85 | RISCV_REG_X8, // "s0/fp" |
| 86 | RISCV_REG_S0 = RISCV_REG_X8, // "s0" |
| 87 | RISCV_REG_FP = RISCV_REG_X8, // "fp" |
| 88 | RISCV_REG_X9, // "s1" |
| 89 | RISCV_REG_S1 = RISCV_REG_X9, // "s1" |
| 90 | RISCV_REG_X10, // "a0" |
| 91 | RISCV_REG_A0 = RISCV_REG_X10, // "a0" |
| 92 | RISCV_REG_X11, // "a1" |
| 93 | RISCV_REG_A1 = RISCV_REG_X11, // "a1" |
| 94 | RISCV_REG_X12, // "a2" |
| 95 | RISCV_REG_A2 = RISCV_REG_X12, // "a2" |
| 96 | RISCV_REG_X13, // "a3" |
| 97 | RISCV_REG_A3 = RISCV_REG_X13, // "a3" |
| 98 | RISCV_REG_X14, // "a4" |
| 99 | RISCV_REG_A4 = RISCV_REG_X14, // "a4" |
| 100 | RISCV_REG_X15, // "a5" |
| 101 | RISCV_REG_A5 = RISCV_REG_X15, // "a5" |
| 102 | RISCV_REG_X16, // "a6" |
| 103 | RISCV_REG_A6 = RISCV_REG_X16, // "a6" |
| 104 | RISCV_REG_X17, // "a7" |
| 105 | RISCV_REG_A7 = RISCV_REG_X17, // "a7" |
| 106 | RISCV_REG_X18, // "s2" |
| 107 | RISCV_REG_S2 = RISCV_REG_X18, // "s2" |
| 108 | RISCV_REG_X19, // "s3" |
| 109 | RISCV_REG_S3 = RISCV_REG_X19, // "s3" |
| 110 | RISCV_REG_X20, // "s4" |
| 111 | RISCV_REG_S4 = RISCV_REG_X20, // "s4" |
| 112 | RISCV_REG_X21, // "s5" |
| 113 | RISCV_REG_S5 = RISCV_REG_X21, // "s5" |
| 114 | RISCV_REG_X22, // "s6" |
| 115 | RISCV_REG_S6 = RISCV_REG_X22, // "s6" |
| 116 | RISCV_REG_X23, // "s7" |
| 117 | RISCV_REG_S7 = RISCV_REG_X23, // "s7" |
| 118 | RISCV_REG_X24, // "s8" |
| 119 | RISCV_REG_S8 = RISCV_REG_X24, // "s8" |
| 120 | RISCV_REG_X25, // "s9" |
| 121 | RISCV_REG_S9 = RISCV_REG_X25, // "s9" |
| 122 | RISCV_REG_X26, // "s10" |
| 123 | RISCV_REG_S10 = RISCV_REG_X26, // "s10" |
| 124 | RISCV_REG_X27, // "s11" |
| 125 | RISCV_REG_S11 = RISCV_REG_X27, // "s11" |
| 126 | RISCV_REG_X28, // "t3" |
| 127 | RISCV_REG_T3 = RISCV_REG_X28, // "t3" |
| 128 | RISCV_REG_X29, // "t4" |
| 129 | RISCV_REG_T4 = RISCV_REG_X29, // "t4" |
| 130 | RISCV_REG_X30, // "t5" |
| 131 | RISCV_REG_T5 = RISCV_REG_X30, // "t5" |
| 132 | RISCV_REG_X31, // "t6" |
| 133 | RISCV_REG_T6 = RISCV_REG_X31, // "t6" |
| 134 | |
| 135 | //> Floating-point registers |
| 136 | RISCV_REG_F0_32, // "ft0" |
| 137 | RISCV_REG_F0_64, // "ft0" |
| 138 | RISCV_REG_F1_32, // "ft1" |
| 139 | RISCV_REG_F1_64, // "ft1" |
| 140 | RISCV_REG_F2_32, // "ft2" |
| 141 | RISCV_REG_F2_64, // "ft2" |
| 142 | RISCV_REG_F3_32, // "ft3" |
| 143 | RISCV_REG_F3_64, // "ft3" |
| 144 | RISCV_REG_F4_32, // "ft4" |
| 145 | RISCV_REG_F4_64, // "ft4" |
| 146 | RISCV_REG_F5_32, // "ft5" |
| 147 | RISCV_REG_F5_64, // "ft5" |
| 148 | RISCV_REG_F6_32, // "ft6" |
| 149 | RISCV_REG_F6_64, // "ft6" |
| 150 | RISCV_REG_F7_32, // "ft7" |
| 151 | RISCV_REG_F7_64, // "ft7" |
| 152 | RISCV_REG_F8_32, // "fs0" |
| 153 | RISCV_REG_F8_64, // "fs0" |
| 154 | RISCV_REG_F9_32, // "fs1" |
| 155 | RISCV_REG_F9_64, // "fs1" |
| 156 | RISCV_REG_F10_32, // "fa0" |
| 157 | RISCV_REG_F10_64, // "fa0" |
| 158 | RISCV_REG_F11_32, // "fa1" |
| 159 | RISCV_REG_F11_64, // "fa1" |
| 160 | RISCV_REG_F12_32, // "fa2" |
| 161 | RISCV_REG_F12_64, // "fa2" |
| 162 | RISCV_REG_F13_32, // "fa3" |
| 163 | RISCV_REG_F13_64, // "fa3" |
| 164 | RISCV_REG_F14_32, // "fa4" |
| 165 | RISCV_REG_F14_64, // "fa4" |
| 166 | RISCV_REG_F15_32, // "fa5" |
| 167 | RISCV_REG_F15_64, // "fa5" |
| 168 | RISCV_REG_F16_32, // "fa6" |
| 169 | RISCV_REG_F16_64, // "fa6" |
| 170 | RISCV_REG_F17_32, // "fa7" |
| 171 | RISCV_REG_F17_64, // "fa7" |
| 172 | RISCV_REG_F18_32, // "fs2" |
| 173 | RISCV_REG_F18_64, // "fs2" |
| 174 | RISCV_REG_F19_32, // "fs3" |
| 175 | RISCV_REG_F19_64, // "fs3" |
| 176 | RISCV_REG_F20_32, // "fs4" |
| 177 | RISCV_REG_F20_64, // "fs4" |
| 178 | RISCV_REG_F21_32, // "fs5" |
| 179 | RISCV_REG_F21_64, // "fs5" |
| 180 | RISCV_REG_F22_32, // "fs6" |
| 181 | RISCV_REG_F22_64, // "fs6" |
| 182 | RISCV_REG_F23_32, // "fs7" |
| 183 | RISCV_REG_F23_64, // "fs7" |
| 184 | RISCV_REG_F24_32, // "fs8" |
| 185 | RISCV_REG_F24_64, // "fs8" |
| 186 | RISCV_REG_F25_32, // "fs9" |
| 187 | RISCV_REG_F25_64, // "fs9" |
| 188 | RISCV_REG_F26_32, // "fs10" |
| 189 | RISCV_REG_F26_64, // "fs10" |
| 190 | RISCV_REG_F27_32, // "fs11" |
| 191 | RISCV_REG_F27_64, // "fs11" |
| 192 | RISCV_REG_F28_32, // "ft8" |
| 193 | RISCV_REG_F28_64, // "ft8" |
| 194 | RISCV_REG_F29_32, // "ft9" |
| 195 | RISCV_REG_F29_64, // "ft9" |
| 196 | RISCV_REG_F30_32, // "ft10" |
| 197 | RISCV_REG_F30_64, // "ft10" |
| 198 | RISCV_REG_F31_32, // "ft11" |
| 199 | RISCV_REG_F31_64, // "ft11" |
| 200 | |
| 201 | RISCV_REG_ENDING, // <-- mark the end of the list or registers |
| 202 | } riscv_reg; |
| 203 | |
| 204 | //> RISCV instruction |
| 205 | typedef enum riscv_insn { |
| 206 | RISCV_INS_INVALID = 0, |
| 207 | |
| 208 | RISCV_INS_ADD, |
| 209 | RISCV_INS_ADDI, |
| 210 | RISCV_INS_ADDIW, |
| 211 | RISCV_INS_ADDW, |
| 212 | RISCV_INS_AMOADD_D, |
| 213 | RISCV_INS_AMOADD_D_AQ, |
| 214 | RISCV_INS_AMOADD_D_AQ_RL, |
| 215 | RISCV_INS_AMOADD_D_RL, |
| 216 | RISCV_INS_AMOADD_W, |
| 217 | RISCV_INS_AMOADD_W_AQ, |
| 218 | RISCV_INS_AMOADD_W_AQ_RL, |
| 219 | RISCV_INS_AMOADD_W_RL, |
| 220 | RISCV_INS_AMOAND_D, |
| 221 | RISCV_INS_AMOAND_D_AQ, |
| 222 | RISCV_INS_AMOAND_D_AQ_RL, |
| 223 | RISCV_INS_AMOAND_D_RL, |
| 224 | RISCV_INS_AMOAND_W, |
| 225 | RISCV_INS_AMOAND_W_AQ, |
| 226 | RISCV_INS_AMOAND_W_AQ_RL, |
| 227 | RISCV_INS_AMOAND_W_RL, |
| 228 | RISCV_INS_AMOMAXU_D, |
| 229 | RISCV_INS_AMOMAXU_D_AQ, |
| 230 | RISCV_INS_AMOMAXU_D_AQ_RL, |
| 231 | RISCV_INS_AMOMAXU_D_RL, |
| 232 | RISCV_INS_AMOMAXU_W, |
| 233 | RISCV_INS_AMOMAXU_W_AQ, |
| 234 | RISCV_INS_AMOMAXU_W_AQ_RL, |
| 235 | RISCV_INS_AMOMAXU_W_RL, |
| 236 | RISCV_INS_AMOMAX_D, |
| 237 | RISCV_INS_AMOMAX_D_AQ, |
| 238 | RISCV_INS_AMOMAX_D_AQ_RL, |
| 239 | RISCV_INS_AMOMAX_D_RL, |
| 240 | RISCV_INS_AMOMAX_W, |
| 241 | RISCV_INS_AMOMAX_W_AQ, |
| 242 | RISCV_INS_AMOMAX_W_AQ_RL, |
| 243 | RISCV_INS_AMOMAX_W_RL, |
| 244 | RISCV_INS_AMOMINU_D, |
| 245 | RISCV_INS_AMOMINU_D_AQ, |
| 246 | RISCV_INS_AMOMINU_D_AQ_RL, |
| 247 | RISCV_INS_AMOMINU_D_RL, |
| 248 | RISCV_INS_AMOMINU_W, |
| 249 | RISCV_INS_AMOMINU_W_AQ, |
| 250 | RISCV_INS_AMOMINU_W_AQ_RL, |
| 251 | RISCV_INS_AMOMINU_W_RL, |
| 252 | RISCV_INS_AMOMIN_D, |
| 253 | RISCV_INS_AMOMIN_D_AQ, |
| 254 | RISCV_INS_AMOMIN_D_AQ_RL, |
| 255 | RISCV_INS_AMOMIN_D_RL, |
| 256 | RISCV_INS_AMOMIN_W, |
| 257 | RISCV_INS_AMOMIN_W_AQ, |
| 258 | RISCV_INS_AMOMIN_W_AQ_RL, |
| 259 | RISCV_INS_AMOMIN_W_RL, |
| 260 | RISCV_INS_AMOOR_D, |
| 261 | RISCV_INS_AMOOR_D_AQ, |
| 262 | RISCV_INS_AMOOR_D_AQ_RL, |
| 263 | RISCV_INS_AMOOR_D_RL, |
| 264 | RISCV_INS_AMOOR_W, |
| 265 | RISCV_INS_AMOOR_W_AQ, |
| 266 | RISCV_INS_AMOOR_W_AQ_RL, |
| 267 | RISCV_INS_AMOOR_W_RL, |
| 268 | RISCV_INS_AMOSWAP_D, |
| 269 | RISCV_INS_AMOSWAP_D_AQ, |
| 270 | RISCV_INS_AMOSWAP_D_AQ_RL, |
| 271 | RISCV_INS_AMOSWAP_D_RL, |
| 272 | RISCV_INS_AMOSWAP_W, |
| 273 | RISCV_INS_AMOSWAP_W_AQ, |
| 274 | RISCV_INS_AMOSWAP_W_AQ_RL, |
| 275 | RISCV_INS_AMOSWAP_W_RL, |
| 276 | RISCV_INS_AMOXOR_D, |
| 277 | RISCV_INS_AMOXOR_D_AQ, |
| 278 | RISCV_INS_AMOXOR_D_AQ_RL, |
| 279 | RISCV_INS_AMOXOR_D_RL, |
| 280 | RISCV_INS_AMOXOR_W, |
| 281 | RISCV_INS_AMOXOR_W_AQ, |
| 282 | RISCV_INS_AMOXOR_W_AQ_RL, |
| 283 | RISCV_INS_AMOXOR_W_RL, |
| 284 | RISCV_INS_AND, |
| 285 | RISCV_INS_ANDI, |
| 286 | RISCV_INS_AUIPC, |
| 287 | RISCV_INS_BEQ, |
| 288 | RISCV_INS_BGE, |
| 289 | RISCV_INS_BGEU, |
| 290 | RISCV_INS_BLT, |
| 291 | RISCV_INS_BLTU, |
| 292 | RISCV_INS_BNE, |
| 293 | RISCV_INS_CSRRC, |
| 294 | RISCV_INS_CSRRCI, |
| 295 | RISCV_INS_CSRRS, |
| 296 | RISCV_INS_CSRRSI, |
| 297 | RISCV_INS_CSRRW, |
| 298 | RISCV_INS_CSRRWI, |
| 299 | RISCV_INS_C_ADD, |
| 300 | RISCV_INS_C_ADDI, |
| 301 | RISCV_INS_C_ADDI16SP, |
| 302 | RISCV_INS_C_ADDI4SPN, |
| 303 | RISCV_INS_C_ADDIW, |
| 304 | RISCV_INS_C_ADDW, |
| 305 | RISCV_INS_C_AND, |
| 306 | RISCV_INS_C_ANDI, |
| 307 | RISCV_INS_C_BEQZ, |
| 308 | RISCV_INS_C_BNEZ, |
| 309 | RISCV_INS_C_EBREAK, |
| 310 | RISCV_INS_C_FLD, |
| 311 | RISCV_INS_C_FLDSP, |
| 312 | RISCV_INS_C_FLW, |
| 313 | RISCV_INS_C_FLWSP, |
| 314 | RISCV_INS_C_FSD, |
| 315 | RISCV_INS_C_FSDSP, |
| 316 | RISCV_INS_C_FSW, |
| 317 | RISCV_INS_C_FSWSP, |
| 318 | RISCV_INS_C_J, |
| 319 | RISCV_INS_C_JAL, |
| 320 | RISCV_INS_C_JALR, |
| 321 | RISCV_INS_C_JR, |
| 322 | RISCV_INS_C_LD, |
| 323 | RISCV_INS_C_LDSP, |
| 324 | RISCV_INS_C_LI, |
| 325 | RISCV_INS_C_LUI, |
| 326 | RISCV_INS_C_LW, |
| 327 | RISCV_INS_C_LWSP, |
| 328 | RISCV_INS_C_MV, |
| 329 | RISCV_INS_C_NOP, |
| 330 | RISCV_INS_C_OR, |
| 331 | RISCV_INS_C_SD, |
| 332 | RISCV_INS_C_SDSP, |
| 333 | RISCV_INS_C_SLLI, |
| 334 | RISCV_INS_C_SRAI, |
| 335 | RISCV_INS_C_SRLI, |
| 336 | RISCV_INS_C_SUB, |
| 337 | RISCV_INS_C_SUBW, |
| 338 | RISCV_INS_C_SW, |
| 339 | RISCV_INS_C_SWSP, |
| 340 | RISCV_INS_C_UNIMP, |
| 341 | RISCV_INS_C_XOR, |
| 342 | RISCV_INS_DIV, |
| 343 | RISCV_INS_DIVU, |
| 344 | RISCV_INS_DIVUW, |
| 345 | RISCV_INS_DIVW, |
| 346 | RISCV_INS_EBREAK, |
| 347 | RISCV_INS_ECALL, |
| 348 | RISCV_INS_FADD_D, |
| 349 | RISCV_INS_FADD_S, |
| 350 | RISCV_INS_FCLASS_D, |
| 351 | RISCV_INS_FCLASS_S, |
| 352 | RISCV_INS_FCVT_D_L, |
| 353 | RISCV_INS_FCVT_D_LU, |
| 354 | RISCV_INS_FCVT_D_S, |
| 355 | RISCV_INS_FCVT_D_W, |
| 356 | RISCV_INS_FCVT_D_WU, |
| 357 | RISCV_INS_FCVT_LU_D, |
| 358 | RISCV_INS_FCVT_LU_S, |
| 359 | RISCV_INS_FCVT_L_D, |
| 360 | RISCV_INS_FCVT_L_S, |
| 361 | RISCV_INS_FCVT_S_D, |
| 362 | RISCV_INS_FCVT_S_L, |
| 363 | RISCV_INS_FCVT_S_LU, |
| 364 | RISCV_INS_FCVT_S_W, |
| 365 | RISCV_INS_FCVT_S_WU, |
| 366 | RISCV_INS_FCVT_WU_D, |
| 367 | RISCV_INS_FCVT_WU_S, |
| 368 | RISCV_INS_FCVT_W_D, |
| 369 | RISCV_INS_FCVT_W_S, |
| 370 | RISCV_INS_FDIV_D, |
| 371 | RISCV_INS_FDIV_S, |
| 372 | RISCV_INS_FENCE, |
| 373 | RISCV_INS_FENCE_I, |
| 374 | RISCV_INS_FENCE_TSO, |
| 375 | RISCV_INS_FEQ_D, |
| 376 | RISCV_INS_FEQ_S, |
| 377 | RISCV_INS_FLD, |
| 378 | RISCV_INS_FLE_D, |
| 379 | RISCV_INS_FLE_S, |
| 380 | RISCV_INS_FLT_D, |
| 381 | RISCV_INS_FLT_S, |
| 382 | RISCV_INS_FLW, |
| 383 | RISCV_INS_FMADD_D, |
| 384 | RISCV_INS_FMADD_S, |
| 385 | RISCV_INS_FMAX_D, |
| 386 | RISCV_INS_FMAX_S, |
| 387 | RISCV_INS_FMIN_D, |
| 388 | RISCV_INS_FMIN_S, |
| 389 | RISCV_INS_FMSUB_D, |
| 390 | RISCV_INS_FMSUB_S, |
| 391 | RISCV_INS_FMUL_D, |
| 392 | RISCV_INS_FMUL_S, |
| 393 | RISCV_INS_FMV_D_X, |
| 394 | RISCV_INS_FMV_W_X, |
| 395 | RISCV_INS_FMV_X_D, |
| 396 | RISCV_INS_FMV_X_W, |
| 397 | RISCV_INS_FNMADD_D, |
| 398 | RISCV_INS_FNMADD_S, |
| 399 | RISCV_INS_FNMSUB_D, |
| 400 | RISCV_INS_FNMSUB_S, |
| 401 | RISCV_INS_FSD, |
| 402 | RISCV_INS_FSGNJN_D, |
| 403 | RISCV_INS_FSGNJN_S, |
| 404 | RISCV_INS_FSGNJX_D, |
| 405 | RISCV_INS_FSGNJX_S, |
| 406 | RISCV_INS_FSGNJ_D, |
| 407 | RISCV_INS_FSGNJ_S, |
| 408 | RISCV_INS_FSQRT_D, |
| 409 | RISCV_INS_FSQRT_S, |
| 410 | RISCV_INS_FSUB_D, |
| 411 | RISCV_INS_FSUB_S, |
| 412 | RISCV_INS_FSW, |
| 413 | RISCV_INS_JAL, |
| 414 | RISCV_INS_JALR, |
| 415 | RISCV_INS_LB, |
| 416 | RISCV_INS_LBU, |
| 417 | RISCV_INS_LD, |
| 418 | RISCV_INS_LH, |
| 419 | RISCV_INS_LHU, |
| 420 | RISCV_INS_LR_D, |
| 421 | RISCV_INS_LR_D_AQ, |
| 422 | RISCV_INS_LR_D_AQ_RL, |
| 423 | RISCV_INS_LR_D_RL, |
| 424 | RISCV_INS_LR_W, |
| 425 | RISCV_INS_LR_W_AQ, |
| 426 | RISCV_INS_LR_W_AQ_RL, |
| 427 | RISCV_INS_LR_W_RL, |
| 428 | RISCV_INS_LUI, |
| 429 | RISCV_INS_LW, |
| 430 | RISCV_INS_LWU, |
| 431 | RISCV_INS_MRET, |
| 432 | RISCV_INS_MUL, |
| 433 | RISCV_INS_MULH, |
| 434 | RISCV_INS_MULHSU, |
| 435 | RISCV_INS_MULHU, |
| 436 | RISCV_INS_MULW, |
| 437 | RISCV_INS_OR, |
| 438 | RISCV_INS_ORI, |
| 439 | RISCV_INS_REM, |
| 440 | RISCV_INS_REMU, |
| 441 | RISCV_INS_REMUW, |
| 442 | RISCV_INS_REMW, |
| 443 | RISCV_INS_SB, |
| 444 | RISCV_INS_SC_D, |
| 445 | RISCV_INS_SC_D_AQ, |
| 446 | RISCV_INS_SC_D_AQ_RL, |
| 447 | RISCV_INS_SC_D_RL, |
| 448 | RISCV_INS_SC_W, |
| 449 | RISCV_INS_SC_W_AQ, |
| 450 | RISCV_INS_SC_W_AQ_RL, |
| 451 | RISCV_INS_SC_W_RL, |
| 452 | RISCV_INS_SD, |
| 453 | RISCV_INS_SFENCE_VMA, |
| 454 | RISCV_INS_SH, |
| 455 | RISCV_INS_SLL, |
| 456 | RISCV_INS_SLLI, |
| 457 | RISCV_INS_SLLIW, |
| 458 | RISCV_INS_SLLW, |
| 459 | RISCV_INS_SLT, |
| 460 | RISCV_INS_SLTI, |
| 461 | RISCV_INS_SLTIU, |
| 462 | RISCV_INS_SLTU, |
| 463 | RISCV_INS_SRA, |
| 464 | RISCV_INS_SRAI, |
| 465 | RISCV_INS_SRAIW, |
| 466 | RISCV_INS_SRAW, |
| 467 | RISCV_INS_SRET, |
| 468 | RISCV_INS_SRL, |
| 469 | RISCV_INS_SRLI, |
| 470 | RISCV_INS_SRLIW, |
| 471 | RISCV_INS_SRLW, |
| 472 | RISCV_INS_SUB, |
| 473 | RISCV_INS_SUBW, |
| 474 | RISCV_INS_SW, |
| 475 | RISCV_INS_UNIMP, |
| 476 | RISCV_INS_URET, |
| 477 | RISCV_INS_WFI, |
| 478 | RISCV_INS_XOR, |
| 479 | RISCV_INS_XORI, |
| 480 | |
| 481 | RISCV_INS_ENDING, |
| 482 | } riscv_insn; |
| 483 | |
| 484 | //> Group of RISCV instructions |
| 485 | typedef enum riscv_insn_group { |
| 486 | RISCV_GRP_INVALID = 0, ///< = CS_GRP_INVALID |
| 487 | |
| 488 | // Generic groups |
| 489 | // all jump instructions (conditional+direct+indirect jumps) |
| 490 | RISCV_GRP_JUMP, ///< = CS_GRP_JUMP |
| 491 | // all call instructions |
| 492 | RISCV_GRP_CALL, ///< = CS_GRP_CALL |
| 493 | // all return instructions |
| 494 | RISCV_GRP_RET, ///< = CS_GRP_RET |
| 495 | // all interrupt instructions (int+syscall) |
| 496 | RISCV_GRP_INT, ///< = CS_GRP_INT |
| 497 | // all interrupt return instructions |
| 498 | RISCV_GRP_IRET, ///< = CS_GRP_IRET |
| 499 | // all privileged instructions |
| 500 | RISCV_GRP_PRIVILEGE, ///< = CS_GRP_PRIVILEGE |
| 501 | // all relative branching instructions |
| 502 | RISCV_GRP_BRANCH_RELATIVE, ///< = CS_GRP_BRANCH_RELATIVE |
| 503 | |
| 504 | // Architecture-specific groups |
| 505 | RISCV_GRP_ISRV32 = 128, |
| 506 | RISCV_GRP_ISRV64, |
| 507 | RISCV_GRP_HASSTDEXTA, |
| 508 | RISCV_GRP_HASSTDEXTC, |
| 509 | RISCV_GRP_HASSTDEXTD, |
| 510 | RISCV_GRP_HASSTDEXTF, |
| 511 | RISCV_GRP_HASSTDEXTM, |
| 512 | RISCV_GRP_ENDING, |
| 513 | } riscv_insn_group; |
| 514 | |
| 515 | #ifdef __cplusplus |
| 516 | } |
| 517 | #endif |
| 518 | |
| 519 | #endif |
| 520 | |
| 521 |