Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 1 | #ifndef CAPSTONE_SPARC_H |
| 2 | #define CAPSTONE_SPARC_H |
| 3 | |
| 4 | /* Capstone Disassembly Engine */ |
Nguyen Anh Quynh | 7751fbe | 2014-04-28 11:23:14 +0800 | [diff] [blame] | 5 | /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2014 */ |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 6 | |
| 7 | #ifdef __cplusplus |
| 8 | extern "C" { |
| 9 | #endif |
| 10 | |
| 11 | #include <stdint.h> |
Nguyen Anh Quynh | cb59106 | 2014-05-15 21:51:02 +0800 | [diff] [blame] | 12 | #include "platform.h" |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 13 | |
schwoop | 3a7c136 | 2014-06-10 13:24:53 +0200 | [diff] [blame] | 14 | // GCC SPARC toolchain has a default macro called "sparc" which breaks |
| 15 | // compilation |
| 16 | #undef sparc |
| 17 | |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 18 | #ifdef _MSC_VER |
| 19 | #pragma warning(disable:4201) |
| 20 | #endif |
| 21 | |
| 22 | //> Enums corresponding to Sparc condition codes, both icc's and fcc's. |
| 23 | typedef enum sparc_cc { |
| 24 | SPARC_CC_INVALID = 0, // invalid CC (default) |
| 25 | //> Integer condition codes |
Nguyen Anh Quynh | 5d6383e | 2014-05-25 13:48:06 +0800 | [diff] [blame] | 26 | SPARC_CC_ICC_A = 8+256, // Always |
| 27 | SPARC_CC_ICC_N = 0+256, // Never |
| 28 | SPARC_CC_ICC_NE = 9+256, // Not Equal |
| 29 | SPARC_CC_ICC_E = 1+256, // Equal |
| 30 | SPARC_CC_ICC_G = 10+256, // Greater |
| 31 | SPARC_CC_ICC_LE = 2+256, // Less or Equal |
| 32 | SPARC_CC_ICC_GE = 11+256, // Greater or Equal |
| 33 | SPARC_CC_ICC_L = 3+256, // Less |
| 34 | SPARC_CC_ICC_GU = 12+256, // Greater Unsigned |
| 35 | SPARC_CC_ICC_LEU = 4+256, // Less or Equal Unsigned |
| 36 | SPARC_CC_ICC_CC = 13+256, // Carry Clear/Great or Equal Unsigned |
| 37 | SPARC_CC_ICC_CS = 5+256, // Carry Set/Less Unsigned |
| 38 | SPARC_CC_ICC_POS = 14+256, // Positive |
| 39 | SPARC_CC_ICC_NEG = 6+256, // Negative |
| 40 | SPARC_CC_ICC_VC = 15+256, // Overflow Clear |
| 41 | SPARC_CC_ICC_VS = 7+256, // Overflow Set |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 42 | |
| 43 | //> Floating condition codes |
Nguyen Anh Quynh | 5d6383e | 2014-05-25 13:48:06 +0800 | [diff] [blame] | 44 | SPARC_CC_FCC_A = 8+16+256, // Always |
| 45 | SPARC_CC_FCC_N = 0+16+256, // Never |
| 46 | SPARC_CC_FCC_U = 7+16+256, // Unordered |
| 47 | SPARC_CC_FCC_G = 6+16+256, // Greater |
| 48 | SPARC_CC_FCC_UG = 5+16+256, // Unordered or Greater |
| 49 | SPARC_CC_FCC_L = 4+16+256, // Less |
| 50 | SPARC_CC_FCC_UL = 3+16+256, // Unordered or Less |
| 51 | SPARC_CC_FCC_LG = 2+16+256, // Less or Greater |
| 52 | SPARC_CC_FCC_NE = 1+16+256, // Not Equal |
| 53 | SPARC_CC_FCC_E = 9+16+256, // Equal |
| 54 | SPARC_CC_FCC_UE = 10+16+256, // Unordered or Equal |
| 55 | SPARC_CC_FCC_GE = 11+16+256, // Greater or Equal |
| 56 | SPARC_CC_FCC_UGE = 12+16+256, // Unordered or Greater or Equal |
| 57 | SPARC_CC_FCC_LE = 13+16+256, // Less or Equal |
| 58 | SPARC_CC_FCC_ULE = 14+16+256, // Unordered or Less or Equal |
| 59 | SPARC_CC_FCC_O = 15+16+256, // Ordered |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 60 | } sparc_cc; |
| 61 | |
| 62 | //> Branch hint |
| 63 | typedef enum sparc_hint { |
| 64 | SPARC_HINT_INVALID = 0, // no hint |
| 65 | SPARC_HINT_A = 1 << 0, // annul delay slot instruction |
| 66 | SPARC_HINT_PT = 1 << 1, // branch taken |
| 67 | SPARC_HINT_PN = 1 << 2, // branch NOT taken |
| 68 | } sparc_hint; |
| 69 | |
| 70 | //> Operand type for instruction's operands |
| 71 | typedef enum sparc_op_type { |
Nguyen Anh Quynh | c58e704 | 2014-10-31 13:55:18 +0800 | [diff] [blame] | 72 | SPARC_OP_INVALID = 0, // = CS_OP_INVALID (Uninitialized). |
| 73 | SPARC_OP_REG, // = CS_OP_REG (Register operand). |
| 74 | SPARC_OP_IMM, // = CS_OP_IMM (Immediate operand). |
| 75 | SPARC_OP_MEM, // = CS_OP_MEM (Memory operand). |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 76 | } sparc_op_type; |
| 77 | |
| 78 | // Instruction's operand referring to memory |
| 79 | // This is associated with SPARC_OP_MEM operand type above |
| 80 | typedef struct sparc_op_mem { |
| 81 | uint8_t base; // base register |
| 82 | uint8_t index; // index register |
| 83 | int32_t disp; // displacement/offset value |
| 84 | } sparc_op_mem; |
| 85 | |
| 86 | // Instruction operand |
| 87 | typedef struct cs_sparc_op { |
| 88 | sparc_op_type type; // operand type |
| 89 | union { |
| 90 | unsigned int reg; // register value for REG operand |
| 91 | int32_t imm; // immediate value for IMM operand |
| 92 | sparc_op_mem mem; // base/disp value for MEM operand |
| 93 | }; |
| 94 | } cs_sparc_op; |
| 95 | |
| 96 | // Instruction structure |
| 97 | typedef struct cs_sparc { |
| 98 | sparc_cc cc; // code condition for this insn |
Nguyen Anh Quynh | 1738a3e | 2014-09-17 00:01:04 +0800 | [diff] [blame] | 99 | sparc_hint hint; // branch hint: encoding as bitwise OR of sparc_hint. |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 100 | // Number of operands of this instruction, |
| 101 | // or 0 when instruction has no operand. |
| 102 | uint8_t op_count; |
| 103 | cs_sparc_op operands[4]; // operands for this instruction. |
| 104 | } cs_sparc; |
| 105 | |
| 106 | //> SPARC registers |
| 107 | typedef enum sparc_reg { |
| 108 | SPARC_REG_INVALID = 0, |
| 109 | |
| 110 | SPARC_REG_F0, |
| 111 | SPARC_REG_F1, |
| 112 | SPARC_REG_F2, |
| 113 | SPARC_REG_F3, |
| 114 | SPARC_REG_F4, |
| 115 | SPARC_REG_F5, |
| 116 | SPARC_REG_F6, |
| 117 | SPARC_REG_F7, |
| 118 | SPARC_REG_F8, |
| 119 | SPARC_REG_F9, |
| 120 | SPARC_REG_F10, |
| 121 | SPARC_REG_F11, |
| 122 | SPARC_REG_F12, |
| 123 | SPARC_REG_F13, |
| 124 | SPARC_REG_F14, |
| 125 | SPARC_REG_F15, |
| 126 | SPARC_REG_F16, |
| 127 | SPARC_REG_F17, |
| 128 | SPARC_REG_F18, |
| 129 | SPARC_REG_F19, |
| 130 | SPARC_REG_F20, |
| 131 | SPARC_REG_F21, |
| 132 | SPARC_REG_F22, |
| 133 | SPARC_REG_F23, |
| 134 | SPARC_REG_F24, |
| 135 | SPARC_REG_F25, |
| 136 | SPARC_REG_F26, |
| 137 | SPARC_REG_F27, |
| 138 | SPARC_REG_F28, |
| 139 | SPARC_REG_F29, |
| 140 | SPARC_REG_F30, |
| 141 | SPARC_REG_F31, |
| 142 | SPARC_REG_F32, |
| 143 | SPARC_REG_F34, |
| 144 | SPARC_REG_F36, |
| 145 | SPARC_REG_F38, |
| 146 | SPARC_REG_F40, |
| 147 | SPARC_REG_F42, |
| 148 | SPARC_REG_F44, |
| 149 | SPARC_REG_F46, |
| 150 | SPARC_REG_F48, |
| 151 | SPARC_REG_F50, |
| 152 | SPARC_REG_F52, |
| 153 | SPARC_REG_F54, |
| 154 | SPARC_REG_F56, |
| 155 | SPARC_REG_F58, |
| 156 | SPARC_REG_F60, |
| 157 | SPARC_REG_F62, |
| 158 | SPARC_REG_FCC0, // Floating condition codes |
| 159 | SPARC_REG_FCC1, |
| 160 | SPARC_REG_FCC2, |
| 161 | SPARC_REG_FCC3, |
| 162 | SPARC_REG_FP, |
| 163 | SPARC_REG_G0, |
| 164 | SPARC_REG_G1, |
| 165 | SPARC_REG_G2, |
| 166 | SPARC_REG_G3, |
| 167 | SPARC_REG_G4, |
| 168 | SPARC_REG_G5, |
| 169 | SPARC_REG_G6, |
| 170 | SPARC_REG_G7, |
| 171 | SPARC_REG_I0, |
| 172 | SPARC_REG_I1, |
| 173 | SPARC_REG_I2, |
| 174 | SPARC_REG_I3, |
| 175 | SPARC_REG_I4, |
| 176 | SPARC_REG_I5, |
| 177 | SPARC_REG_I7, |
| 178 | SPARC_REG_ICC, // Integer condition codes |
| 179 | SPARC_REG_L0, |
| 180 | SPARC_REG_L1, |
| 181 | SPARC_REG_L2, |
| 182 | SPARC_REG_L3, |
| 183 | SPARC_REG_L4, |
| 184 | SPARC_REG_L5, |
| 185 | SPARC_REG_L6, |
| 186 | SPARC_REG_L7, |
| 187 | SPARC_REG_O0, |
| 188 | SPARC_REG_O1, |
| 189 | SPARC_REG_O2, |
| 190 | SPARC_REG_O3, |
| 191 | SPARC_REG_O4, |
| 192 | SPARC_REG_O5, |
| 193 | SPARC_REG_O7, |
| 194 | SPARC_REG_SP, |
| 195 | SPARC_REG_Y, |
| 196 | |
Nguyen Anh Quynh | 1738a3e | 2014-09-17 00:01:04 +0800 | [diff] [blame] | 197 | // special register |
| 198 | SPARC_REG_XCC, |
| 199 | |
Nguyen Anh Quynh | d7e42b7 | 2014-09-29 17:15:25 +0800 | [diff] [blame] | 200 | SPARC_REG_ENDING, // <-- mark the end of the list of registers |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 201 | |
| 202 | // extras |
| 203 | SPARC_REG_O6 = SPARC_REG_SP, |
| 204 | SPARC_REG_I6 = SPARC_REG_FP, |
| 205 | } sparc_reg; |
| 206 | |
| 207 | //> SPARC instruction |
| 208 | typedef enum sparc_insn { |
| 209 | SPARC_INS_INVALID = 0, |
| 210 | |
| 211 | SPARC_INS_ADDCC, |
| 212 | SPARC_INS_ADDX, |
| 213 | SPARC_INS_ADDXCC, |
| 214 | SPARC_INS_ADDXC, |
| 215 | SPARC_INS_ADDXCCC, |
| 216 | SPARC_INS_ADD, |
| 217 | SPARC_INS_ALIGNADDR, |
| 218 | SPARC_INS_ALIGNADDRL, |
| 219 | SPARC_INS_ANDCC, |
| 220 | SPARC_INS_ANDNCC, |
| 221 | SPARC_INS_ANDN, |
| 222 | SPARC_INS_AND, |
| 223 | SPARC_INS_ARRAY16, |
| 224 | SPARC_INS_ARRAY32, |
| 225 | SPARC_INS_ARRAY8, |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 226 | SPARC_INS_B, |
| 227 | SPARC_INS_JMP, |
| 228 | SPARC_INS_BMASK, |
| 229 | SPARC_INS_FB, |
| 230 | SPARC_INS_BRGEZ, |
| 231 | SPARC_INS_BRGZ, |
| 232 | SPARC_INS_BRLEZ, |
| 233 | SPARC_INS_BRLZ, |
| 234 | SPARC_INS_BRNZ, |
| 235 | SPARC_INS_BRZ, |
| 236 | SPARC_INS_BSHUFFLE, |
| 237 | SPARC_INS_CALL, |
| 238 | SPARC_INS_CASX, |
| 239 | SPARC_INS_CAS, |
| 240 | SPARC_INS_CMASK16, |
| 241 | SPARC_INS_CMASK32, |
| 242 | SPARC_INS_CMASK8, |
| 243 | SPARC_INS_CMP, |
| 244 | SPARC_INS_EDGE16, |
| 245 | SPARC_INS_EDGE16L, |
| 246 | SPARC_INS_EDGE16LN, |
| 247 | SPARC_INS_EDGE16N, |
| 248 | SPARC_INS_EDGE32, |
| 249 | SPARC_INS_EDGE32L, |
| 250 | SPARC_INS_EDGE32LN, |
| 251 | SPARC_INS_EDGE32N, |
| 252 | SPARC_INS_EDGE8, |
| 253 | SPARC_INS_EDGE8L, |
| 254 | SPARC_INS_EDGE8LN, |
| 255 | SPARC_INS_EDGE8N, |
| 256 | SPARC_INS_FABSD, |
| 257 | SPARC_INS_FABSQ, |
| 258 | SPARC_INS_FABSS, |
| 259 | SPARC_INS_FADDD, |
| 260 | SPARC_INS_FADDQ, |
| 261 | SPARC_INS_FADDS, |
| 262 | SPARC_INS_FALIGNDATA, |
| 263 | SPARC_INS_FAND, |
| 264 | SPARC_INS_FANDNOT1, |
| 265 | SPARC_INS_FANDNOT1S, |
| 266 | SPARC_INS_FANDNOT2, |
| 267 | SPARC_INS_FANDNOT2S, |
| 268 | SPARC_INS_FANDS, |
| 269 | SPARC_INS_FCHKSM16, |
| 270 | SPARC_INS_FCMPD, |
| 271 | SPARC_INS_FCMPEQ16, |
| 272 | SPARC_INS_FCMPEQ32, |
| 273 | SPARC_INS_FCMPGT16, |
| 274 | SPARC_INS_FCMPGT32, |
| 275 | SPARC_INS_FCMPLE16, |
| 276 | SPARC_INS_FCMPLE32, |
| 277 | SPARC_INS_FCMPNE16, |
| 278 | SPARC_INS_FCMPNE32, |
| 279 | SPARC_INS_FCMPQ, |
| 280 | SPARC_INS_FCMPS, |
| 281 | SPARC_INS_FDIVD, |
| 282 | SPARC_INS_FDIVQ, |
| 283 | SPARC_INS_FDIVS, |
| 284 | SPARC_INS_FDMULQ, |
| 285 | SPARC_INS_FDTOI, |
| 286 | SPARC_INS_FDTOQ, |
| 287 | SPARC_INS_FDTOS, |
| 288 | SPARC_INS_FDTOX, |
| 289 | SPARC_INS_FEXPAND, |
| 290 | SPARC_INS_FHADDD, |
| 291 | SPARC_INS_FHADDS, |
| 292 | SPARC_INS_FHSUBD, |
| 293 | SPARC_INS_FHSUBS, |
| 294 | SPARC_INS_FITOD, |
| 295 | SPARC_INS_FITOQ, |
| 296 | SPARC_INS_FITOS, |
| 297 | SPARC_INS_FLCMPD, |
| 298 | SPARC_INS_FLCMPS, |
| 299 | SPARC_INS_FLUSHW, |
| 300 | SPARC_INS_FMEAN16, |
| 301 | SPARC_INS_FMOVD, |
| 302 | SPARC_INS_FMOVQ, |
| 303 | SPARC_INS_FMOVRDGEZ, |
| 304 | SPARC_INS_FMOVRQGEZ, |
| 305 | SPARC_INS_FMOVRSGEZ, |
| 306 | SPARC_INS_FMOVRDGZ, |
| 307 | SPARC_INS_FMOVRQGZ, |
| 308 | SPARC_INS_FMOVRSGZ, |
| 309 | SPARC_INS_FMOVRDLEZ, |
| 310 | SPARC_INS_FMOVRQLEZ, |
| 311 | SPARC_INS_FMOVRSLEZ, |
| 312 | SPARC_INS_FMOVRDLZ, |
| 313 | SPARC_INS_FMOVRQLZ, |
| 314 | SPARC_INS_FMOVRSLZ, |
| 315 | SPARC_INS_FMOVRDNZ, |
| 316 | SPARC_INS_FMOVRQNZ, |
| 317 | SPARC_INS_FMOVRSNZ, |
| 318 | SPARC_INS_FMOVRDZ, |
| 319 | SPARC_INS_FMOVRQZ, |
| 320 | SPARC_INS_FMOVRSZ, |
| 321 | SPARC_INS_FMOVS, |
| 322 | SPARC_INS_FMUL8SUX16, |
| 323 | SPARC_INS_FMUL8ULX16, |
| 324 | SPARC_INS_FMUL8X16, |
| 325 | SPARC_INS_FMUL8X16AL, |
| 326 | SPARC_INS_FMUL8X16AU, |
| 327 | SPARC_INS_FMULD, |
| 328 | SPARC_INS_FMULD8SUX16, |
| 329 | SPARC_INS_FMULD8ULX16, |
| 330 | SPARC_INS_FMULQ, |
| 331 | SPARC_INS_FMULS, |
| 332 | SPARC_INS_FNADDD, |
| 333 | SPARC_INS_FNADDS, |
| 334 | SPARC_INS_FNAND, |
| 335 | SPARC_INS_FNANDS, |
| 336 | SPARC_INS_FNEGD, |
| 337 | SPARC_INS_FNEGQ, |
| 338 | SPARC_INS_FNEGS, |
| 339 | SPARC_INS_FNHADDD, |
| 340 | SPARC_INS_FNHADDS, |
| 341 | SPARC_INS_FNOR, |
| 342 | SPARC_INS_FNORS, |
| 343 | SPARC_INS_FNOT1, |
| 344 | SPARC_INS_FNOT1S, |
| 345 | SPARC_INS_FNOT2, |
| 346 | SPARC_INS_FNOT2S, |
| 347 | SPARC_INS_FONE, |
| 348 | SPARC_INS_FONES, |
| 349 | SPARC_INS_FOR, |
| 350 | SPARC_INS_FORNOT1, |
| 351 | SPARC_INS_FORNOT1S, |
| 352 | SPARC_INS_FORNOT2, |
| 353 | SPARC_INS_FORNOT2S, |
| 354 | SPARC_INS_FORS, |
| 355 | SPARC_INS_FPACK16, |
| 356 | SPARC_INS_FPACK32, |
| 357 | SPARC_INS_FPACKFIX, |
| 358 | SPARC_INS_FPADD16, |
| 359 | SPARC_INS_FPADD16S, |
| 360 | SPARC_INS_FPADD32, |
| 361 | SPARC_INS_FPADD32S, |
| 362 | SPARC_INS_FPADD64, |
| 363 | SPARC_INS_FPMERGE, |
| 364 | SPARC_INS_FPSUB16, |
| 365 | SPARC_INS_FPSUB16S, |
| 366 | SPARC_INS_FPSUB32, |
| 367 | SPARC_INS_FPSUB32S, |
| 368 | SPARC_INS_FQTOD, |
| 369 | SPARC_INS_FQTOI, |
| 370 | SPARC_INS_FQTOS, |
| 371 | SPARC_INS_FQTOX, |
| 372 | SPARC_INS_FSLAS16, |
| 373 | SPARC_INS_FSLAS32, |
| 374 | SPARC_INS_FSLL16, |
| 375 | SPARC_INS_FSLL32, |
| 376 | SPARC_INS_FSMULD, |
| 377 | SPARC_INS_FSQRTD, |
| 378 | SPARC_INS_FSQRTQ, |
| 379 | SPARC_INS_FSQRTS, |
| 380 | SPARC_INS_FSRA16, |
| 381 | SPARC_INS_FSRA32, |
| 382 | SPARC_INS_FSRC1, |
| 383 | SPARC_INS_FSRC1S, |
| 384 | SPARC_INS_FSRC2, |
| 385 | SPARC_INS_FSRC2S, |
| 386 | SPARC_INS_FSRL16, |
| 387 | SPARC_INS_FSRL32, |
| 388 | SPARC_INS_FSTOD, |
| 389 | SPARC_INS_FSTOI, |
| 390 | SPARC_INS_FSTOQ, |
| 391 | SPARC_INS_FSTOX, |
| 392 | SPARC_INS_FSUBD, |
| 393 | SPARC_INS_FSUBQ, |
| 394 | SPARC_INS_FSUBS, |
| 395 | SPARC_INS_FXNOR, |
| 396 | SPARC_INS_FXNORS, |
| 397 | SPARC_INS_FXOR, |
| 398 | SPARC_INS_FXORS, |
| 399 | SPARC_INS_FXTOD, |
| 400 | SPARC_INS_FXTOQ, |
| 401 | SPARC_INS_FXTOS, |
| 402 | SPARC_INS_FZERO, |
| 403 | SPARC_INS_FZEROS, |
| 404 | SPARC_INS_JMPL, |
| 405 | SPARC_INS_LDD, |
| 406 | SPARC_INS_LD, |
| 407 | SPARC_INS_LDQ, |
| 408 | SPARC_INS_LDSB, |
| 409 | SPARC_INS_LDSH, |
| 410 | SPARC_INS_LDSW, |
| 411 | SPARC_INS_LDUB, |
| 412 | SPARC_INS_LDUH, |
| 413 | SPARC_INS_LDX, |
| 414 | SPARC_INS_LZCNT, |
| 415 | SPARC_INS_MEMBAR, |
| 416 | SPARC_INS_MOVDTOX, |
| 417 | SPARC_INS_MOV, |
| 418 | SPARC_INS_MOVRGEZ, |
| 419 | SPARC_INS_MOVRGZ, |
| 420 | SPARC_INS_MOVRLEZ, |
| 421 | SPARC_INS_MOVRLZ, |
| 422 | SPARC_INS_MOVRNZ, |
| 423 | SPARC_INS_MOVRZ, |
| 424 | SPARC_INS_MOVSTOSW, |
| 425 | SPARC_INS_MOVSTOUW, |
| 426 | SPARC_INS_MULX, |
| 427 | SPARC_INS_NOP, |
| 428 | SPARC_INS_ORCC, |
| 429 | SPARC_INS_ORNCC, |
| 430 | SPARC_INS_ORN, |
| 431 | SPARC_INS_OR, |
| 432 | SPARC_INS_PDIST, |
| 433 | SPARC_INS_PDISTN, |
| 434 | SPARC_INS_POPC, |
| 435 | SPARC_INS_RD, |
| 436 | SPARC_INS_RESTORE, |
| 437 | SPARC_INS_RETT, |
| 438 | SPARC_INS_SAVE, |
| 439 | SPARC_INS_SDIVCC, |
| 440 | SPARC_INS_SDIVX, |
| 441 | SPARC_INS_SDIV, |
| 442 | SPARC_INS_SETHI, |
| 443 | SPARC_INS_SHUTDOWN, |
| 444 | SPARC_INS_SIAM, |
| 445 | SPARC_INS_SLLX, |
| 446 | SPARC_INS_SLL, |
| 447 | SPARC_INS_SMULCC, |
| 448 | SPARC_INS_SMUL, |
| 449 | SPARC_INS_SRAX, |
| 450 | SPARC_INS_SRA, |
| 451 | SPARC_INS_SRLX, |
| 452 | SPARC_INS_SRL, |
| 453 | SPARC_INS_STBAR, |
| 454 | SPARC_INS_STB, |
| 455 | SPARC_INS_STD, |
| 456 | SPARC_INS_ST, |
| 457 | SPARC_INS_STH, |
| 458 | SPARC_INS_STQ, |
| 459 | SPARC_INS_STX, |
| 460 | SPARC_INS_SUBCC, |
| 461 | SPARC_INS_SUBX, |
| 462 | SPARC_INS_SUBXCC, |
| 463 | SPARC_INS_SUB, |
| 464 | SPARC_INS_SWAP, |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 465 | SPARC_INS_TADDCCTV, |
| 466 | SPARC_INS_TADDCC, |
| 467 | SPARC_INS_T, |
| 468 | SPARC_INS_TSUBCCTV, |
| 469 | SPARC_INS_TSUBCC, |
| 470 | SPARC_INS_UDIVCC, |
| 471 | SPARC_INS_UDIVX, |
| 472 | SPARC_INS_UDIV, |
| 473 | SPARC_INS_UMULCC, |
| 474 | SPARC_INS_UMULXHI, |
| 475 | SPARC_INS_UMUL, |
| 476 | SPARC_INS_UNIMP, |
| 477 | SPARC_INS_FCMPED, |
| 478 | SPARC_INS_FCMPEQ, |
| 479 | SPARC_INS_FCMPES, |
| 480 | SPARC_INS_WR, |
| 481 | SPARC_INS_XMULX, |
| 482 | SPARC_INS_XMULXHI, |
| 483 | SPARC_INS_XNORCC, |
| 484 | SPARC_INS_XNOR, |
| 485 | SPARC_INS_XORCC, |
| 486 | SPARC_INS_XOR, |
| 487 | |
Nguyen Anh Quynh | 1738a3e | 2014-09-17 00:01:04 +0800 | [diff] [blame] | 488 | // alias instructions |
| 489 | SPARC_INS_RET, |
| 490 | SPARC_INS_RETL, |
| 491 | |
Nguyen Anh Quynh | d7e42b7 | 2014-09-29 17:15:25 +0800 | [diff] [blame] | 492 | SPARC_INS_ENDING, // <-- mark the end of the list of instructions |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 493 | } sparc_insn; |
| 494 | |
| 495 | //> Group of SPARC instructions |
| 496 | typedef enum sparc_insn_group { |
Nguyen Anh Quynh | 3ab5091 | 2014-10-31 14:40:45 +0800 | [diff] [blame] | 497 | SPARC_GRP_INVALID = 0, // = CS_GRP_INVALID |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 498 | |
Nguyen Anh Quynh | 3ab5091 | 2014-10-31 14:40:45 +0800 | [diff] [blame] | 499 | //> Generic groups |
| 500 | // all jump instructions (conditional+direct+indirect jumps) |
| 501 | SPARC_GRP_JUMP, // = CS_GRP_JUMP |
| 502 | |
| 503 | //> Architecture-specific groups |
| 504 | SPARC_GRP_HARDQUAD = 128, |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 505 | SPARC_GRP_V9, |
| 506 | SPARC_GRP_VIS, |
| 507 | SPARC_GRP_VIS2, |
| 508 | SPARC_GRP_VIS3, |
| 509 | SPARC_GRP_32BIT, |
| 510 | SPARC_GRP_64BIT, |
| 511 | |
Nguyen Anh Quynh | d7e42b7 | 2014-09-29 17:15:25 +0800 | [diff] [blame] | 512 | SPARC_GRP_ENDING, // <-- mark the end of the list of groups |
Nguyen Anh Quynh | 20ab806 | 2014-03-10 14:36:25 +0800 | [diff] [blame] | 513 | } sparc_insn_group; |
| 514 | |
| 515 | #ifdef __cplusplus |
| 516 | } |
| 517 | #endif |
| 518 | |
| 519 | #endif |