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