Support Intel SM4 AVX10.2 extension
[binutils-gdb.git] / sim / mn10300 / mn10300.igen
blob42c0ead205d2eb1e0eafb8735628cd0d5f52bbae
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:
9 // What do we do with an illegal instruction?
10 :internal::::illegal:
12   PC = cia;
13   program_interrupt(SD, CPU, cia, SIM_SIGILL);
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
23   /*  OP_8000 (); */
24   int32_t immed = EXTEND8 (IMM8);
25   State.regs[REG_D0+DN0] = immed;
26   PC = cia;
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
36   PC = cia;
37   /* OP_80 (); */
38   State.regs[REG_D0+DN0] = State.regs[REG_D0+DM1];
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
49   /* OP_F1E0 (); */
50   PC = cia;
51   State.regs[REG_A0 + AN0] = State.regs[REG_D0 + DM1];
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
62   /* OP_F1D0 (); */
63   PC = cia;
64   State.regs[REG_D0 + DN0] = State.regs[REG_A0 + AM1];
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
75    PC = cia;
76    /* OP_9000 (); */
77    State.regs[REG_A0+AN0] = IMM8;
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
88    PC = cia;
89    /* OP_90 (); */
90    State.regs[REG_A0+AN0] = State.regs[REG_A0+AM1];
94 // 0011 11An; mov SP,An
95 4.0x3,11,2.AN0:S0b:::mov
96 "mov"
97 *mn10300
98 *am33
99 *am33_2
101   /* OP_3C (); */
102   PC = cia;
103   State.regs[REG_A0 + AN0] = State.regs[REG_SP];
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
114   /* OP_F2F0 (); */
115   PC = cia;
116   State.regs[REG_SP] = State.regs[REG_A0 + AM1];
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
127   /* OP_F2E4 (); */
128   PC = cia;
129   State.regs[REG_D0 + DN0] = PSW;
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
140   /* OP_F2F3 (); */
141   PC = cia;
142   PSW = State.regs[REG_D0 + DM1];
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
153   /* OP_F2E0 (); */
154   PC = cia;
155   State.regs[REG_D0 + DN0] = State.regs[REG_MDR];
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
166   /* OP_F2F2 (); */
167   PC = cia;
168   State.regs[REG_MDR] = State.regs[REG_D0 + DM1];
172 // 0111 DnAm; mov (Am),Dn
173 4.0x7,2.DN1,2.AM0:S0c:::mov
174 "mov"
175 *mn10300
176 *am33
177 *am33_2
179   /* OP_70 (); */
180   PC = cia;
181   State.regs[REG_D0 + DN1] = load_word (State.regs[REG_A0 + AM0]);
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
192   /* OP_F80000 (); */
193   PC = cia;
194   State.regs[REG_D0 + DN1]
195     = load_word ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
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
206   /* OP_FA000000 (); */
207   PC = cia;
208   State.regs[REG_D0 + DN1]
209     = load_word ((State.regs[REG_A0 + AM0] + EXTEND16 (FETCH16(D16A, D16B))));
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
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)));
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
235   /* OP_5800 (); */
236   PC = cia;
237   State.regs[REG_D0 + DN0] = load_word (State.regs[REG_SP] + D8);
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
248   /* OP_FAB40000 (); */
249   PC = cia;
250   State.regs[REG_D0 + DN0]
251     = load_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B));
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
262   /* OP_FCB40000 (); */
263   PC = cia;
264   State.regs[REG_D0 + DN0]
265      = load_word (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
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
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]));
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
290   /* OP_300000 (); */
291   PC = cia;
292   State.regs[REG_D0 + DN0] = load_word (FETCH16(IMM16A, IMM16B));
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
302   /* OP_FCA40000 (); */
303   PC = cia;
304   State.regs[REG_D0 + DN0] = load_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
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
315   /* OP_F000 (); */
316   PC = cia;
317   State.regs[REG_A0 + AN1] = load_word (State.regs[REG_A0 + AM0]);
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
328   /* OP_F82000 (); */
329   PC = cia;
330   State.regs[REG_A0 + AN1]
331     = load_word ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
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
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))));
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
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)));
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
372   /* OP_5C00 (); */
373   PC = cia;
374   State.regs[REG_A0 + AN0]
375     = load_word (State.regs[REG_SP] + D8);
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
386   /* OP_FAB00000 (); */
387   PC = cia;
388   State.regs[REG_A0 + AN0]
389     = load_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B));
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
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));
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
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]));
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
430   /* OP_FAA00000 (); */
431   PC = cia;
432   State.regs[REG_A0 + AN0] = load_word (FETCH16(IMM16A, IMM16B));
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
443   /* OP_FCA00000 (); */
444   PC = cia;
445   State.regs[REG_A0 + AN0]
446     = load_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
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
457   /* OP_F8F000 (); */
458   PC = cia;
459   State.regs[REG_SP]
460     = load_word ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
464 // 0110 DmAn; mov Dm,(An)
465 4.0x6,2.DM1,2.AN0:S0d:::mov
466 "mov"
467 *mn10300
468 *am33
469 *am33_2
471   /* OP_60 (); */
472   PC = cia;
473   store_word (State.regs[REG_A0 + AN0], State.regs[REG_D0 + DM1]);
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
484   /* OP_F81000 (); */
485   PC = cia;
486   store_word ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
487               State.regs[REG_D0 + DM1]);
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
498   /* OP_FA100000 (); */
499   PC = cia;
500   store_word ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
501               State.regs[REG_D0 + DM1]);
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
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]);
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
527   /* OP_4200 (); */
528   PC = cia;
529   store_word (State.regs[REG_SP] + D8, State.regs[REG_D0 + DM1]);
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
540   /* OP_FA910000 (); */
541   PC = cia;
542   store_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
543               State.regs[REG_D0 + DM1]);
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
554   /* OP_FC910000 (); */
555   PC = cia;
556   store_word (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
557               State.regs[REG_D0 + DM1]);
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
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]);
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
582   /* OP_10000 (); */
583   PC = cia;
584   store_word (FETCH16(IMM16A, IMM16B), State.regs[REG_D0 + DM1]);
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
595   /* OP_FC810000 (); */
596   PC = cia;
597   store_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
598               State.regs[REG_D0 + DM1]);
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
609   /* OP_F010 (); */
610   PC = cia;
611   store_word (State.regs[REG_A0 + AN0], State.regs[REG_A0 + AM1]);
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
622   /* OP_F83000 (); */
623   PC = cia;
624   store_word ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
625               State.regs[REG_A0 + AM1]);
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
636   /* OP_FA300000 (); */
637   PC = cia;
638   store_word ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
639               State.regs[REG_A0 + AM1]);
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
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]);
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
663 *am33
664 *am33_2
667   /* OP_4300 (); */
668   PC = cia;
669   store_word (State.regs[REG_SP] + (D8), State.regs[REG_A0 + (AM1)]);
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
678 *am33
679 *am33_2
682   /* OP_FA900000 (); */
683   PC = cia;
684   store_word (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
685               State.regs[REG_A0 + AM1]);
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
694 *am33
695 *am33_2
698   /* OP_FC900000 (); */
699   PC = cia;
700   store_word (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
701               State.regs[REG_A0 + AM1]);
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
710 *am33
711 *am33_2
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]);
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
726 *am33
727 *am33_2
730   /* OP_FA800000 (); */
731   PC = cia;
732   store_word (FETCH16(IMM16A, IMM16B),
733               State.regs[REG_A0 + AM1]);
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
742 *am33
743 *am33_2
746   /* OP_FC800000 (); */
747   PC = cia;
748   store_word (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
749               State.regs[REG_A0 + AM1]);
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
758 *am33
759 *am33_2
762   /* OP_F8F400 (); */
763   PC = cia;
764   store_word (State.regs[REG_A0 + AN0] + EXTEND8 (D8),
765               State.regs[REG_SP]);
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
774 *am33
775 *am33_2
778   /* OP_2C0000 (); */
779   uint32_t value;
781   PC = cia;
782   value = EXTEND16 (FETCH16(IMM16A, IMM16B));
783   State.regs[REG_D0 + DN0] = value;
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
792 *am33
793 *am33_2
796   /* OP_FCCC0000 (); */
797   uint32_t value;
799   PC = cia;
800   value = FETCH32(IMM32A, IMM32B, IMM32C, IMM32D);
801   State.regs[REG_D0 + DN0] = value;
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
810 *am33
811 *am33_2
814   /* OP_240000 (); */
815   uint32_t value;
817   PC = cia;
818   value = FETCH16(IMM16A, IMM16B);
819   State.regs[REG_A0 + AN0] = value;
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
828 *am33
829 *am33_2
832     /* OP_FCDC0000 (); */
833     PC = cia;
834     State.regs[REG_A0 + AN0] = FETCH32(IMM32A, IMM32B, IMM32C, IMM32D);
838 // 1111 0000 0100 DnAm; movbu (Am),Dn
839 8.0xf0+4.0x4,2.DN1,2.AM0:D0:::movbu
840 "movbu"
841 *mn10300
843 *am33
844 *am33_2
847   /* OP_F040 (); */
848   PC = cia;
849   State.regs[REG_D0 + DN1]
850     = load_byte (State.regs[REG_A0 + AM0]);
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
859 *am33
860 *am33_2
863   /* OP_F84000 (); */
864   PC = cia;
865   State.regs[REG_D0 + DN1]
866     = load_byte ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
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
875 *am33
876 *am33_2
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))));
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
892 *am33
893 *am33_2
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)));
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
909 *am33
910 *am33_2
913   /* OP_F8B800 (); */
914   PC = cia;
915   State.regs[REG_D0 + DN0]
916     = load_byte ((State.regs[REG_SP] + (D8)));
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
925 *am33
926 *am33_2
929   /* OP_FAB80000 (); */
930   PC = cia;
931   State.regs[REG_D0 + DN0]
932     = load_byte ((State.regs[REG_SP]
933                   + FETCH16(IMM16A, IMM16B)));
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
942 *am33
943 *am33_2
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));
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
959 *am33
960 *am33_2
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]));
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
976 *am33
977 *am33_2
980   /* OP_340000 (); */
981   PC = cia;
982   State.regs[REG_D0 + DN0] = load_byte (FETCH16(IMM16A, IMM16B));
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
991 *am33
992 *am33_2
995   /* OP_FCA80000 (); */
996   PC = cia;
997   State.regs[REG_D0 + DN0]
998     = load_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
1002 // 1111 0000 0101 DmAn; movbu Dm,(An)
1003 8.0xf0+4.0x5,2.DM1,2.AN0:D0b:::movbu
1004 "movbu"
1005 *mn10300
1007 *am33
1008 *am33_2
1011   /* OP_F050 (); */
1012   PC = cia;
1013   store_byte (State.regs[REG_A0 + AN0], State.regs[REG_D0 + DM1]);
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
1022 *am33
1023 *am33_2
1026   /* OP_F85000 (); */
1027   PC = cia;
1028   store_byte ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
1029               State.regs[REG_D0 + DM1]);
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
1038 *am33
1039 *am33_2
1042   /* OP_FA500000 (); */
1043   PC = cia;
1044   store_byte ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
1045               State.regs[REG_D0 + DM1]);
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
1054 *am33
1055 *am33_2
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]);
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
1071 *am33
1072 *am33_2
1075   /* OP_F89200 (); */
1076   PC = cia;
1077   store_byte (State.regs[REG_SP] + (D8), State.regs[REG_D0 + DM1]);
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
1086 *am33
1087 *am33_2
1090   /* OP_FA920000 (); */
1091   PC = cia;
1092   store_byte (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
1093               State.regs[REG_D0 + DM1]);
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
1102 *am33
1103 *am33_2
1106   /* OP_FC920000 (); */
1107   PC = cia;
1108   store_byte (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1109               State.regs[REG_D0 + DM1]);
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
1118 *am33
1119 *am33_2
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]);
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
1134 *am33
1135 *am33_2
1138   /* OP_20000 (); */
1139   PC = cia;
1140   store_byte (FETCH16(IMM16A, IMM16B),
1141               State.regs[REG_D0 + DM1]);
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
1150 *am33
1151 *am33_2
1154   /* OP_FC820000 (); */
1155   PC = cia;
1156   store_byte (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1157               State.regs[REG_D0 + DM1]);
1161 // 1111 0000 0110 DnAm; movhu (Am),Dn
1162 8.0xf0+4.0x6,2.DN1,2.AM0:D0:::movhu
1163 "movhu"
1164 *mn10300
1166 *am33
1167 *am33_2
1170   /* OP_F060 (); */
1171   PC = cia;
1172   State.regs[REG_D0 + DN1]
1173     = load_half (State.regs[REG_A0 + AM0]);
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
1182 *am33
1183 *am33_2
1186   /* OP_F86000 (); */
1187   PC = cia;
1188   State.regs[REG_D0 + DN1]
1189     = load_half ((State.regs[REG_A0 + AM0] + EXTEND8 (D8)));
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
1198 *am33
1199 *am33_2
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))));
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
1215 *am33
1216 *am33_2
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)));
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
1232 *am33
1233 *am33_2
1236   /* OP_F8BC00 (); */
1237   PC = cia;
1238   State.regs[REG_D0 + DN0]
1239     = load_half ((State.regs[REG_SP] + (D8)));
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
1248 *am33
1249 *am33_2
1252   /* OP_FABC0000 (); */
1253   PC = cia;
1254   State.regs[REG_D0 + DN0]
1255     = load_half ((State.regs[REG_SP] + FETCH16(IMM16A, IMM16B)));
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
1264 *am33
1265 *am33_2
1268   /* OP_FCBC0000 (); */
1269   PC = cia;
1270   State.regs[REG_D0 + DN0]
1271     = load_half (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
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
1280 *am33
1281 *am33_2
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]));
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
1296 *am33
1297 *am33_2
1300   /* OP_380000 (); */
1301   PC = cia;
1302   State.regs[REG_D0 + DN0] = load_half (FETCH16(IMM16A, IMM16B));
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
1311 *am33
1312 *am33_2
1315   /* OP_FCAC0000 (); */
1316   PC = cia;
1317   State.regs[REG_D0 + DN0]
1318     = load_half (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D));
1322 // 1111 0000 0111 DmAn; movhu Dm,(An)
1323 8.0xf0+4.0x7,2.DM1,2.AN0:D0b:::movhu
1324 "movhu"
1325 *mn10300
1327 *am33
1328 *am33_2
1331   /* OP_F070 (); */
1332   PC = cia;
1333   store_half (State.regs[REG_A0 + AN0],
1334               State.regs[REG_D0 + DM1]);
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
1343 *am33
1344 *am33_2
1347   /* OP_F87000 (); */
1348   PC = cia;
1349   store_half ((State.regs[REG_A0 + AN0] + EXTEND8 (D8)),
1350               State.regs[REG_D0 + DM1]);
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
1359 *am33
1360 *am33_2
1363   /* OP_FA700000 (); */
1364   PC = cia;
1365   store_half ((State.regs[REG_A0 + AN0] + EXTEND16 (FETCH16(D16A, D16B))),
1366               State.regs[REG_D0 + DM1]);
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
1375 *am33
1376 *am33_2
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]);
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
1392 *am33
1393 *am33_2
1396   /* OP_F89300 (); */
1397   PC = cia;
1398   store_half (State.regs[REG_SP] + (D8),
1399               State.regs[REG_D0 + DM1]);
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
1408 *am33
1409 *am33_2
1412   /* OP_FA930000 (); */
1413   PC = cia;
1414   store_half (State.regs[REG_SP] + FETCH16(IMM16A, IMM16B),
1415               State.regs[REG_D0 + DM1]);
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
1424 *am33
1425 *am33_2
1428   /* OP_FC930000 (); */
1429   PC = cia;
1430   store_half (State.regs[REG_SP] + FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1431               State.regs[REG_D0 + DM1]);
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
1440 *am33
1441 *am33_2
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]);
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
1456 *am33
1457 *am33_2
1460   /* OP_30000 (); */
1461   PC = cia;
1462   store_half (FETCH16(IMM16A, IMM16B), State.regs[REG_D0 + DM1]);
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
1471 *am33
1472 *am33_2
1475   /* OP_FC830000 (); */
1476   PC = cia;
1477   store_half (FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
1478               State.regs[REG_D0 + DM1]);
1482 // 1111 0010 1101 00Dn; ext Dn
1483 8.0xf2+4.0xd,00,2.DN0:D0:::ext
1484 "ext"
1485 *mn10300
1487 *am33
1488 *am33_2
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;
1500 // 0001 00Dn; extb Dn
1501 4.0x1,00,2.DN0:S0:::extb
1502 "extb"
1503 *mn10300
1505 *am33
1506 *am33_2
1509   /* OP_10 (); */
1510   PC = cia;
1511   State.regs[REG_D0 + DN0] = EXTEND8 (State.regs[REG_D0 + DN0]);
1515 // 0001 01Dn; extbu Dn
1516 4.0x1,01,2.DN0:S0:::extbu
1517 "extbu"
1518 *mn10300
1520 *am33
1521 *am33_2
1524   /* OP_14 (); */
1525   PC = cia;
1526   State.regs[REG_D0 + DN0] &= 0xff;
1530 // 0001 10Dn; exth Dn
1531 4.0x1,10,2.DN0:S0:::exth
1532 "exth"
1533 *mn10300
1535 *am33
1536 *am33_2
1539   /* OP_18 (); */
1540   PC = cia;
1541   State.regs[REG_D0 + DN0] = EXTEND16 (State.regs[REG_D0 + DN0]);
1545 // 0001 11Dn; exthu Dn
1546 4.0x1,11,2.DN0:S0:::exthu
1547 "exthu"
1548 *mn10300
1550 *am33
1551 *am33_2
1554   /* OP_1C (); */
1555   PC = cia;
1556   State.regs[REG_D0 + DN0] &= 0xffff;
1560 // 0000 Dn00; clr Dn
1561 4.0x0,2.DN1,00:S0:::clr
1562 "clr"
1563 *mn10300
1565 *am33
1566 *am33_2
1569   /* OP_0 (); */
1570   PC = cia;
1571   State.regs[REG_D0 + DN1] = 0;
1573   PSW |= PSW_Z;
1574   PSW &= ~(PSW_V | PSW_C | PSW_N);
1578 // 1110 DmDn; add Dm,Dn
1579 4.0xe,2.DM1,2.DN0:S0:::add
1580 "add"
1581 *mn10300
1583 *am33
1584 *am33_2
1587   /* OP_E0 (); */
1588   PC = cia;
1589   genericAdd(State.regs[REG_D0 + DM1], REG_D0 + DN0);
1592 // 1111 0001 0110 DmAn; add Dm,An
1593 8.0xf1+4.0x6,2.DM1,2.AN0:D0:::add
1594 "add"
1595 *mn10300
1597 *am33
1598 *am33_2
1601   /* OP_F160 (); */
1602   PC = cia;
1603   genericAdd(State.regs[REG_D0 + DM1], REG_A0 + AN0);
1607 // 1111 0001 0101 AmDn; add Am,Dn
1608 8.0xf1+4.0x5,2.AM1,2.DN0:D0a:::add
1609 "add"
1610 *mn10300
1612 *am33
1613 *am33_2
1616   /* OP_F150 (); */
1617   PC = cia;
1618   genericAdd(State.regs[REG_A0 + AM1], REG_D0 + DN0);
1622 // 1111 0001 0111 AmAn; add Am,An
1623 8.0xf1+4.0x7,2.AM1,2.AN0:D0b:::add
1624 "add"
1625 *mn10300
1627 *am33
1628 *am33_2
1631   /* OP_F170 (); */
1632   PC = cia;
1633   genericAdd(State.regs[REG_A0 + AM1], REG_A0 + AN0);
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
1642 *am33
1643 *am33_2
1646   /* OP_2800 (); */
1647   PC = cia;
1648   genericAdd(EXTEND8(IMM8), REG_D0 + DN0);
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
1657 *am33
1658 *am33_2
1661   /* OP_FAC00000 (); */
1662   PC = cia;
1663   genericAdd(EXTEND16(FETCH16(IMM16A, IMM16B)), REG_D0 + DN0);
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
1672 *am33
1673 *am33_2
1676   /* OP_FCC00000 (); */
1677   PC = cia;
1678   genericAdd(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
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
1687 *am33
1688 *am33_2
1691   /* OP_2000 (); */
1692   PC = cia;
1693   genericAdd(EXTEND8(IMM8), REG_A0 + AN0);
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
1702 *am33
1703 *am33_2
1706   /* OP_FAD00000 (); */
1707   PC = cia;
1708   genericAdd(EXTEND16(FETCH16(IMM16A, IMM16B)), REG_A0 + AN0);
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
1717 *am33
1718 *am33_2
1721   /* OP_FCD00000 (); */
1722   PC = cia;
1723   genericAdd(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_A0 + AN0);
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
1732 *am33
1733 *am33_2
1736   /* OP_F8FE00 (); */
1737   uint32_t imm;
1739   /* Note: no PSW changes. */
1740   PC = cia;
1741   imm = EXTEND8 (IMM8);
1742   State.regs[REG_SP] += imm;
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
1751 *am33
1752 *am33_2
1755   /* OP_FAFE0000 (); */
1756   uint32_t imm;
1758   /* Note: no PSW changes. */
1759   PC = cia;
1760   imm = EXTEND16 (FETCH16(IMM16A, IMM16B));
1761   State.regs[REG_SP] += imm;
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
1770 *am33
1771 *am33_2
1774   /* OP_FCFE0000 (); */
1775   uint32_t imm;
1777   /* Note: no PSW changes. */
1778   PC = cia;
1779   imm = FETCH32(IMM32A, IMM32B, IMM32C, IMM32D);
1780   State.regs[REG_SP] += imm;
1784 // 1111 0001 0100 DmDn; addc Dm,Dn
1785 8.0xf1+4.0x4,2.DM1,2.DN0:D0:::addc
1786 "addc"
1787 *mn10300
1789 *am33
1790 *am33_2
1793   /* OP_F140 (); */
1794   int z, c, n, v;
1795   uint32_t reg1, reg2, sum;
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;
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));
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));
1815 // 1111 0001 0000 DmDn; sub Dm,Dn
1816 8.0xf1+4.0x0,2.DM1,2.DN0:D0:::sub
1817 "sub"
1818 *mn10300
1820 *am33
1821 *am33_2
1824   /* OP_F100 (); */
1825   PC = cia;
1826   genericSub(State.regs[REG_D0 + DM1], REG_D0 + DN0);
1829 // 1111 0001 0010 DmAn; sub DmAn
1830 8.0xf1+4.0x2,2.DM1,2.AN0:D0a:::sub
1831 "sub"
1832 *mn10300
1834 *am33
1835 *am33_2
1838   /* OP_F120 (); */
1839   PC = cia;
1840   genericSub(State.regs[REG_D0 + DM1], REG_A0 + AN0);
1844 // 1111 0001 0001 AmDn; sub AmDn
1845 8.0xf1+4.0x1,2.AM1,2.DN0:D0b:::sub
1846 "sub"
1847 *mn10300
1849 *am33
1850 *am33_2
1853   /* OP_F110 (); */
1854   PC = cia;
1855   genericSub(State.regs[REG_A0 + AM1], REG_D0 + DN0);
1859 // 1111 0001 0011 AmAn; sub Am,An
1860 8.0xf1+4.0x3,2.AM1,2.AN0:D0c:::sub
1861 "sub"
1862 *mn10300
1864 *am33
1865 *am33_2
1868   /* OP_F130 (); */
1869   PC = cia;
1870   genericSub(State.regs[REG_A0 + AM1], REG_A0 + AN0);
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
1879 *am33
1880 *am33_2
1883   /* OP_FCC40000 (); */
1884   PC = cia;
1885   genericSub(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
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
1894 *am33
1895 *am33_2
1898   /* OP_FCD40000 (); */
1899   PC = cia;
1900   genericSub(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_A0 + AN0);
1904 // 1111 0001 1000 DmDn; subc Dm,Dn
1905 8.0xf1+4.0x8,2.DM1,2.DN0:D0:::subc
1906 "subc"
1907 *mn10300
1909 *am33
1910 *am33_2
1913   /* OP_F180 (); */
1914   int z, c, n, v;
1915   uint32_t reg1, reg2, difference;
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;
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));
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));
1935 // 1111 0010 0100 DmDn; mul Dm,Dn
1936 8.0xf2+4.0x4,2.DM1,2.DN0:D0:::mul
1937 "mul"
1938 *mn10300
1940 *am33
1941 *am33_2
1944   /* OP_F240 (); */
1945   uint64_t temp;
1946   int n, z;
1948   PC = cia;
1949   temp = ((int64_t)(int32_t)State.regs[REG_D0 + DN0]
1950           *  (int64_t)(int32_t)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));
1960 // 1111 0010 0101 DmDn; mulu Dm,Dn
1961 8.0xf2+4.0x5,2.DM1,2.DN0:D0:::mulu
1962 "mulu"
1963 *mn10300
1965 *am33
1966 *am33_2
1969   /* OP_F250 (); */
1970   uint64_t temp;
1971   int n, z;
1973   PC = cia;
1974   temp = ((uint64_t)State.regs[REG_D0 + DN0]
1975           * (uint64_t)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));
1985 // 1111 0010 0110 DmDn; div Dm,Dn
1986 8.0xf2+4.0x6,2.DM1,2.DN0:D0:::div
1987 "div"
1988 *mn10300
1990 *am33
1991 *am33_2
1994   /* OP_F260 (); */
1995   int64_t temp;
1996   int32_t denom;
1997   int n, z, v;
1999   PC = cia;
2000   denom = (int32_t)State.regs[REG_D0 + DM1];
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 % (int32_t)State.regs[REG_D0 + DM1];
2008       temp /= (int32_t)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));
2023 // 1111 0010 0111 DmDn; divu Dm,Dn
2024 8.0xf2+4.0x7,2.DM1,2.DN0:D0:::divu
2025 "divu"
2026 *mn10300
2028 *am33
2029 *am33_2
2032   /* OP_F270 (); */
2033   uint64_t temp;
2034   uint32_t denom;
2035   int n, z, v;
2037   PC = cia;
2038   denom = (uint32_t)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));
2060 // 0100 Dn00; inc Dn
2061 4.0x4,2.DN1,00:S0:::inc
2062 "inc"
2063 *mn10300
2065 *am33
2066 *am33_2
2069   /* OP_40 (); */
2070   uint32_t imm;
2072   PC = cia;
2073   imm = 1;
2074   genericAdd(imm, REG_D0 + DN1);
2078 // 0100 An01
2079 4.0x4,2.AN1,01:S0a:::inc
2080 "inc"
2081 *mn10300
2083 *am33
2084 *am33_2
2087   /* OP_41 (); */
2088   PC = cia;
2089   State.regs[REG_A0 + AN1] += 1;
2093 // 0101 00An; inc4 An
2094 4.0x5,00,2.AN0:S0:::inc4
2095 "inc4"
2096 *mn10300
2098 *am33
2099 *am33_2
2102   /* OP_50 (); */
2103   PC = cia;
2104   State.regs[REG_A0 + AN0] += 4;
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
2113 *am33
2114 *am33_2
2117   PC = cia;
2118   /* OP_A000 (); */
2119   genericCmp(EXTEND8 (IMM8), State.regs[REG_D0 + DN0]);
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
2128 *am33
2129 *am33_2
2132   PC = cia;
2133   /* OP_A0 (); */
2134   genericCmp(State.regs[REG_D0 + DM1], State.regs[REG_D0 + DN0]);
2138 // 1111 0001 1010 DmAn; cmp Dm,An
2139 8.0xf1+4.0xa,2.DM1,2.AN0:D0:::cmp
2140 "cmp"
2141 *mn10300
2143 *am33
2144 *am33_2
2147   /* OP_F1A0 (); */
2148   PC = cia;
2149   genericCmp(State.regs[REG_D0 + DM1], State.regs[REG_A0 + AN0]);
2153 // 1111 0001 1001 AmDn; cmp Am,Dn
2154 8.0xf1+4.0x9,2.AM1,2.DN0:D0a:::cmp
2155 "cmp"
2156 *mn10300
2158 *am33
2159 *am33_2
2162   /* OP_F190 (); */
2163   PC = cia;
2164   genericCmp(State.regs[REG_A0 + AM1], State.regs[REG_D0 + DN0]);
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
2173 *am33
2174 *am33_2
2177   PC = cia;
2178   /* OP_B000 (); */
2179   genericCmp(IMM8,
2180              State.regs[REG_A0 + AN0]);
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
2189 *am33
2190 *am33_2
2193   PC = cia;
2194   /* OP_B0 (); */
2195   genericCmp(State.regs[REG_A0 + AM1], State.regs[REG_A0 + AN0]);
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
2204 *am33
2205 *am33_2
2208   /* OP_FAC80000 (); */
2209   PC = cia;
2210   genericCmp(EXTEND16(FETCH16(IMM16A, IMM16B)),
2211              State.regs[REG_D0 + DN0]);
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
2220 *am33
2221 *am33_2
2224   /* OP_FCC80000 (); */
2225   PC = cia;
2226   genericCmp(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
2227              State.regs[REG_D0 + DN0]);
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
2236 *am33
2237 *am33_2
2240   /* OP_FAD80000 (); */
2241   PC = cia;
2242   genericCmp(FETCH16(IMM16A, IMM16B),
2243              State.regs[REG_A0 + AN0]);
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
2252 *am33
2253 *am33_2
2256   /* OP_FCD80000 (); */
2257   PC = cia;
2258   genericCmp(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
2259              State.regs[REG_A0 + AN0]);
2263 // 1111 0010 0000 DmDn; and Dm,Dn
2264 8.0xf2+4.0x0,2.DM1,2.DN0:D0:::and
2265 "and"
2266 *mn10300
2268 *am33
2269 *am33_2
2272   /* OP_F200 (); */
2273   int n, z;
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));
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
2289 *am33
2290 *am33_2
2293   /* OP_F8E000 (); */
2294   int n, z;
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));
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
2310 *am33
2311 *am33_2
2314   /* OP_FAE00000 (); */
2315   int n, z;
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));
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
2331 *am33
2332 *am33_2
2335   /* OP_FCE00000 (); */
2336   int n, z;
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));
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
2353 *am33
2354 *am33_2
2357   /* OP_FAFC0000 (); */
2358   PC = cia;
2359   PSW &= FETCH16(IMM16A, IMM16B);
2364 // 1111 0010 0001 DmDn; or DmDn
2365 8.0xf2+4.0x1,2.DM1,2.DN0:D0:::or
2366 "or"
2367 *mn10300
2369 *am33
2370 *am33_2
2373   /* OP_F210 (); */
2374   PC = cia;
2375   genericOr(State.regs[REG_D0 + DM1], REG_D0 + DN0);
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
2384 *am33
2385 *am33_2
2388   /* OP_F8E400 (); */
2389   PC = cia;
2390   genericOr(IMM8, REG_D0 + DN0);
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
2399 *am33
2400 *am33_2
2403   /* OP_FAE40000 (); */
2404   PC = cia;
2405   genericOr(FETCH16(IMM16A, IMM16B), REG_D0 + DN0);
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
2414 *am33
2415 *am33_2
2418   /* OP_FCE40000 (); */
2419   PC = cia;
2420   genericOr(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
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
2429 *am33
2430 *am33_2
2433   /* OP_FAFD0000 (); */
2434   PC = cia;
2435   PSW |= FETCH16(IMM16A, IMM16B);
2439 // 1111 0010 0010 DmDn; xor Dm,Dn
2440 8.0xf2+4.0x2,2.DM1,2.DN0:D0:::xor
2441 "xor"
2442 *mn10300
2444 *am33
2445 *am33_2
2448   /* OP_F220 (); */
2449   PC = cia;
2450   genericXor(State.regs[REG_D0 + DM1], REG_D0 + DN0);
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
2459 *am33
2460 *am33_2
2463   /* OP_FAE80000 (); */
2464   PC = cia;
2465   genericXor(FETCH16(IMM16A, IMM16B), REG_D0 + DN0);
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
2474 *am33
2475 *am33_2
2478   /* OP_FCE80000 (); */
2479   PC = cia;
2480   genericXor(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D), REG_D0 + DN0);
2484 // 1111 0010 0011 00Dn; not Dn
2485 8.0xf2+4.0x3,00,2.DN0:D0:::not
2486 "not"
2487 *mn10300
2489 *am33
2490 *am33_2
2493   /* OP_F230 (); */
2494   int n, z;
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));
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
2510 *am33
2511 *am33_2
2514   /* OP_F8EC00 (); */
2515   PC = cia;
2516   genericBtst(IMM8, State.regs[REG_D0 + DN0]);
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
2525 *am33
2526 *am33_2
2529   /* OP_FAEC0000 (); */
2530   PC = cia;
2531   genericBtst(FETCH16(IMM16A, IMM16B), State.regs[REG_D0 + DN0]);
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
2540 *am33
2541 *am33_2
2544   /* OP_FCEC0000 (); */
2545   PC = cia;
2546   genericBtst(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D),
2547               State.regs[REG_D0 + DN0]);
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
2556 *am33
2557 *am33_2
2560   /* OP_FE020000 (); */
2561   PC = cia;
2562   genericBtst(IMM8,
2563               load_byte(FETCH32(IMM32A, IMM32B, IMM32C, IMM32D)));
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
2573 *am33
2574 *am33_2
2577   /* OP_FAF80000 (); */
2578   PC = cia;
2579   genericBtst(IMM8,
2580               load_byte(State.regs[REG_A0 + AN0] + EXTEND8(D8)));
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
2589 *am33
2590 *am33_2
2593   /* OP_F080 (); */
2594   uint32_t temp;
2595   int z;
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);
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
2613 *am33
2614 *am33_2
2617   /* OP_FE000000 (); */
2618   uint32_t temp;
2619   int z;
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);
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
2637 *am33
2638 *am33_2
2641   /* OP_FAF00000 (); */
2642   uint32_t temp;
2643   int z;
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);
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
2660 *am33
2661 *am33_2
2664   /* OP_F090 (); */
2665   uint32_t temp;
2666   int z;
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);
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
2684 *am33
2685 *am33_2
2688   /* OP_FE010000 (); */
2689   uint32_t temp;
2690   int z;
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);
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
2708 *am33
2709 *am33_2
2712   /* OP_FAF40000 (); */
2713   uint32_t temp;
2714   int z;
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);
2726 // 1111 0010 1011 DmDn; asr Dm,Dn
2727 8.0xf2+4.0xb,2.DM1,2.DN0:D0:::asr
2728 "asr"
2729 *mn10300
2731 *am33
2732 *am33_2
2735   /* OP_F2B0 (); */
2736   int32_t temp;
2737   int z, n, c;
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));
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
2756 *am33
2757 *am33_2
2760   /* OP_F8C800 (); */
2761   int32_t temp;
2762   int z, n, c;
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));
2776 // 1111 0010 1010 DmDn; lsr Dm,Dn
2777 8.0xf2+4.0xa,2.DM1,2.DN0:D0:::lsr
2778 "lsr"
2779 *mn10300
2781 *am33
2782 *am33_2
2785   /* OP_F2A0 (); */
2786   int z, n, c;
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));
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
2804 *am33
2805 *am33_2
2808   /* OP_F8C400 (); */
2809   int z, n, c;
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));
2821 // 1111 0010 1001 DmDn; asl Dm,Dn
2822 8.0xf2+4.0x9,2.DM1,2.DN0:D0:::asl
2823 "asl"
2824 *mn10300
2826 *am33
2827 *am33_2
2830   /* OP_F290 (); */
2831   int n, z;
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));
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
2848 *am33
2849 *am33_2
2852   /* OP_F8C000 (); */
2853   int n, z;
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));
2864 // 0101 01Dn; als2 Dn
2865 4.0x5,01,2.DN0:S0:::asl2
2866 "asl2"
2867 *mn10300
2869 *am33
2870 *am33_2
2873   /* OP_54 (); */
2874   int n, z;
2875   PC = cia;
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));
2885 // 1111 0010 1000 01Dn; ror Dn
2886 8.0xf2+4.0x8,01,2.DN0:D0:::ror
2887 "ror"
2888 *mn10300
2890 *am33
2891 *am33_2
2894   /* OP_F284 (); */
2895   uint32_t value;
2896   int c,n,z;
2898   PC = cia;
2899   value = State.regs[REG_D0 + DN0];
2900   c = (value & 0x1);
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));
2912 // 1111 0010 1000 00Dn; rol Dn
2913 8.0xf2+4.0x8,00,2.DN0:D0:::rol
2914 "rol"
2915 *mn10300
2917 *am33
2918 *am33_2
2921   /* OP_F280 (); */
2922   uint32_t value;
2923   int c,n,z;
2925   PC = cia;
2926   value = State.regs[REG_D0 + DN0];
2927   c = (value & 0x80000000) ? 1 : 0;
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));
2939 // 1100 1000 d8......; beq (d8,PC) (d8 is sign-extended)
2940 8.0xc8+8.D8:S1:::beq
2941 "beq"
2942 *mn10300
2944 *am33
2945 *am33_2
2948   /* OP_C800 (); */
2949   PC = cia;
2950   if ((PSW & PSW_Z))
2951     {
2952       State.regs[REG_PC] += EXTEND8 (D8);
2953       nia = PC;
2954     }
2958 // 1100 1001 d8......; bne (d8,PC) (d8 is sign-extended)
2959 8.0xc9+8.D8:S1:::bne
2960 "bne"
2961 *mn10300
2963 *am33
2964 *am33_2
2967   /* OP_C900 (); */
2968   PC = cia;
2969   if (!(PSW & PSW_Z))
2970     {
2971       State.regs[REG_PC] += EXTEND8 (D8);
2972       nia = PC;
2973     }
2977 // 1100 0001 d8......; bgt (d8,PC) (d8 is sign-extended)
2978 8.0xc1+8.D8:S1:::bgt
2979 "bgt"
2980 *mn10300
2982 *am33
2983 *am33_2
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     }
2997 // 1100 0010 d8......; bge (d8,PC) (d8 is sign-extended)
2998 8.0xc2+8.D8:S1:::bge
2999 "bge"
3000 *mn10300
3002 *am33
3003 *am33_2
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     }
3016 // 1100 0011 d8......; ble (d8,PC) (d8 is sign-extended)
3017 8.0xc3+8.D8:S1:::ble
3018 "ble"
3019 *mn10300
3021 *am33
3022 *am33_2
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     }
3036 // 1100 0000 d8......; blt (d8,PC) (d8 is sign-extended)
3037 8.0xc0+8.D8:S1:::blt
3038 "blt"
3039 *mn10300
3041 *am33
3042 *am33_2
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     }
3055 // 1100 0101 d8......; bhi (d8,PC) (d8 is sign-extended)
3056 8.0xc5+8.D8:S1:::bhi
3057 "bhi"
3058 *mn10300
3060 *am33
3061 *am33_2
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     }
3074 // 1100 0110 d8......; bcc (d8,PC) (d8 is sign-extended)
3075 8.0xc6+8.D8:S1:::bcc
3076 "bcc"
3077 *mn10300
3079 *am33
3080 *am33_2
3083   /* OP_C600 (); */
3084   PC = cia;
3085   if (!(PSW & PSW_C))
3086     {
3087       State.regs[REG_PC] += EXTEND8 (D8);
3088       nia = PC;
3089     }
3093 // 1100 0101 d8......; bls (d8,PC) (d8 is sign-extended)
3094 8.0xc7+8.D8:S1:::bls
3095 "bls"
3096 *mn10300
3098 *am33
3099 *am33_2
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     }
3112 // 1100 0100 d8......; bcs (d8,PC) (d8 is sign-extended)
3113 8.0xc4+8.D8:S1:::bcs
3114 "bcs"
3115 *mn10300
3117 *am33
3118 *am33_2
3121   /* OP_C400 (); */
3122   PC = cia;
3123   if (PSW & PSW_C)
3124     {
3125       State.regs[REG_PC] += EXTEND8 (D8);
3126       nia = PC;
3127     }
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
3136 *am33
3137 *am33_2
3140   /* OP_F8E800 (); */
3141   PC = cia;
3142   if (!(PSW & PSW_V))
3143     {
3144       State.regs[REG_PC] += EXTEND8 (D8);
3145       nia = PC;
3146     }
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
3155 *am33
3156 *am33_2
3159   /* OP_F8E900 (); */
3160   PC = cia;
3161   if (PSW & PSW_V)
3162     {
3163       State.regs[REG_PC] += EXTEND8 (D8);
3164       nia = PC;
3165     }
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
3174 *am33
3175 *am33_2
3178   /* OP_F8EA00 (); */
3179   PC = cia;
3180   if (!(PSW & PSW_N))
3181     {
3182       State.regs[REG_PC] += EXTEND8 (D8);
3183       nia = PC;
3184     }
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
3193 *am33
3194 *am33_2
3197   /* OP_F8EB00 (); */
3198   PC = cia;
3199   if (PSW & PSW_N)
3200     {
3201       State.regs[REG_PC] += EXTEND8 (D8);
3202       nia = PC;
3203     }
3207 // 1100 1010 d8......; bra (d8,PC) (d8 is sign-extended)
3208 8.0xca+8.D8:S1:::bra
3209 "bra"
3210 *mn10300
3212 *am33
3213 *am33_2
3216   /* OP_CA00 (); */
3217   PC = cia;
3218   State.regs[REG_PC] += EXTEND8 (D8);
3219   nia = PC;
3223 // 1101 1000; leq
3224 8.0xd8:S0:::leq
3225 "leq"
3226 *mn10300
3228 *am33
3229 *am33_2
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     }
3242 // 1101 1001; lne
3243 8.0xd9:S0:::lne
3244 "lne"
3245 *mn10300
3247 *am33
3248 *am33_2
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     }
3261 // 1101 0001; lgt
3262 8.0xd1:S0:::lgt
3263 "lgt"
3264 *mn10300
3266 *am33
3267 *am33_2
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     }
3281 // 1101 0010; lge
3282 8.0xd2:S0:::lge
3283 "lge"
3284 *mn10300
3286 *am33
3287 *am33_2
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     }
3300 // 1101 0011; lle
3301 8.0xd3:S0:::lle
3302 "lle"
3303 *mn10300
3305 *am33
3306 *am33_2
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     }
3320 // 1101 0000; llt
3321 8.0xd0:S0:::llt
3322 "llt"
3323 *mn10300
3325 *am33
3326 *am33_2
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     }
3339 // 1101 0101; lhi
3340 8.0xd5:S0:::lhi
3341 "lhi"
3342 *mn10300
3344 *am33
3345 *am33_2
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     }
3358 // 1101 0110; lcc
3359 8.0xd6:S0:::lcc
3360 "lcc"
3361 *mn10300
3363 *am33
3364 *am33_2
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     }
3377 // 1101 0111; lls
3378 8.0xd7:S0:::lls
3379 "lls"
3380 *mn10300
3382 *am33
3383 *am33_2
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     }
3396 // 1101 0100; lcs
3397 8.0xd4:S0:::lcs
3398 "lcs"
3399 *mn10300
3401 *am33
3402 *am33_2
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     }
3415 // 1101 1010; lra
3416 8.0xda:S0:::lra
3417 "lra"
3418 *mn10300
3420 *am33
3421 *am33_2
3424   /* OP_DA (); */
3425   PC = cia;
3426   State.regs[REG_PC] = State.regs[REG_LAR] - 4;
3427   nia = PC;
3431 // 1101 1010; setlb
3432 8.0xdb:S0:::setlb
3433 "setlb"
3434 *mn10300
3436 *am33
3437 *am33_2
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;
3447 // 1111 0000 1111 01An; jmp (An)
3448 8.0xf0+4.0xf,01,2.AN0:D0:::jmp
3449 "jmp"
3450 *mn10300
3452 *am33
3453 *am33_2
3456   /* OP_F0F4 (); */
3457   PC = State.regs[REG_A0 + AN0];
3458   nia = PC;
3462 // 1100 1100 d16.....; jmp (d16,PC) (d16 is sign-extended.)
3463 8.0xcc+8.D16A+8.D16B:S2:::jmp
3464 "jmp"
3465 *mn10300
3467 *am33
3468 *am33_2
3471   /* OP_CC0000 (); */
3472   PC = cia + EXTEND16(FETCH16(D16A, D16B));
3473   nia = PC;
3477 // 1101 1100 d32........; jmp (d32, PC)
3478 8.0xdc+8.D32A+8.D32B+8.D32C+8.D32D:S4:::jmp
3479 "jmp"
3480 *mn10300
3482 *am33
3483 *am33_2
3486   /* OP_DC000000 (); */
3487   PC = cia + FETCH32(D32A, D32B, D32C, D32D);
3488   nia = PC;
3492 // 1111 0000 1111 00An; calls (An)
3493 8.0xf0+4.0xf,00,2.AN0:D0:::calls
3494 "calls"
3495 *mn10300
3497 *am33
3498 *am33_2
3501   /* OP_F0F0 (); */
3502   uint32_t next_pc, sp;
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;
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
3519 *am33
3520 *am33_2
3523   /* OP_FAFF0000 (); */
3524   uint32_t next_pc, sp;
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;
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
3541 *am33
3542 *am33_2
3545   /* OP_FCFF0000 (); */
3546   uint32_t next_pc, sp;
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;
3558 // 1111 0000 1111 1100; rets
3559 8.0xf0+8.0xfc:D0:::rets
3560 "rets"
3561 *mn10300
3563 *am33
3564 *am33_2
3567   /* OP_F0FC (); */
3568   uint32_t sp;
3570   sp = State.regs[REG_SP];
3571   State.regs[REG_PC] = load_word(sp);
3572   nia = PC;
3576 // 1111 0000 1111 1101; rti
3577 8.0xf0+8.0xfd:D0:::rti
3578 "rti"
3579 *mn10300
3581 *am33
3582 *am33_2
3585   /* OP_F0FD (); */
3586   uint32_t sp;
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;
3596 // 1111 0000 1111 1110; trap
3597 8.0xf0+8.0xfe:D0:::trap
3598 "trap"
3599 *mn10300
3601 *am33
3602 *am33_2
3605   /* OP_F0FE (); */
3606   uint32_t sp, next_pc;
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;
3616 // 1111 0000 1111 1111; rtm
3617 8.0xf0+8.0xff:D0:::rtm
3618 "rtm"
3619 *mn10300
3621 *am33
3622 *am33_2
3625   /* OP_F0FF (); */
3626   PC = cia;
3627   sim_engine_abort (SD, CPU, cia, "F0FF");
3631 // 1100 1011; nop
3632 8.0xcb:S0:::nop
3633 "nop"
3634 *mn10300
3636 *am33
3637 *am33_2
3640   /* OP_CB (); */
3641   PC = cia;
3645 // 1111 0101 0000  DmDn; udf20 Dm,Dn
3646 8.0xf5+4.0x0,2.DM1,2.DN0:D0:::putx
3647 "putx"
3648 *mn10300
3650   /* OP_F500 (); */
3651   PC = cia;
3652   State.regs[REG_MDRQ] = State.regs[REG_D0 + DN0];
3656 // 1111 0110 1111 DmDn; udf15 Dm,Dn
3657 8.0xf6+4.0xf,2.DM1,2.DN0:D0:::getx
3658 "getx"
3659 *mn10300
3661 *am33
3662 *am33_2
3665   /* OP_F6F0 (); */
3666   int z, n;
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];
3673   PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
3674   PSW |= (z ? PSW_Z : 0) | (n ? PSW_N : 0);
3678 // 1111 0110 0000 DmDn; udf00 Dm,Dn
3679 8.0xf6+4.0x0,2.DM1,2.DN0:D0:::mulq
3680 "mulq"
3681 *mn10300
3683 *am33
3684 *am33_2
3687   /* OP_F600 (); */
3688   uint64_t temp;
3689   int n, z;
3691   PC = cia;
3692   temp = ((int64_t)(int32_t)State.regs[REG_D0 + DN0]
3693           *  (int64_t)(int32_t)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));
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
3708 *am33
3709 *am33_2
3712   /* OP_F90000 (); */
3713   uint64_t temp;
3714   int n, z;
3716   PC = cia;
3717   temp = ((int64_t)(int32_t)State.regs[REG_D0 + DN0]
3718           * (int64_t)(int32_t)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));
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
3733 *am33
3734 *am33_2
3737   /* OP_FB000000 (); */
3738   uint64_t temp;
3739   int n, z;
3741   PC = cia;
3742   temp = ((int64_t)(int32_t)State.regs[REG_D0 + DN0]
3743           * (int64_t)(int32_t)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));
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
3758 *am33
3759 *am33_2
3762   /* OP_FD000000 (); */
3763   uint64_t temp;
3764   int n, z;
3766   PC = cia;
3767   temp = ((int64_t)(int32_t)State.regs[REG_D0 + DN0]
3768           * (int64_t)(int32_t)(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));
3778 // 1111 0110 0001 DmDn; udf01 Dm,Dn
3779 8.0xf6+4.0x1,2.DM1,2.DN0:D0:::mulqu
3780 "mulqu"
3781 *mn10300
3783 *am33
3784 *am33_2
3787   /* OP_F610 (); */
3788   uint64_t temp;
3789   int n, z;
3791   PC = cia;
3792   temp = ((uint64_t) State.regs[REG_D0 + DN0]
3793           * (uint64_t) 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));
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
3808 *am33
3809 *am33_2
3812   /* OP_F91400 (); */
3813   uint64_t temp;
3814   int n, z;
3816   PC = cia;
3817   temp = ((uint64_t)State.regs[REG_D0 + DN0]
3818           * (uint64_t)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));
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
3833 *am33
3834 *am33_2
3837   /* OP_FB140000 (); */
3838   uint64_t temp;
3839   int n, z;
3841   PC = cia;
3842   temp = ((uint64_t)State.regs[REG_D0 + DN0]
3843           * (uint64_t) 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));
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
3858 *am33
3859 *am33_2
3862   /* OP_FD140000 (); */
3863   uint64_t temp;
3864   int n, z;
3866   PC = cia;
3867   temp = ((uint64_t)State.regs[REG_D0 + DN0]
3868           * (uint64_t)(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));
3878 // 1111 0110 0100 DmDn; udf04 Dm,Dn
3879 8.0xf6+4.0x4,2.DM1,2.DN0:D0:::sat16
3880 "sat16"
3881 *mn10300
3883 *am33
3884 *am33_2
3887   /* OP_F640 (); */
3888   int temp;
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;
3898 // 1111 0110 0101 DmDn; udf05 Dm,Dn
3899 8.0xf6+4.0x5,2.DM1,2.DN0:D0:::sat24
3900 "sat24"
3901 *mn10300
3903 *am33
3904 *am33_2
3907   /* OP_F650 (); */
3908   int temp;
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;
3918 // 1111 0110 0111 DmDn; udf07 Dm,Dn
3919 8.0xf6+4.0x7,2.DM1,2.DN0:D0:::bsch
3920 "bsch"
3921 *mn10300
3923 *am33
3924 *am33_2
3927   /* OP_F670 (); */
3928   int temp, c;
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);
3939 // 1111 0000 1100 0000; syscall
3940 8.0xf0+8.0xc0:D0:::syscall
3941 "syscall"
3942 *mn10300
3944 *am33
3945 *am33_2
3948   /* OP_F0C0 (); */
3949   PC = cia;
3950   do_syscall (SD);
3954 // 1111 1111; break
3955 8.0xff:S0:::break
3956 "break"
3957 *mn10300
3959 *am33
3960 *am33_2
3963   /* OP_FF (); */
3964   PC = cia;
3965   program_interrupt(SD, CPU, cia, SIM_SIGTRAP);
3968 // 1100 1110 regs....; movm (SP),regs
3969 8.0xce+8.REGS:S1:::movm
3970 "movm"
3971 *mn10300
3973 *am33
3974 *am33_2
3977   /* OP_CE00 (); */
3978   uint32_t sp = State.regs[REG_SP];
3979   uint32_t mask;
3981   PC = cia;
3982   mask = REGS;
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     }
4003   if (mask & 0x10)
4004     {
4005       State.regs[REG_A0 + 3] = load_word (sp);
4006       sp += 4;
4007     }
4009   if (mask & 0x20)
4010     {
4011       State.regs[REG_A0 + 2] = load_word (sp);
4012       sp += 4;
4013     }
4015   if (mask & 0x40)
4016     {
4017       State.regs[REG_D0 + 3] = load_word (sp);
4018       sp += 4;
4019     }
4021   if (mask & 0x80)
4022     {
4023       State.regs[REG_D0 + 2] = load_word (sp);
4024       sp += 4;
4025     }
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         }
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         }
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     }
4062   /* And make sure to update the stack pointer.  */
4063   State.regs[REG_SP] = sp;
4067 // 1100 1111 regs....; movm regs,(SP)
4068 8.0xcf+8.REGS:S1a:::movm
4069 "movm"
4070 *mn10300
4072 *am33
4073 *am33_2
4076   /* OP_CF00 (); */
4077   uint32_t sp = State.regs[REG_SP];
4078   uint32_t mask;
4080   PC = cia;
4081   mask = REGS;
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         }
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         }
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     }
4118   if (mask & 0x80)
4119     {
4120       sp -= 4;
4121       store_word (sp, State.regs[REG_D0 + 2]);
4122     }
4124   if (mask & 0x40)
4125     {
4126       sp -= 4;
4127       store_word (sp, State.regs[REG_D0 + 3]);
4128     }
4130   if (mask & 0x20)
4131     {
4132       sp -= 4;
4133       store_word (sp, State.regs[REG_A0 + 2]);
4134     }
4136   if (mask & 0x10)
4137     {
4138       sp -= 4;
4139       store_word (sp, State.regs[REG_A0 + 3]);
4140     }
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     }
4161   /* And make sure to update the stack pointer.  */
4162   State.regs[REG_SP] = sp;
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
4171 *am33
4172 *am33_2
4175   /* OP_CD000000 (); */
4176   uint32_t next_pc, sp;
4177   uint32_t mask;
4179   PC = cia;
4180   sp = State.regs[REG_SP];
4181   next_pc = PC + 5;
4182   store_word(sp, next_pc);
4184   mask = REGS;
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         }
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         }
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     }
4221   if (mask & 0x80)
4222     {
4223       sp -= 4;
4224       store_word (sp, State.regs[REG_D0 + 2]);
4225     }
4227   if (mask & 0x40)
4228     {
4229       sp -= 4;
4230       store_word (sp, State.regs[REG_D0 + 3]);
4231     }
4233   if (mask & 0x20)
4234     {
4235       sp -= 4;
4236       store_word (sp, State.regs[REG_A0 + 2]);
4237     }
4239   if (mask & 0x10)
4240     {
4241       sp -= 4;
4242       store_word (sp, State.regs[REG_A0 + 3]);
4243     }
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     }
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;
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
4280 *am33
4281 *am33_2
4284   /* OP_DD000000 (); */
4285   uint32_t next_pc, sp;
4286   uint32_t mask;
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);
4294   mask = REGS;
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         }
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         }
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     }
4331   if (mask & 0x80)
4332     {
4333       sp -= 4;
4334       store_word (sp, State.regs[REG_D0 + 2]);
4335     }
4337   if (mask & 0x40)
4338     {
4339       sp -= 4;
4340       store_word (sp, State.regs[REG_D0 + 3]);
4341     }
4343   if (mask & 0x20)
4344     {
4345       sp -= 4;
4346       store_word (sp, State.regs[REG_A0 + 2]);
4347     }
4349   if (mask & 0x10)
4350     {
4351       sp -= 4;
4352       store_word (sp, State.regs[REG_A0 + 3]);
4353     }
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     }
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;
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
4389 *am33
4390 *am33_2
4393   /* OP_DF0000 (); */
4394   uint32_t sp, offset;
4395   uint32_t mask;
4397   PC = cia;
4398   State.regs[REG_SP] += IMM8;
4399   sp = State.regs[REG_SP];
4401   offset = -4;
4402   mask = REGS;
4404   if (STATE_ARCHITECTURE (SD)->mach == bfd_mach_am33
4405       || STATE_ARCHITECTURE (SD)->mach == bfd_mach_am33_2
4406       )
4407     {
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         }
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         }
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         }
4439     }
4441   if (mask & 0x80)
4442     {
4443       State.regs[REG_D0 + 2] = load_word (sp + offset);
4444       offset -= 4;
4445     }
4447   if (mask & 0x40)
4448     {
4449       State.regs[REG_D0 + 3] = load_word (sp + offset);
4450       offset -= 4;
4451     }
4453   if (mask & 0x20)
4454     {
4455       State.regs[REG_A0 + 2] = load_word (sp + offset);
4456       offset -= 4;
4457     }
4459   if (mask & 0x10)
4460     {
4461       State.regs[REG_A0 + 3] = load_word (sp + offset);
4462       offset -= 4;
4463     }
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     }
4483   /* Restore the PC value.  */
4484   State.regs[REG_PC] = load_word(sp);
4485   nia = PC;
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
4494 *am33
4495 *am33_2
4498   /* OP_DE0000 (); */
4499   uint32_t sp, offset;
4500   uint32_t mask;
4502   PC = cia;
4503   State.regs[REG_SP] += IMM8;
4504   sp = State.regs[REG_SP];
4505   State.regs[REG_PC] = State.regs[REG_MDR];
4507   offset = -4;
4508   mask = REGS;
4510   if (STATE_ARCHITECTURE (SD)->mach == bfd_mach_am33
4511       || STATE_ARCHITECTURE (SD)->mach == bfd_mach_am33_2
4512       )
4513     {
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         }
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         }
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         }
4545     }
4547   if (mask & 0x80)
4548     {
4549       State.regs[REG_D0 + 2] = load_word (sp + offset);
4550       offset -= 4;
4551     }
4553   if (mask & 0x40)
4554     {
4555       State.regs[REG_D0 + 3] = load_word (sp + offset);
4556       offset -= 4;
4557     }
4559   if (mask & 0x20)
4560     {
4561       State.regs[REG_A0 + 2] = load_word (sp + offset);
4562       offset -= 4;
4563     }
4565   if (mask & 0x10)
4566     {
4567       State.regs[REG_A0 + 3] = load_word (sp + offset);
4568       offset -= 4;
4569     }
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;
4592 :include::am33:am33.igen
4593 :include::am33-2:am33-2.igen