sim: use AM_MAINTAINER_MODE
[external/binutils.git] / sim / mn10300 / mn10300.igen
1 // -*- C -*-
2 :option:::insn-bit-size:8
3 :option:::insn-specifying-widths:true
4 :option:::hi-bit-nr:7
5 :model:::mn10300:mn10300:
6 :model:::am33:am33:
7 :model:::am33_2:am33_2:
8
9 // What do we do with an illegal instruction?
10 :internal::::illegal:
11 {
12   PC = cia;
13   program_interrupt(SD, CPU, cia, SIM_SIGILL);
14 }
15
16 // 1000 DnDn imm8....; mov imm8,Dn (imm8 is sign extended)
17 4.0x8,2.DM1,2.DN0=DM1+8.IMM8:S0i:::mov
18 "mov"
19 *mn10300
20 *am33
21 *am33_2
22 {
23   /*  OP_8000 (); */
24   signed32 immed = EXTEND8 (IMM8);
25   State.regs[REG_D0+DN0] = immed;
26   PC = cia;
27 }
28
29 // 1000 DmDn; mov Dm,Dn (Dm != Dn, see above when Dm == Dn)
30 4.0x8,2.DM1,2.DN0!DM1:S0:::mov
31 "mov"
32 *mn10300
33 *am33
34 *am33_2
35 {
36   PC = cia;
37   /* OP_80 (); */
38   State.regs[REG_D0+DN0] = State.regs[REG_D0+DM1];
39 }
40
41
42 // 1111 0001 1110 DmAn; mov Dm,An
43 8.0xf1+1110,2.DM1,2.AN0:D0:::mov
44 "mov"
45 *mn10300
46 *am33
47 *am33_2
48 {
49   /* OP_F1E0 (); */
50   PC = cia;
51   State.regs[REG_A0 + AN0] = State.regs[REG_D0 + DM1];
52 }
53
54
55 // 1111 0001 1101 AmDn; mov Am,Dn
56 8.0xf1+1101,2.AM1,2.DN0:D0a:::mov
57 "mov"
58 *mn10300
59 *am33
60 *am33_2
61 {
62   /* OP_F1D0 (); */
63   PC = cia;
64   State.regs[REG_D0 + DN0] = State.regs[REG_A0 + AM1];
65 }
66
67
68 // 1001 AnAn imm8....; mov imm8,An (imm8 is zero-extended)
69 4.0x9,2.AM1,2.AN0=AM1+8.IMM8:S0ai:::mov
70 "mov"
71 *mn10300
72 *am33
73 *am33_2
74 {
75    PC = cia;
76    /* OP_9000 (); */
77    State.regs[REG_A0+AN0] = IMM8;
78 }
79
80
81 // 1001 AmAn; mov Am,An (Am != An, save above when Am == An)
82 4.0x9,2.AM1,2.AN0!AM1:S0a:::mov
83 "mov"
84 *mn10300
85 *am33
86 *am33_2
87 {
88    PC = cia;
89    /* OP_90 (); */
90    State.regs[REG_A0+AN0] = State.regs[REG_A0+AM1];
91 }
92
93
94 // 0011 11An; mov SP,An
95 4.0x3,11,2.AN0:S0b:::mov
96 "mov"
97 *mn10300
98 *am33
99 *am33_2
100 {
101   /* OP_3C (); */
102   PC = cia;
103   State.regs[REG_A0 + AN0] = State.regs[REG_SP];
104 }
105
106
107 // 1111 0010 1111 Am00; mov Am,SP
108 8.0xf2+4.0xf,2.AM1,00:D0b:::mov
109 "mov"
110 *mn10300
111 *am33
112 *am33_2
113 {
114   /* OP_F2F0 (); */
115   PC = cia;
116   State.regs[REG_SP] = State.regs[REG_A0 + AM1];
117 }
118
119
120 // 1111 0010 1110 01Dn; mov PSW,Dn
121 8.0xf2+4.0xe,01,2.DN0:D0c:::mov
122 "mov"
123 *mn10300
124 *am33
125 *am33_2
126 {
127   /* OP_F2E4 (); */
128   PC = cia;
129   State.regs[REG_D0 + DN0] = PSW;
130 }
131
132
133 // 1111 0010 1111 Dm11; mov Dm,PSW
134 8.0xf2+4.0xf,2.DM1,11:D0d:::mov
135 "mov"
136 *mn10300
137 *am33
138 *am33_2
139 {
140   /* OP_F2F3 (); */
141   PC = cia;
142   PSW = State.regs[REG_D0 + DM1];
143 }
144
145
146 // 1111 0010 1110 00Dn; mov MDR,Dn
147 8.0xf2+4.0xe,00,2.DN0:D0e:::mov
148 "mov"
149 *mn10300
150 *am33
151 *am33_2
152 {
153   /* OP_F2E0 (); */
154   PC = cia;
155   State.regs[REG_D0 + DN0] = State.regs[REG_MDR];
156 }
157
158
159 // 1111 0010 1111 Dm10; mov Dm,MDR
160 8.0xf2+4.0xf,2.DM1,10:D0f:::mov
161 "mov"
162 *mn10300
163 *am33
164 *am33_2
165 {
166   /* OP_F2F2 (); */
167   PC = cia;
168   State.regs[REG_MDR] = State.regs[REG_D0 + DM1];
169 }
170
171
172 // 0111 DnAm; mov (Am),Dn
173 4.0x7,2.DN1,2.AM0:S0c:::mov
174 "mov"
175 *mn10300
176 *am33
177 *am33_2
178 {
179   /* OP_70 (); */
180   PC = cia;
181   State.regs[REG_D0 + DN1] = load_word (State.regs[REG_A0 + AM0]);
182 }
183
184
185 // 1111 1000 0000 DnAm d8......; mov (d8,Am),Dn (d8 is sign-extended)
186 8.0xf8+4.0x0,2.DN1,2.AM0+8.D8:D1:::mov
187 "mov"
188 *mn10300
189 *am33
190 *am33_2
191 {
192   /* OP_F80000 (); */
193   PC = cia;
194   State.regs[REG_D0 + DN1]
195     = load_word ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
196 }
197
198
199 // 1111 1010 0000 DnAm d16.....; mov (d16,Am),Dn (d16 is sign-extended.)
200 8.0xfa+4.0x0,2.DN1,2.AM0+8.D16A+8.D16B:D2:::mov
201 "mov"
202 *mn10300
203 *am33
204 *am33_2
205 {
206   /* OP_FA000000 (); */
207   PC = cia;
208   State.regs[REG_D0 + DN1]
209     = load_word ((State.regs[REG_A0 + AM0] + EXTEND16 (FETCH16(D16A, D16B))));
210 }
211
212
213 // 1111 1100 0000 DnAm d32.....; mov (d32,Am),Dn
214 8.0xfc+4.0x0,2.DN1,2.AM0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::mov
215 "mov"
216 *mn10300
217 *am33
218 *am33_2
219 {
220   /* OP_FC000000 (); */
221   PC = cia;
222   State.regs[REG_D0 + DN1]
223     = load_word ((State.regs[REG_A0 + AM0]
224                   + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
225 }
226
227
228 // 0101 10Dn d8......; mov (d8,SP),Dn (d8 is zero-extended)
229 4.0x5,10,2.DN0+8.D8:S1:::mov
230 "mov"
231 *mn10300
232 *am33
233 *am33_2
234 {
235   /* OP_5800 (); */
236   PC = cia;
237   State.regs[REG_D0 + DN0] = load_word (State.regs[REG_SP] + D8);
238 }
239
240
241 // 1111 1010 1011 01Dn d16.....; mov (d16,SP),Dn (d16 is zero-extended.)
242 8.0xfa+4.0xb,01,2.DN0+8.IMM16A+8.IMM16B:D2a:::mov
243 "mov"
244 *mn10300
245 *am33
246 *am33_2
247 {
248   /* OP_FAB40000 (); */
249   PC = cia;
250   State.regs[REG_D0 + DN0]
251     = load_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B));
252 }
253
254
255 // 1111 1010 1011 01Dn d32.....; mov (d32,SP),Dn
256 8.0xfc+4.0xb,01,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4a:::mov
257 "mov"
258 *mn10300
259 *am33
260 *am33_2
261 {
262   /* OP_FCB40000 (); */
263   PC = cia;
264   State.regs[REG_D0 + DN0]
265      = load_word (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
266 }
267
268
269 // 1111 0011 00Dn DiAm; mov (Di,Am),Dn
270 8.0xf3+00,2.DN2,2.DI,2.AM0:D0g:::mov
271 "mov"
272 *mn10300
273 *am33
274 *am33_2
275 {
276   /* OP_F300 (); */
277   PC = cia;
278   State.regs[REG_D0 + DN2]
279     = load_word ((State.regs[REG_A0 + AM0] + State.regs[REG_D0 + DI]));
280 }
281
282
283 // 0011 00Dn abs16...; mov (abs16),Dn (abs16 is zero-extended)
284 4.0x3,00,2.DN0+8.IMM16A+8.IMM16B:S2:::mov
285 "mov"
286 *mn10300
287 *am33
288 *am33_2
289 {
290   /* OP_300000 (); */
291   PC = cia;
292   State.regs[REG_D0 + DN0] = load_word (FETCH16(IMM16A, IMM16B));
293 }
294
295 // 1111 1100 1010 01Dn abs32...; mov (abs32),Dn
296 8.0xfc+4.0xa,01,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4b:::mov
297 "mov"
298 *mn10300
299 *am33
300 *am33_2
301 {
302   /* OP_FCA40000 (); */
303   PC = cia;
304   State.regs[REG_D0 + DN0] = load_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
305 }
306
307
308 // 1111 0000 0000 AnAm; mov (Am),An
309 8.0xf0+4.0x0,2.AN1,2.AM0:D0h:::mov
310 "mov"
311 *mn10300
312 *am33
313 *am33_2
314 {
315   /* OP_F000 (); */
316   PC = cia;
317   State.regs[REG_A0 + AN1] = load_word (State.regs[REG_A0 + AM0]);
318 }
319
320
321 // 1111 1000 0010 AnAm d8......; mov (d8,Am),An (d8 is sign-extended)
322 8.0xf8+4.0x2,2.AN1,2.AM0+8.D8:D1a:::mov
323 "mov"
324 *mn10300
325 *am33
326 *am33_2
327 {
328   /* OP_F82000 (); */
329   PC = cia;
330   State.regs[REG_A0 + AN1]
331     = load_word ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
332 }
333
334
335 // 1111 1010 0010 AnAm d16.....; mov (d16,Am),An (d16 is sign-extended.)
336 8.0xfa+4.0x2,2.AN1,2.AM0+8.D16A+8.D16B:D2b:::mov
337 "mov"
338 *mn10300
339 *am33
340 *am33_2
341 {
342   /* OP_FA200000 (); */
343   PC = cia;
344   State.regs[REG_A0 + AN1]
345     = load_word ((State.regs[REG_A0 + AM0]
346                   + EXTEND16 (FETCH16(D16A, D16B))));
347 }
348
349
350 // 1111 1100 0010 AnAm d32.....; mov (d32,Am),An
351 8.0xfc+4.0x2,2.AN1,2.AM0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4c:::mov
352 "mov"
353 *mn10300
354 *am33
355 *am33_2
356 {
357   /* OP_FC200000 (); */
358   PC = cia;
359   State.regs[REG_A0 + AN1]
360     = load_word ((State.regs[REG_A0 + AM0]
361                   + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
362 }
363
364
365 // 0101 11An d8......; mov (d8,SP),An (d8 is zero-extended)
366 4.0x5,11,2.AN0+8.D8:S1a:::mov
367 "mov"
368 *mn10300
369 *am33
370 *am33_2
371 {
372   /* OP_5C00 (); */
373   PC = cia;
374   State.regs[REG_A0 + AN0]
375     = load_word (State.regs[REG_SP] + D8);
376 }
377
378
379 // 1111 1010 1011 00An d16.....; mov (d16,SP),An (d16 is zero-extended.)
380 8.0xfa+4.0xb,00,2.AN0+8.IMM16A+8.IMM16B:D2c:::mov
381 "mov"
382 *mn10300
383 *am33
384 *am33_2
385 {
386   /* OP_FAB00000 (); */
387   PC = cia;
388   State.regs[REG_A0 + AN0]
389     = load_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B));
390 }
391
392
393 // 1111 1100 1011 00An d32.....; mov (d32,SP),An
394 8.0xfc+4.0xb,00,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4d:::mov
395 "mov"
396 *mn10300
397 *am33
398 *am33_2
399 {
400   /* OP_FCB00000 (); */
401   PC = cia;
402   State.regs[REG_A0 + AN0]
403     = load_word (State.regs[REG_SP]
404                  + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
405 }
406
407
408 // 1111 0011 10An DiAm; mov (Di,Am),An
409 8.0xf3+10,2.AN2,2.DI,2.AM0:D0i:::mov
410 "mov"
411 *mn10300
412 *am33
413 *am33_2
414 {
415   /* OP_F380 (); */
416   PC = cia;
417   State.regs[REG_A0 + AN2]
418     = load_word ((State.regs[REG_A0 + AM0]
419                  + State.regs[REG_D0 + DI]));
420 }
421
422
423 // 1111 1010 1010 00An abs16...; mov (abs16),An (abs16 is zero-extended)
424 8.0xfa+4.0xa,00,2.AN0+8.IMM16A+8.IMM16B:D2d:::mov
425 "mov"
426 *mn10300
427 *am33
428 *am33_2
429 {
430   /* OP_FAA00000 (); */
431   PC = cia;
432   State.regs[REG_A0 + AN0] = load_word (FETCH16(IMM16A, IMM16B));
433 }
434
435
436 // 1111 1100 1010 00An abs32...; mov (abs32),An
437 8.0xfc+4.0xa,00,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4e:::mov
438 "mov"
439 *mn10300
440 *am33
441 *am33_2
442 {
443   /* OP_FCA00000 (); */
444   PC = cia;
445   State.regs[REG_A0 + AN0]
446     = load_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
447 }
448
449
450 // 1111 1000 1111 00Am d8......; mov (d8,Am),SP (d8 is sign-extended)
451 8.0xf8+4.0xf,00,2.AM0+8.D8:D1b:::mov
452 "mov"
453 *mn10300
454 *am33
455 *am33_2
456 {
457   /* OP_F8F000 (); */
458   PC = cia;
459   State.regs[REG_SP]
460     = load_word ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
461 }
462
463
464 // 0110 DmAn; mov Dm,(An)
465 4.0x6,2.DM1,2.AN0:S0d:::mov
466 "mov"
467 *mn10300
468 *am33
469 *am33_2
470 {
471   /* OP_60 (); */
472   PC = cia;
473   store_word (State.regs[REG_A0 + AN0], State.regs[REG_D0 + DM1]);
474 }
475
476
477 // 1111 1000 0001 DmAn d8......; mov Dm,(d8,An) (d8 is sign-extended)
478 8.0xf8+4.0x1,2.DM1,2.AN0+8.D8:D1c:::mov
479 "mov"
480 *mn10300
481 *am33
482 *am33_2
483 {
484   /* OP_F81000 (); */
485   PC = cia;
486   store_word ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
487               State.regs[REG_D0 + DM1]);
488 }
489
490
491 // 1111 1010 0001 DmAn d16.....; mov Dm,(d16,An) (d16 is sign-extended.)
492 8.0xfa+4.0x1,2.DM1,2.AN0+8.D16A+8.D16B:D2e:::mov
493 "mov"
494 *mn10300
495 *am33
496 *am33_2
497 {
498   /* OP_FA100000 (); */
499   PC = cia;
500   store_word ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
501               State.regs[REG_D0 + DM1]);
502 }
503
504
505 // 1111 1100 0001 DmAn d32.....; mov Dm,(d32,An)
506 8.0xfc+4.0x1,2.DM1,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4f:::mov
507 "mov"
508 *mn10300
509 *am33
510 *am33_2
511 {
512   /* OP_FC100000 (); */
513   PC = cia;
514   store_word ((State.regs[REG_A0 + AN0]
515                + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)),
516               State.regs[REG_D0 + DM1]);
517 }
518
519
520 // 0100 Dm10 d8......; mov Dm,(d8,SP) (d8 is zero-extended)
521 4.0x4,2.DM1,10+8.D8:S1b:::mov
522 "mov"
523 *mn10300
524 *am33
525 *am33_2
526 {
527   /* OP_4200 (); */
528   PC = cia;
529   store_word (State.regs[REG_SP] + D8, State.regs[REG_D0 + DM1]);
530 }
531
532
533 // 1111 1010 1001 Dm01 d16.....; mov Dm,(d16,SP) (d16 is zero-extended.)
534 8.0xfa+4.0x9,2.DM1,01+8.IMM16A+8.IMM16B:D2f:::mov
535 "mov"
536 *mn10300
537 *am33
538 *am33_2
539 {
540   /* OP_FA910000 (); */
541   PC = cia;
542   store_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
543               State.regs[REG_D0 + DM1]);
544 }
545
546
547 // 1111 1100 1001 Dm01 d32.....; mov Dm,(d32,SP)
548 8.0xfc+4.0x9,2.DM1,01+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4g:::mov
549 "mov"
550 *mn10300
551 *am33
552 *am33_2
553 {
554   /* OP_FC910000 (); */
555   PC = cia;
556   store_word (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
557               State.regs[REG_D0 + DM1]);
558 }
559
560
561 // 1111 0011 01Dm DiAn; mov Dm,(Di,An)
562 8.0xf3+01,2.DM2,2.DI,2.AN0:D0j:::mov
563 "mov"
564 *mn10300
565 *am33
566 *am33_2
567 {
568   /* OP_F340 (); */
569   PC = cia;
570   store_word ((State.regs[REG_A0 + AN0] + State.regs[REG_D0 + DI]),
571               State.regs[REG_D0 + DM2]);
572 }
573
574
575 // 0000 Dm01 abs16..., mov Dm,(abs16) (abs16 is zero-extended).
576 4.0x0,2.DM1,01+8.IMM16A+8.IMM16B:S2a:::mov
577 "mov"
578 *mn10300
579 *am33
580 *am33_2
581 {
582   /* OP_10000 (); */
583   PC = cia;
584   store_word (FETCH16(IMM16A, IMM16B), State.regs[REG_D0 + DM1]);
585 }
586
587
588 // 1111 1100 1000 Dm01 abs32...; mov Dm,(abs32)
589 8.0xfc+4.0x8,2.DM1,01+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4h:::mov
590 "mov"
591 *mn10300
592 *am33
593 *am33_2
594 {
595   /* OP_FC810000 (); */
596   PC = cia;
597   store_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
598               State.regs[REG_D0 + DM1]);
599 }
600
601
602 // 1111 0000 0001 AmAn; mov Am,(An)
603 8.0xf0+4.0x1,2.AM1,2.AN0:D0k:::mov
604 "mov"
605 *mn10300
606 *am33
607 *am33_2
608 {
609   /* OP_F010 (); */
610   PC = cia;
611   store_word (State.regs[REG_A0 + AN0], State.regs[REG_A0 + AM1]);
612 }
613
614
615 // 1111 1000 0011 AmAn d8......; mov Am,(d8,An) (d8 is sign-extended)
616 8.0xf8+4.0x3,2.AM1,2.AN0+8.D8:D1d:::mov
617 "mov"
618 *mn10300
619 *am33
620 *am33_2
621 {
622   /* OP_F83000 (); */
623   PC = cia;
624   store_word ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
625               State.regs[REG_A0 + AM1]);
626 }
627
628
629 // 1111 1010 0011 AmAn d16.....; mov Am,(d16,An) (d16 is sign-extended.)
630 8.0xfa+4.0x3,2.AM1,2.AN0+8.D16A+8.D16B:D2g:::mov
631 "mov"
632 *mn10300
633 *am33
634 *am33_2
635 {
636   /* OP_FA300000 (); */
637   PC = cia;
638   store_word ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
639               State.regs[REG_A0 + AM1]);
640 }
641
642
643 // 1111 1100 0011 AmAn d32.....; mov Am,(d32,An)
644 8.0xfc+4.0x3,2.AM1,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4i:::mov
645 "mov"
646 *mn10300
647 *am33
648 *am33_2
649 {
650   /* OP_FC300000 (); */
651   PC = cia;
652   store_word ((State.regs[REG_A0 + AN0]
653                + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)),
654               State.regs[REG_A0 + AM1]);
655 }
656
657
658 // 0100 Am11 d8......; mov Am,(d8,SP) (d8 is zero-extended)
659 4.0x4,2.AM1,11+8.D8:S1c:::mov
660 "mov"
661 *mn10300
662
663 *am33
664 *am33_2
665
666 {
667   /* OP_4300 (); */
668   PC = cia;
669   store_word (State.regs[REG_SP] + (D8), State.regs[REG_A0 + (AM1)]);
670 }
671
672
673 // 1111 1010 1001 Am00 d16.....; mov Am,(d16,SP) (d16 is zero-extended.)
674 8.0xfa+4.0x9,2.AM1,00+8.IMM16A+8.IMM16B:D2h:::mov
675 "mov"
676 *mn10300
677
678 *am33
679 *am33_2
680
681 {
682   /* OP_FA900000 (); */
683   PC = cia;
684   store_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
685               State.regs[REG_A0 + AM1]);
686 }
687
688
689 // 1111 1100 1001 Am00 d32.....; mov Am,(d32,SP)
690 8.0xfc+4.0x9,2.AM1,00+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4j:::mov
691 "mov"
692 *mn10300
693
694 *am33
695 *am33_2
696
697 {
698   /* OP_FC900000 (); */
699   PC = cia;
700   store_word (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
701               State.regs[REG_A0 + AM1]);
702 }
703
704
705 // 1111 0011 11Am DiAn; mov Am,(Di,An)
706 8.0xf3+11,2.AM2,2.DI,2.AN0:D0l:::mov
707 "mov"
708 *mn10300
709
710 *am33
711 *am33_2
712
713 {
714   /* OP_F3C0 (); */
715   PC = cia;
716   store_word ((State.regs[REG_A0 + AN0] + State.regs[REG_D0 + DI]),
717               State.regs[REG_A0 + AM2]);
718 }
719
720
721 // 1111 1010 1000 Am00 abs16...; mov Am,(abs16) (abs16 is zero-extended)
722 8.0xfa+4.0x8,2.AM1,00+8.IMM16A+8.IMM16B:D2i:::mov
723 "mov"
724 *mn10300
725
726 *am33
727 *am33_2
728
729 {
730   /* OP_FA800000 (); */
731   PC = cia;
732   store_word (FETCH16(IMM16A, IMM16B),
733               State.regs[REG_A0 + AM1]);
734 }
735
736
737 // 1111 1100 1000 Am00 abs32...; mov Am,(abs32)
738 8.0xfc+4.0x8,2.AM1,00+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4k:::mov
739 "mov"
740 *mn10300
741
742 *am33
743 *am33_2
744
745 {
746   /* OP_FC800000 (); */
747   PC = cia;
748   store_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
749               State.regs[REG_A0 + AM1]);
750 }
751
752
753 // 1111 1000 1111 01An d8......; mov SP,(d8,An) (d8 is sign-extended)
754 8.0xf8+4.0xf,01,2.AN0+8.D8:D1e:::mov
755 "mov"
756 *mn10300
757
758 *am33
759 *am33_2
760
761 {
762   /* OP_F8F400 (); */
763   PC = cia;
764   store_word (State.regs[REG_A0 + AN0] + EXTEND8 (D8),
765               State.regs[REG_SP]);
766 }
767
768
769 // 0010 11Dn imm16...; mov imm16,Dn (imm16 is sign-extended)
770 4.0x2,11,2.DN0+8.IMM16A+8.IMM16B:S2b:::mov
771 "mov"
772 *mn10300
773
774 *am33
775 *am33_2
776
777 {
778   /* OP_2C0000 (); */
779   unsigned32 value;
780
781   PC = cia;
782   value = EXTEND16 (FETCH16(IMM16A, IMM16B));
783   State.regs[REG_D0 + DN0] = value;
784 }
785
786
787 // 1111 1100 1100 11Dn imm32...; mov imm32,Dn
788 8.0xfc+4.0xc,11,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4l:::mov
789 "mov"
790 *mn10300
791
792 *am33
793 *am33_2
794
795 {
796   /* OP_FCCC0000 (); */
797   unsigned32 value;
798
799   PC = cia;
800   value = FETCH32(IMM32A, IMM32B, IMM32C, IMM32D);
801   State.regs[REG_D0 + DN0] = value;
802 }
803
804
805 // 0010 01An imm16...; mov imm16,An (imm16 is zero-extended)
806 4.0x2,01,2.AN0+8.IMM16A+8.IMM16B:S2c:::mov
807 "mov"
808 *mn10300
809
810 *am33
811 *am33_2
812
813 {
814   /* OP_240000 (); */
815   unsigned32 value;
816
817   PC = cia;
818   value = FETCH16(IMM16A, IMM16B);
819   State.regs[REG_A0 + AN0] = value;
820 }
821
822
823 // 1111 1100 1101 11An imm32...; mov imm32,An
824 8.0xfc+4.0xd,11,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4m:::mov
825 "mov"
826 *mn10300
827
828 *am33
829 *am33_2
830
831 {
832     /* OP_FCDC0000 (); */
833     PC = cia;
834     State.regs[REG_A0 + AN0] = FETCH32(IMM32A, IMM32B, IMM32C, IMM32D);
835 }
836
837
838 // 1111 0000 0100 DnAm; movbu (Am),Dn
839 8.0xf0+4.0x4,2.DN1,2.AM0:D0:::movbu
840 "movbu"
841 *mn10300
842
843 *am33
844 *am33_2
845
846 {
847   /* OP_F040 (); */
848   PC = cia;
849   State.regs[REG_D0 + DN1]
850     = load_byte (State.regs[REG_A0 + AM0]);
851 }
852
853
854 // 1111 1000 0100 DnAm d8......; movbu (d8,Am),Dn (d8 is sign-extended)
855 8.0xf8+4.0x4,2.DN1,2.AM0+8.D8:D1f:::movbu
856 "movbu"
857 *mn10300
858
859 *am33
860 *am33_2
861
862 {
863   /* OP_F84000 (); */
864   PC = cia;
865   State.regs[REG_D0 + DN1]
866     = load_byte ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
867 }
868
869
870 // 1111 1010 0100 DnAm d16.....; movbu (d16,Am),Dn (d16 is sign-extended.)
871 8.0xfa+4.0x4,2.DN1,2.AM0+8.D16A+8.D16B:D2:::movbu
872 "movbu"
873 *mn10300
874
875 *am33
876 *am33_2
877
878 {
879   /* OP_FA400000 (); */
880   PC = cia;
881   State.regs[REG_D0 + DN1]
882     = load_byte ((State.regs[REG_A0 + AM0]
883                   + EXTEND16 (FETCH16(D16A, D16B))));
884 }
885
886
887 // 1111 1100 0100 DnAm d32.....; movbu (d32,Am),Dn
888 8.0xfc+4.0x4,2.DN1,2.AM0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::movbu
889 "movbu"
890 *mn10300
891
892 *am33
893 *am33_2
894
895 {
896   /* OP_FC400000 (); */
897   PC = cia;
898   State.regs[REG_D0 + DN1]
899     = load_byte ((State.regs[REG_A0 + AM0]
900                   + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
901 }
902
903
904 // 1111 1000 1011 10Dn d8......; movbu (d8,SP),Dn (d8 is zero-extended)
905 8.0xf8+4.0xb,10,2.DN0+8.D8:D1a:::movbu
906 "movbu"
907 *mn10300
908
909 *am33
910 *am33_2
911
912 {
913   /* OP_F8B800 (); */
914   PC = cia;
915   State.regs[REG_D0 + DN0]
916     = load_byte ((State.regs[REG_SP] + (D8)));
917 }
918
919
920 // 1111 1010 1011 10Dn d16.....; movbu (d16,SP),Dn (d16 is zero-extended.)
921 8.0xfa+4.0xb,10,2.DN0+8.IMM16A+8.IMM16B:D2a:::movbu
922 "movbu"
923 *mn10300
924
925 *am33
926 *am33_2
927
928 {
929   /* OP_FAB80000 (); */
930   PC = cia;
931   State.regs[REG_D0 + DN0]
932     = load_byte ((State.regs[REG_SP]
933                   + FETCH16(IMM16A, IMM16B)));
934 }
935
936
937 // 1111 1100 1011 10Dn d32.....; movbu (d32,SP),Dn
938 8.0xfc+4.0xb,10,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4a:::movbu
939 "movbu"
940 *mn10300
941
942 *am33
943 *am33_2
944
945 {
946   /* OP_FCB80000 (); */
947   PC = cia;
948   State.regs[REG_D0 + DN0]
949     = load_byte (State.regs[REG_SP]
950                  + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
951 }
952
953
954 // 1111 0100 00Dn DiAm; movbu (Di,Am),Dn
955 8.0xf4+00,2.DN2,2.DI,2.AM0:D0a:::movbu
956 "movbu"
957 *mn10300
958
959 *am33
960 *am33_2
961
962 {
963   /* OP_F400 (); */
964   PC = cia;
965   State.regs[REG_D0 + DN2]
966     = load_byte ((State.regs[REG_A0 + AM0]
967                   + State.regs[REG_D0 + DI]));
968 }
969
970
971 // 0011 01Dn abs16...; movbu (abs16),Dn (abs16 is zero-extended)
972 4.0x3,01,2.DN0+8.IMM16A+8.IMM16B:S2:::movbu
973 "movbu"
974 *mn10300
975
976 *am33
977 *am33_2
978
979 {
980   /* OP_340000 (); */
981   PC = cia;
982   State.regs[REG_D0 + DN0] = load_byte (FETCH16(IMM16A, IMM16B));
983 }
984
985
986 // 1111 1100 1010 10Dn abs32...; movbu (abs32),Dn
987 8.0xfc+4.0xa,10,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4b:::movbu
988 "movbu"
989 *mn10300
990
991 *am33
992 *am33_2
993
994 {
995   /* OP_FCA80000 (); */
996   PC = cia;
997   State.regs[REG_D0 + DN0]
998     = load_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
999 }
1000
1001
1002 // 1111 0000 0101 DmAn; movbu Dm,(An)
1003 8.0xf0+4.0x5,2.DM1,2.AN0:D0b:::movbu
1004 "movbu"
1005 *mn10300
1006
1007 *am33
1008 *am33_2
1009
1010 {
1011   /* OP_F050 (); */
1012   PC = cia;
1013   store_byte (State.regs[REG_A0 + AN0], State.regs[REG_D0 + DM1]);
1014 }
1015
1016
1017 // 1111 1000 0101 DmAn d8......; movbu Dm,(d8,An) (d8 is sign-extended)
1018 8.0xf8+4.0x5,2.DM1,2.AN0+8.D8:D1b:::movbu
1019 "movbu"
1020 *mn10300
1021
1022 *am33
1023 *am33_2
1024
1025 {
1026   /* OP_F85000 (); */
1027   PC = cia;
1028   store_byte ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
1029               State.regs[REG_D0 + DM1]);
1030 }
1031
1032
1033 // 1111 1010 0101 DmAn d16.....; movbu Dm,(d16,An) (d16 is sign-extended.)
1034 8.0xfa+4.0x5,2.DM1,2.AN0+8.D16A+8.D16B:D2b:::movbu
1035 "movbu"
1036 *mn10300
1037
1038 *am33
1039 *am33_2
1040
1041 {
1042   /* OP_FA500000 (); */
1043   PC = cia;
1044   store_byte ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
1045               State.regs[REG_D0 + DM1]);
1046 }
1047
1048
1049 // 1111 1100 0101 DmAn d32.....; movbu Dm,(d32,An)
1050 8.0xfc+4.0x5,2.DM1,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4c:::movbu
1051 "movbu"
1052 *mn10300
1053
1054 *am33
1055 *am33_2
1056
1057 {
1058   /* OP_FC500000 (); */
1059   PC = cia;
1060   store_byte ((State.regs[REG_A0 + AN0]
1061                + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)),
1062               State.regs[REG_D0 + DM1]);
1063 }
1064
1065
1066 // 1111 1000 1001 Dm10 d8......; movbu Dm,(d8,SP) (d8 is zero-extended)
1067 8.0xf8+4.0x9,2.DM1,10+8.D8:D1c:::movbu
1068 "movbu"
1069 *mn10300
1070
1071 *am33
1072 *am33_2
1073
1074 {
1075   /* OP_F89200 (); */
1076   PC = cia;
1077   store_byte (State.regs[REG_SP] + (D8), State.regs[REG_D0 + DM1]);
1078 }
1079
1080
1081 // 1111 1010 1001 Dm10 d16.....; movbu Dm,(d16,SP) (d16 is zero-extended.)
1082 8.0xfa+4.0x9,2.DM1,10+8.IMM16A+8.IMM16B:D2c:::movbu
1083 "movbu"
1084 *mn10300
1085
1086 *am33
1087 *am33_2
1088
1089 {
1090   /* OP_FA920000 (); */
1091   PC = cia;
1092   store_byte (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
1093               State.regs[REG_D0 + DM1]);
1094 }
1095
1096
1097 // 1111 1100 1001 Dm10 d32.....; movbu Dm,(d32,SP)
1098 8.0xfc+4.0x9,2.DM1,10+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4d:::movbu
1099 "movbu"
1100 *mn10300
1101
1102 *am33
1103 *am33_2
1104
1105 {
1106   /* OP_FC920000 (); */
1107   PC = cia;
1108   store_byte (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1109               State.regs[REG_D0 + DM1]);
1110 }
1111
1112
1113 // 1111 0100 01Dm DiAn; movbu Dm,(Di,An)
1114 8.0xf4+01,2.DM2,2.DI,2.AN0:D0c:::movbu
1115 "movbu"
1116 *mn10300
1117
1118 *am33
1119 *am33_2
1120
1121 {
1122   /* OP_F440 (); */
1123   PC = cia;
1124   store_byte ((State.regs[REG_A0 + AN0] + State.regs[REG_D0 + DI]),
1125               State.regs[REG_D0 + DM2]);
1126 }
1127
1128
1129 // 0000 Dm10 abs16...; movbu Dm,(abs16) (abs16 is zero-extended)
1130 4.0x0,2.DM1,10+8.IMM16A+8.IMM16B:S2a:::movbu
1131 "movbu"
1132 *mn10300
1133
1134 *am33
1135 *am33_2
1136
1137 {
1138   /* OP_20000 (); */
1139   PC = cia;
1140   store_byte (FETCH16(IMM16A, IMM16B),
1141               State.regs[REG_D0 + DM1]);
1142 }
1143
1144
1145 // 1111 1100 1000 Dm10 abs32...; movbu Dm,(abs32)
1146 8.0xfc+4.0x8,2.DM1,10+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4e:::movbu
1147 "movbu"
1148 *mn10300
1149
1150 *am33
1151 *am33_2
1152
1153 {
1154   /* OP_FC820000 (); */
1155   PC = cia;
1156   store_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1157               State.regs[REG_D0 + DM1]);
1158 }
1159
1160
1161 // 1111 0000 0110 DnAm; movhu (Am),Dn
1162 8.0xf0+4.0x6,2.DN1,2.AM0:D0:::movhu
1163 "movhu"
1164 *mn10300
1165
1166 *am33
1167 *am33_2
1168
1169 {
1170   /* OP_F060 (); */
1171   PC = cia;
1172   State.regs[REG_D0 + DN1]
1173     = load_half (State.regs[REG_A0 + AM0]);
1174 }
1175
1176
1177 // 1111 1000 0110 DnAm d8......; movhu (d8,Am),Dn (d8 is sign-extended)
1178 8.0xf8+4.0x6,2.DN1,2.AM0+8.D8:D1d:::movhu
1179 "movhu"
1180 *mn10300
1181
1182 *am33
1183 *am33_2
1184
1185 {
1186   /* OP_F86000 (); */
1187   PC = cia;
1188   State.regs[REG_D0 + DN1]
1189     = load_half ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
1190 }
1191
1192
1193 // 1111 1010 0110 DnAm d16.....; movhu (d16,Am),Dn (d16 is sign-extended.)
1194 8.0xfa+4.0x6,2.DN1,2.AM0+8.D16A+8.D16B:D2:::movhu
1195 "movhu"
1196 *mn10300
1197
1198 *am33
1199 *am33_2
1200
1201 {
1202   /* OP_FA600000 (); */
1203   PC = cia;
1204   State.regs[REG_D0 + DN1]
1205     = load_half ((State.regs[REG_A0 + AM0]
1206                   + EXTEND16 (FETCH16(D16A, D16B))));
1207 }
1208
1209
1210 // 1111 1100 0110 DnAm d32.....; movhu (d32,Am),Dn
1211 8.0xfc+4.0x6,2.DN1,2.AM0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::movhu
1212 "movhu"
1213 *mn10300
1214
1215 *am33
1216 *am33_2
1217
1218 {
1219   /* OP_FC600000 (); */
1220   PC = cia;
1221   State.regs[REG_D0 + DN1]
1222     = load_half ((State.regs[REG_A0 + AM0]
1223                   + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
1224 }
1225
1226
1227 // 1111 1000 1011 11Dn d8.....; movhu (d8,SP),Dn (d8 is zero-extended)
1228 8.0xf8+4.0xb,11,2.DN0+8.D8:D1a:::movhu
1229 "movhu"
1230 *mn10300
1231
1232 *am33
1233 *am33_2
1234
1235 {
1236   /* OP_F8BC00 (); */
1237   PC = cia;
1238   State.regs[REG_D0 + DN0]
1239     = load_half ((State.regs[REG_SP] + (D8)));
1240 }
1241
1242
1243 // 1111 1010 1011 11Dn d16.....; movhu (d16,SP),Dn (d16 is zero-extended.)
1244 8.0xfa+4.0xb,11,2.DN0+8.IMM16A+8.IMM16B:D2a:::movhu
1245 "movhu"
1246 *mn10300
1247
1248 *am33
1249 *am33_2
1250
1251 {
1252   /* OP_FABC0000 (); */
1253   PC = cia;
1254   State.regs[REG_D0 + DN0]
1255     = load_half ((State.regs[REG_SP] + FETCH16(IMM16A, IMM16B)));
1256 }
1257
1258
1259 // 1111 1100 1011 11Dn d32.....; movhu (d32,SP),Dn
1260 8.0xfc+4.0xb,11,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4a:::movhu
1261 "movhu"
1262 *mn10300
1263
1264 *am33
1265 *am33_2
1266
1267 {
1268   /* OP_FCBC0000 (); */
1269   PC = cia;
1270   State.regs[REG_D0 + DN0]
1271     = load_half (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
1272 }
1273
1274
1275 // 1111 0100 10Dn DiAm; movhu (Di,Am),Dn
1276 8.0xf4+10,2.DN2,2.DI,2.AM0:D0a:::movhu
1277 "movhu"
1278 *mn10300
1279
1280 *am33
1281 *am33_2
1282
1283 {
1284   /* OP_F480 (); */
1285   PC = cia;
1286   State.regs[REG_D0 + DN2]
1287     = load_half ((State.regs[REG_A0 + AM0] + State.regs[REG_D0 + DI]));
1288 }
1289
1290
1291 // 0011 10Dn abs16...; movhu (abs16),Dn (abs16 is zero-extended)
1292 4.0x3,10,2.DN0+8.IMM16A+8.IMM16B:S2:::movhu
1293 "movhu"
1294 *mn10300
1295
1296 *am33
1297 *am33_2
1298
1299 {
1300   /* OP_380000 (); */
1301   PC = cia;
1302   State.regs[REG_D0 + DN0] = load_half (FETCH16(IMM16A, IMM16B));
1303 }
1304
1305
1306 // 1111 1100 1010 11Dn abs32...; movhu (abs32),Dn
1307 8.0xfc+4.0xa,11,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4b:::movhu
1308 "movhu"
1309 *mn10300
1310
1311 *am33
1312 *am33_2
1313
1314 {
1315   /* OP_FCAC0000 (); */
1316   PC = cia;
1317   State.regs[REG_D0 + DN0]
1318     = load_half (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
1319 }
1320
1321
1322 // 1111 0000 0111 DmAn; movhu Dm,(An)
1323 8.0xf0+4.0x7,2.DM1,2.AN0:D0b:::movhu
1324 "movhu"
1325 *mn10300
1326
1327 *am33
1328 *am33_2
1329
1330 {
1331   /* OP_F070 (); */
1332   PC = cia;
1333   store_half (State.regs[REG_A0 + AN0],
1334               State.regs[REG_D0 + DM1]);
1335 }
1336
1337
1338 // 1111 1000 0111 DmAn d8......; movhu Dm,(d8,An) (d8 is sign-extended)
1339 8.0xf8+4.0x7,2.DM1,2.AN0+8.D8:D1b:::movhu
1340 "movhu"
1341 *mn10300
1342
1343 *am33
1344 *am33_2
1345
1346 {
1347   /* OP_F87000 (); */
1348   PC = cia;
1349   store_half ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
1350               State.regs[REG_D0 + DM1]);
1351 }
1352
1353
1354 // 1111 1010 0111 DnAm d16.....; movhu Dm,(d16,An) (d16 is sign-extended.)
1355 8.0xfa+4.0x7,2.DM1,2.AN0+8.D16A+8.D16B:D2b:::movhu
1356 "movhu"
1357 *mn10300
1358
1359 *am33
1360 *am33_2
1361
1362 {
1363   /* OP_FA700000 (); */
1364   PC = cia;
1365   store_half ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
1366               State.regs[REG_D0 + DM1]);
1367 }
1368
1369
1370 // 1111 1100 0111 DmAn d32.....; movhu Dm,(d32,An)
1371 8.0xfc+4.0x7,2.DM1,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4c:::movhu
1372 "movhu"
1373 *mn10300
1374
1375 *am33
1376 *am33_2
1377
1378 {
1379   /* OP_FC700000 (); */
1380   PC = cia;
1381   store_half ((State.regs[REG_A0 + AN0]
1382                + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)),
1383               State.regs[REG_D0 + DM1]);
1384 }
1385
1386
1387 // 1111 1000 1001 Dm11 d8....; movhu Dm,(d8,SP) (d8 is zero-extended)
1388 8.0xf8+4.0x9,2.DM1,11+8.D8:D1c:::movhu
1389 "movhu"
1390 *mn10300
1391
1392 *am33
1393 *am33_2
1394
1395 {
1396   /* OP_F89300 (); */
1397   PC = cia;
1398   store_half (State.regs[REG_SP] + (D8),
1399               State.regs[REG_D0 + DM1]);
1400 }
1401
1402
1403 // 1111 1010 1001 Dm11 d16.....; movhu Dm,(d16,SP) (d16 is zero-extended.)
1404 8.0xfa+4.0x9,2.DM1,11+8.IMM16A+8.IMM16B:D2c:::movhu
1405 "movhu"
1406 *mn10300
1407
1408 *am33
1409 *am33_2
1410
1411 {
1412   /* OP_FA930000 (); */
1413   PC = cia;
1414   store_half (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
1415               State.regs[REG_D0 + DM1]);
1416 }
1417
1418
1419 // 1111 1100 1001 Dm11 d32.....; movhu Dm,(d32,SP)
1420 8.0xfc+4.0x9,2.DM1,11+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4d:::movhu
1421 "movhu"
1422 *mn10300
1423
1424 *am33
1425 *am33_2
1426
1427 {
1428   /* OP_FC930000 (); */
1429   PC = cia;
1430   store_half (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1431               State.regs[REG_D0 + DM1]);
1432 }
1433
1434
1435 // 1111 0100 11Dm DiAn; movhu Dm,(Di,An)
1436 8.0xf4+11,2.DM2,2.DI,2.AN0:D0c:::movhu
1437 "movhu"
1438 *mn10300
1439
1440 *am33
1441 *am33_2
1442
1443 {
1444   /* OP_F4C0 (); */
1445   PC = cia;
1446   store_half ((State.regs[REG_A0 + AN0] + State.regs[REG_D0 + DI]),
1447               State.regs[REG_D0 + DM2]);
1448 }
1449
1450
1451 // 0000 Dm11 abs16...; movhu Dm,(abs16) (abs16 is zero-extended)
1452 4.0x0,2.DM1,11+8.IMM16A+8.IMM16B:S2a:::movhu
1453 "movhu"
1454 *mn10300
1455
1456 *am33
1457 *am33_2
1458
1459 {
1460   /* OP_30000 (); */
1461   PC = cia;
1462   store_half (FETCH16(IMM16A, IMM16B), State.regs[REG_D0 + DM1]);
1463 }
1464
1465
1466 // 1111 1100 1000 Dm11 abs32...; movhu Dm,(abs32)
1467 8.0xfc+4.0x8,2.DM1,11+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4e:::movhu
1468 "movhu"
1469 *mn10300
1470
1471 *am33
1472 *am33_2
1473
1474 {
1475   /* OP_FC830000 (); */
1476   PC = cia;
1477   store_half (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1478               State.regs[REG_D0 + DM1]);
1479 }
1480
1481
1482 // 1111 0010 1101 00Dn; ext Dn
1483 8.0xf2+4.0xd,00,2.DN0:D0:::ext
1484 "ext"
1485 *mn10300
1486
1487 *am33
1488 *am33_2
1489
1490 {
1491   /* OP_F2D0 (); */
1492   PC = cia;
1493   if (State.regs[REG_D0 + DN0] & 0x80000000)
1494     State.regs[REG_MDR] = -1;
1495   else
1496     State.regs[REG_MDR] = 0;
1497 }
1498
1499
1500 // 0001 00Dn; extb Dn
1501 4.0x1,00,2.DN0:S0:::extb
1502 "extb"
1503 *mn10300
1504
1505 *am33
1506 *am33_2
1507
1508 {
1509   /* OP_10 (); */
1510   PC = cia;
1511   State.regs[REG_D0 + DN0] = EXTEND8 (State.regs[REG_D0 + DN0]);
1512 }
1513
1514
1515 // 0001 01Dn; extbu Dn
1516 4.0x1,01,2.DN0:S0:::extbu
1517 "extbu"
1518 *mn10300
1519
1520 *am33
1521 *am33_2
1522
1523 {
1524   /* OP_14 (); */
1525   PC = cia;
1526   State.regs[REG_D0 + DN0] &= 0xff;
1527 }
1528
1529
1530 // 0001 10Dn; exth Dn
1531 4.0x1,10,2.DN0:S0:::exth
1532 "exth"
1533 *mn10300
1534
1535 *am33
1536 *am33_2
1537
1538 {
1539   /* OP_18 (); */
1540   PC = cia;
1541   State.regs[REG_D0 + DN0] = EXTEND16 (State.regs[REG_D0 + DN0]);
1542 }
1543
1544
1545 // 0001 11Dn; exthu Dn
1546 4.0x1,11,2.DN0:S0:::exthu
1547 "exthu"
1548 *mn10300
1549
1550 *am33
1551 *am33_2
1552
1553 {
1554   /* OP_1C (); */
1555   PC = cia;
1556   State.regs[REG_D0 + DN0] &= 0xffff;
1557 }
1558
1559
1560 // 0000 Dn00; clr Dn
1561 4.0x0,2.DN1,00:S0:::clr
1562 "clr"
1563 *mn10300
1564
1565 *am33
1566 *am33_2
1567
1568 {
1569   /* OP_0 (); */
1570   PC = cia;
1571   State.regs[REG_D0 + DN1] = 0;
1572
1573   PSW |= PSW_Z;
1574   PSW &= ~(PSW_V | PSW_C | PSW_N);
1575 }
1576
1577
1578 // 1110 DmDn; add Dm,Dn
1579 4.0xe,2.DM1,2.DN0:S0:::add
1580 "add"
1581 *mn10300
1582
1583 *am33
1584 *am33_2
1585
1586 {
1587   /* OP_E0 (); */
1588   PC = cia;
1589   genericAdd(State.regs[REG_D0 + DM1], REG_D0 + DN0);
1590 }
1591
1592 // 1111 0001 0110 DmAn; add Dm,An
1593 8.0xf1+4.0x6,2.DM1,2.AN0:D0:::add
1594 "add"
1595 *mn10300
1596
1597 *am33
1598 *am33_2
1599
1600 {
1601   /* OP_F160 (); */
1602   PC = cia;
1603   genericAdd(State.regs[REG_D0 + DM1], REG_A0 + AN0);
1604 }
1605
1606
1607 // 1111 0001 0101 AmDn; add Am,Dn
1608 8.0xf1+4.0x5,2.AM1,2.DN0:D0a:::add
1609 "add"
1610 *mn10300
1611
1612 *am33
1613 *am33_2
1614
1615 {
1616   /* OP_F150 (); */
1617   PC = cia;
1618   genericAdd(State.regs[REG_A0 + AM1], REG_D0 + DN0);
1619 }
1620
1621
1622 // 1111 0001 0111 AmAn; add Am,An
1623 8.0xf1+4.0x7,2.AM1,2.AN0:D0b:::add
1624 "add"
1625 *mn10300
1626
1627 *am33
1628 *am33_2
1629
1630 {
1631   /* OP_F170 (); */
1632   PC = cia;
1633   genericAdd(State.regs[REG_A0 + AM1], REG_A0 + AN0);
1634 }
1635
1636
1637 // 0010 10Dn imm8....; add imm8,Dn (imm8 is sign-extended)
1638 4.0x2,10,2.DN0+8.IMM8:S1:::add
1639 "add"
1640 *mn10300
1641
1642 *am33
1643 *am33_2
1644
1645 {
1646   /* OP_2800 (); */
1647   PC = cia;
1648   genericAdd(EXTEND8(IMM8), REG_D0 + DN0);
1649 }
1650
1651
1652 // 1111 1010 1100 00Dn imm16...; add imm16,Dn
1653 8.0xfa+4.0xc,00,2.DN0+8.IMM16A+8.IMM16B:D2:::add
1654 "add"
1655 *mn10300
1656
1657 *am33
1658 *am33_2
1659
1660 {
1661   /* OP_FAC00000 (); */
1662   PC = cia;
1663   genericAdd(EXTEND16(FETCH16(IMM16A, IMM16B)), REG_D0 + DN0);
1664 }
1665
1666
1667 // 1111 1100 1100 00Dn imm32...; add imm32,Dn
1668 8.0xfc+4.0xc,00,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::add
1669 "add"
1670 *mn10300
1671
1672 *am33
1673 *am33_2
1674
1675 {
1676   /* OP_FCC00000 (); */
1677   PC = cia;
1678   genericAdd(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
1679 }
1680
1681
1682 // 0010 00An imm8....; add imm8,An (imm8 is sign-extended)
1683 4.0x2,00,2.AN0+8.IMM8:S1a:::add
1684 "add"
1685 *mn10300
1686
1687 *am33
1688 *am33_2
1689
1690 {
1691   /* OP_2000 (); */
1692   PC = cia;
1693   genericAdd(EXTEND8(IMM8), REG_A0 + AN0);
1694 }
1695
1696
1697 // 1111 1010 1101 00An imm16...; add imm16,An (imm16 is sign-extended.)
1698 8.0xfa+4.0xd,00,2.AN0+8.IMM16A+8.IMM16B:D2a:::add
1699 "add"
1700 *mn10300
1701
1702 *am33
1703 *am33_2
1704
1705 {
1706   /* OP_FAD00000 (); */
1707   PC = cia;
1708   genericAdd(EXTEND16(FETCH16(IMM16A, IMM16B)), REG_A0 + AN0);
1709 }
1710
1711
1712 // 1111 1100 1101 00An imm32...; add imm32,An
1713 8.0xfc+4.0xd,00,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4a:::add
1714 "add"
1715 *mn10300
1716
1717 *am33
1718 *am33_2
1719
1720 {
1721   /* OP_FCD00000 (); */
1722   PC = cia;
1723   genericAdd(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_A0 + AN0);
1724 }
1725
1726
1727 // 1111 1000 1111 1110 imm8....; add imm8,SP (imm8 is sign-extended.)
1728 8.0xf8+8.0xfe+8.IMM8:D1:::add
1729 "add"
1730 *mn10300
1731
1732 *am33
1733 *am33_2
1734
1735 {
1736   /* OP_F8FE00 (); */
1737   unsigned32 imm;
1738
1739   /* Note: no PSW changes. */
1740   PC = cia;
1741   imm = EXTEND8 (IMM8);
1742   State.regs[REG_SP] += imm;
1743 }
1744
1745
1746 // 1111 1010 1111 1110 imm16...; add imm16,SP (imm16 is sign-extended.)
1747 8.0xfa+8.0xfe+8.IMM16A+8.IMM16B:D2b:::add
1748 "add"
1749 *mn10300
1750
1751 *am33
1752 *am33_2
1753
1754 {
1755   /* OP_FAFE0000 (); */
1756   unsigned32 imm;
1757
1758   /* Note: no PSW changes. */
1759   PC = cia;
1760   imm = EXTEND16 (FETCH16(IMM16A, IMM16B));
1761   State.regs[REG_SP] += imm;
1762 }
1763
1764
1765 // 1111 1100 1111 1110 imm32...; add imm32,SP
1766 8.0xfc+8.0xfe+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4b:::add
1767 "add"
1768 *mn10300
1769
1770 *am33
1771 *am33_2
1772
1773 {
1774   /* OP_FCFE0000 (); */
1775   unsigned32 imm;
1776
1777   /* Note: no PSW changes. */
1778   PC = cia;
1779   imm = FETCH32(IMM32A, IMM32B, IMM32C, IMM32D);
1780   State.regs[REG_SP] += imm;
1781 }
1782
1783
1784 // 1111 0001 0100 DmDn; addc Dm,Dn
1785 8.0xf1+4.0x4,2.DM1,2.DN0:D0:::addc
1786 "addc"
1787 *mn10300
1788
1789 *am33
1790 *am33_2
1791
1792 {
1793   /* OP_F140 (); */
1794   int z, c, n, v;
1795   unsigned32 reg1, reg2, sum;
1796
1797   PC = cia;
1798   reg1 = State.regs[REG_D0 + DM1];
1799   reg2 = State.regs[REG_D0 + DN0];
1800   sum = reg1 + reg2 + ((PSW & PSW_C) != 0);
1801   State.regs[REG_D0 + DN0] = sum;
1802
1803   z = ((PSW & PSW_Z) != 0) && (sum == 0);
1804   n = (sum & 0x80000000);
1805   c = (sum < reg1) || (sum < reg2);
1806   v = ((reg2 & 0x80000000) == (reg1 & 0x80000000)
1807        && (reg2 & 0x80000000) != (sum & 0x80000000));
1808
1809   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1810   PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1811           | (c ? PSW_C : 0) | (v ? PSW_V : 0));
1812 }
1813
1814
1815 // 1111 0001 0000 DmDn; sub Dm,Dn
1816 8.0xf1+4.0x0,2.DM1,2.DN0:D0:::sub
1817 "sub"
1818 *mn10300
1819
1820 *am33
1821 *am33_2
1822
1823 {
1824   /* OP_F100 (); */
1825   PC = cia;
1826   genericSub(State.regs[REG_D0 + DM1], REG_D0 + DN0);
1827 }
1828
1829 // 1111 0001 0010 DmAn; sub DmAn
1830 8.0xf1+4.0x2,2.DM1,2.AN0:D0a:::sub
1831 "sub"
1832 *mn10300
1833
1834 *am33
1835 *am33_2
1836
1837 {
1838   /* OP_F120 (); */
1839   PC = cia;
1840   genericSub(State.regs[REG_D0 + DM1], REG_A0 + AN0);
1841 }
1842
1843
1844 // 1111 0001 0001 AmDn; sub AmDn
1845 8.0xf1+4.0x1,2.AM1,2.DN0:D0b:::sub
1846 "sub"
1847 *mn10300
1848
1849 *am33
1850 *am33_2
1851
1852 {
1853   /* OP_F110 (); */
1854   PC = cia;
1855   genericSub(State.regs[REG_A0 + AM1], REG_D0 + DN0);
1856 }
1857
1858
1859 // 1111 0001 0011 AmAn; sub Am,An
1860 8.0xf1+4.0x3,2.AM1,2.AN0:D0c:::sub
1861 "sub"
1862 *mn10300
1863
1864 *am33
1865 *am33_2
1866
1867 {
1868   /* OP_F130 (); */
1869   PC = cia;
1870   genericSub(State.regs[REG_A0 + AM1], REG_A0 + AN0);
1871 }
1872
1873
1874 // 1111 1100 1100 01Dn imm32...; sub imm32,Dn
1875 8.0xfc+4.0xc,01,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::sub
1876 "sub"
1877 *mn10300
1878
1879 *am33
1880 *am33_2
1881
1882 {
1883   /* OP_FCC40000 (); */
1884   PC = cia;
1885   genericSub(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
1886 }
1887
1888
1889 // 1111 1100 1101 01An imm32...; sub imm32,An
1890 8.0xfc+4.0xd,01,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4a:::sub
1891 "sub"
1892 *mn10300
1893
1894 *am33
1895 *am33_2
1896
1897 {
1898   /* OP_FCD40000 (); */
1899   PC = cia;
1900   genericSub(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_A0 + AN0);
1901 }
1902
1903
1904 // 1111 0001 1000 DmDn; subc Dm,Dn
1905 8.0xf1+4.0x8,2.DM1,2.DN0:D0:::subc
1906 "subc"
1907 *mn10300
1908
1909 *am33
1910 *am33_2
1911
1912 {
1913   /* OP_F180 (); */
1914   int z, c, n, v;
1915   unsigned32 reg1, reg2, difference;
1916
1917   PC = cia;
1918   reg1 = State.regs[REG_D0 + DM1];
1919   reg2 = State.regs[REG_D0 + DN0];
1920   difference = reg2 - reg1 - ((PSW & PSW_C) != 0);
1921   State.regs[REG_D0 + DN0] = difference;
1922
1923   z = ((PSW & PSW_Z) != 0) && (difference == 0);
1924   n = (difference & 0x80000000);
1925   c = (reg1 > reg2);
1926   v = ((reg2 & 0x80000000) != (reg1 & 0x80000000)
1927        && (reg2 & 0x80000000) != (difference & 0x80000000));
1928
1929   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1930   PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1931           | (c ? PSW_C : 0) | (v ? PSW_V : 0));
1932 }
1933
1934
1935 // 1111 0010 0100 DmDn; mul Dm,Dn
1936 8.0xf2+4.0x4,2.DM1,2.DN0:D0:::mul
1937 "mul"
1938 *mn10300
1939
1940 *am33
1941 *am33_2
1942
1943 {
1944   /* OP_F240 (); */
1945   unsigned64 temp;
1946   int n, z;
1947
1948   PC = cia;
1949   temp = ((signed64)(signed32)State.regs[REG_D0 + DN0]
1950           *  (signed64)(signed32)State.regs[REG_D0 + DM1]);
1951   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
1952   State.regs[REG_MDR] = (temp & 0xffffffff00000000LL) >> 32;;
1953   z = (State.regs[REG_D0 + DN0] == 0);
1954   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
1955   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1956   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
1957 }
1958
1959
1960 // 1111 0010 0101 DmDn; mulu Dm,Dn
1961 8.0xf2+4.0x5,2.DM1,2.DN0:D0:::mulu
1962 "mulu"
1963 *mn10300
1964
1965 *am33
1966 *am33_2
1967
1968 {
1969   /* OP_F250 (); */
1970   unsigned64 temp;
1971   int n, z;
1972
1973   PC = cia;
1974   temp = ((unsigned64)State.regs[REG_D0 + DN0]
1975           * (unsigned64)State.regs[REG_D0 + DM1]);
1976   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
1977   State.regs[REG_MDR] = (temp & 0xffffffff00000000LL) >> 32;
1978   z = (State.regs[REG_D0 + DN0] == 0);
1979   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
1980   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1981   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
1982 }
1983
1984
1985 // 1111 0010 0110 DmDn; div Dm,Dn
1986 8.0xf2+4.0x6,2.DM1,2.DN0:D0:::div
1987 "div"
1988 *mn10300
1989
1990 *am33
1991 *am33_2
1992
1993 {
1994   /* OP_F260 (); */
1995   signed64 temp;
1996   signed32 denom;
1997   int n, z, v;
1998
1999   PC = cia;
2000   denom = (signed32)State.regs[REG_D0 + DM1];
2001
2002   temp = State.regs[REG_MDR];
2003   temp <<= 32;
2004   temp |= State.regs[REG_D0 + DN0];
2005   if ( !(v = (0 == denom)) )
2006     {
2007       State.regs[REG_MDR] = temp % (signed32)State.regs[REG_D0 + DM1];
2008       temp /= (signed32)State.regs[REG_D0 + DM1];
2009       State.regs[REG_D0 + DN0] = temp & 0xffffffff;
2010     }
2011   else
2012     {
2013       State.regs[REG_MDR] = temp;
2014       State.regs[REG_D0 + DN0] = 0xff;
2015     }
2016   z = (State.regs[REG_D0 + DN0] == 0);
2017   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2018   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2019   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (v ? PSW_V : 0));
2020 }
2021
2022
2023 // 1111 0010 0111 DmDn; divu Dm,Dn
2024 8.0xf2+4.0x7,2.DM1,2.DN0:D0:::divu
2025 "divu"
2026 *mn10300
2027
2028 *am33
2029 *am33_2
2030
2031 {
2032   /* OP_F270 (); */
2033   unsigned64 temp;
2034   unsigned32 denom;
2035   int n, z, v;
2036
2037   PC = cia;
2038   denom = (unsigned32)State.regs[REG_D0 + DM1];
2039   temp = State.regs[REG_MDR];
2040   temp <<= 32;
2041   temp |= State.regs[REG_D0 + DN0];
2042   if ( !(v = (0 == denom)) ) 
2043     {
2044       State.regs[REG_MDR] = temp % State.regs[REG_D0 + DM1];
2045       temp /= State.regs[REG_D0 + DM1];
2046       State.regs[REG_D0 + DN0] = temp & 0xffffffff;
2047     }
2048   else
2049     {
2050       State.regs[REG_MDR] = temp;
2051       State.regs[REG_D0 + DN0] = 0xff;
2052     }
2053   z = (State.regs[REG_D0 + DN0] == 0);
2054   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2055   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2056   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (v ? PSW_V : 0));
2057 }
2058
2059
2060 // 0100 Dn00; inc Dn
2061 4.0x4,2.DN1,00:S0:::inc
2062 "inc"
2063 *mn10300
2064
2065 *am33
2066 *am33_2
2067
2068 {
2069   /* OP_40 (); */
2070   unsigned32 imm;
2071
2072   PC = cia;
2073   imm = 1;
2074   genericAdd(imm, REG_D0 + DN1);
2075 }
2076
2077
2078 // 0100 An01
2079 4.0x4,2.AN1,01:S0a:::inc
2080 "inc"
2081 *mn10300
2082
2083 *am33
2084 *am33_2
2085
2086 {
2087   /* OP_41 (); */
2088   PC = cia;
2089   State.regs[REG_A0 + AN1] += 1;
2090 }
2091
2092
2093 // 0101 00An; inc4 An
2094 4.0x5,00,2.AN0:S0:::inc4
2095 "inc4"
2096 *mn10300
2097
2098 *am33
2099 *am33_2
2100
2101 {
2102   /* OP_50 (); */
2103   PC = cia;
2104   State.regs[REG_A0 + AN0] += 4;
2105 }
2106
2107
2108 // 1010 DnDn imm8....; cmp imm8,Dn (imm8 is sign-extended.)
2109 4.0xa,2.DM1,2.DN0=DM1+IMM8:S0i:::cmp
2110 "cmp"
2111 *mn10300
2112
2113 *am33
2114 *am33_2
2115
2116 {
2117   PC = cia;
2118   /* OP_A000 (); */
2119   genericCmp(EXTEND8 (IMM8), State.regs[REG_D0 + DN0]);
2120 }
2121
2122
2123 // 1010 DmDn; cmp Dm,Dn (Dm != Dn, see above when Dm == Dn)
2124 4.0xa,2.DM1,2.DN0!DM1:S0:::cmp
2125 "cmp"
2126 *mn10300
2127
2128 *am33
2129 *am33_2
2130
2131 {
2132   PC = cia;
2133   /* OP_A0 (); */
2134   genericCmp(State.regs[REG_D0 + DM1], State.regs[REG_D0 + DN0]);
2135 }
2136
2137
2138 // 1111 0001 1010 DmAn; cmp Dm,An
2139 8.0xf1+4.0xa,2.DM1,2.AN0:D0:::cmp
2140 "cmp"
2141 *mn10300
2142
2143 *am33
2144 *am33_2
2145
2146 {
2147   /* OP_F1A0 (); */
2148   PC = cia;
2149   genericCmp(State.regs[REG_D0 + DM1], State.regs[REG_A0 + AN0]);
2150 }
2151
2152
2153 // 1111 0001 1001 AmDn; cmp Am,Dn
2154 8.0xf1+4.0x9,2.AM1,2.DN0:D0a:::cmp
2155 "cmp"
2156 *mn10300
2157
2158 *am33
2159 *am33_2
2160
2161 {
2162   /* OP_F190 (); */
2163   PC = cia;
2164   genericCmp(State.regs[REG_A0 + AM1], State.regs[REG_D0 + DN0]);
2165 }
2166
2167
2168 // 1011 AnAn imm8....; cmp imm8,An (imm8 is zero-extended.)
2169 4.0xb,2.AM1,2.AN0=AM1+IMM8:S0ai:::cmp
2170 "cmp"
2171 *mn10300
2172
2173 *am33
2174 *am33_2
2175
2176 {
2177   PC = cia;
2178   /* OP_B000 (); */
2179   genericCmp(IMM8,
2180              State.regs[REG_A0 + AN0]);
2181 }
2182
2183
2184 // 1011 AmAn; cmp Am,An (Dm != Dn, see above when Dm == Dn)
2185 4.0xb,2.AM1,2.AN0!AM1:S0a:::cmp
2186 "cmp"
2187 *mn10300
2188
2189 *am33
2190 *am33_2
2191
2192 {
2193   PC = cia;
2194   /* OP_B0 (); */
2195   genericCmp(State.regs[REG_A0 + AM1], State.regs[REG_A0 + AN0]);
2196 }
2197
2198
2199 // 1111 1010 1100 10Dn imm16...; cmp imm16,Dn (imm16 is sign-extended.)
2200 8.0xfa+4.0xc,10,2.DN0+8.IMM16A+8.IMM16B:D2:::cmp
2201 "cmp"
2202 *mn10300
2203
2204 *am33
2205 *am33_2
2206
2207 {
2208   /* OP_FAC80000 (); */
2209   PC = cia;
2210   genericCmp(EXTEND16(FETCH16(IMM16A, IMM16B)),
2211              State.regs[REG_D0 + DN0]);
2212 }
2213
2214
2215 // 1111 1100 1100 10Dn imm32...; cmp imm32,Dn
2216 8.0xfc+4.0xc,10,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::cmp
2217 "cmp"
2218 *mn10300
2219
2220 *am33
2221 *am33_2
2222
2223 {
2224   /* OP_FCC80000 (); */
2225   PC = cia;
2226   genericCmp(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
2227              State.regs[REG_D0 + DN0]);
2228 }
2229
2230
2231 // 1111 1010 1101 10An imm16...; cmp imm16,An (imm16 is zero-extended.)
2232 8.0xfa+4.0xd,10,2.AN0+8.IMM16A+8.IMM16B:D2a:::cmp
2233 "cmp"
2234 *mn10300
2235
2236 *am33
2237 *am33_2
2238
2239 {
2240   /* OP_FAD80000 (); */
2241   PC = cia;
2242   genericCmp(FETCH16(IMM16A, IMM16B),
2243              State.regs[REG_A0 + AN0]);
2244 }
2245
2246
2247 // 1111 1100 1101 10An imm32...; cmp imm32,An
2248 8.0xfc+4.0xd,10,2.AN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4a:::cmp
2249 "cmp"
2250 *mn10300
2251
2252 *am33
2253 *am33_2
2254
2255 {
2256   /* OP_FCD80000 (); */
2257   PC = cia;
2258   genericCmp(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
2259              State.regs[REG_A0 + AN0]);
2260 }
2261
2262
2263 // 1111 0010 0000 DmDn; and Dm,Dn
2264 8.0xf2+4.0x0,2.DM1,2.DN0:D0:::and
2265 "and"
2266 *mn10300
2267
2268 *am33
2269 *am33_2
2270
2271 {
2272   /* OP_F200 (); */
2273   int n, z;
2274
2275   PC = cia;
2276   State.regs[REG_D0 + DN0] &= State.regs[REG_D0 + DM1];
2277   z = (State.regs[REG_D0 + DN0] == 0);
2278   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2279   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2280   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2281 }
2282
2283
2284 // 1111 1000 1110 00Dn imm8....; and imm8,Dn (imm8 is zero-extended.)
2285 8.0xf8+4.0xe,00,2.DN0+8.IMM8:D1:::and
2286 "and"
2287 *mn10300
2288
2289 *am33
2290 *am33_2
2291
2292 {
2293   /* OP_F8E000 (); */
2294   int n, z;
2295
2296   PC = cia;
2297   State.regs[REG_D0 + DN0] &= IMM8;
2298   z = (State.regs[REG_D0 + DN0] == 0);
2299   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2300   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2301   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2302 }
2303
2304
2305 // 1111 1010 1110 00Dn imm16...; and imm16,Dn (imm16 is zero-extended.)
2306 8.0xfa+4.0xe,00,2.DN0+8.IMM16A+8.IMM16B:D2:::and
2307 "and"
2308 *mn10300
2309
2310 *am33
2311 *am33_2
2312
2313 {
2314   /* OP_FAE00000 (); */
2315   int n, z;
2316
2317   PC = cia;
2318   State.regs[REG_D0 + DN0] &= FETCH16(IMM16A, IMM16B);
2319   z = (State.regs[REG_D0 + DN0] == 0);
2320   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2321   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2322   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2323 }
2324
2325
2326 // 1111 1100 1110 00Dn imm32...; and imm32,Dn
2327 8.0xfc+4.0xe,00,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::and
2328 "and"
2329 *mn10300
2330
2331 *am33
2332 *am33_2
2333
2334 {
2335   /* OP_FCE00000 (); */
2336   int n, z;
2337
2338   PC = cia;
2339   State.regs[REG_D0 + DN0]
2340     &= FETCH32(IMM32A, IMM32B, IMM32C, IMM32D);
2341   z = (State.regs[REG_D0 + DN0] == 0);
2342   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2343   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2344   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2345 }
2346
2347
2348 // 1111 1010 1111 1100 imm16...; and imm16,PSW (imm16 is zero-extended.)
2349 8.0xfa+8.0xfc+8.IMM16A+8.IMM16B:D2a:::and
2350 "and"
2351 *mn10300
2352
2353 *am33
2354 *am33_2
2355
2356 {
2357   /* OP_FAFC0000 (); */
2358   PC = cia;
2359   PSW &= FETCH16(IMM16A, IMM16B);
2360 }
2361
2362
2363
2364 // 1111 0010 0001 DmDn; or DmDn
2365 8.0xf2+4.0x1,2.DM1,2.DN0:D0:::or
2366 "or"
2367 *mn10300
2368
2369 *am33
2370 *am33_2
2371
2372 {
2373   /* OP_F210 (); */
2374   PC = cia;
2375   genericOr(State.regs[REG_D0 + DM1], REG_D0 + DN0);
2376 }
2377
2378
2379 // 1111 1000 1110 01Dn imm8....; or imm8,Dn (imm8 is zero-extended.)n
2380 8.0xf8+4.0xe,01,2.DN0+8.IMM8:D1:::or
2381 "or"
2382 *mn10300
2383
2384 *am33
2385 *am33_2
2386
2387 {
2388   /* OP_F8E400 (); */
2389   PC = cia;
2390   genericOr(IMM8, REG_D0 + DN0);
2391 }
2392
2393
2394 // 1111 1010 1110 01Dn imm16...; or imm16,DN (imm16 is zero-extended.)
2395 8.0xfa+4.0xe,01,2.DN0+8.IMM16A+8.IMM16B:D2:::or
2396 "or"
2397 *mn10300
2398
2399 *am33
2400 *am33_2
2401
2402 {
2403   /* OP_FAE40000 (); */
2404   PC = cia;
2405   genericOr(FETCH16(IMM16A, IMM16B), REG_D0 + DN0);
2406 }
2407
2408
2409 // 1111 1100 1110 01Dn imm32...; or imm32,Dn
2410 8.0xfc+4.0xe,01,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::or
2411 "or"
2412 *mn10300
2413
2414 *am33
2415 *am33_2
2416
2417 {
2418   /* OP_FCE40000 (); */
2419   PC = cia;
2420   genericOr(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
2421 }
2422
2423
2424 // 1111 1010 1111 1101 imm16...; or imm16,PSW (imm16 is zero-extended.)
2425 8.0xfa+8.0xfd+8.IMM16A+8.IMM16B:D2a:::or
2426 "or"
2427 *mn10300
2428
2429 *am33
2430 *am33_2
2431
2432 {
2433   /* OP_FAFD0000 (); */
2434   PC = cia;
2435   PSW |= FETCH16(IMM16A, IMM16B);
2436 }
2437
2438
2439 // 1111 0010 0010 DmDn; xor Dm,Dn
2440 8.0xf2+4.0x2,2.DM1,2.DN0:D0:::xor
2441 "xor"
2442 *mn10300
2443
2444 *am33
2445 *am33_2
2446
2447 {
2448   /* OP_F220 (); */
2449   PC = cia;
2450   genericXor(State.regs[REG_D0 + DM1], REG_D0 + DN0);
2451 }
2452
2453
2454 // 1111 1010 1110 10Dn imm16...; xor imm16,Dn (imm16 is zero-extended.)
2455 8.0xfa+4.0xe,10,2.DN0+8.IMM16A+8.IMM16B:D2:::xor
2456 "xor"
2457 *mn10300
2458
2459 *am33
2460 *am33_2
2461
2462 {
2463   /* OP_FAE80000 (); */
2464   PC = cia;
2465   genericXor(FETCH16(IMM16A, IMM16B), REG_D0 + DN0);
2466 }
2467
2468
2469 // 1111 1100 1110 10Dn imm32...; xor imm32,Dn
2470 8.0xfc+4.0xe,10,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::xor
2471 "xor"
2472 *mn10300
2473
2474 *am33
2475 *am33_2
2476
2477 {
2478   /* OP_FCE80000 (); */
2479   PC = cia;
2480   genericXor(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
2481 }
2482
2483
2484 // 1111 0010 0011 00Dn; not Dn
2485 8.0xf2+4.0x3,00,2.DN0:D0:::not
2486 "not"
2487 *mn10300
2488
2489 *am33
2490 *am33_2
2491
2492 {
2493   /* OP_F230 (); */
2494   int n, z;
2495
2496   PC = cia;
2497   State.regs[REG_D0 + DN0] = ~State.regs[REG_D0 + DN0];
2498   z = (State.regs[REG_D0 + DN0] == 0);
2499   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2500   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2501   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2502 }
2503
2504
2505 // 1111 1000 1110 11Dn imm8....; btst imm8,Dn (imm8 is zero-extended.)
2506 8.0xf8+4.0xe,11,2.DN0+8.IMM8:D1:::btst
2507 "btst"
2508 *mn10300
2509
2510 *am33
2511 *am33_2
2512
2513 {
2514   /* OP_F8EC00 (); */
2515   PC = cia;
2516   genericBtst(IMM8, State.regs[REG_D0 + DN0]);
2517 }
2518
2519
2520 // 1111 1010 1110 11Dn imm16.....; btst imm16,Dn (imm16 is zero-extended.)
2521 8.0xfa+4.0xe,11,2.DN0+8.IMM16A+8.IMM16B:D2:::btst
2522 "btst"
2523 *mn10300
2524
2525 *am33
2526 *am33_2
2527
2528 {
2529   /* OP_FAEC0000 (); */
2530   PC = cia;
2531   genericBtst(FETCH16(IMM16A, IMM16B), State.regs[REG_D0 + DN0]);
2532 }
2533
2534
2535 // 1111 1100 1110 11Dn imm32...; btst imm32,Dn
2536 8.0xfc+4.0xe,11,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::btst
2537 "btst"
2538 *mn10300
2539
2540 *am33
2541 *am33_2
2542
2543 {
2544   /* OP_FCEC0000 (); */
2545   PC = cia;
2546   genericBtst(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
2547               State.regs[REG_D0 + DN0]);
2548 }
2549
2550
2551 // 1111 1110 0000 0010 abs32... imm8....; btst imm8,(abs32) (imm8 is zero-extended., processing unit: byte)
2552 8.0xfe+8.0x02+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D+8.IMM8:D5:::btst
2553 "btst"
2554 *mn10300
2555
2556 *am33
2557 *am33_2
2558
2559 {
2560   /* OP_FE020000 (); */
2561   PC = cia;
2562   genericBtst(IMM8,
2563               load_byte(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
2564 }
2565
2566
2567 // 1111 1010 1111 10An d8...... imm8....; 
2568 // btst imm8,(d8,An) (d8 is sign-extended,imm8 is zero-extended., processing unit: byte)
2569 8.0xfa+4.0xf,10,2.AN0+8.D8+8.IMM8:D2a:::btst
2570 "btst"
2571 *mn10300
2572
2573 *am33
2574 *am33_2
2575
2576 {
2577   /* OP_FAF80000 (); */
2578   PC = cia;
2579   genericBtst(IMM8,
2580               load_byte(State.regs[REG_A0 + AN0] + EXTEND8(D8)));
2581 }
2582
2583
2584 // 1111 0000 1000 DmAn; bset Dm,(An) (Processing unit byte)
2585 8.0xf0+4.8,2.DM1,2.AN0:D0:::bset
2586 "bset"
2587 *mn10300
2588
2589 *am33
2590 *am33_2
2591
2592 {
2593   /* OP_F080 (); */
2594   unsigned32 temp;
2595   int z;
2596
2597   PC = cia;
2598   temp = load_byte (State.regs[REG_A0 + AN0]);
2599   z = (temp & State.regs[REG_D0 + DM1]) == 0;
2600   temp |= State.regs[REG_D0 + DM1];
2601   store_byte (State.regs[REG_A0 + AN0], temp);
2602   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2603   PSW |= (z ? PSW_Z : 0);
2604 }
2605
2606
2607 // 1111 1110 0000 0000 abs32... imm8....;
2608 // bset imm8,(abs32) (imm8 is zero-extended., processing unit: byte)
2609 8.0xfe+8.0x00+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D+8.IMM8:D5:::bset
2610 "bset"
2611 *mn10300
2612
2613 *am33
2614 *am33_2
2615
2616 {
2617   /* OP_FE000000 (); */
2618   unsigned32 temp;
2619   int z;
2620
2621   PC = cia;
2622   temp = load_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
2623   z = (temp & IMM8) == 0;
2624   temp |= IMM8;
2625   store_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), temp);
2626   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2627   PSW |= (z ? PSW_Z : 0);
2628 }
2629
2630
2631 // 1111 1010 1111 00AnAn d8...... imm8....;
2632 // bset imm8,(d8,An) (d8 is sign-extended, imm8 is zero-extended., processing unit: byte)
2633 8.0xfa+4.0xf,00,2.AN0+8.D8+8.IMM8:D2:::bset
2634 "bset"
2635 *mn10300
2636
2637 *am33
2638 *am33_2
2639
2640 {
2641   /* OP_FAF00000 (); */
2642   unsigned32 temp;
2643   int z;
2644
2645   PC = cia;
2646   temp = load_byte ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)));
2647   z = (temp & (IMM8)) == 0;
2648   temp |= (IMM8);
2649   store_byte ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)), temp);
2650   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2651   PSW |= (z ? PSW_Z : 0);
2652 }
2653
2654
2655 // 1111 0000 1001 DmAn; bclr Dm,(An) (Processing unit byte)
2656 8.0xf0+4.0x9,2.DM1,2.AN0:D0:::bclr
2657 "bclr"
2658 *mn10300
2659
2660 *am33
2661 *am33_2
2662
2663 {
2664   /* OP_F090 (); */
2665   unsigned32 temp;
2666   int z;
2667
2668   PC = cia;
2669   temp = load_byte (State.regs[REG_A0 + AN0]);
2670   z = (temp & State.regs[REG_D0 + DM1]) == 0;
2671   temp = temp & ~State.regs[REG_D0 + DM1];
2672   store_byte (State.regs[REG_A0 + AN0], temp);
2673   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2674   PSW |= (z ? PSW_Z : 0);
2675 }
2676
2677
2678 // 1111 1110 0000 0001 abs32... imm8....;
2679 // bclr imm8,(abs32) (imm8 is zero-extended., processing unit: byte)
2680 8.0xfe+8.0x01+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D+8.IMM8:D5:::bclr
2681 "bclr"
2682 *mn10300
2683
2684 *am33
2685 *am33_2
2686
2687 {
2688   /* OP_FE010000 (); */
2689   unsigned32 temp;
2690   int z;
2691
2692   PC = cia;
2693   temp = load_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
2694   z = (temp & IMM8) == 0;
2695   temp = temp & ~(IMM8);
2696   store_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), temp);
2697   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2698   PSW |= (z ? PSW_Z : 0);
2699 }
2700
2701
2702 // 1111 1010 1111 01An d8...... imm8....;
2703 // bclr imm8,(d8,An) (d8 is sign-extended, imm8 is zero-extended., processing unit: byte)
2704 8.0xfa+4.0xf,01,2.AN0+8.D8+8.IMM8:D2:::bclr
2705 "bclr"
2706 *mn10300
2707
2708 *am33
2709 *am33_2
2710
2711 {
2712   /* OP_FAF40000 (); */
2713   unsigned32 temp;
2714   int z;
2715
2716   PC = cia;
2717   temp = load_byte ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)));
2718   z = (temp & (IMM8)) == 0;
2719   temp = temp & ~(IMM8);
2720   store_byte ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)), temp);
2721   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2722   PSW |= (z ? PSW_Z : 0);
2723 }
2724
2725
2726 // 1111 0010 1011 DmDn; asr Dm,Dn
2727 8.0xf2+4.0xb,2.DM1,2.DN0:D0:::asr
2728 "asr"
2729 *mn10300
2730
2731 *am33
2732 *am33_2
2733
2734 {
2735   /* OP_F2B0 (); */
2736   signed32 temp;
2737   int z, n, c;
2738
2739   PC = cia;
2740   temp = State.regs[REG_D0 + DN0];
2741   c = temp & 1;
2742   temp >>= State.regs[REG_D0 + DM1];
2743   State.regs[REG_D0 + DN0] = temp;
2744   z = (State.regs[REG_D0 + DN0] == 0);
2745   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2746   PSW &= ~(PSW_Z | PSW_N | PSW_C);
2747   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
2748 }
2749
2750
2751 // 1111 1000 1100 10Dn imm8...; asr imm8,Dn (imm8 is zero-extended.)
2752 8.0xf8+4.0xc,10,2.DN0+8.IMM8:D1:::asr
2753 "asr"
2754 *mn10300
2755
2756 *am33
2757 *am33_2
2758
2759 {
2760   /* OP_F8C800 (); */
2761   signed32 temp;
2762   int z, n, c;
2763
2764   PC = cia;
2765   temp = State.regs[REG_D0 + DN0];
2766   c = temp & 1;
2767   temp >>= IMM8;
2768   State.regs[REG_D0 + DN0] = temp;
2769   z = (State.regs[REG_D0 + DN0] == 0);
2770   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2771   PSW &= ~(PSW_Z | PSW_N | PSW_C);
2772   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
2773 }
2774
2775
2776 // 1111 0010 1010 DmDn; lsr Dm,Dn
2777 8.0xf2+4.0xa,2.DM1,2.DN0:D0:::lsr
2778 "lsr"
2779 *mn10300
2780
2781 *am33
2782 *am33_2
2783
2784 {
2785   /* OP_F2A0 (); */
2786   int z, n, c;
2787
2788   PC = cia;
2789   c = State.regs[REG_D0 + DN0] & 1;
2790   State.regs[REG_D0 + DN0]
2791     >>= State.regs[REG_D0 + DM1];
2792   z = (State.regs[REG_D0 + DN0] == 0);
2793   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2794   PSW &= ~(PSW_Z | PSW_N | PSW_C);
2795   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
2796 }
2797
2798
2799 // 1111 1000 1100 01Dn imm8...; lsr imm8,Dn (imm8 is zero-extended.)
2800 8.0xf8+4.0xc,01,2.DN0+8.IMM8:D1:::lsr
2801 "lsr"
2802 *mn10300
2803
2804 *am33
2805 *am33_2
2806
2807 {
2808   /* OP_F8C400 (); */
2809   int z, n, c;
2810
2811   PC = cia;
2812   c = State.regs[REG_D0 + DN0] & 1;
2813   State.regs[REG_D0 + DN0] >>=  IMM8;
2814   z = (State.regs[REG_D0 + DN0] == 0);
2815   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2816   PSW &= ~(PSW_Z | PSW_N | PSW_C);
2817   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
2818 }
2819
2820
2821 // 1111 0010 1001 DmDn; asl Dm,Dn
2822 8.0xf2+4.0x9,2.DM1,2.DN0:D0:::asl
2823 "asl"
2824 *mn10300
2825
2826 *am33
2827 *am33_2
2828
2829 {
2830   /* OP_F290 (); */
2831   int n, z;
2832
2833   PC = cia;
2834   State.regs[REG_D0 + DN0]
2835     <<= State.regs[REG_D0 + DM1];
2836   z = (State.regs[REG_D0 + DN0] == 0);
2837   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2838   PSW &= ~(PSW_Z | PSW_N);
2839   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2840 }
2841
2842
2843 // 1111 1000 1100 00Dn imm8...; asl imm8,Dn (imm8 is zero-extended.)
2844 8.0xf8+4.0xc,00,2.DN0+8.IMM8:D1:::asl
2845 "asl"
2846 *mn10300
2847
2848 *am33
2849 *am33_2
2850
2851 {
2852   /* OP_F8C000 (); */
2853   int n, z;
2854
2855   PC = cia;
2856   State.regs[REG_D0 + DN0] <<= IMM8;
2857   z = (State.regs[REG_D0 + DN0] == 0);
2858   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2859   PSW &= ~(PSW_Z | PSW_N);
2860   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2861 }
2862
2863
2864 // 0101 01Dn; als2 Dn
2865 4.0x5,01,2.DN0:S0:::asl2
2866 "asl2"
2867 *mn10300
2868
2869 *am33
2870 *am33_2
2871
2872 {
2873   /* OP_54 (); */
2874   int n, z;
2875   PC = cia;
2876
2877   State.regs[REG_D0 + DN0] <<= 2;
2878   z = (State.regs[REG_D0 + DN0] == 0);
2879   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
2880   PSW &= ~(PSW_Z | PSW_N);
2881   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
2882 }
2883
2884
2885 // 1111 0010 1000 01Dn; ror Dn
2886 8.0xf2+4.0x8,01,2.DN0:D0:::ror
2887 "ror"
2888 *mn10300
2889
2890 *am33
2891 *am33_2
2892
2893 {
2894   /* OP_F284 (); */
2895   unsigned32 value;
2896   int c,n,z;
2897
2898   PC = cia;
2899   value = State.regs[REG_D0 + DN0];
2900   c = (value & 0x1);
2901
2902   value >>= 1;
2903   value |= ((PSW & PSW_C) != 0) ? 0x80000000 : 0;
2904   State.regs[REG_D0 + DN0] = value;
2905   z = (value == 0);
2906   n = (value & 0x80000000) != 0;
2907   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2908   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
2909 }
2910
2911
2912 // 1111 0010 1000 00Dn; rol Dn
2913 8.0xf2+4.0x8,00,2.DN0:D0:::rol
2914 "rol"
2915 *mn10300
2916
2917 *am33
2918 *am33_2
2919
2920 {
2921   /* OP_F280 (); */
2922   unsigned32 value;
2923   int c,n,z;
2924
2925   PC = cia;
2926   value = State.regs[REG_D0 + DN0];
2927   c = (value & 0x80000000) ? 1 : 0;
2928
2929   value <<= 1;
2930   value |= ((PSW & PSW_C) != 0);
2931   State.regs[REG_D0 + DN0] = value;
2932   z = (value == 0);
2933   n = (value & 0x80000000) != 0;
2934   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
2935   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0) | (c ? PSW_C : 0));
2936 }
2937
2938
2939 // 1100 1000 d8......; beq (d8,PC) (d8 is sign-extended)
2940 8.0xc8+8.D8:S1:::beq
2941 "beq"
2942 *mn10300
2943
2944 *am33
2945 *am33_2
2946
2947 {
2948   /* OP_C800 (); */
2949   PC = cia;
2950   if ((PSW & PSW_Z))
2951     {
2952       State.regs[REG_PC] += EXTEND8 (D8);
2953       nia = PC;
2954     }
2955 }
2956
2957
2958 // 1100 1001 d8......; bne (d8,PC) (d8 is sign-extended)
2959 8.0xc9+8.D8:S1:::bne
2960 "bne"
2961 *mn10300
2962
2963 *am33
2964 *am33_2
2965
2966 {
2967   /* OP_C900 (); */
2968   PC = cia;
2969   if (!(PSW & PSW_Z))
2970     {
2971       State.regs[REG_PC] += EXTEND8 (D8);
2972       nia = PC;
2973     }
2974 }
2975
2976
2977 // 1100 0001 d8......; bgt (d8,PC) (d8 is sign-extended)
2978 8.0xc1+8.D8:S1:::bgt
2979 "bgt"
2980 *mn10300
2981
2982 *am33
2983 *am33_2
2984
2985 {
2986   /* OP_C100 (); */
2987   PC = cia;
2988   if (!((PSW & PSW_Z)
2989         || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))))
2990     {
2991       State.regs[REG_PC] += EXTEND8 (D8);
2992       nia = PC;
2993     }
2994 }
2995
2996
2997 // 1100 0010 d8......; bge (d8,PC) (d8 is sign-extended)
2998 8.0xc2+8.D8:S1:::bge
2999 "bge"
3000 *mn10300
3001
3002 *am33
3003 *am33_2
3004
3005 {
3006   /* OP_C200 (); */
3007   PC = cia;
3008   if (!(((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))
3009     {
3010       State.regs[REG_PC] += EXTEND8 (D8);
3011       nia = PC;
3012     }
3013 }
3014
3015
3016 // 1100 0011 d8......; ble (d8,PC) (d8 is sign-extended)
3017 8.0xc3+8.D8:S1:::ble
3018 "ble"
3019 *mn10300
3020
3021 *am33
3022 *am33_2
3023
3024 {
3025   /* OP_C300 (); */
3026   PC = cia;
3027   if ((PSW & PSW_Z)
3028       || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))
3029     {
3030       State.regs[REG_PC] += EXTEND8 (D8);
3031       nia = PC;
3032     }
3033 }
3034
3035
3036 // 1100 0000 d8......; blt (d8,PC) (d8 is sign-extended)
3037 8.0xc0+8.D8:S1:::blt
3038 "blt"
3039 *mn10300
3040
3041 *am33
3042 *am33_2
3043
3044 {
3045   /* OP_C000 (); */
3046   PC = cia;
3047   if (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))
3048     {
3049       State.regs[REG_PC] += EXTEND8 (D8);
3050       nia = PC;
3051     }
3052 }
3053
3054
3055 // 1100 0101 d8......; bhi (d8,PC) (d8 is sign-extended)
3056 8.0xc5+8.D8:S1:::bhi
3057 "bhi"
3058 *mn10300
3059
3060 *am33
3061 *am33_2
3062
3063 {
3064   /* OP_C500 (); */
3065   PC = cia;
3066   if (!(((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0))
3067     {
3068       State.regs[REG_PC] += EXTEND8 (D8);
3069       nia = PC;
3070     }
3071 }
3072
3073
3074 // 1100 0110 d8......; bcc (d8,PC) (d8 is sign-extended)
3075 8.0xc6+8.D8:S1:::bcc
3076 "bcc"
3077 *mn10300
3078
3079 *am33
3080 *am33_2
3081
3082 {
3083   /* OP_C600 (); */
3084   PC = cia;
3085   if (!(PSW & PSW_C))
3086     {
3087       State.regs[REG_PC] += EXTEND8 (D8);
3088       nia = PC;
3089     }
3090 }
3091
3092
3093 // 1100 0101 d8......; bls (d8,PC) (d8 is sign-extended)
3094 8.0xc7+8.D8:S1:::bls
3095 "bls"
3096 *mn10300
3097
3098 *am33
3099 *am33_2
3100
3101 {
3102   /* OP_C700 (); */
3103   PC = cia;
3104   if (((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0)
3105     {
3106       State.regs[REG_PC] += EXTEND8 (D8);
3107       nia = PC;
3108     }
3109 }
3110
3111
3112 // 1100 0100 d8......; bcs (d8,PC) (d8 is sign-extended)
3113 8.0xc4+8.D8:S1:::bcs
3114 "bcs"
3115 *mn10300
3116
3117 *am33
3118 *am33_2
3119
3120 {
3121   /* OP_C400 (); */
3122   PC = cia;
3123   if (PSW & PSW_C)
3124     {
3125       State.regs[REG_PC] += EXTEND8 (D8);
3126       nia = PC;
3127     }
3128 }
3129
3130
3131 // 1111 1000 1110 1000 d8......; bvc (d8,PC) (d8 is sign-extended)
3132 8.0xf8+8.0xe8+8.D8:D1:::bvc
3133 "bvc"
3134 *mn10300
3135
3136 *am33
3137 *am33_2
3138
3139 {
3140   /* OP_F8E800 (); */
3141   PC = cia;
3142   if (!(PSW & PSW_V))
3143     {
3144       State.regs[REG_PC] += EXTEND8 (D8);
3145       nia = PC;
3146     }
3147 }
3148
3149
3150 // 1111 1000 1110 1001 d8......; bvs (d8,PC) (d8 is sign-extended)
3151 8.0xf8+8.0xe9+8.D8:D1:::bvs
3152 "bvs"
3153 *mn10300
3154
3155 *am33
3156 *am33_2
3157
3158 {
3159   /* OP_F8E900 (); */
3160   PC = cia;
3161   if (PSW & PSW_V)
3162     {
3163       State.regs[REG_PC] += EXTEND8 (D8);
3164       nia = PC;
3165     }
3166 }
3167
3168
3169 // 1111 1000 1110 1010 d8......; bnc (d8,PC) (d8 is sign-extended)
3170 8.0xf8+8.0xea+8.D8:D1:::bnc
3171 "bnc"
3172 *mn10300
3173
3174 *am33
3175 *am33_2
3176
3177 {
3178   /* OP_F8EA00 (); */
3179   PC = cia;
3180   if (!(PSW & PSW_N))
3181     {
3182       State.regs[REG_PC] += EXTEND8 (D8);
3183       nia = PC;
3184     }
3185 }
3186
3187
3188 // 1111 1000 1110 1010 d8......; bns (d8,PC) (d8 is sign-extended)
3189 8.0xf8+8.0xeb+8.D8:D1:::bns
3190 "bns"
3191 *mn10300
3192
3193 *am33
3194 *am33_2
3195
3196 {
3197   /* OP_F8EB00 (); */
3198   PC = cia;
3199   if (PSW & PSW_N)
3200     {
3201       State.regs[REG_PC] += EXTEND8 (D8);
3202       nia = PC;
3203     }
3204 }
3205
3206
3207 // 1100 1010 d8......; bra (d8,PC) (d8 is sign-extended)
3208 8.0xca+8.D8:S1:::bra
3209 "bra"
3210 *mn10300
3211
3212 *am33
3213 *am33_2
3214
3215 {
3216   /* OP_CA00 (); */
3217   PC = cia;
3218   State.regs[REG_PC] += EXTEND8 (D8);
3219   nia = PC;
3220 }
3221
3222
3223 // 1101 1000; leq
3224 8.0xd8:S0:::leq
3225 "leq"
3226 *mn10300
3227
3228 *am33
3229 *am33_2
3230
3231 {
3232   /* OP_D8 (); */
3233   PC = cia;
3234   if (PSW & PSW_Z)
3235     {
3236       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3237       nia = PC;
3238     }
3239 }
3240
3241
3242 // 1101 1001; lne
3243 8.0xd9:S0:::lne
3244 "lne"
3245 *mn10300
3246
3247 *am33
3248 *am33_2
3249
3250 {
3251   /* OP_D9 (); */
3252   PC = cia;
3253   if (!(PSW & PSW_Z))
3254     {
3255       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3256       nia = PC;
3257     }
3258 }
3259
3260
3261 // 1101 0001; lgt
3262 8.0xd1:S0:::lgt
3263 "lgt"
3264 *mn10300
3265
3266 *am33
3267 *am33_2
3268
3269 {
3270   /* OP_D1 (); */
3271   PC = cia;
3272   if (!((PSW & PSW_Z)
3273         || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))))
3274     {
3275       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3276       nia = PC;
3277     }
3278 }
3279
3280
3281 // 1101 0010; lge
3282 8.0xd2:S0:::lge
3283 "lge"
3284 *mn10300
3285
3286 *am33
3287 *am33_2
3288
3289 {
3290   /* OP_D2 (); */
3291   PC = cia;
3292   if (!(((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))
3293     {
3294       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3295       nia = PC;
3296     }
3297 }
3298
3299
3300 // 1101 0011; lle
3301 8.0xd3:S0:::lle
3302 "lle"
3303 *mn10300
3304
3305 *am33
3306 *am33_2
3307
3308 {
3309   /* OP_D3 (); */
3310   PC = cia;
3311   if ((PSW & PSW_Z)
3312       || (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0)))
3313     {
3314       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3315       nia = PC;
3316     }
3317 }
3318
3319
3320 // 1101 0000; llt
3321 8.0xd0:S0:::llt
3322 "llt"
3323 *mn10300
3324
3325 *am33
3326 *am33_2
3327
3328 {
3329   /* OP_D0 (); */
3330   PC = cia;
3331   if (((PSW & PSW_N) != 0) ^ ((PSW & PSW_V) != 0))
3332     {
3333       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3334       nia = PC;
3335     }
3336 }
3337
3338
3339 // 1101 0101; lhi
3340 8.0xd5:S0:::lhi
3341 "lhi"
3342 *mn10300
3343
3344 *am33
3345 *am33_2
3346
3347 {
3348   /* OP_D5 (); */
3349   PC = cia;
3350   if (!(((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0))
3351     {
3352       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3353       nia = PC;
3354     }
3355 }
3356
3357
3358 // 1101 0110; lcc
3359 8.0xd6:S0:::lcc
3360 "lcc"
3361 *mn10300
3362
3363 *am33
3364 *am33_2
3365
3366 {
3367   /* OP_D6 (); */
3368   PC = cia;
3369   if (!(PSW & PSW_C))
3370     {
3371       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3372       nia = PC;
3373     }
3374 }
3375
3376
3377 // 1101 0111; lls
3378 8.0xd7:S0:::lls
3379 "lls"
3380 *mn10300
3381
3382 *am33
3383 *am33_2
3384
3385 {
3386   /* OP_D7 (); */
3387   PC = cia;
3388   if (((PSW & PSW_C) != 0) || (PSW & PSW_Z) != 0)
3389     {
3390       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3391       nia = PC;
3392     }
3393 }
3394
3395
3396 // 1101 0100; lcs
3397 8.0xd4:S0:::lcs
3398 "lcs"
3399 *mn10300
3400
3401 *am33
3402 *am33_2
3403
3404 {
3405   /* OP_D4 (); */
3406   PC = cia;
3407   if (PSW & PSW_C)
3408     {
3409       State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3410       nia = PC;
3411     }
3412 }
3413
3414
3415 // 1101 1010; lra
3416 8.0xda:S0:::lra
3417 "lra"
3418 *mn10300
3419
3420 *am33
3421 *am33_2
3422
3423 {
3424   /* OP_DA (); */
3425   PC = cia;
3426   State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3427   nia = PC;
3428 }
3429
3430
3431 // 1101 1010; setlb
3432 8.0xdb:S0:::setlb
3433 "setlb"
3434 *mn10300
3435
3436 *am33
3437 *am33_2
3438
3439 {
3440   /* OP_DB (); */
3441   PC = cia;
3442   State.regs[REG_LIR] = load_word (State.regs[REG_PC] + 1);
3443   State.regs[REG_LAR] = State.regs[REG_PC] + 5;
3444 }
3445
3446
3447 // 1111 0000 1111 01An; jmp (An)
3448 8.0xf0+4.0xf,01,2.AN0:D0:::jmp
3449 "jmp"
3450 *mn10300
3451
3452 *am33
3453 *am33_2
3454
3455 {
3456   /* OP_F0F4 (); */
3457   PC = State.regs[REG_A0 + AN0];
3458   nia = PC;
3459 }
3460
3461
3462 // 1100 1100 d16.....; jmp (d16,PC) (d16 is sign-extended.)
3463 8.0xcc+8.D16A+8.D16B:S2:::jmp
3464 "jmp"
3465 *mn10300
3466
3467 *am33
3468 *am33_2
3469
3470 {
3471   /* OP_CC0000 (); */
3472   PC = cia + EXTEND16(FETCH16(D16A, D16B));
3473   nia = PC;
3474 }
3475
3476
3477 // 1101 1100 d32........; jmp (d32, PC)
3478 8.0xdc+8.D32A+8.D32B+8.D32C+8.D32D:S4:::jmp
3479 "jmp"
3480 *mn10300
3481
3482 *am33
3483 *am33_2
3484
3485 {
3486   /* OP_DC000000 (); */
3487   PC = cia + FETCH32(D32A, D32B, D32C, D32D);
3488   nia = PC;
3489 }
3490
3491
3492 // 1111 0000 1111 00An; calls (An)
3493 8.0xf0+4.0xf,00,2.AN0:D0:::calls
3494 "calls"
3495 *mn10300
3496
3497 *am33
3498 *am33_2
3499
3500 {
3501   /* OP_F0F0 (); */
3502   unsigned32 next_pc, sp;
3503
3504   PC = cia;
3505   sp = State.regs[REG_SP];
3506   next_pc = State.regs[REG_PC] + 2;
3507   store_word(sp, next_pc);
3508   State.regs[REG_MDR] = next_pc;
3509   State.regs[REG_PC] = State.regs[REG_A0 + AN0];
3510   nia = PC;
3511 }
3512
3513
3514 // 1111 1010 1111 1111 d16.....; calls (d16,PC) (d16 is sign-extended.)
3515 8.0xfa+8.0xff+8.D16A+8.D16B:D2:::calls
3516 "calls"
3517 *mn10300
3518
3519 *am33
3520 *am33_2
3521
3522 {
3523   /* OP_FAFF0000 (); */
3524   unsigned32 next_pc, sp;
3525
3526   PC = cia;
3527   sp = State.regs[REG_SP];
3528   next_pc = State.regs[REG_PC] + 4;
3529   store_word(sp, next_pc);
3530   State.regs[REG_MDR] = next_pc;
3531   State.regs[REG_PC] += EXTEND16 (FETCH16(D16A, D16B));
3532   nia = PC;
3533 }
3534
3535
3536 // 1111 1100 1111 1111 d32.....; calls (d32,PC)
3537 8.0xfc+8.0xff+8.D32A+8.D32B+8.D32C+8.D32D:D4:::calls
3538 "calls"
3539 *mn10300
3540
3541 *am33
3542 *am33_2
3543
3544 {
3545   /* OP_FCFF0000 (); */
3546   unsigned32 next_pc, sp;
3547
3548   PC = cia;
3549   sp = State.regs[REG_SP];
3550   next_pc = State.regs[REG_PC] + 6;
3551   store_word(sp, next_pc);
3552   State.regs[REG_MDR] = next_pc;
3553   State.regs[REG_PC] += FETCH32(D32A, D32B, D32C, D32D);
3554   nia = PC;
3555 }
3556
3557
3558 // 1111 0000 1111 1100; rets
3559 8.0xf0+8.0xfc:D0:::rets
3560 "rets"
3561 *mn10300
3562
3563 *am33
3564 *am33_2
3565
3566 {
3567   /* OP_F0FC (); */
3568   unsigned32 sp;
3569
3570   sp = State.regs[REG_SP];
3571   State.regs[REG_PC] = load_word(sp);
3572   nia = PC;
3573 }
3574
3575
3576 // 1111 0000 1111 1101; rti
3577 8.0xf0+8.0xfd:D0:::rti
3578 "rti"
3579 *mn10300
3580
3581 *am33
3582 *am33_2
3583
3584 {
3585   /* OP_F0FD (); */
3586   unsigned32 sp;
3587
3588   sp = State.regs[REG_SP];
3589   PSW = load_half(sp);
3590   State.regs[REG_PC] = load_word(sp+4);
3591   State.regs[REG_SP] +=8;
3592   nia = PC;
3593 }
3594
3595
3596 // 1111 0000 1111 1110; trap
3597 8.0xf0+8.0xfe:D0:::trap
3598 "trap"
3599 *mn10300
3600
3601 *am33
3602 *am33_2
3603
3604 {
3605   /* OP_F0FE (); */
3606   unsigned32 sp, next_pc;
3607
3608   PC = cia;
3609   sp = State.regs[REG_SP];
3610   next_pc = State.regs[REG_PC] + 2;
3611   store_word(sp, next_pc);
3612   nia = PC;
3613 }
3614
3615
3616 // 1111 0000 1111 1111; rtm
3617 8.0xf0+8.0xff:D0:::rtm
3618 "rtm"
3619 *mn10300
3620
3621 *am33
3622 *am33_2
3623
3624 {
3625   /* OP_F0FF (); */
3626   PC = cia;
3627   abort ();
3628 }
3629
3630
3631 // 1100 1011; nop
3632 8.0xcb:S0:::nop
3633 "nop"
3634 *mn10300
3635
3636 *am33
3637 *am33_2
3638
3639 {
3640   /* OP_CB (); */
3641   PC = cia;
3642 }
3643
3644
3645 // 1111 0101 0000  DmDn; udf20 Dm,Dn
3646 8.0xf5+4.0x0,2.DM1,2.DN0:D0:::putx
3647 "putx"
3648 *mn10300
3649 {
3650   /* OP_F500 (); */
3651   PC = cia;
3652   State.regs[REG_MDRQ] = State.regs[REG_D0 + DN0];
3653 }
3654
3655
3656 // 1111 0110 1111 DmDn; udf15 Dm,Dn
3657 8.0xf6+4.0xf,2.DM1,2.DN0:D0:::getx
3658 "getx"
3659 *mn10300
3660
3661 *am33
3662 *am33_2
3663
3664 {
3665   /* OP_F6F0 (); */
3666   int z, n;
3667
3668   PC = cia;
3669   z = (State.regs[REG_MDRQ] == 0);
3670   n = ((State.regs[REG_MDRQ] & 0x80000000) != 0);
3671   State.regs[REG_D0 + DN0] = State.regs[REG_MDRQ];
3672
3673   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3674   PSW |= (z ? PSW_Z : 0) | (n ? PSW_N : 0);
3675 }
3676
3677
3678 // 1111 0110 0000 DmDn; udf00 Dm,Dn
3679 8.0xf6+4.0x0,2.DM1,2.DN0:D0:::mulq
3680 "mulq"
3681 *mn10300
3682
3683 *am33
3684 *am33_2
3685
3686 {
3687   /* OP_F600 (); */
3688   unsigned64 temp;
3689   int n, z;
3690
3691   PC = cia;
3692   temp = ((signed64)(signed32)State.regs[REG_D0 + DN0]
3693           *  (signed64)(signed32)State.regs[REG_D0 + DM1]);
3694   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3695   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3696   z = (State.regs[REG_D0 + DN0] == 0);
3697   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3698   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3699   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3700 }
3701
3702
3703 // 1111 1001 0000 00Dn imm8....; udf00 imm8,Dn (imm8 is sign-extended.)
3704 8.0xf9+4.0x,00,2.DN0+8.IMM8:D1:::mulq
3705 "mulq"
3706 *mn10300
3707
3708 *am33
3709 *am33_2
3710
3711 {
3712   /* OP_F90000 (); */
3713   unsigned64 temp;
3714   int n, z;
3715
3716   PC = cia;
3717   temp = ((signed64)(signed32)State.regs[REG_D0 + DN0]
3718           * (signed64)(signed32)EXTEND8 (IMM8));
3719   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3720   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3721   z = (State.regs[REG_D0 + DN0] == 0);
3722   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3723   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3724   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3725 }
3726
3727
3728 // 1111 1011 0000 00Dn imm16...; udf00 imm16,Dn (imm16 is sign-extended.)
3729 8.0xfb+4.0x0,00,2.DN0+8.IMM16A+8.IMM16B:D2:::mulq
3730 "mulq"
3731 *mn10300
3732
3733 *am33
3734 *am33_2
3735
3736 {
3737   /* OP_FB000000 (); */
3738   unsigned64 temp;
3739   int n, z;
3740
3741   PC = cia;
3742   temp = ((signed64)(signed32)State.regs[REG_D0 + DN0]
3743           * (signed64)(signed32)EXTEND16 (FETCH16(IMM16A, IMM16B)));
3744   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3745   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3746   z = (State.regs[REG_D0 + DN0] == 0);
3747   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3748   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3749   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3750 }
3751
3752
3753 // 1111 1101 0000 00Dn imm32...; udf00 imm32,Dn
3754 8.0xfd+4.0x0,00,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::mulq
3755 "mulq"
3756 *mn10300
3757
3758 *am33
3759 *am33_2
3760
3761 {
3762   /* OP_FD000000 (); */
3763   unsigned64 temp;
3764   int n, z;
3765
3766   PC = cia;
3767   temp = ((signed64)(signed32)State.regs[REG_D0 + DN0]
3768           * (signed64)(signed32)(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
3769   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3770   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3771   z = (State.regs[REG_D0 + DN0] == 0);
3772   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3773   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3774   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3775 }
3776
3777
3778 // 1111 0110 0001 DmDn; udf01 Dm,Dn
3779 8.0xf6+4.0x1,2.DM1,2.DN0:D0:::mulqu
3780 "mulqu"
3781 *mn10300
3782
3783 *am33
3784 *am33_2
3785
3786 {
3787   /* OP_F610 (); */
3788   unsigned64 temp;
3789   int n, z;
3790
3791   PC = cia;
3792   temp = ((unsigned64) State.regs[REG_D0 + DN0]
3793           * (unsigned64) State.regs[REG_D0 + DM1]);
3794   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3795   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3796   z = (State.regs[REG_D0 + DN0] == 0);
3797   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3798   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3799   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3800 }
3801
3802
3803 // 1111 1001 0001 01Dn imm8....; udfu01 imm8,Dn (imm8 is zero-extended.)
3804 8.0xf9+4.0x1,01,2.DN0+8.IMM8:D1:::mulqu
3805 "mulqu"
3806 *mn10300
3807
3808 *am33
3809 *am33_2
3810
3811 {
3812   /* OP_F91400 (); */
3813   unsigned64 temp;
3814   int n, z;
3815
3816   PC = cia;
3817   temp = ((unsigned64)State.regs[REG_D0 + DN0]
3818           * (unsigned64)EXTEND8 (IMM8));
3819   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3820   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3821   z = (State.regs[REG_D0 + DN0] == 0);
3822   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3823   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3824   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3825 }
3826
3827
3828 // 1111 1011 0001 01Dn imm16...; udfu01 imm16,Dn (imm16 is zero-extended.)
3829 8.0xfb+4.0x1,01,2.DN0+8.IMM16A+8.IMM16B:D2:::mulqu
3830 "mulqu"
3831 *mn10300
3832
3833 *am33
3834 *am33_2
3835
3836 {
3837   /* OP_FB140000 (); */
3838   unsigned64 temp;
3839   int n, z;
3840
3841   PC = cia;
3842   temp = ((unsigned64)State.regs[REG_D0 + DN0]
3843           * (unsigned64) EXTEND16 (FETCH16(IMM16A, IMM16B)));
3844   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3845   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3846   z = (State.regs[REG_D0 + DN0] == 0);
3847   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3848   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3849   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3850 }
3851
3852
3853 // 1111 1101 0001 01Dn imm32...; udfu01 imm32,Dn
3854 8.0xfd+4.0x1,01,2.DN0+8.IMM32A+8.IMM32B+8.IMM32C+8.IMM32D:D4:::mulqu
3855 "mulqu"
3856 *mn10300
3857
3858 *am33
3859 *am33_2
3860
3861 {
3862   /* OP_FD140000 (); */
3863   unsigned64 temp;
3864   int n, z;
3865
3866   PC = cia;
3867   temp = ((unsigned64)State.regs[REG_D0 + DN0]
3868           * (unsigned64)(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
3869   State.regs[REG_D0 + DN0] = temp & 0xffffffff;
3870   State.regs[REG_MDRQ] = (temp & 0xffffffff00000000LL) >> 32;;
3871   z = (State.regs[REG_D0 + DN0] == 0);
3872   n = (State.regs[REG_D0 + DN0] & 0x80000000) != 0;
3873   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3874   PSW |= ((z ? PSW_Z : 0) | (n ? PSW_N : 0));
3875 }
3876
3877
3878 // 1111 0110 0100 DmDn; udf04 Dm,Dn
3879 8.0xf6+4.0x4,2.DM1,2.DN0:D0:::sat16
3880 "sat16"
3881 *mn10300
3882
3883 *am33
3884 *am33_2
3885
3886 {
3887   /* OP_F640 (); */
3888   int temp;
3889
3890   PC = cia;
3891   temp = State.regs[REG_D0 + DM1];
3892   temp = (temp > 0x7fff ? 0x7fff : temp);
3893   temp = (temp < -0x8000 ? -0x8000 : temp);
3894   State.regs[REG_D0 + DN0] = temp;
3895 }
3896
3897
3898 // 1111 0110 0101 DmDn; udf05 Dm,Dn
3899 8.0xf6+4.0x5,2.DM1,2.DN0:D0:::sat24
3900 "sat24"
3901 *mn10300
3902
3903 *am33
3904 *am33_2
3905
3906 {
3907   /* OP_F650 (); */
3908   int temp;
3909
3910   PC = cia;
3911   temp = State.regs[REG_D0 + DM1];
3912   temp = (temp > 0x7fffff ? 0x7fffff : temp);
3913   temp = (temp < -0x800000 ? -0x800000 : temp);
3914   State.regs[REG_D0 + DN0] = temp;
3915 }
3916
3917
3918 // 1111 0110 0111 DmDn; udf07 Dm,Dn
3919 8.0xf6+4.0x7,2.DM1,2.DN0:D0:::bsch
3920 "bsch"
3921 *mn10300
3922
3923 *am33
3924 *am33_2
3925
3926 {
3927   /* OP_F670 (); */
3928   int temp, c;
3929
3930   PC = cia;
3931   temp = State.regs[REG_D0 + DM1];
3932   temp <<= (State.regs[REG_D0 + DN0] & 0x1f);
3933   c = (temp != 0 ? 1 : 0);
3934   PSW &= ~(PSW_C);
3935   PSW |= (c ? PSW_C : 0);
3936 }
3937
3938
3939 // 1111 0000 1100 0000; syscall
3940 8.0xf0+8.0xc0:D0:::syscall
3941 "syscall"
3942 *mn10300
3943
3944 *am33
3945 *am33_2
3946
3947 {
3948   /* OP_F0C0 (); */
3949   PC = cia;
3950   do_syscall ();
3951 }
3952
3953
3954 // 1111 1111; break
3955 8.0xff:S0:::break
3956 "break"
3957 *mn10300
3958
3959 *am33
3960 *am33_2
3961
3962 {
3963   /* OP_FF (); */
3964   PC = cia;
3965   program_interrupt(SD, CPU, cia, SIM_SIGTRAP);
3966 }
3967
3968 // 1100 1110 regs....; movm (SP),regs
3969 8.0xce+8.REGS:S1:::movm
3970 "movm"
3971 *mn10300
3972
3973 *am33
3974 *am33_2
3975
3976 {
3977   /* OP_CE00 (); */
3978   unsigned32 sp = State.regs[REG_SP];
3979   unsigned32 mask;
3980
3981   PC = cia;
3982   mask = REGS;
3983
3984   if (mask & 0x8)
3985     {
3986       sp += 4;
3987       State.regs[REG_LAR] = load_word (sp);
3988       sp += 4;
3989       State.regs[REG_LIR] = load_word (sp);
3990       sp += 4;
3991       State.regs[REG_MDR] = load_word (sp);
3992       sp += 4;
3993       State.regs[REG_A0 + 1] = load_word (sp);
3994       sp += 4;
3995       State.regs[REG_A0] = load_word (sp);
3996       sp += 4;
3997       State.regs[REG_D0 + 1] = load_word (sp);
3998       sp += 4;
3999       State.regs[REG_D0] = load_word (sp);
4000       sp += 4;
4001     }
4002
4003   if (mask & 0x10)
4004     {
4005       State.regs[REG_A0 + 3] = load_word (sp);
4006       sp += 4;
4007     }
4008
4009   if (mask & 0x20)
4010     {
4011       State.regs[REG_A0 + 2] = load_word (sp);
4012       sp += 4;
4013     }
4014
4015   if (mask & 0x40)
4016     {
4017       State.regs[REG_D0 + 3] = load_word (sp);
4018       sp += 4;
4019     }
4020
4021   if (mask & 0x80)
4022     {
4023       State.regs[REG_D0 + 2] = load_word (sp);
4024       sp += 4;
4025     }
4026
4027   if (STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33
4028       || STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33_2
4029       )
4030     {
4031       if (mask & 0x1)
4032         {
4033           /* Need to restore MDRQ, MCRH, MCRL, and MCVF */
4034           sp += 16;
4035           State.regs[REG_E0 + 1] = load_word (sp);
4036           sp += 4;
4037           State.regs[REG_E0 + 0] = load_word (sp);
4038           sp += 4;
4039         }
4040
4041       if (mask & 0x2)
4042         {
4043           State.regs[REG_E0 + 7] = load_word (sp);
4044           sp += 4;
4045           State.regs[REG_E0 + 6] = load_word (sp);
4046           sp += 4;
4047           State.regs[REG_E0 + 5] = load_word (sp);
4048           sp += 4;
4049           State.regs[REG_E0 + 4] = load_word (sp);
4050           sp += 4;
4051         }
4052
4053       if (mask & 0x4)
4054         {
4055           State.regs[REG_E0 + 3] = load_word (sp);
4056           sp += 4;
4057           State.regs[REG_E0 + 2] = load_word (sp);
4058           sp += 4;
4059         }
4060     }
4061
4062   /* And make sure to update the stack pointer.  */
4063   State.regs[REG_SP] = sp;
4064 }
4065
4066
4067 // 1100 1111 regs....; movm regs,(SP)
4068 8.0xcf+8.REGS:S1a:::movm
4069 "movm"
4070 *mn10300
4071
4072 *am33
4073 *am33_2
4074
4075 {
4076   /* OP_CF00 (); */
4077   unsigned32 sp = State.regs[REG_SP];
4078   unsigned32 mask;
4079
4080   PC = cia;
4081   mask = REGS;
4082
4083   if (STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33
4084       || STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33_2
4085       )
4086     {
4087       if (mask & 0x4)
4088         {
4089           sp -= 4;
4090           store_word (sp, State.regs[REG_E0 + 2]);
4091           sp -= 4;
4092           store_word (sp, State.regs[REG_E0 + 3]);
4093         }
4094
4095       if (mask & 0x2)
4096         {
4097           sp -= 4;
4098           store_word (sp, State.regs[REG_E0 + 4]);
4099           sp -= 4;
4100           store_word (sp, State.regs[REG_E0 + 5]);
4101           sp -= 4;
4102           store_word (sp, State.regs[REG_E0 + 6]);
4103           sp -= 4;
4104           store_word (sp, State.regs[REG_E0 + 7]);
4105         }
4106
4107       if (mask & 0x1)
4108         {
4109           sp -= 4;
4110           store_word (sp, State.regs[REG_E0 + 0]);
4111           sp -= 4;
4112           store_word (sp, State.regs[REG_E0 + 1]);
4113           sp -= 16;
4114           /* Need to save MDRQ, MCRH, MCRL, and MCVF */
4115         }
4116     }
4117
4118   if (mask & 0x80)
4119     {
4120       sp -= 4;
4121       store_word (sp, State.regs[REG_D0 + 2]);
4122     }
4123
4124   if (mask & 0x40)
4125     {
4126       sp -= 4;
4127       store_word (sp, State.regs[REG_D0 + 3]);
4128     }
4129
4130   if (mask & 0x20)
4131     {
4132       sp -= 4;
4133       store_word (sp, State.regs[REG_A0 + 2]);
4134     }
4135
4136   if (mask & 0x10)
4137     {
4138       sp -= 4;
4139       store_word (sp, State.regs[REG_A0 + 3]);
4140     }
4141
4142   if (mask & 0x8)
4143     {
4144       sp -= 4;
4145       store_word (sp, State.regs[REG_D0]);
4146       sp -= 4;
4147       store_word (sp, State.regs[REG_D0 + 1]);
4148       sp -= 4;
4149       store_word (sp, State.regs[REG_A0]);
4150       sp -= 4;
4151       store_word (sp, State.regs[REG_A0 + 1]);
4152       sp -= 4;
4153       store_word (sp, State.regs[REG_MDR]);
4154       sp -= 4;
4155       store_word (sp, State.regs[REG_LIR]);
4156       sp -= 4;
4157       store_word (sp, State.regs[REG_LAR]);
4158       sp -= 4;
4159     }
4160
4161   /* And make sure to update the stack pointer.  */
4162   State.regs[REG_SP] = sp;
4163 }
4164
4165 // 1100 1101 d16..... regs.... imm8....;
4166 // call (d16,PC),regs,imm8 (d16 is sign-extended., imm8 is zero-extended.)
4167 8.0xcd+8.D16A+8.D16B+8.REGS+8.IMM8:S4:::call
4168 "call"
4169 *mn10300
4170
4171 *am33
4172 *am33_2
4173
4174 {
4175   /* OP_CD000000 (); */
4176   unsigned32 next_pc, sp;
4177   unsigned32 mask;
4178
4179   PC = cia;
4180   sp = State.regs[REG_SP];
4181   next_pc = PC + 5;
4182   store_word(sp, next_pc);
4183
4184   mask = REGS;
4185
4186   if (STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33
4187       || STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33_2
4188       )
4189     {
4190       if (mask & 0x4)
4191         {
4192           sp -= 4;
4193           store_word (sp, State.regs[REG_E0 + 2]);
4194           sp -= 4;
4195           store_word (sp, State.regs[REG_E0 + 3]);
4196         }
4197
4198       if (mask & 0x2)
4199         {
4200           sp -= 4;
4201           store_word (sp, State.regs[REG_E0 + 4]);
4202           sp -= 4;
4203           store_word (sp, State.regs[REG_E0 + 5]);
4204           sp -= 4;
4205           store_word (sp, State.regs[REG_E0 + 6]);
4206           sp -= 4;
4207           store_word (sp, State.regs[REG_E0 + 7]);
4208         }
4209
4210       if (mask & 0x1)
4211         {
4212           sp -= 4;
4213           store_word (sp, State.regs[REG_E0 + 0]);
4214           sp -= 4;
4215           store_word (sp, State.regs[REG_E0 + 1]);
4216           sp -= 16;
4217           /* Need to save MDRQ, MCRH, MCRL, and MCVF */
4218         }
4219     }
4220
4221   if (mask & 0x80)
4222     {
4223       sp -= 4;
4224       store_word (sp, State.regs[REG_D0 + 2]);
4225     }
4226
4227   if (mask & 0x40)
4228     {
4229       sp -= 4;
4230       store_word (sp, State.regs[REG_D0 + 3]);
4231     }
4232
4233   if (mask & 0x20)
4234     {
4235       sp -= 4;
4236       store_word (sp, State.regs[REG_A0 + 2]);
4237     }
4238
4239   if (mask & 0x10)
4240     {
4241       sp -= 4;
4242       store_word (sp, State.regs[REG_A0 + 3]);
4243     }
4244
4245   if (mask & 0x8)
4246     {
4247       sp -= 4;
4248       store_word (sp, State.regs[REG_D0]);
4249       sp -= 4;
4250       store_word (sp, State.regs[REG_D0 + 1]);
4251       sp -= 4;
4252       store_word (sp, State.regs[REG_A0]);
4253       sp -= 4;
4254       store_word (sp, State.regs[REG_A0 + 1]);
4255       sp -= 4;
4256       store_word (sp, State.regs[REG_MDR]);
4257       sp -= 4;
4258       store_word (sp, State.regs[REG_LIR]);
4259       sp -= 4;
4260       store_word (sp, State.regs[REG_LAR]);
4261       sp -= 4;
4262     }
4263
4264   /* Update the stack pointer, note that the register saves to do not
4265      modify SP.  The SP adjustment is derived totally from the imm8
4266      field.  */
4267   State.regs[REG_SP] -= IMM8;
4268   State.regs[REG_MDR] = next_pc;
4269   State.regs[REG_PC] += EXTEND16 (FETCH16(D16A, D16B));
4270   nia = PC;
4271 }
4272
4273
4274 // 1101 1101 d32..... regs.... imm8....;
4275 // call (d32,PC),regs,imm8 (imm8 is zero-extended.)
4276 8.0xdd+8.D32A+8.D32B+8.D32C+8.D32D+8.REGS+8.IMM8:S6:::call
4277 "call"
4278 *mn10300
4279
4280 *am33
4281 *am33_2
4282
4283 {
4284   /* OP_DD000000 (); */
4285   unsigned32 next_pc, sp;
4286   unsigned32 mask;
4287
4288   PC = cia;
4289   sp = State.regs[REG_SP];
4290   next_pc = State.regs[REG_PC] + 7;
4291   /* could assert that nia == next_pc here */
4292   store_word(sp, next_pc);
4293
4294   mask = REGS;
4295
4296   if (STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33
4297       || STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33_2
4298       )
4299     {
4300       if (mask & 0x4)
4301         {
4302           sp -= 4;
4303           store_word (sp, State.regs[REG_E0 + 2]);
4304           sp -= 4;
4305           store_word (sp, State.regs[REG_E0 + 3]);
4306         }
4307
4308       if (mask & 0x2)
4309         {
4310           sp -= 4;
4311           store_word (sp, State.regs[REG_E0 + 4]);
4312           sp -= 4;
4313           store_word (sp, State.regs[REG_E0 + 5]);
4314           sp -= 4;
4315           store_word (sp, State.regs[REG_E0 + 6]);
4316           sp -= 4;
4317           store_word (sp, State.regs[REG_E0 + 7]);
4318         }
4319
4320       if (mask & 0x1)
4321         {
4322           sp -= 4;
4323           store_word (sp, State.regs[REG_E0 + 0]);
4324           sp -= 4;
4325           store_word (sp, State.regs[REG_E0 + 1]);
4326           sp -= 16;
4327           /* Need to save MDRQ, MCRH, MCRL, and MCVF */
4328         }
4329     }
4330
4331   if (mask & 0x80)
4332     {
4333       sp -= 4;
4334       store_word (sp, State.regs[REG_D0 + 2]);
4335     }
4336
4337   if (mask & 0x40)
4338     {
4339       sp -= 4;
4340       store_word (sp, State.regs[REG_D0 + 3]);
4341     }
4342
4343   if (mask & 0x20)
4344     {
4345       sp -= 4;
4346       store_word (sp, State.regs[REG_A0 + 2]);
4347     }
4348
4349   if (mask & 0x10)
4350     {
4351       sp -= 4;
4352       store_word (sp, State.regs[REG_A0 + 3]);
4353     }
4354
4355   if (mask & 0x8)
4356     {
4357       sp -= 4;
4358       store_word (sp, State.regs[REG_D0]);
4359       sp -= 4;
4360       store_word (sp, State.regs[REG_D0 + 1]);
4361       sp -= 4;
4362       store_word (sp, State.regs[REG_A0]);
4363       sp -= 4;
4364       store_word (sp, State.regs[REG_A0 + 1]);
4365       sp -= 4;
4366       store_word (sp, State.regs[REG_MDR]);
4367       sp -= 4;
4368       store_word (sp, State.regs[REG_LIR]);
4369       sp -= 4;
4370       store_word (sp, State.regs[REG_LAR]);
4371       sp -= 4;
4372     }
4373
4374   /* Update the stack pointer, note that the register saves to do not
4375      modify SP.  The SP adjustment is derived totally from the imm8
4376      field.  */
4377   State.regs[REG_SP] -= IMM8;
4378   State.regs[REG_MDR] = next_pc;
4379   State.regs[REG_PC] += FETCH32(D32A, D32B, D32C, D32D);
4380   nia = PC;
4381 }
4382
4383
4384 // 1101 1111 regs.... imm8....; ret regs,imm8 (imm8 is zero-extended.)
4385 8.0xdf+8.REGS+8.IMM8:S2:::ret
4386 "ret"
4387 *mn10300
4388
4389 *am33
4390 *am33_2
4391
4392 {
4393   /* OP_DF0000 (); */
4394   unsigned32 sp, offset;
4395   unsigned32 mask;
4396
4397   PC = cia;
4398   State.regs[REG_SP] += IMM8;
4399   sp = State.regs[REG_SP];
4400
4401   offset = -4;
4402   mask = REGS;
4403
4404   if (STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33
4405       || STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33_2
4406       )
4407     {
4408
4409       if (mask & 0x4)
4410         {
4411           State.regs[REG_E0 + 2] = load_word (sp + offset);
4412           offset -= 4;
4413           State.regs[REG_E0 + 3] = load_word (sp + offset);
4414           offset -= 4;
4415         }
4416
4417       if (mask & 0x2)
4418         {
4419           State.regs[REG_E0 + 4] = load_word (sp + offset);
4420           offset -= 4;
4421           State.regs[REG_E0 + 5] = load_word (sp + offset);
4422           offset -= 4;
4423           State.regs[REG_E0 + 6] = load_word (sp + offset);
4424           offset -= 4;
4425           State.regs[REG_E0 + 7] = load_word (sp + offset);
4426           offset -= 4;
4427         }
4428
4429       if (mask & 0x1)
4430         {
4431           /* Need to restore MDRQ, MCRH, MCRL, and MCVF */
4432           offset -= 16;
4433           State.regs[REG_E0 + 0] = load_word (sp + offset);
4434           offset -= 4;
4435           State.regs[REG_E0 + 1] = load_word (sp + offset);
4436           offset -= 4;
4437         }
4438
4439     }
4440
4441   if (mask & 0x80)
4442     {
4443       State.regs[REG_D0 + 2] = load_word (sp + offset);
4444       offset -= 4;
4445     }
4446
4447   if (mask & 0x40)
4448     {
4449       State.regs[REG_D0 + 3] = load_word (sp + offset);
4450       offset -= 4;
4451     }
4452
4453   if (mask & 0x20)
4454     {
4455       State.regs[REG_A0 + 2] = load_word (sp + offset);
4456       offset -= 4;
4457     }
4458
4459   if (mask & 0x10)
4460     {
4461       State.regs[REG_A0 + 3] = load_word (sp + offset);
4462       offset -= 4;
4463     }
4464
4465   if (mask & 0x8)
4466     {
4467       State.regs[REG_D0] = load_word (sp + offset);
4468       offset -= 4;
4469       State.regs[REG_D0 + 1] = load_word (sp + offset);
4470       offset -= 4;
4471       State.regs[REG_A0] = load_word (sp + offset);
4472       offset -= 4;
4473       State.regs[REG_A0 + 1] = load_word (sp + offset);
4474       offset -= 4;
4475       State.regs[REG_MDR] = load_word (sp + offset);
4476       offset -= 4;
4477       State.regs[REG_LIR] = load_word (sp + offset);
4478       offset -= 4;
4479       State.regs[REG_LAR] = load_word (sp + offset);
4480       offset -= 4;
4481     }
4482
4483   /* Restore the PC value.  */
4484   State.regs[REG_PC] = load_word(sp);
4485   nia = PC;
4486 }
4487
4488
4489 // 1101 1110 regs.... imm8....; retf regs,imm8 (imm8 is zero-extended.)
4490 8.0xde+8.REGS+8.IMM8:S2:::retf
4491 "retf"
4492 *mn10300
4493
4494 *am33
4495 *am33_2
4496
4497 {
4498   /* OP_DE0000 (); */
4499   unsigned32 sp, offset;
4500   unsigned32 mask;
4501
4502   PC = cia;
4503   State.regs[REG_SP] += IMM8;
4504   sp = State.regs[REG_SP];
4505   State.regs[REG_PC] = State.regs[REG_MDR];
4506
4507   offset = -4;
4508   mask = REGS;
4509
4510   if (STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33
4511       || STATE_ARCHITECTURE (sd)->mach == bfd_mach_am33_2
4512       )
4513     {
4514
4515       if (mask & 0x4)
4516         {
4517           State.regs[REG_E0 + 2] = load_word (sp + offset);
4518           offset -= 4;
4519           State.regs[REG_E0 + 3] = load_word (sp + offset);
4520           offset -= 4;
4521         }
4522
4523       if (mask & 0x2)
4524         {
4525           State.regs[REG_E0 + 4] = load_word (sp + offset);
4526           offset -= 4;
4527           State.regs[REG_E0 + 5] = load_word (sp + offset);
4528           offset -= 4;
4529           State.regs[REG_E0 + 6] = load_word (sp + offset);
4530           offset -= 4;
4531           State.regs[REG_E0 + 7] = load_word (sp + offset);
4532           offset -= 4;
4533         }
4534
4535       if (mask & 0x1)
4536         {
4537           /* Need to restore MDRQ, MCRH, MCRL, and MCVF */
4538           offset -= 16;
4539           State.regs[REG_E0 + 0] = load_word (sp + offset);
4540           offset -= 4;
4541           State.regs[REG_E0 + 1] = load_word (sp + offset);
4542           offset -= 4;
4543         }
4544
4545     }
4546
4547   if (mask & 0x80)
4548     {
4549       State.regs[REG_D0 + 2] = load_word (sp + offset);
4550       offset -= 4;
4551     }
4552
4553   if (mask & 0x40)
4554     {
4555       State.regs[REG_D0 + 3] = load_word (sp + offset);
4556       offset -= 4;
4557     }
4558
4559   if (mask & 0x20)
4560     {
4561       State.regs[REG_A0 + 2] = load_word (sp + offset);
4562       offset -= 4;
4563     }
4564
4565   if (mask & 0x10)
4566     {
4567       State.regs[REG_A0 + 3] = load_word (sp + offset);
4568       offset -= 4;
4569     }
4570
4571   if (mask & 0x8)
4572     {
4573       State.regs[REG_D0] = load_word (sp + offset);
4574       offset -= 4;
4575       State.regs[REG_D0 + 1] = load_word (sp + offset);
4576       offset -= 4;
4577       State.regs[REG_A0] = load_word (sp + offset);
4578       offset -= 4;
4579       State.regs[REG_A0 + 1] = load_word (sp + offset);
4580       offset -= 4;
4581       State.regs[REG_MDR] = load_word (sp + offset);
4582       offset -= 4;
4583       State.regs[REG_LIR] = load_word (sp + offset);
4584       offset -= 4;
4585       State.regs[REG_LAR] = load_word (sp + offset);
4586       offset -= 4;
4587     }
4588   nia = PC;
4589 }
4590
4591
4592 :include::am33:am33.igen
4593