00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _opcode_tic54x_h_
00027 #define _opcode_tic54x_h_
00028
00029 typedef struct _symbol
00030 {
00031 const char *name;
00032 unsigned short value;
00033 } symbol;
00034
00035 enum optype {
00036 OPT = 0x8000,
00037 OP_None = 0x0,
00038
00039 OP_Xmem,
00040 OP_Ymem,
00041 OP_pmad,
00042 OP_dmad,
00043 OP_Smem,
00044 OP_Lmem,
00045 OP_MMR,
00046 OP_PA,
00047 OP_Sind,
00048 OP_xpmad,
00049 OP_xpmad_ms7,
00050 OP_MMRX,
00051 OP_MMRY,
00052
00053 OP_SRC1,
00054 OP_SRC,
00055 OP_RND,
00056 OP_DST,
00057 OP_ARX,
00058 OP_SHIFT,
00059 OP_SHFT,
00060 OP_B,
00061 OP_A,
00062
00063 OP_lk,
00064 OP_TS,
00065 OP_k8,
00066 OP_16,
00067 OP_BITC,
00068 OP_CC,
00069 OP_CC2,
00070 OP_CC3,
00071 OP_123,
00072 OP_031,
00073 OP_k5,
00074 OP_k8u,
00075 OP_ASM,
00076 OP_T,
00077 OP_DP,
00078 OP_ARP,
00079 OP_k3,
00080 OP_lku,
00081 OP_N,
00082 OP_SBIT,
00083 OP_12,
00084 OP_k9,
00085 OP_TRN,
00086
00087 };
00088
00089 typedef struct _template
00090 {
00091
00092 const char *name;
00093 unsigned int words;
00094 int minops, maxops;
00095
00096
00097
00098
00099 unsigned short opcode;
00100 #define INDIRECT(OP) ((OP)&0x80)
00101 #define MOD(OP) (((OP)>>3)&0xF)
00102 #define ARF(OP) ((OP)&0x7)
00103 #define IS_LKADDR(OP) (INDIRECT(OP) && MOD(OP)>=12)
00104 #define SRC(OP) ((OP)&0x200)
00105 #define DST(OP) ((OP)&0x100)
00106 #define SRC1(OP) ((OP)&0x100)
00107 #define SHIFT(OP) (((OP)&0x10)?(((OP)&0x1F)-32):((OP)&0x1F))
00108 #define SHFT(OP) ((OP)&0xF)
00109 #define ARX(OP) ((OP)&0x7)
00110 #define XMEM(OP) (((OP)&0x00F0)>>4)
00111 #define YMEM(OP) ((OP)&0x000F)
00112 #define XMOD(C) (((C)&0xC)>>2)
00113 #define XARX(C) (((C)&0x3)+2)
00114 #define CC3(OP) (((OP)>>8)&0x3)
00115 #define SBIT(OP) ((OP)&0xF)
00116 #define MMR(OP) ((OP)&0x7F)
00117 #define MMRX(OP) ((((OP)>>4)&0xF)+16)
00118 #define MMRY(OP) (((OP)&0xF)+16)
00119
00120 #define OPTYPE(X) ((X)&~OPT)
00121
00122
00123
00124 unsigned short mask;
00125
00126
00127 #define MAX_OPERANDS 4
00128 enum optype operand_types[MAX_OPERANDS];
00129
00130
00131
00132 unsigned short flags;
00133 #define B_NEXT 0
00134 #define B_BRANCH 1
00135 #define B_RET 2
00136 #define B_BACC 3
00137 #define B_REPEAT 4
00138 #define FL_BMASK 0x07
00139
00140 #define FL_DELAY 0x10
00141 #define FL_EXT 0x20
00142 #define FL_FAR 0x40
00143 #define FL_LP 0x80
00144 #define FL_NR 0x100
00145 #define FL_SMR 0x200
00146
00147 #define FL_PAR 0x400
00148
00149 unsigned short opcode2, mask2;
00150
00151 const char* parname;
00152 enum optype paroperand_types[MAX_OPERANDS];
00153
00154 } template;
00155
00156 extern const template tic54x_unknown_opcode;
00157 extern const template tic54x_optab[];
00158 extern const template tic54x_paroptab[];
00159 extern const symbol mmregs[], regs[];
00160 extern const symbol condition_codes[], cc2_codes[], status_bits[];
00161 extern const symbol cc3_codes[];
00162 extern const char *misc_symbols[];
00163 struct disassemble_info;
00164 extern const template* tic54x_get_insn (struct disassemble_info *,
00165 bfd_vma, unsigned short, int *);
00166
00167 #endif