00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "ansidecl.h"
00024
00025 typedef enum
00026 {
00027 O0, OT, O1, OC, O2, X1, OI, OB,
00028 OMa, SI, I7, LS, BR, BL, LR, LJ,
00029 RM, RQ, JSR, JMP, OBRa, OBRb, OBRc, OBR2,
00030 O1R1, OMb, OMc, SIa,
00031 MULSH, OPSR,
00032 JC, JU, JL, RSI, DO21, OB2
00033 }
00034 mcore_opclass;
00035
00036 typedef struct inst
00037 {
00038 char * name;
00039 mcore_opclass opclass;
00040 unsigned char transfer;
00041 unsigned short inst;
00042 }
00043 mcore_opcode_info;
00044
00045 #ifdef DEFINE_TABLE
00046 const mcore_opcode_info mcore_table[] =
00047 {
00048 { "bkpt", O0, 0, 0x0000 },
00049 { "sync", O0, 0, 0x0001 },
00050 { "rte", O0, 1, 0x0002 },
00051 { "rfe", O0, 1, 0x0002 },
00052 { "rfi", O0, 1, 0x0003 },
00053 { "stop", O0, 0, 0x0004 },
00054 { "wait", O0, 0, 0x0005 },
00055 { "doze", O0, 0, 0x0006 },
00056 { "idly4", O0, 0, 0x0007 },
00057 { "trap", OT, 0, 0x0008 },
00058
00059
00060 { "mvc", O1, 0, 0x0020 },
00061 { "mvcv", O1, 0, 0x0030 },
00062 { "ldq", RQ, 0, 0x0040 },
00063 { "stq", RQ, 0, 0x0050 },
00064 { "ldm", RM, 0, 0x0060 },
00065 { "stm", RM, 0, 0x0070 },
00066 { "dect", O1, 0, 0x0080 },
00067 { "decf", O1, 0, 0x0090 },
00068 { "inct", O1, 0, 0x00A0 },
00069 { "incf", O1, 0, 0x00B0 },
00070 { "jmp", JMP, 2, 0x00C0 },
00071 #define MCORE_INST_JMP 0x00C0
00072 { "jsr", JSR, 0, 0x00D0 },
00073 #define MCORE_INST_JSR 0x00E0
00074 { "ff1", O1, 0, 0x00E0 },
00075 { "brev", O1, 0, 0x00F0 },
00076 { "xtrb3", X1, 0, 0x0100 },
00077 { "xtrb2", X1, 0, 0x0110 },
00078 { "xtrb1", X1, 0, 0x0120 },
00079 { "xtrb0", X1, 0, 0x0130 },
00080 { "zextb", O1, 0, 0x0140 },
00081 { "sextb", O1, 0, 0x0150 },
00082 { "zexth", O1, 0, 0x0160 },
00083 { "sexth", O1, 0, 0x0170 },
00084 { "declt", O1, 0, 0x0180 },
00085 { "tstnbz", O1, 0, 0x0190 },
00086 { "decgt", O1, 0, 0x01A0 },
00087 { "decne", O1, 0, 0x01B0 },
00088 { "clrt", O1, 0, 0x01C0 },
00089 { "clrf", O1, 0, 0x01D0 },
00090 { "abs", O1, 0, 0x01E0 },
00091 { "not", O1, 0, 0x01F0 },
00092 { "movt", O2, 0, 0x0200 },
00093 { "mult", O2, 0, 0x0300 },
00094 { "loopt", BL, 0, 0x0400 },
00095 { "subu", O2, 0, 0x0500 },
00096 { "sub", O2, 0, 0x0500 },
00097 { "addc", O2, 0, 0x0600 },
00098 { "subc", O2, 0, 0x0700 },
00099
00100
00101 { "movf", O2, 0, 0x0A00 },
00102 { "lsr", O2, 0, 0x0B00 },
00103 { "cmphs", O2, 0, 0x0C00 },
00104 { "cmplt", O2, 0, 0x0D00 },
00105 { "tst", O2, 0, 0x0E00 },
00106 { "cmpne", O2, 0, 0x0F00 },
00107 { "mfcr", OC, 0, 0x1000 },
00108 { "psrclr", OPSR, 0, 0x11F0 },
00109 { "psrset", OPSR, 0, 0x11F8 },
00110 { "mov", O2, 0, 0x1200 },
00111 { "bgenr", O2, 0, 0x1300 },
00112 { "rsub", O2, 0, 0x1400 },
00113 { "ixw", O2, 0, 0x1500 },
00114 { "and", O2, 0, 0x1600 },
00115 { "xor", O2, 0, 0x1700 },
00116 { "mtcr", OC, 0, 0x1800 },
00117 { "asr", O2, 0, 0x1A00 },
00118 { "lsl", O2, 0, 0x1B00 },
00119 { "addu", O2, 0, 0x1C00 },
00120 { "add", O2, 0, 0x1C00 },
00121 { "ixh", O2, 0, 0x1D00 },
00122 { "or", O2, 0, 0x1E00 },
00123 { "andn", O2, 0, 0x1F00 },
00124 { "addi", OI, 0, 0x2000 },
00125 #define MCORE_INST_ADDI 0x2000
00126 { "cmplti", OI, 0, 0x2200 },
00127 { "subi", OI, 0, 0x2400 },
00128
00129 { "rsubi", OB, 0, 0x2800 },
00130 { "cmpnei", OB, 0, 0x2A00 },
00131 { "bmaski", OMa, 0, 0x2C00 },
00132 { "divu", O1R1, 0, 0x2C10 },
00133
00134 { "bmaski", OMb, 0, 0x2C80 },
00135 { "bmaski", OMc, 0, 0x2D00 },
00136 { "andi", OB, 0, 0x2E00 },
00137 { "bclri", OB, 0, 0x3000 },
00138
00139 { "divs", O1R1, 0, 0x3210 },
00140
00141 { "bgeni", OBRa, 0, 0x3270 },
00142 { "bgeni", OBRb, 0, 0x3280 },
00143 { "bgeni", OBRc, 0, 0x3300 },
00144 { "bseti", OB, 0, 0x3400 },
00145 { "btsti", OB, 0, 0x3600 },
00146 { "xsr", O1, 0, 0x3800 },
00147 { "rotli", SIa, 0, 0x3800 },
00148 { "asrc", O1, 0, 0x3A00 },
00149 { "asri", SIa, 0, 0x3A00 },
00150 { "lslc", O1, 0, 0x3C00 },
00151 { "lsli", SIa, 0, 0x3C00 },
00152 { "lsrc", O1, 0, 0x3E00 },
00153 { "lsri", SIa, 0, 0x3E00 },
00154
00155 { "movi", I7, 0, 0x6000 },
00156 #define MCORE_INST_BMASKI_ALT 0x6000
00157 #define MCORE_INST_BGENI_ALT 0x6000
00158 { "mulsh", MULSH, 0, 0x6800 },
00159 { "muls.h", MULSH, 0, 0x6800 },
00160
00161 { "jmpi", LJ, 1, 0x7000 },
00162 { "jsri", LJ, 0, 0x7F00 },
00163 #define MCORE_INST_JMPI 0x7000
00164 { "lrw", LR, 0, 0x7000 },
00165 #define MCORE_INST_JSRI 0x7F00
00166 { "ld", LS, 0, 0x8000 },
00167 { "ldw", LS, 0, 0x8000 },
00168 { "ld.w", LS, 0, 0x8000 },
00169 { "st", LS, 0, 0x9000 },
00170 { "stw", LS, 0, 0x9000 },
00171 { "st.w", LS, 0, 0x9000 },
00172 { "ldb", LS, 0, 0xA000 },
00173 { "ld.b", LS, 0, 0xA000 },
00174 { "stb", LS, 0, 0xB000 },
00175 { "st.b", LS, 0, 0xB000 },
00176 { "ldh", LS, 0, 0xC000 },
00177 { "ld.h", LS, 0, 0xC000 },
00178 { "sth", LS, 0, 0xD000 },
00179 { "st.h", LS, 0, 0xD000 },
00180 { "bt", BR, 0, 0xE000 },
00181 { "bf", BR, 0, 0xE800 },
00182 { "br", BR, 1, 0xF000 },
00183 #define MCORE_INST_BR 0xF000
00184 { "bsr", BR, 0, 0xF800 },
00185 #define MCORE_INST_BSR 0xF800
00186
00187
00188 { "jbt", JC, 0, 0xE000 },
00189 { "jbf", JC, 0, 0xE800 },
00190 { "jbr", JU, 1, 0xF000 },
00191 { "jbsr", JL, 0, 0xF800 },
00192
00193
00194 { "rts", O0, 2, 0x00CF },
00195 { "rolc", DO21, 0, 0x0600 },
00196 { "rotlc", DO21, 0, 0x0600 },
00197 { "setc", O0, 0, 0x0C00 },
00198 { "clrc", O0, 0, 0x0F00 },
00199 { "tstle", O1, 0, 0x2200 },
00200 { "cmplei", OB, 0, 0x2200 },
00201 { "neg", O1, 0, 0x2800 },
00202 { "tstne", O1, 0, 0x2A00 },
00203 { "tstlt", O1, 0, 0x37F0 },
00204 { "mclri", OB2, 0, 0x3000 },
00205 { "mgeni", OBR2, 0, 0x3200 },
00206 { "mseti", OB2, 0, 0x3400 },
00207 { "mtsti", OB2, 0, 0x3600 },
00208 { "rori", RSI, 0, 0x3800 },
00209 { "rotri", RSI, 0, 0x3800 },
00210 { "nop", O0, 0, 0x1200 },
00211 { 0, 0, 0, 0 }
00212 };
00213 #endif