1 /* radare - LGPL - Copyright 2017 - wargio */ 2 3 #ifndef LIBPS_INTERNAL_H 4 #define LIBPS_INTERNAL_H 5 #include <r_types.h> 6 7 #define TYPE_NONE 0 8 #define TYPE_REG 1 9 #define TYPE_IMM 2 10 #define TYPE_MEM 3 11 #define TYPE_CR 4 12 13 #define OP(x) ((((ut32)(x)) & 0x3f) << 26) 14 #define OP_MASK OP(0x3f) 15 16 #define OPS(op, xop) (OP(op) | ((((ut32)(xop)) & 0x1f) << 1)) 17 #define OPSC(op, xop, rc) (OPS((op), (xop)) | ((rc) & 1)) 18 #define OPS_MASK OPSC(0x3f, 0x1f, 1) 19 #define OPS_MASK_DOT OPSC(0x3f, 0x1f, 1) 20 21 #define OPM(op, xop) (OP(op) | ((((ut32)(xop)) & 0x3f) << 1)) 22 #define OPMC(op, xop, rc) (OPM((op), (xop)) | ((rc) & 1)) 23 #define OPM_MASK OPMC(0x3f, 0x3f, 0) 24 25 #define OPL(op, xop) (OP(op) | ((((ut32)(xop)) & 0x3ff) << 1)) 26 #define OPLC(op, xop, rc) (OPL((op), (xop)) | ((rc) & 1)) 27 #define OPL_MASK OPLC(0x3f, 0x3ff, 1) 28 #define OPL_MASK_DOT OPLC(0x3f, 0x3ff, 1) 29 30 typedef enum { 31 NO_OPERAND, 32 OP_FA, 33 OP_FB, 34 OP_FC, 35 OP_FD, 36 OP_FS = OP_FD, 37 OP_crfD, 38 OP_WB, 39 OP_IB, 40 OP_WC, 41 OP_IC, 42 OP_RA, 43 OP_RB, 44 OP_DRA, 45 OP_DRB, 46 } ps_operand_id_t; 47 48 typedef enum { 49 psq_lx, 50 psq_stx, 51 psq_lux, 52 psq_stux, 53 psq_l, 54 psq_lu, 55 psq_st, 56 psq_stu, 57 58 ps_div, 59 ps_div_dot, 60 ps_sub, 61 ps_sub_dot, 62 ps_add, 63 ps_add_dot, 64 ps_sel, 65 ps_sel_dot, 66 ps_res, 67 ps_res_dot, 68 ps_mul, 69 ps_mul_dot, 70 ps_rsqrte, 71 ps_rsqrte_dot, 72 ps_msub, 73 ps_msub_dot, 74 ps_madd, 75 ps_madd_dot, 76 ps_nmsub, 77 ps_nmsub_dot, 78 ps_nmadd, 79 ps_nmadd_dot, 80 ps_neg, 81 ps_neg_dot, 82 ps_mr, 83 ps_mr_dot, 84 ps_nabs, 85 ps_nabs_dot, 86 ps_abs, 87 ps_abs_dot, 88 89 ps_sum0, 90 ps_sum0_dot, 91 ps_sum1, 92 ps_sum1_dot, 93 ps_muls0, 94 ps_muls0_dot, 95 ps_muls1, 96 ps_muls1_dot, 97 ps_madds0, 98 ps_madds0_dot, 99 ps_madds1, 100 ps_madds1_dot, 101 ps_cmpu0, 102 ps_cmpo0, 103 ps_cmpu1, 104 ps_cmpo1, 105 ps_merge00, 106 ps_merge00_dot, 107 ps_merge01, 108 ps_merge01_dot, 109 ps_merge10, 110 ps_merge10_dot, 111 ps_merge11, 112 ps_merge11_dot, 113 ps_dcbz_l, 114 } ps_insn_type_t; 115 116 typedef struct { 117 ps_insn_type_t insn; 118 const char* name; 119 unsigned int opcode; 120 unsigned int mask; 121 unsigned char operands[6]; 122 const char* description; 123 } ps_opcode_t; 124 125 typedef struct { 126 int bits; 127 int shift; 128 } ps_operand_t; 129 130 #endif /* LIBPS_INTERNAL_H */ 131 132