2 * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands.
3 * See the copyright notice in the ACK home directory, in the file "Copyright".
5 #define RCSID3 "$Id: mach3.c,v 0.3 1994/06/24 13:09:52 ceriel Exp $"
28 /* CPU dedicated registers */
34 0, AREG, 0xE, "intbase",
36 /* Tokens dedicated to addressing modes */
38 0, EXTERNAL, 0x16, "external",
40 0, INDICATOR, 'b', "b",
41 0, INDICATOR, 'c', "c",
42 0, INDICATOR, 'd', "d",
43 0, INDICATOR, 'f', "f",
44 0, INDICATOR, 'i', "i",
45 0, INDICATOR, 'm', "m",
46 0, INDICATOR, 'q', "q",
47 0, INDICATOR, 'u', "u",
48 0, INDICATOR, 'w', "w",
49 /* Memory management registers */
60 /* Instruction types */
61 /* Integer instructions */
62 0, ADD_I, mk_op2(0x5,I_BYTE,I_BYTE), "movb",
63 0, ADD_I, mk_op2(0x5,I_WORD,I_WORD), "movw",
64 0, ADD_I, mk_op2(0x5,I_DOUBLE,I_DOUBLE), "movd",
65 0, ADD_I, mk_op2(0x1,I_BYTE,I_BYTE), "cmpb",
66 0, ADD_I, mk_op2(0x1,I_WORD,I_WORD), "cmpw",
67 0, ADD_I, mk_op2(0x1,I_DOUBLE,I_DOUBLE), "cmpd",
68 0, ADD_I, mk_op2(0x0,I_BYTE,I_BYTE), "addb",
69 0, ADD_I, mk_op2(0x0,I_WORD,I_WORD), "addw",
70 0, ADD_I, mk_op2(0x0,I_DOUBLE,I_DOUBLE), "addd",
71 0, ADD_I, mk_op2(0x4,I_BYTE,I_BYTE), "addcb",
72 0, ADD_I, mk_op2(0x4,I_WORD,I_WORD), "addcw",
73 0, ADD_I, mk_op2(0x4,I_DOUBLE,I_DOUBLE), "addcd",
74 0, ADD_I, mk_op2(0x8,I_BYTE,I_BYTE), "subb",
75 0, ADD_I, mk_op2(0x8,I_WORD,I_WORD), "subw",
76 0, ADD_I, mk_op2(0x8,I_DOUBLE,I_DOUBLE), "subd",
77 0, ADD_I, mk_op2(0xC,I_BYTE,I_BYTE), "subcb",
78 0, ADD_I, mk_op2(0xC,I_WORD,I_WORD), "subcw",
79 0, ADD_I, mk_op2(0xC,I_DOUBLE,I_DOUBLE), "subcd",
80 0, COM, mk_op2(0x8,I_BYTE,I_BYTE), "negb",
81 0, COM, mk_op2(0x8,I_WORD,I_WORD), "negw",
82 0, COM, mk_op2(0x8,I_DOUBLE,I_DOUBLE), "negd",
83 0, COM, mk_op2(0xC,I_BYTE,I_BYTE), "absb",
84 0, COM, mk_op2(0xC,I_WORD,I_WORD), "absw",
85 0, COM, mk_op2(0xC,I_DOUBLE,I_DOUBLE), "absd",
86 0, MUL_I, mk_op2(0x8,I_BYTE,I_BYTE), "mulb",
87 0, MUL_I, mk_op2(0x8,I_WORD,I_WORD), "mulw",
88 0, MUL_I, mk_op2(0x8,I_DOUBLE,I_DOUBLE), "muld",
89 0, MUL_I, mk_op2(0xF,I_BYTE,I_BYTE), "divb",
90 0, MUL_I, mk_op2(0xF,I_WORD,I_WORD), "divw",
91 0, MUL_I, mk_op2(0xF,I_DOUBLE,I_DOUBLE), "divd",
92 0, MUL_I, mk_op2(0xE,I_BYTE,I_BYTE), "modb",
93 0, MUL_I, mk_op2(0xE,I_WORD,I_WORD), "modw",
94 0, MUL_I, mk_op2(0xE,I_DOUBLE,I_DOUBLE), "modd",
95 0, MUL_I, mk_op2(0xC,I_BYTE,I_BYTE), "quob",
96 0, MUL_I, mk_op2(0xC,I_WORD,I_WORD), "quow",
97 0, MUL_I, mk_op2(0xC,I_DOUBLE,I_DOUBLE), "quod",
98 0, MUL_I, mk_op2(0xD,I_BYTE,I_BYTE), "remb",
99 0, MUL_I, mk_op2(0xD,I_WORD,I_WORD), "remw",
100 0, MUL_I, mk_op2(0xD,I_DOUBLE,I_DOUBLE), "remd",
101 0, ADD_I, mk_op2(0xA,I_BYTE,I_BYTE), "andb",
102 0, ADD_I, mk_op2(0xA,I_WORD,I_WORD), "andw",
103 0, ADD_I, mk_op2(0xA,I_DOUBLE,I_DOUBLE), "andd",
104 0, ADD_I, mk_op2(0x6,I_BYTE,I_BYTE), "orb",
105 0, ADD_I, mk_op2(0x6,I_WORD,I_WORD), "orw",
106 0, ADD_I, mk_op2(0x6,I_DOUBLE,I_DOUBLE), "ord",
107 0, ADD_I, mk_op2(0x2,I_BYTE,I_BYTE), "bicb",
108 0, ADD_I, mk_op2(0x2,I_WORD,I_WORD), "bicw",
109 0, ADD_I, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "bicd",
110 0, ADD_I, mk_op2(0xE,I_BYTE,I_BYTE), "xorb",
111 0, ADD_I, mk_op2(0xE,I_WORD,I_WORD), "xorw",
112 0, ADD_I, mk_op2(0xE,I_DOUBLE,I_DOUBLE), "xord",
113 0, COM, mk_op2(0xD,I_BYTE,I_BYTE), "comb",
114 0, COM, mk_op2(0xD,I_WORD,I_WORD), "comw",
115 0, COM, mk_op2(0xD,I_DOUBLE,I_DOUBLE), "comd",
116 0, COM, mk_op2(0x1,I_BYTE,I_BYTE), "ashb",
117 0, COM, mk_op2(0x1,I_BYTE,I_WORD), "ashw",
118 0, COM, mk_op2(0x1,I_BYTE,I_DOUBLE), "ashd",
119 0, COM, mk_op2(0x5,I_BYTE,I_BYTE), "lshb",
120 0, COM, mk_op2(0x5,I_BYTE,I_WORD), "lshw",
121 0, COM, mk_op2(0x5,I_BYTE,I_DOUBLE), "lshd",
122 0, COM, mk_op2(0x0,I_BYTE,I_BYTE), "rotb",
123 0, COM, mk_op2(0x0,I_BYTE,I_WORD), "rotw",
124 0, COM, mk_op2(0x0,I_BYTE,I_DOUBLE), "rotd",
125 0, MOVID, mk_op2(0x4,I_BYTE,I_WORD), "movxbw",
126 0, MOVID, mk_op2(0x7,I_BYTE,I_DOUBLE), "movxbd",
127 0, MOVID, mk_op2(0x7,I_WORD,I_DOUBLE), "movxwd",
128 0, MOVID, mk_op2(0x5,I_BYTE,I_WORD), "movzbw",
129 0, MOVID, mk_op2(0x6,I_BYTE,I_DOUBLE), "movzbd",
130 0, MOVID, mk_op2(0x6,I_WORD,I_DOUBLE), "movzwd",
132 0, MOVID, mk_op2(0x7,I_DOUBLE,I_DOUBLE), "movxdd",
133 0, MOVID, mk_op2(0x6,I_DOUBLE,I_DOUBLE), "movzdd",
135 0, ADD_I, mk_op2(0x9,I_DOUBLE,I_DOUBLE), "addr",
136 /* Quick integer instructions */
137 0, MOVQ, mk_op1(0x5,I_BYTE), "movqb",
138 0, MOVQ, mk_op1(0x5,I_WORD), "movqw",
139 0, MOVQ, mk_op1(0x5,I_DOUBLE), "movqd",
140 0, MOVQ, mk_op1(0x1,I_BYTE), "cmpqb",
141 0, MOVQ, mk_op1(0x1,I_WORD), "cmpqw",
142 0, MOVQ, mk_op1(0x1,I_DOUBLE), "cmpqd",
143 0, MOVQ, mk_op1(0x0,I_BYTE), "addqb",
144 0, MOVQ, mk_op1(0x0,I_WORD), "addqw",
145 0, MOVQ, mk_op1(0x0,I_DOUBLE), "addqd",
146 /* Extended integer instructions */
147 0, MUL_I, mk_op2(0x9,I_BYTE,I_BYTE), "meib",
148 0, MUL_I, mk_op2(0x9,I_WORD,I_WORD), "meiw",
149 0, MUL_I, mk_op2(0x9,I_DOUBLE,I_DOUBLE), "meid",
150 0, MUL_I, mk_op2(0xB,I_BYTE,I_BYTE), "deib",
151 0, MUL_I, mk_op2(0xB,I_WORD,I_WORD), "deiw",
152 0, MUL_I, mk_op2(0xB,I_DOUBLE,I_DOUBLE), "deid",
153 /* Boolean instructions */
154 0, COM, mk_op2(0x9,I_BYTE,I_BYTE), "notb",
155 0, COM, mk_op2(0x9,I_WORD,I_WORD), "notw",
156 0, COM, mk_op2(0x9,I_DOUBLE,I_DOUBLE), "notd",
157 0, SEQ, mk_op1c(0x3,I_BYTE,B_EQ), "seqb",
158 0, SEQ, mk_op1c(0x3,I_WORD,B_EQ), "seqw",
159 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_EQ), "seqd",
160 0, SEQ, mk_op1c(0x3,I_BYTE,B_NE), "sneb",
161 0, SEQ, mk_op1c(0x3,I_WORD,B_NE), "snew",
162 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_NE), "sned",
163 0, SEQ, mk_op1c(0x3,I_BYTE,B_CS), "scsb",
164 0, SEQ, mk_op1c(0x3,I_WORD,B_CS), "scsw",
165 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_CS), "scsd",
166 0, SEQ, mk_op1c(0x3,I_BYTE,B_CC), "sccb",
167 0, SEQ, mk_op1c(0x3,I_WORD,B_CC), "sccw",
168 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_CC), "sccd",
169 0, SEQ, mk_op1c(0x3,I_BYTE,B_HI), "shib",
170 0, SEQ, mk_op1c(0x3,I_WORD,B_HI), "shiw",
171 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_HI), "shid",
172 0, SEQ, mk_op1c(0x3,I_BYTE,B_LS), "slsb",
173 0, SEQ, mk_op1c(0x3,I_WORD,B_LS), "slsw",
174 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LS), "slsd",
175 0, SEQ, mk_op1c(0x3,I_BYTE,B_GT), "sgtb",
176 0, SEQ, mk_op1c(0x3,I_WORD,B_GT), "sgtw",
177 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_GT), "sgtd",
178 0, SEQ, mk_op1c(0x3,I_BYTE,B_LE), "sleb",
179 0, SEQ, mk_op1c(0x3,I_WORD,B_LE), "slew",
180 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LE), "sled",
181 0, SEQ, mk_op1c(0x3,I_BYTE,B_FS), "sfsb",
182 0, SEQ, mk_op1c(0x3,I_WORD,B_FS), "sfsw",
183 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_FS), "sfsd",
184 0, SEQ, mk_op1c(0x3,I_BYTE,B_FC), "sfcb",
185 0, SEQ, mk_op1c(0x3,I_WORD,B_FC), "sfcw",
186 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_FC), "sfcd",
187 0, SEQ, mk_op1c(0x3,I_BYTE,B_LO), "slob",
188 0, SEQ, mk_op1c(0x3,I_WORD,B_LO), "slow",
189 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LO), "slod",
190 0, SEQ, mk_op1c(0x3,I_BYTE,B_HS), "shsb",
191 0, SEQ, mk_op1c(0x3,I_WORD,B_HS), "shsw",
192 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_HS), "shsd",
193 0, SEQ, mk_op1c(0x3,I_BYTE,B_LT), "sltb",
194 0, SEQ, mk_op1c(0x3,I_WORD,B_LT), "sltw",
195 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_LT), "sltd",
196 0, SEQ, mk_op1c(0x3,I_BYTE,B_GE), "sgeb",
197 0, SEQ, mk_op1c(0x3,I_WORD,B_GE), "sgew",
198 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_GE), "sged",
200 0, SEQ, mk_op1c(0x3,I_BYTE,B_TRUE), "strueb",
201 0, SEQ, mk_op1c(0x3,I_WORD,B_TRUE), "struew",
202 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_TRUE), "strued",
203 0, SEQ, mk_op1c(0x3,I_BYTE,B_FALSE), "sfalseb",
204 0, SEQ, mk_op1c(0x3,I_WORD,B_FALSE), "sfalsew",
205 0, SEQ, mk_op1c(0x3,I_DOUBLE,B_FALSE), "sfalsed",
207 /* Bit instructions */
208 0, ADD_I, mk_op2(0xD,I_BYTE,I_BYTE), "tbitb",
209 0, ADD_I, mk_op2(0xD,I_WORD,I_WORD), "tbitw",
210 0, ADD_I, mk_op2(0xD,I_DOUBLE,I_DOUBLE), "tbitd",
211 0, COM, mk_op2(0x6,I_BYTE,I_BYTE), "sbitb",
212 0, COM, mk_op2(0x6,I_WORD,I_WORD), "sbitw",
213 0, COM, mk_op2(0x6,I_DOUBLE,I_DOUBLE), "sbitd",
214 0, COM, mk_op2(0x7,I_BYTE,I_BYTE), "sbitib",
215 0, COM, mk_op2(0x7,I_WORD,I_WORD), "sbitiw",
216 0, COM, mk_op2(0x7,I_DOUBLE,I_DOUBLE), "sbitid",
217 0, COM, mk_op2(0x2,I_BYTE,I_BYTE), "cbitb",
218 0, COM, mk_op2(0x2,I_WORD,I_WORD), "cbitw",
219 0, COM, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "cbitd",
220 0, COM, mk_op2(0x3,I_BYTE,I_BYTE), "cbitib",
221 0, COM, mk_op2(0x3,I_WORD,I_WORD), "cbitiw",
222 0, COM, mk_op2(0x3,I_DOUBLE,I_DOUBLE), "cbitid",
223 0, COM, mk_op2(0xE,I_BYTE,I_BYTE), "ibitb",
224 0, COM, mk_op2(0xE,I_WORD,I_WORD), "ibitw",
225 0, COM, mk_op2(0xE,I_DOUBLE,I_DOUBLE), "ibitd",
226 0, CHECK, mk_op1(0x1,I_DOUBLE), "cvtp",
227 0, FFS, mk_op2c(0x5,I_BYTE,I_BYTE,0), "ffsb",
228 0, FFS, mk_op2c(0x5,I_WORD,I_BYTE,0), "ffsw",
229 0, FFS, mk_op2c(0x5,I_DOUBLE,I_BYTE,0), "ffsd",
230 /* Field instructions */
231 0, INS, mk_op2(0x0,I_BYTE,I_BYTE), "extb",
232 0, INS, mk_op2(0x0,I_WORD,I_WORD), "extw",
233 0, INS, mk_op2(0x0,I_DOUBLE,I_DOUBLE), "extd",
234 0, INSS, mk_op2(0x3,I_BYTE,I_BYTE), "extsb",
235 0, INSS, mk_op2(0x3,I_WORD,I_WORD), "extsw",
236 0, INSS, mk_op2(0x3,I_DOUBLE,I_DOUBLE), "extsd",
237 0, INS, mk_op2(0x2,I_BYTE,I_BYTE), "insb",
238 0, INS, mk_op2(0x2,I_WORD,I_WORD), "insw",
239 0, INS, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "insd",
240 0, INSS, mk_op2(0x2,I_BYTE,I_BYTE), "inssb",
241 0, INSS, mk_op2(0x2,I_WORD,I_WORD), "inssw",
242 0, INSS, mk_op2(0x2,I_DOUBLE,I_DOUBLE), "inssd",
243 /* String instructions */
244 0, MOVS, mk_op1c(0x0,I_BYTE,0), "movsb",
245 0, MOVS, mk_op1c(0x0,I_WORD,0), "movsw",
246 0, MOVS, mk_op1c(0x0,I_DOUBLE,0), "movsd",
247 0, MOVS, mk_op1c(0x0,I_BYTE,SO_TRANS), "movst",
248 0, MOVS, mk_op1c(0x1,I_BYTE,0), "cmpsb",
249 0, MOVS, mk_op1c(0x1,I_WORD,0), "cmpsw",
250 0, MOVS, mk_op1c(0x1,I_DOUBLE,0), "cmpsd",
251 0, MOVS, mk_op1c(0x1,I_BYTE,SO_TRANS), "cmpst",
252 0, MOVS, mk_op1c(0x3,I_BYTE,0), "skpsb",
253 0, MOVS, mk_op1c(0x3,I_WORD,0), "skpsw",
254 0, MOVS, mk_op1c(0x3,I_DOUBLE,0), "skpsd",
255 0, MOVS, mk_op1c(0x3,I_BYTE,SO_TRANS), "skpst",
256 /* Block instructions */
257 0, MOVM, mk_op2(0x0,I_BYTE,I_BYTE), "movmb",
258 0, MOVM, mk_op2(0x0,I_WORD,I_WORD), "movmw",
259 0, MOVM, mk_op2(0x0,I_DOUBLE,I_DOUBLE), "movmd",
260 0, MOVM, mk_op2(0x1,I_BYTE,I_BYTE), "cmpmb",
261 0, MOVM, mk_op2(0x1,I_WORD,I_WORD), "cmpmw",
262 0, MOVM, mk_op2(0x1,I_DOUBLE,I_DOUBLE), "cmpmd",
263 /* Packed decimal instructions */
264 0, COM, mk_op2(0xF,I_BYTE,I_BYTE), "addpb",
265 0, COM, mk_op2(0xF,I_WORD,I_WORD), "addpw",
266 0, COM, mk_op2(0xF,I_DOUBLE,I_DOUBLE), "addpd",
267 0, COM, mk_op2(0xB,I_BYTE,I_BYTE), "subpb",
268 0, COM, mk_op2(0xB,I_WORD,I_WORD), "subpw",
269 0, COM, mk_op2(0xB,I_DOUBLE,I_DOUBLE), "subpd",
270 /* Array instructions */
271 0, CHECK, mk_op2(0x4,I_BYTE,I_BYTE), "indexb",
272 0, CHECK, mk_op2(0x4,I_WORD,I_WORD), "indexw",
273 0, CHECK, mk_op2(0x4,I_DOUBLE,I_DOUBLE), "indexd",
274 0, CHECK, mk_op2(0x3,I_BYTE,I_BYTE), "checkb",
275 0, CHECK, mk_op2(0x3,I_WORD,I_WORD), "checkw",
276 0, CHECK, mk_op2(0x3,I_DOUBLE,I_DOUBLE), "checkd",
277 /* Processor control instructions */
278 0, JUMP, mk_op1(0x4,I_DOUBLE), "jump",
279 0, BR, mk_c(B_EQ), "beq",
280 0, BR, mk_c(B_NE), "bne",
281 0, BR, mk_c(B_CS), "bcs",
282 0, BR, mk_c(B_CC), "bcc",
283 0, BR, mk_c(B_HI), "bhi",
284 0, BR, mk_c(B_LS), "bls",
285 0, BR, mk_c(B_GT), "bgt",
286 0, BR, mk_c(B_LE), "ble",
287 0, BR, mk_c(B_FS), "bfs",
288 0, BR, mk_c(B_FC), "bfc",
289 0, BR, mk_c(B_LO), "blo",
290 0, BR, mk_c(B_HS), "bhs",
291 0, BR, mk_c(B_LT), "blt",
292 0, BR, mk_c(B_GE), "bge",
293 0, BR, mk_c(B_TRUE), "br",
295 0, BR, mk_c(B_FALSE), "bfalse",
297 0, ADJSP, mk_op1(0xE,I_BYTE), "caseb",
298 0, ADJSP, mk_op1(0xE,I_WORD), "casew",
299 0, ADJSP, mk_op1(0xE,I_DOUBLE), "cased",
300 0, ACB, mk_op1(0x4,I_BYTE), "acbb",
301 0, ACB, mk_op1(0x4,I_WORD), "acbw",
302 0, ACB, mk_op1(0x4,I_DOUBLE), "acbd",
303 0, JSR, mk_op1(0xC,I_DOUBLE), "jsr",
304 0, BSR, mk_op(0x0), "bsr",
305 0, RET, mk_op(0x1), "ret",
306 0, RET, mk_op(0x2), "cxp",
307 0, ADJSP, mk_op1(0x0,I_DOUBLE), "cxpd",
308 0, RET, mk_op(0x3), "rxp",
309 0, RET, mk_op(0x4), "rett",
310 0, WAIT, mk_op(0x5), "reti",
311 0, WAIT, mk_op(0xC), "dia",
312 /* Processor service instructions */
313 0, ADJSP, mk_op1(0xA,I_BYTE), "adjspb",
314 0, ADJSP, mk_op1(0xA,I_WORD), "adjspw",
315 0, ADJSP, mk_op1(0xA,I_DOUBLE), "adjspd",
316 0, ADJSP, mk_op1(0x2,I_BYTE), "bicpsrb",
317 0, ADJSP, mk_op1(0x2,I_WORD), "bicpsrw",
318 0, ADJSP, mk_op1(0x6,I_BYTE), "bispsrb",
319 0, ADJSP, mk_op1(0x6,I_WORD), "bispsrw",
321 0, ADJSP, mk_op1(0x2,I_DOUBLE), "bicpsrd",
322 0, ADJSP, mk_op1(0x6,I_DOUBLE), "bispsrd",
324 0, SAVE, mk_op(0x6), "save",
325 0, SAVE, mk_op(0x7), "restore",
326 0, ENTER, mk_op(0x8), "enter",
327 0, SAVE, mk_op(0x9), "exit",
328 0, LPR, mk_op1(0x6,I_BYTE), "lprb",
329 0, LPR, mk_op1(0x6,I_WORD), "lprw",
330 0, LPR, mk_op1(0x6,I_DOUBLE), "lprd",
331 0, LPR, mk_op1(0x2,I_BYTE), "sprb",
332 0, LPR, mk_op1(0x2,I_WORD), "sprw",
333 0, LPR, mk_op1(0x2,I_DOUBLE), "sprd",
334 0, SETCFG, mk_op1(0x2,I_DOUBLE), "setcfg",
335 0, WAIT, mk_op(0xF), "bpt",
336 0, WAIT, mk_op(0xD), "flag",
337 0, WAIT, mk_op(0xE), "svc",
338 0, WAIT, mk_op(0xA), "nop",
339 0, WAIT, mk_op(0xB), "wait",
340 /* Memory management instructions */
341 0, LMR, mk_op1(0x2,I_DOUBLE), "lmr",
342 0, LMR, mk_op1(0x3,I_DOUBLE), "smr",
343 0, RDVAL, mk_op1(0x0,I_DOUBLE), "rdval",
344 0, RDVAL, mk_op1(0x1,I_DOUBLE), "wrval",
346 /* The assembler ref. man and the CPU description booklet differ
347 in the encoding of these instructions
349 0, FFS, mk_op2c(0x6,I_BYTE,I_BYTE,1), "movsub",
350 0, FFS, mk_op2c(0x6,I_WORD,I_WORD,1), "movsuw",
351 0, FFS, mk_op2c(0x6,I_DOUBLE,I_DOUBLE,1),"movsud",
352 0, FFS, mk_op2c(0x6,I_BYTE,I_BYTE,3), "movusb",
353 0, FFS, mk_op2c(0x6,I_WORD,I_WORD,3), "movusw",
354 0, FFS, mk_op2c(0x6,I_DOUBLE,I_DOUBLE,3),"movusd",
356 /* assembler reference manual version */
357 0, FFS, mk_op2c(0x7,I_BYTE,I_BYTE,0), "movsub",
358 0, FFS, mk_op2c(0x7,I_WORD,I_WORD,0), "movsuw",
359 0, FFS, mk_op2c(0x7,I_DOUBLE,I_DOUBLE,0),"movsud",
360 0, FFS, mk_op2c(0x6,I_BYTE,I_BYTE,0), "movusb",
361 0, FFS, mk_op2c(0x6,I_WORD,I_WORD,0), "movusw",
362 0, FFS, mk_op2c(0x6,I_DOUBLE,I_DOUBLE,0),"movusd",
364 /* Floating point instructions */
365 0, ADD_F, mk_op2(0xD,F_FLOAT,F_FLOAT), "absf",
366 0, ADD_F, mk_op2(0xD,F_LONG,F_LONG), "absl",
367 0, ADD_F, mk_op2(0x0,F_FLOAT,F_FLOAT), "addf",
368 0, ADD_F, mk_op2(0x0,F_LONG,F_LONG), "addl",
369 0, ADD_F, mk_op2(0x2,F_FLOAT,F_FLOAT), "cmpf",
370 0, ADD_F, mk_op2(0x2,F_LONG,F_LONG), "cmpl",
371 0, ADD_F, mk_op2(0x8,F_FLOAT,F_FLOAT), "divf",
372 0, ADD_F, mk_op2(0x8,F_LONG,F_LONG), "divl",
373 0, ADD_F, mk_op2(0xC,F_FLOAT,F_FLOAT), "mulf",
374 0, ADD_F, mk_op2(0xC,F_LONG,F_LONG), "mull",
375 0, ADD_F, mk_op2(0x4,F_FLOAT,F_FLOAT), "subf",
376 0, ADD_F, mk_op2(0x4,F_LONG,F_LONG), "subl",
377 0, ADD_F, mk_op2(0x5,F_FLOAT,F_FLOAT), "negf",
378 0, ADD_F, mk_op2(0x5,F_LONG,F_LONG), "negl",
379 0, ADD_F, mk_op2(0x1,F_FLOAT,F_FLOAT), "movf",
380 0, ADD_F, mk_op2(0x1,F_LONG,F_LONG), "movl",
381 0, MOVIF, mk_op2(0x0,I_BYTE,F_FLOAT), "movbf",
382 0, MOVIF, mk_op2(0x0,I_WORD,F_FLOAT), "movwf",
383 0, MOVIF, mk_op2(0x0,I_DOUBLE,F_FLOAT), "movdf",
384 0, MOVIF, mk_op2(0x0,I_BYTE,F_LONG), "movbl",
385 0, MOVIF, mk_op2(0x0,I_WORD,F_LONG), "movwl",
386 0, MOVIF, mk_op2(0x0,I_DOUBLE,F_LONG), "movdl",
387 0, MOVFL, mk_op2(0x3,F_FLOAT,F_LONG), "movfl",
388 0, MOVFL, mk_op2(0x2,F_LONG,F_FLOAT), "movlf",
389 0, TRUNC, mk_op2(0x7,F_FLOAT,I_BYTE), "floorfb",
390 0, TRUNC, mk_op2(0x7,F_FLOAT,I_WORD), "floorfw",
391 0, TRUNC, mk_op2(0x7,F_FLOAT,I_DOUBLE), "floorfd",
392 0, TRUNC, mk_op2(0x7,F_LONG,I_BYTE), "floorlb",
393 0, TRUNC, mk_op2(0x7,F_LONG,I_WORD), "floorlw",
394 0, TRUNC, mk_op2(0x7,F_LONG,I_DOUBLE), "floorld",
395 0, TRUNC, mk_op2(0x4,F_FLOAT,I_BYTE), "roundfb",
396 0, TRUNC, mk_op2(0x4,F_FLOAT,I_WORD), "roundfw",
397 0, TRUNC, mk_op2(0x4,F_FLOAT,I_DOUBLE), "roundfd",
398 0, TRUNC, mk_op2(0x4,F_LONG,I_BYTE), "roundlb",
399 0, TRUNC, mk_op2(0x4,F_LONG,I_WORD), "roundlw",
400 0, TRUNC, mk_op2(0x4,F_LONG,I_DOUBLE), "roundld",
401 0, TRUNC, mk_op2(0x5,F_FLOAT,I_BYTE), "truncfb",
402 0, TRUNC, mk_op2(0x5,F_FLOAT,I_WORD), "truncfw",
403 0, TRUNC, mk_op2(0x5,F_FLOAT,I_DOUBLE), "truncfd",
404 0, TRUNC, mk_op2(0x5,F_LONG,I_BYTE), "trunclb",
405 0, TRUNC, mk_op2(0x5,F_LONG,I_WORD), "trunclw",
406 0, TRUNC, mk_op2(0x5,F_LONG,I_DOUBLE), "truncld",
407 0, LFSR, mk_op(0x1), "lfsr",
408 0, LFSR, mk_op(0x6), "sfsr",
409 /* Slave processor instructions */
410 0, LCR, mk_op1(0x2,I_DOUBLE), "lcr", /* Sure ? */
411 0, LCR, mk_op1(0x3,I_DOUBLE), "scr", /* Sure ? */
412 0, CATST, mk_op1(0x0,I_DOUBLE), "catst0",/* Sure ? */
413 0, CATST, mk_op1(0x1,I_DOUBLE), "catst1",/* Sure ? */
414 0, LCSR, mk_op1(0x1,S_DOUBLE), "lcsr", /* Sure ? */
415 0, LCSR, mk_op1(0x6,S_DOUBLE), "scsr", /* Sure ? */
416 0, CCVSI, mk_op2(0x7,S_DOUBLE,I_BYTE), "ccv0db",
417 0, CCVSI, mk_op2(0x7,S_DOUBLE,I_WORD), "ccv0dw",
418 0, CCVSI, mk_op2(0x7,S_DOUBLE,I_DOUBLE), "ccv0dd",
419 0, CCVSI, mk_op2(0x7,S_QUAD,I_BYTE), "ccv0qb",
420 0, CCVSI, mk_op2(0x7,S_QUAD,I_WORD), "ccv0qw",
421 0, CCVSI, mk_op2(0x7,S_QUAD,I_DOUBLE), "ccv0qd",
422 0, CCVSI, mk_op2(0x5,S_DOUBLE,I_BYTE), "ccv1db",
423 0, CCVSI, mk_op2(0x5,S_DOUBLE,I_WORD), "ccv1dw",
424 0, CCVSI, mk_op2(0x5,S_DOUBLE,I_DOUBLE), "ccv1dd",
425 0, CCVSI, mk_op2(0x5,S_QUAD,I_BYTE), "ccv1qb",
426 0, CCVSI, mk_op2(0x5,S_QUAD,I_WORD), "ccv1qw",
427 0, CCVSI, mk_op2(0x5,S_QUAD,I_DOUBLE), "ccv1qd",
428 0, CCVSI, mk_op2(0x4,S_DOUBLE,I_BYTE), "ccv2db",
429 0, CCVSI, mk_op2(0x4,S_DOUBLE,I_WORD), "ccv2dw",
430 0, CCVSI, mk_op2(0x4,S_DOUBLE,I_DOUBLE), "ccv2dd",
431 0, CCVSI, mk_op2(0x4,S_QUAD,I_BYTE), "ccv2qb",
432 0, CCVSI, mk_op2(0x4,S_QUAD,I_WORD), "ccv2qw",
433 0, CCVSI, mk_op2(0x4,S_QUAD,I_DOUBLE), "ccv2qd",
434 0, CCVIS, mk_op2(0x0,I_BYTE,S_DOUBLE), "ccv3bd",
435 0, CCVIS, mk_op2(0x0,I_WORD,S_DOUBLE), "ccv3wd",
436 0, CCVIS, mk_op2(0x0,I_DOUBLE,S_DOUBLE), "ccv3dd",
437 0, CCVIS, mk_op2(0x0,I_BYTE,S_QUAD), "ccv3bq",
438 0, CCVIS, mk_op2(0x0,I_WORD,S_QUAD), "ccv3wq",
439 0, CCVIS, mk_op2(0x0,I_DOUBLE,S_QUAD), "ccv3dq",
440 0, CCVSS, mk_op2(0x3,S_DOUBLE,S_QUAD), "ccv4dq",
441 0, CCVSS, mk_op2(0x2,S_QUAD,S_DOUBLE), "ccv5qd",
442 0, CMOV, mk_op2(0x0,S_DOUBLE,S_DOUBLE), "ccal0d",
443 0, CMOV, mk_op2(0x0,S_QUAD,S_QUAD), "ccal0q",
444 0, CMOV, mk_op2(0x4,S_DOUBLE,S_DOUBLE), "ccal1d",
445 0, CMOV, mk_op2(0x4,S_QUAD,S_QUAD), "ccal1q",
446 0, CMOV, mk_op2(0xC,S_DOUBLE,S_DOUBLE), "ccal2d",
447 0, CMOV, mk_op2(0xC,S_QUAD,S_QUAD), "ccal2q",
448 0, CMOV, mk_op2(0x8,S_DOUBLE,S_DOUBLE), "ccal3d",
449 0, CMOV, mk_op2(0x8,S_QUAD,S_QUAD), "ccal3q",
450 0, CMOV, mk_op2(0x2,S_DOUBLE,S_DOUBLE), "ccmpd",
451 0, CMOV, mk_op2(0x2,S_QUAD,S_QUAD), "ccmpq",
452 0, CMOV, mk_op2(0x1,S_DOUBLE,S_DOUBLE), "cmov0d",
453 0, CMOV, mk_op2(0x1,S_QUAD,S_QUAD), "cmov0q",
454 0, CMOV, mk_op2(0xD,S_DOUBLE,S_DOUBLE), "cmov1d",
455 0, CMOV, mk_op2(0xD,S_QUAD,S_QUAD), "cmov1q",
456 0, CMOV, mk_op2(0x5,S_DOUBLE,S_DOUBLE), "cmov2d",
457 0, CMOV, mk_op2(0x5,S_QUAD,S_QUAD), "cmov2q",