]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/mn10300/simops.c
* config/mips/tm-mips.h (ADDR_BITS_REMOVE, TARGET_READ_SP): Define.
[thirdparty/binutils-gdb.git] / sim / mn10300 / simops.c
CommitLineData
05ccbdfd
JL
1#include "config.h"
2
3#include <signal.h>
4#ifdef HAVE_UNISTD_H
5#include <unistd.h>
6#endif
7#include "mn10300_sim.h"
8#include "simops.h"
9#include "sys/syscall.h"
10#include "bfd.h"
11#include <errno.h>
12#include <sys/stat.h>
13#include <sys/times.h>
14#include <sys/time.h>
15
16enum op_types {
17 OP_UNKNOWN,
18};
19
20#ifdef DEBUG
21static void trace_input PARAMS ((char *name, enum op_types type, int size));
22static void trace_output PARAMS ((enum op_types result));
23static int init_text_p = 0;
24static asection *text;
25static bfd_vma text_start;
26static bfd_vma text_end;
27extern bfd *exec_bfd;
28
29#ifndef SIZE_INSTRUCTION
30#define SIZE_INSTRUCTION 6
31#endif
32
33#ifndef SIZE_OPERANDS
34#define SIZE_OPERANDS 16
35#endif
36
37#ifndef SIZE_VALUES
38#define SIZE_VALUES 11
39#endif
40
41#ifndef SIZE_LOCATION
42#define SIZE_LOCATION 40
43#endif
44
45static void
46trace_input (name, type, size)
47 char *name;
48 enum op_types type;
49 int size;
50{
51}
52
53static void
54trace_output (result)
55 enum op_types result;
56{
57}
58
59#else
60#define trace_input(NAME, IN1, IN2)
61#define trace_output(RESULT)
62#endif
63
64\f
65/* mov */
66void OP_8000 ()
67{
68}
69
70/* mov */
71void OP_80 ()
72{
73}
74
75/* mov */
76void OP_F1E0 ()
77{
78}
79
80/* mov */
81void OP_F1D0 ()
82{
83}
84
85/* mov */
86void OP_9000 ()
87{
88}
89
90/* mov */
91void OP_90 ()
92{
93}
94
92284aaa 95/* mov sp, an*/
05ccbdfd
JL
96void OP_3C ()
97{
92284aaa 98 State.regs[REG_A0 + (insn & 0x3)] = State.regs[REG_SP];
05ccbdfd
JL
99}
100
73e65298 101/* mov am, sp*/
05ccbdfd
JL
102void OP_F2F0 ()
103{
92284aaa 104 State.regs[REG_SP] = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
05ccbdfd
JL
105}
106
107/* mov */
108void OP_F2E4 ()
109{
110}
111
112/* mov */
113void OP_F2F3 ()
114{
115}
116
117/* mov */
118void OP_F2E0 ()
119{
120}
121
122/* mov */
123void OP_F2F2 ()
124{
125}
126
127/* mov */
128void OP_70 ()
129{
130}
131
132/* mov */
133void OP_F80000 ()
134{
135}
136
137/* mov */
138void OP_FA000000 ()
139{
140}
141
142/* mov */
143void OP_FC000000 ()
144{
145}
146
147/* mov */
148void OP_5800 ()
149{
150}
151
152/* mov */
153void OP_FAB40000 ()
154{
155}
156
157/* mov */
158void OP_FCB40000 ()
159{
160}
161
162/* mov */
163void OP_F300 ()
164{
165}
166
167/* mov */
168void OP_300000 ()
169{
170}
171
172/* mov */
173void OP_FCA40000 ()
174{
175}
176
177/* mov */
178void OP_F000 ()
179{
180}
181
182/* mov */
183void OP_F82000 ()
184{
185}
186
187/* mov */
188void OP_FA200000 ()
189{
190}
191
192/* mov */
193void OP_FC200000 ()
194{
195}
196
197/* mov */
198void OP_5C00 ()
199{
200}
201
202/* mov */
203void OP_FAB00000 ()
204{
205}
206
207/* mov */
208void OP_FCB00000 ()
209{
210}
211
212/* mov */
213void OP_F380 ()
214{
215}
216
217/* mov */
218void OP_FAA00000 ()
219{
220}
221
222/* mov */
223void OP_FCA00000 ()
224{
225}
226
227/* mov */
228void OP_F8F000 ()
229{
230}
231
232/* mov */
233void OP_60 ()
234{
235}
236
237/* mov */
238void OP_F81000 ()
239{
240}
241
242/* mov */
243void OP_FA100000 ()
244{
245}
246
247/* mov */
248void OP_FC100000 ()
249{
250}
251
252/* mov */
253void OP_4200 ()
254{
255}
256
257/* mov */
258void OP_FA910000 ()
259{
260}
261
262/* mov */
263void OP_FC910000 ()
264{
265}
266
267/* mov */
268void OP_F340 ()
269{
270}
271
272/* mov */
273void OP_10000 ()
274{
275}
276
277/* mov */
278void OP_FC810000 ()
279{
280}
281
282/* mov */
283void OP_F010 ()
284{
285}
286
287/* mov */
288void OP_F83000 ()
289{
290}
291
292/* mov */
293void OP_FA300000 ()
294{
295}
296
297/* mov */
298void OP_FC300000 ()
299{
300}
301
302/* mov */
303void OP_4300 ()
304{
305}
306
307/* mov */
308void OP_FA900000 ()
309{
310}
311
312/* mov */
313void OP_FC900000 ()
314{
315}
316
317/* mov */
318void OP_F3C0 ()
319{
320}
321
322/* mov */
323void OP_FA800000 ()
324{
325}
326
327/* mov */
328void OP_FC800000 ()
329{
330}
331
332/* mov */
333void OP_F8F400 ()
334{
335}
336
337/* mov */
338void OP_2C0000 ()
339{
340}
341
342/* mov */
343void OP_FCCC0000 ()
344{
345}
346
347/* mov */
348void OP_240000 ()
349{
350}
351
73e65298 352/* mov imm32, an*/
05ccbdfd
JL
353void OP_FCDC0000 ()
354{
73e65298
JL
355 unsigned long value;
356
357 value = (insn & 0xffff) << 16 | extension;
358 State.regs[REG_A0 + ((insn & 0x30000) >> 16)] = value;
05ccbdfd
JL
359}
360
361/* movbu */
362void OP_F040 ()
363{
364}
365
366/* movbu */
367void OP_F84000 ()
368{
369}
370
371/* movbu */
372void OP_FA400000 ()
373{
374}
375
376/* movbu */
377void OP_FC400000 ()
378{
379}
380
381/* movbu */
382void OP_F8B800 ()
383{
384}
385
386/* movbu */
387void OP_FAB80000 ()
388{
389}
390
391/* movbu */
392void OP_FCB80000 ()
393{
394}
395
396/* movbu */
397void OP_F400 ()
398{
399}
400
401/* movbu */
402void OP_340000 ()
403{
404}
405
406/* movbu */
407void OP_FCA80000 ()
408{
409}
410
73e65298 411/* movbu dm,(an) */
05ccbdfd
JL
412void OP_F050 ()
413{
73e65298
JL
414 store_mem (State.regs[REG_A0 + ((insn & 0xc) >> 2)], 1,
415 State.regs[REG_D0 + (insn & 0x3)]);
05ccbdfd
JL
416}
417
418/* movbu */
419void OP_F85000 ()
420{
421}
422
423/* movbu */
424void OP_FA500000 ()
425{
426}
427
428/* movbu */
429void OP_FC500000 ()
430{
431}
432
433/* movbu */
434void OP_F89200 ()
435{
436}
437
438/* movbu */
439void OP_FA920000 ()
440{
441}
442
443/* movbu */
444void OP_FC920000 ()
445{
446}
447
448/* movbu */
449void OP_F440 ()
450{
451}
452
453/* movbu */
454void OP_20000 ()
455{
456}
457
458/* movbu */
459void OP_FC820000 ()
460{
461}
462
463/* movhu */
464void OP_F060 ()
465{
466}
467
468/* movhu */
469void OP_F86000 ()
470{
471}
472
473/* movhu */
474void OP_FA600000 ()
475{
476}
477
478/* movhu */
479void OP_FC600000 ()
480{
481}
482
483/* movhu */
484void OP_F8BC00 ()
485{
486}
487
488/* movhu */
489void OP_FABC0000 ()
490{
491}
492
493/* movhu */
494void OP_FCBC0000 ()
495{
496}
497
498/* movhu */
499void OP_F480 ()
500{
501}
502
503/* movhu */
504void OP_380000 ()
505{
506}
507
508/* movhu */
509void OP_FCAC0000 ()
510{
511}
512
513/* movhu */
514void OP_F070 ()
515{
516}
517
518/* movhu */
519void OP_F87000 ()
520{
521}
522
523/* movhu */
524void OP_FA700000 ()
525{
526}
527
528/* movhu */
529void OP_FC700000 ()
530{
531}
532
533/* movhu */
534void OP_F89300 ()
535{
536}
537
538/* movhu */
539void OP_FA930000 ()
540{
541}
542
543/* movhu */
544void OP_FC930000 ()
545{
546}
547
548/* movhu */
549void OP_F4C0 ()
550{
551}
552
553/* movhu */
554void OP_30000 ()
555{
556}
557
558/* movhu */
559void OP_FC830000 ()
560{
561}
562
563/* ext */
564void OP_F2D0 ()
565{
566}
567
568/* extb */
569void OP_10 ()
570{
571}
572
573/* extbu */
574void OP_14 ()
575{
576}
577
578/* exth */
579void OP_18 ()
580{
581}
582
583/* exthu */
584void OP_1C ()
585{
586}
587
588/* movm */
589void OP_CE00 ()
590{
591}
592
593/* movm */
594void OP_CF00 ()
595{
596}
597
73e65298 598/* clr dn */
05ccbdfd
JL
599void OP_0 ()
600{
73e65298
JL
601 State.regs[REG_D0 + ((insn & 0xc) >> 2)] = 0;
602
603 PSW |= PSW_Z;
604 PSW &= ~(PSW_V | PSW_C | PSW_N);
05ccbdfd
JL
605}
606
73e65298 607/* add dm,dn*/
05ccbdfd
JL
608void OP_E0 ()
609{
73e65298
JL
610 int z, c, n, v;
611 unsigned long reg1, reg2, value;
612
613 reg1 = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
614 reg2 = State.regs[REG_D0 + (insn & 0x3)];
615 value = reg1 + reg2;
616 State.regs[REG_D0 + (insn & 0x3)] = value;
617
618 z = (value == 0);
619 n = (value & 0x80000000);
620 c = (reg1 < reg2);
621 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
622 && (reg2 & 0x8000000) != (value & 0x80000000));
623
624 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
625 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
626 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
627}
628
73e65298 629/* add dm, an */
05ccbdfd
JL
630void OP_F160 ()
631{
73e65298
JL
632 int z, c, n, v;
633 unsigned long reg1, reg2, value;
634
635 reg1 = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
636 reg2 = State.regs[REG_A0 + (insn & 0x3)];
637 value = reg1 + reg2;
638 State.regs[REG_A0 + (insn & 0x3)] = value;
639
640 z = (value == 0);
641 n = (value & 0x80000000);
642 c = (reg1 < reg2);
643 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
644 && (reg2 & 0x8000000) != (value & 0x80000000));
645
646 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
647 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
648 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
649}
650
73e65298 651/* add am, dn*/
05ccbdfd
JL
652void OP_F150 ()
653{
73e65298
JL
654 int z, c, n, v;
655 unsigned long reg1, reg2, value;
656
657 reg1 = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
658 reg2 = State.regs[REG_D0 + (insn & 0x3)];
659 value = reg1 + reg2;
660 State.regs[REG_D0 + (insn & 0x3)] = value;
661
662 z = (value == 0);
663 n = (value & 0x80000000);
664 c = (reg1 < reg2);
665 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
666 && (reg2 & 0x8000000) != (value & 0x80000000));
667
668 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
669 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
670 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
671}
672
73e65298 673/* add am,an */
05ccbdfd
JL
674void OP_F170 ()
675{
73e65298
JL
676 int z, c, n, v;
677 unsigned long reg1, reg2, value;
678
679 reg1 = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
680 reg2 = State.regs[REG_A0 + (insn & 0x3)];
681 value = reg1 + reg2;
682 State.regs[REG_A0 + (insn & 0x3)] = value;
683
684 z = (value == 0);
685 n = (value & 0x80000000);
686 c = (reg1 < reg2);
687 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
688 && (reg2 & 0x8000000) != (value & 0x80000000));
689
690 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
691 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
692 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
693}
694
73e65298 695/* add imm8, dn */
05ccbdfd
JL
696void OP_2800 ()
697{
73e65298
JL
698 int z, c, n, v;
699 unsigned long reg1, imm, value;
700
701 reg1 = State.regs[REG_D0 + ((insn & 0xc00) >> 8)];
702 imm = SEXT8 (insn & 0xff);
703 value = reg1 + imm;
704 State.regs[REG_D0 + ((insn & 0xc00) >> 8)] = value;
705
706 z = (value == 0);
707 n = (value & 0x80000000);
708 c = (reg1 < imm);
709 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
710 && (imm & 0x8000000) != (value & 0x80000000));
711
712 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
713 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
714 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
715}
716
73e65298 717/* add imm16, dn */
05ccbdfd
JL
718void OP_FAC00000 ()
719{
73e65298
JL
720 int z, c, n, v;
721 unsigned long reg1, imm, value;
722
723 reg1 = State.regs[REG_D0 + ((insn & 0xc0000) >> 16)];
724 imm = SEXT16 (insn & 0xffff);
725 value = reg1 + imm;
726 State.regs[REG_D0 + ((insn & 0xc0000) >> 16)] = value;
727
728 z = (value == 0);
729 n = (value & 0x80000000);
730 c = (reg1 < imm);
731 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
732 && (imm & 0x8000000) != (value & 0x80000000));
733
734 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
735 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
736 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
737}
738
73e65298 739/* add imm32,dn */
05ccbdfd
JL
740void OP_FCC00000 ()
741{
73e65298
JL
742 int z, c, n, v;
743 unsigned long reg1, imm, value;
744
745 reg1 = State.regs[REG_D0 + ((insn & 0xc0000) >> 16)];
746 imm = ((insn & 0xffff) << 16) | extension;
747 value = reg1 + imm;
748 State.regs[REG_D0 + ((insn & 0xc0000) >> 16)] = value;
749
750 z = (value == 0);
751 n = (value & 0x80000000);
752 c = (reg1 < imm);
753 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
754 && (imm & 0x8000000) != (value & 0x80000000));
755
756 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
757 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
758 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
759}
760
73e65298 761/* add imm8, an */
05ccbdfd
JL
762void OP_2000 ()
763{
73e65298
JL
764 int z, c, n, v;
765 unsigned long reg1, imm, value;
766
767 reg1 = State.regs[REG_A0 + ((insn & 0xc00) >> 8)];
768 imm = insn & 0xff;
769 value = reg1 + imm;
770 State.regs[REG_A0 + ((insn & 0xc00) >> 8)] = value;
771
772 z = (value == 0);
773 n = (value & 0x80000000);
774 c = (reg1 < imm);
775 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
776 && (imm & 0x8000000) != (value & 0x80000000));
777
778 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
779 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
780 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
781}
782
73e65298 783/* add imm16, an */
05ccbdfd
JL
784void OP_FAD00000 ()
785{
73e65298
JL
786 int z, c, n, v;
787 unsigned long reg1, imm, value;
788
789 reg1 = State.regs[REG_A0 + ((insn & 0xc0000) >> 16)];
790 imm = 0xffff;
791 value = reg1 + imm;
792 State.regs[REG_A0 + ((insn & 0xc0000) >> 16)] = value;
793
794 z = (value == 0);
795 n = (value & 0x80000000);
796 c = (reg1 < imm);
797 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
798 && (imm & 0x8000000) != (value & 0x80000000));
799
800 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
801 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
802 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
803}
804
73e65298 805/* add imm32, an */
05ccbdfd
JL
806void OP_FCD00000 ()
807{
73e65298
JL
808 int z, c, n, v;
809 unsigned long reg1, imm, value;
810
811 reg1 = State.regs[REG_A0 + ((insn & 0xc0000) >> 16)];
812 imm = ((insn & 0xffff) << 16) | extension;
813 value = reg1 + imm;
814 State.regs[REG_A0 + ((insn & 0xc0000) >> 16)] = value;
815
816 z = (value == 0);
817 n = (value & 0x80000000);
818 c = (reg1 < imm);
819 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
820 && (imm & 0x8000000) != (value & 0x80000000));
821
822 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
823 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
824 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
825}
826
73e65298 827/* add imm8, sp*/
05ccbdfd
JL
828void OP_F8FE00 ()
829{
73e65298
JL
830 int z, c, n, v;
831 unsigned long reg1, imm, value;
832
833 reg1 = State.regs[REG_SP];
834 imm = SEXT8 (insn & 0xff);
835 value = reg1 + imm;
836 State.regs[REG_SP] = value;
837
838 z = (value == 0);
839 n = (value & 0x80000000);
840 c = (reg1 < imm);
841 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
842 && (imm & 0x8000000) != (value & 0x80000000));
843
844 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
845 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
846 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
847}
848
73e65298 849/* add imm16,sp */
05ccbdfd
JL
850void OP_FAFE0000 ()
851{
73e65298
JL
852 int z, c, n, v;
853 unsigned long reg1, imm, value;
854
855 reg1 = State.regs[REG_SP];
856 imm = SEXT16 (insn & 0xffff);
857 value = reg1 + imm;
858 State.regs[REG_SP] = value;
859
860 z = (value == 0);
861 n = (value & 0x80000000);
862 c = (reg1 < imm);
863 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
864 && (imm & 0x8000000) != (value & 0x80000000));
865
866 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
867 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
868 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
869}
870
871/* add */
872void OP_FCFE0000 ()
873{
73e65298
JL
874 int z, c, n, v;
875 unsigned long reg1, imm, value;
876
877 reg1 = State.regs[REG_SP];
878 imm = ((insn & 0xffff) << 16) | extension;
879 value = reg1 + imm;
880 State.regs[REG_SP] = value;
881
882 z = (value == 0);
883 n = (value & 0x80000000);
884 c = (reg1 < imm);
885 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
886 && (imm & 0x8000000) != (value & 0x80000000));
887
888 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
889 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
890 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
891}
892
893/* addc */
894void OP_F140 ()
895{
73e65298
JL
896 int z, c, n, v;
897 unsigned long reg1, reg2, value;
898
899 reg1 = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
900 reg2 = State.regs[REG_D0 + (insn & 0x3)];
901 value = reg1 + reg2 + ((PSW & PSW_C) != 0);
902 State.regs[REG_D0 + (insn & 0x3)] = value;
903
904 z = (value == 0);
905 n = (value & 0x80000000);
906 c = (reg1 < reg2);
907 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
908 && (reg2 & 0x8000000) != (value & 0x80000000));
909
910 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
911 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
912 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
913}
914
915/* sub */
916void OP_F100 ()
917{
918}
919
920/* sub */
921void OP_F120 ()
922{
923}
924
925/* sub */
926void OP_F110 ()
927{
928}
929
930/* sub */
931void OP_F130 ()
932{
933}
934
935/* sub */
936void OP_FCC40000 ()
937{
938}
939
940/* sub */
941void OP_FCD40000 ()
942{
943}
944
945/* subc */
946void OP_F180 ()
947{
948}
949
950/* mul */
951void OP_F240 ()
952{
953}
954
955/* mulu */
956void OP_F250 ()
957{
958}
959
960/* div */
961void OP_F260 ()
962{
963}
964
965/* divu */
966void OP_F270 ()
967{
968}
969
73e65298 970/* inc dn */
05ccbdfd
JL
971void OP_40 ()
972{
73e65298 973 State.regs[REG_D0 + ((insn & 0xc) >> 2)] += 1;
05ccbdfd
JL
974}
975
73e65298 976/* inc an */
05ccbdfd
JL
977void OP_41 ()
978{
73e65298 979 State.regs[REG_A0 + ((insn & 0xc) >> 2)] += 1;
05ccbdfd
JL
980}
981
92284aaa 982/* inc4 an */
05ccbdfd
JL
983void OP_50 ()
984{
73e65298 985 State.regs[REG_A0 + (insn & 0x3)] += 4;
05ccbdfd
JL
986}
987
92284aaa 988/* cmp imm8, dn */
05ccbdfd
JL
989void OP_A000 ()
990{
92284aaa
JL
991 int z, c, n, v;
992 unsigned long reg1, imm, value;
993
994 reg1 = State.regs[REG_D0 + ((insn & 0x300) >> 8)];
995 imm = SEXT8 (insn & 0xff);
996 value = reg1 - imm;
997
998 z = (value == 0);
999 n = (value & 0x80000000);
1000 c = (reg1 < imm);
1001 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
1002 && (imm & 0x8000000) != (value & 0x80000000));
1003
1004 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1005 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1006 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1007}
1008
92284aaa 1009/* cmp dm, dn */
05ccbdfd
JL
1010void OP_A0 ()
1011{
92284aaa
JL
1012 int z, c, n, v;
1013 unsigned long reg1, reg2, value;
1014
1015 reg1 = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
1016 reg2 = State.regs[REG_D0 + (insn & 0x3)];
1017 value = reg1 - reg2;
1018
1019 z = (value == 0);
1020 n = (value & 0x80000000);
1021 c = (reg1 < reg2);
1022 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
1023 && (reg2 & 0x8000000) != (value & 0x80000000));
1024
1025 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1026 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1027 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1028}
1029
92284aaa 1030/* cmp dm, an */
05ccbdfd
JL
1031void OP_F1A0 ()
1032{
92284aaa
JL
1033 int z, c, n, v;
1034 unsigned long reg1, reg2, value;
1035
1036 reg1 = State.regs[REG_D0 + ((insn & 0xc) >> 2)];
1037 reg2 = State.regs[REG_A0 + (insn & 0x3)];
1038 value = reg1 - reg2;
1039
1040 z = (value == 0);
1041 n = (value & 0x80000000);
1042 c = (reg1 < reg2);
1043 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
1044 && (reg2 & 0x8000000) != (value & 0x80000000));
1045
1046 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1047 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1048 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1049}
1050
92284aaa 1051/* cmp am, dn */
05ccbdfd
JL
1052void OP_F190 ()
1053{
92284aaa
JL
1054 int z, c, n, v;
1055 unsigned long reg1, reg2, value;
1056
1057 reg1 = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
1058 reg2 = State.regs[REG_D0 + (insn & 0x3)];
1059 value = reg1 - reg2;
1060
1061 z = (value == 0);
1062 n = (value & 0x80000000);
1063 c = (reg1 < reg2);
1064 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
1065 && (reg2 & 0x8000000) != (value & 0x80000000));
1066
1067 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1068 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1069 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1070}
1071
92284aaa 1072/* cmp imm8, an */
05ccbdfd
JL
1073void OP_B000 ()
1074{
92284aaa
JL
1075 int z, c, n, v;
1076 unsigned long reg1, imm, value;
1077
1078 reg1 = State.regs[REG_A0 + ((insn & 0x300) >> 8)];
1079 imm = insn & 0xff;
1080 value = reg1 - imm;
1081
1082 z = (value == 0);
1083 n = (value & 0x80000000);
1084 c = (reg1 < imm);
1085 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
1086 && (imm & 0x8000000) != (value & 0x80000000));
1087
1088 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1089 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1090 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1091}
1092
73e65298 1093/* cmp am,an */
05ccbdfd
JL
1094void OP_B0 ()
1095{
73e65298
JL
1096 int z, c, n, v;
1097 unsigned long reg1, reg2, value;
1098
1099 reg1 = State.regs[REG_A0 + ((insn & 0xc) >> 2)];
1100 reg2 = State.regs[REG_A0 + (insn & 0x3)];
1101 value = reg1 - reg2;
1102
1103 z = (value == 0);
1104 n = (value & 0x80000000);
1105 c = (reg1 < reg2);
1106 v = ((reg2 & 0x8000000) != (reg1 & 0x80000000)
1107 && (reg2 & 0x8000000) != (value & 0x80000000));
1108
1109 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1110 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1111 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1112}
1113
1114/* cmp */
1115void OP_FAC80000 ()
1116{
92284aaa
JL
1117 int z, c, n, v;
1118 unsigned long reg1, imm, value;
1119
1120 reg1 = State.regs[REG_D0 + ((insn & 0x300) >> 16)];
1121 imm = SEXT16 (insn & 0xffff);
1122 value = reg1 - imm;
1123
1124 z = (value == 0);
1125 n = (value & 0x80000000);
1126 c = (reg1 < imm);
1127 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
1128 && (imm & 0x8000000) != (value & 0x80000000));
1129
1130 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1131 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1132 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1133}
1134
1135/* cmp */
1136void OP_FCC80000 ()
1137{
92284aaa
JL
1138 int z, c, n, v;
1139 unsigned long reg1, imm, value;
1140
1141 reg1 = State.regs[REG_D0 + ((insn & 0x300) >> 16)];
1142 imm = ((insn & 0xffff) << 16) | extension;
1143 value = reg1 - imm;
1144
1145 z = (value == 0);
1146 n = (value & 0x80000000);
1147 c = (reg1 < imm);
1148 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
1149 && (imm & 0x8000000) != (value & 0x80000000));
1150
1151 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1152 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1153 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1154}
1155
1156/* cmp */
1157void OP_FAD80000 ()
1158{
92284aaa
JL
1159 int z, c, n, v;
1160 unsigned long reg1, imm, value;
1161
1162 reg1 = State.regs[REG_A0 + ((insn & 0x300) >> 16)];
1163 imm = insn & 0xffff;
1164 value = reg1 - imm;
1165
1166 z = (value == 0);
1167 n = (value & 0x80000000);
1168 c = (reg1 < imm);
1169 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
1170 && (imm & 0x8000000) != (value & 0x80000000));
1171
1172 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1173 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1174 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1175}
1176
1177/* cmp */
1178void OP_FCD80000 ()
1179{
92284aaa
JL
1180 int z, c, n, v;
1181 unsigned long reg1, imm, value;
1182
1183 reg1 = State.regs[REG_A0 + ((insn & 0x300) >> 16)];
1184 imm = ((insn & 0xffff) << 16) | extension;
1185 value = reg1 - imm;
1186
1187 z = (value == 0);
1188 n = (value & 0x80000000);
1189 c = (reg1 < imm);
1190 v = ((imm & 0x8000000) != (reg1 & 0x80000000)
1191 && (imm & 0x8000000) != (value & 0x80000000));
1192
1193 PSW &= ~(PSW_Z | PSW_N | PSW_C | PSW_V);
1194 PSW |= ((z ? PSW_Z : 0) | ( n ? PSW_N : 0)
1195 | (c ? PSW_C : 0) | (v ? PSW_V : 0));
05ccbdfd
JL
1196}
1197
1198/* and */
1199void OP_F200 ()
1200{
1201}
1202
1203/* and */
1204void OP_F8E000 ()
1205{
1206}
1207
1208/* and */
1209void OP_FAE00000 ()
1210{
1211}
1212
1213/* and */
1214void OP_FCE00000 ()
1215{
1216}
1217
1218/* and */
1219void OP_FAFC0000 ()
1220{
1221}
1222
1223/* or */
1224void OP_F210 ()
1225{
1226}
1227
1228/* or */
1229void OP_F8E400 ()
1230{
1231}
1232
1233/* or */
1234void OP_FAE40000 ()
1235{
1236}
1237
1238/* or */
1239void OP_FCE40000 ()
1240{
1241}
1242
1243/* or */
1244void OP_FAFD0000 ()
1245{
1246}
1247
1248/* xor */
1249void OP_F220 ()
1250{
1251}
1252
1253/* xor */
1254void OP_FAE80000 ()
1255{
1256}
1257
1258/* xor */
1259void OP_FCE80000 ()
1260{
1261}
1262
1263/* not */
1264void OP_F230 ()
1265{
1266}
1267
1268/* btst */
1269void OP_F8EC00 ()
1270{
1271}
1272
1273/* btst */
1274void OP_FAEC0000 ()
1275{
1276}
1277
1278/* btst */
1279void OP_FCEC0000 ()
1280{
1281}
1282
1283/* btst */
1284void OP_FE020000 ()
1285{
1286}
1287
1288/* btst */
1289void OP_FAF80000 ()
1290{
1291}
1292
1293/* btst */
1294void OP_F080 ()
1295{
1296}
1297
1298/* btst */
1299void OP_FE000000 ()
1300{
1301}
1302
1303/* btst */
1304void OP_FAF00000 ()
1305{
1306}
1307
1308/* bclr */
1309void OP_F090 ()
1310{
1311}
1312
1313/* bclr */
1314void OP_FE010000 ()
1315{
1316}
1317
1318/* bclr */
1319void OP_FAF40000 ()
1320{
1321}
1322
1323/* asr */
1324void OP_F2B0 ()
1325{
1326}
1327
1328/* asr */
1329void OP_F8C800 ()
1330{
1331}
1332
1333/* lsr */
1334void OP_F2A0 ()
1335{
1336}
1337
1338/* lsr */
1339void OP_F8C400 ()
1340{
1341}
1342
1343/* asl */
1344void OP_F290 ()
1345{
1346}
1347
1348/* asl */
1349void OP_F8C000 ()
1350{
1351}
1352
1353/* asl2 */
1354void OP_54 ()
1355{
1356}
1357
1358/* ror */
1359void OP_F284 ()
1360{
1361}
1362
1363/* rol */
1364void OP_F280 ()
1365{
1366}
1367
1368/* beq */
1369void OP_C800 ()
1370{
73e65298
JL
1371 /* The dispatching code will add 2 after we return, so
1372 we subtract two here to make things right. */
1373 if (PSW & PSW_Z)
1374 State.pc += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
1375}
1376
1377/* bne */
1378void OP_C900 ()
1379{
73e65298
JL
1380 /* The dispatching code will add 2 after we return, so
1381 we subtract two here to make things right. */
1382 if (!(PSW & PSW_Z))
1383 State.pc += SEXT8 (insn & 0xff) - 2;
05ccbdfd
JL
1384}
1385
1386/* bgt */
1387void OP_C100 ()
1388{
1389}
1390
1391/* bge */
1392void OP_C200 ()
1393{
1394}
1395
1396/* ble */
1397void OP_C300 ()
1398{
1399}
1400
1401/* blt */
1402void OP_C000 ()
1403{
1404}
1405
1406/* bhi */
1407void OP_C500 ()
1408{
1409}
1410
1411/* bcc */
1412void OP_C600 ()
1413{
1414}
1415
1416/* bls */
1417void OP_C700 ()
1418{
1419}
1420
1421/* bcs */
1422void OP_C400 ()
1423{
1424}
1425
1426/* bvc */
1427void OP_F8E800 ()
1428{
1429}
1430
1431/* bvs */
1432void OP_F8E900 ()
1433{
1434}
1435
1436/* bnc */
1437void OP_F8EA00 ()
1438{
1439}
1440
1441/* bns */
1442void OP_F8EB00 ()
1443{
1444}
1445
1446/* bra */
1447void OP_CA00 ()
1448{
1449}
1450
1451/* leq */
1452void OP_D8 ()
1453{
1454}
1455
1456/* lne */
1457void OP_D9 ()
1458{
1459}
1460
1461/* lgt */
1462void OP_D1 ()
1463{
1464}
1465
1466/* lge */
1467void OP_D2 ()
1468{
1469}
1470
1471/* lle */
1472void OP_D3 ()
1473{
1474}
1475
1476/* llt */
1477void OP_D0 ()
1478{
1479}
1480
1481/* lhi */
1482void OP_D5 ()
1483{
1484}
1485
1486/* lcc */
1487void OP_D6 ()
1488{
1489}
1490
1491/* lls */
1492void OP_D7 ()
1493{
1494}
1495
1496/* lcs */
1497void OP_D4 ()
1498{
1499}
1500
1501/* lra */
1502void OP_DA ()
1503{
1504}
1505
1506/* setlb */
1507void OP_DB ()
1508{
1509}
1510
1511/* jmp */
1512void OP_F0F4 ()
1513{
92284aaa 1514 State.pc = State.regs[REG_A0 + (insn & 0x3)] - 2;
05ccbdfd
JL
1515}
1516
1517/* jmp */
1518void OP_CC0000 ()
1519{
92284aaa 1520 State.pc += SEXT16 (insn & 0xffff) - 3;
05ccbdfd
JL
1521}
1522
1523/* jmp */
1524void OP_DC000000 ()
1525{
92284aaa 1526 State.pc += (((insn & 0xffffff) << 8) | extension) - 5;
05ccbdfd
JL
1527}
1528
1529/* call */
1530void OP_CD000000 ()
1531{
1532}
1533
1534/* call */
1535void OP_DD000000 ()
1536{
1537}
1538
1539/* calls */
1540void OP_F0F0 ()
1541{
92284aaa
JL
1542 unsigned int next_pc, sp;
1543
1544 sp = State.regs[REG_SP];
1545 next_pc = State.pc + 2;
1546 State.mem[sp] = next_pc & 0xff;
1547 State.mem[sp+1] = next_pc & 0xff00;
1548 State.mem[sp+2] = next_pc & 0xff0000;
1549 State.mem[sp+3] = next_pc & 0xff000000;
1550 State.regs[REG_MDR] = next_pc;
1551 State.pc = State.regs[REG_A0 + (insn & 0x3)] - 2;
05ccbdfd
JL
1552}
1553
1554/* calls */
1555void OP_FAFF0000 ()
1556{
92284aaa
JL
1557 unsigned int next_pc, sp;
1558
1559 sp = State.regs[REG_SP];
1560 next_pc = State.pc + 4;
1561 State.mem[sp] = next_pc & 0xff;
1562 State.mem[sp+1] = next_pc & 0xff00;
1563 State.mem[sp+2] = next_pc & 0xff0000;
1564 State.mem[sp+3] = next_pc & 0xff000000;
1565 State.regs[REG_MDR] = next_pc;
1566 State.pc += SEXT16 (insn & 0xffff) - 4;
05ccbdfd
JL
1567}
1568
1569/* calls */
1570void OP_FCFF0000 ()
1571{
92284aaa
JL
1572 unsigned int next_pc, sp;
1573
1574 sp = State.regs[REG_SP];
1575 next_pc = State.pc + 6;
1576 State.mem[sp] = next_pc & 0xff;
1577 State.mem[sp+1] = next_pc & 0xff00;
1578 State.mem[sp+2] = next_pc & 0xff0000;
1579 State.mem[sp+3] = next_pc & 0xff000000;
1580 State.regs[REG_MDR] = next_pc;
1581 State.pc += (((insn & 0xffff) << 16) | extension) - 6;
05ccbdfd
JL
1582}
1583
1584/* ret */
1585void OP_DF0000 ()
1586{
1587}
1588
1589/* retf */
1590void OP_DE0000 ()
1591{
1592}
1593
1594/* rets */
1595void OP_F0FC ()
1596{
92284aaa
JL
1597 unsigned int sp;
1598
1599 sp = State.regs[REG_SP];
1600 State.pc = (State.mem[sp] | (State.mem[sp+1] << 8)
1601 | (State.mem[sp+2] << 16) | (State.mem[sp+3] << 24));
1602 State.pc -= 2;
05ccbdfd
JL
1603}
1604
1605/* rti */
1606void OP_F0FD ()
1607{
1608}
1609
1610/* trap */
1611void OP_F0FE ()
1612{
1613}
1614
1615/* rtm */
1616void OP_F0FF ()
1617{
1618}
1619
1620/* nop */
1621void OP_CB ()
1622{
1623}
1624
1625/* putx */
1626void OP_F500 ()
1627{
1628}
1629
1630/* getx */
1631void OP_F6F0 ()
1632{
1633}
1634
1635/* mulq */
1636void OP_F600 ()
1637{
1638}
1639
1640/* mulq */
1641void OP_F90000 ()
1642{
1643}
1644
1645/* mulq */
1646void OP_FB000000 ()
1647{
1648}
1649
1650/* mulq */
1651void OP_FD000000 ()
1652{
1653}
1654
1655/* mulqu */
1656void OP_F610 ()
1657{
1658}
1659
1660/* mulqu */
1661void OP_F91400 ()
1662{
1663}
1664
1665/* mulqu */
1666void OP_FB140000 ()
1667{
1668}
1669
1670/* mulqu */
1671void OP_FD140000 ()
1672{
1673}
1674
1675/* sat16 */
1676void OP_F640 ()
1677{
1678}
1679
1680/* sat24 */
1681void OP_F650 ()
1682{
1683}
1684
1685/* bsch */
1686void OP_F670 ()
1687{
1688}