1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21#include "qemu/osdep.h"
22#include "disas/bfd.h"
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46#ifndef _LIBHPPA_H
47#define _LIBHPPA_H
48
49#define BYTES_IN_WORD 4
50#define PA_PAGESIZE 0x1000
51
52
53enum pa_arch {pa10 = 10, pa11 = 11, pa20 = 20, pa20w = 25};
54
55
56
57enum hppa_reloc_field_selector_type
58 {
59 R_HPPA_FSEL = 0x0,
60 R_HPPA_LSSEL = 0x1,
61 R_HPPA_RSSEL = 0x2,
62 R_HPPA_LSEL = 0x3,
63 R_HPPA_RSEL = 0x4,
64 R_HPPA_LDSEL = 0x5,
65 R_HPPA_RDSEL = 0x6,
66 R_HPPA_LRSEL = 0x7,
67 R_HPPA_RRSEL = 0x8,
68 R_HPPA_NSEL = 0x9,
69 R_HPPA_NLSEL = 0xa,
70 R_HPPA_NLRSEL = 0xb,
71 R_HPPA_PSEL = 0xc,
72 R_HPPA_LPSEL = 0xd,
73 R_HPPA_RPSEL = 0xe,
74 R_HPPA_TSEL = 0xf,
75 R_HPPA_LTSEL = 0x10,
76 R_HPPA_RTSEL = 0x11,
77 R_HPPA_LTPSEL = 0x12,
78 R_HPPA_RTPSEL = 0x13
79 };
80
81
82
83
84
85
86#undef e_fsel
87#undef e_lssel
88#undef e_rssel
89#undef e_lsel
90#undef e_rsel
91#undef e_ldsel
92#undef e_rdsel
93#undef e_lrsel
94#undef e_rrsel
95#undef e_nsel
96#undef e_nlsel
97#undef e_nlrsel
98#undef e_psel
99#undef e_lpsel
100#undef e_rpsel
101#undef e_tsel
102#undef e_ltsel
103#undef e_rtsel
104#undef e_one
105#undef e_two
106#undef e_pcrel
107#undef e_con
108#undef e_plabel
109#undef e_abs
110
111
112enum hppa_reloc_field_selector_type_alt
113 {
114 e_fsel = R_HPPA_FSEL,
115 e_lssel = R_HPPA_LSSEL,
116 e_rssel = R_HPPA_RSSEL,
117 e_lsel = R_HPPA_LSEL,
118 e_rsel = R_HPPA_RSEL,
119 e_ldsel = R_HPPA_LDSEL,
120 e_rdsel = R_HPPA_RDSEL,
121 e_lrsel = R_HPPA_LRSEL,
122 e_rrsel = R_HPPA_RRSEL,
123 e_nsel = R_HPPA_NSEL,
124 e_nlsel = R_HPPA_NLSEL,
125 e_nlrsel = R_HPPA_NLRSEL,
126 e_psel = R_HPPA_PSEL,
127 e_lpsel = R_HPPA_LPSEL,
128 e_rpsel = R_HPPA_RPSEL,
129 e_tsel = R_HPPA_TSEL,
130 e_ltsel = R_HPPA_LTSEL,
131 e_rtsel = R_HPPA_RTSEL,
132 e_ltpsel = R_HPPA_LTPSEL,
133 e_rtpsel = R_HPPA_RTPSEL
134 };
135
136enum hppa_reloc_expr_type
137 {
138 R_HPPA_E_ONE = 0,
139 R_HPPA_E_TWO = 1,
140 R_HPPA_E_PCREL = 2,
141 R_HPPA_E_CON = 3,
142 R_HPPA_E_PLABEL = 7,
143 R_HPPA_E_ABS = 18
144 };
145
146
147enum hppa_reloc_expr_type_alt
148 {
149 e_one = R_HPPA_E_ONE,
150 e_two = R_HPPA_E_TWO,
151 e_pcrel = R_HPPA_E_PCREL,
152 e_con = R_HPPA_E_CON,
153 e_plabel = R_HPPA_E_PLABEL,
154 e_abs = R_HPPA_E_ABS
155 };
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170#define HPPA_R_ARG_RELOC(a) \
171 (((a) >> 22) & 0x3ff)
172#define HPPA_R_CONSTANT(a) \
173 ((((bfd_signed_vma)(a)) << (BFD_ARCH_SIZE-22)) >> (BFD_ARCH_SIZE-22))
174#define HPPA_R_ADDEND(r, c) \
175 (((r) << 22) + ((c) & 0x3fffff))
176
177
178
179
180
181static inline int sign_extend (int, int) ATTRIBUTE_UNUSED;
182static inline int low_sign_extend (int, int) ATTRIBUTE_UNUSED;
183static inline int sign_unext (int, int) ATTRIBUTE_UNUSED;
184static inline int low_sign_unext (int, int) ATTRIBUTE_UNUSED;
185static inline int re_assemble_3 (int) ATTRIBUTE_UNUSED;
186static inline int re_assemble_12 (int) ATTRIBUTE_UNUSED;
187static inline int re_assemble_14 (int) ATTRIBUTE_UNUSED;
188static inline int re_assemble_16 (int) ATTRIBUTE_UNUSED;
189static inline int re_assemble_17 (int) ATTRIBUTE_UNUSED;
190static inline int re_assemble_21 (int) ATTRIBUTE_UNUSED;
191static inline int re_assemble_22 (int) ATTRIBUTE_UNUSED;
192static inline bfd_signed_vma hppa_field_adjust
193 (bfd_vma, bfd_signed_vma, enum hppa_reloc_field_selector_type_alt)
194 ATTRIBUTE_UNUSED;
195static inline int hppa_rebuild_insn (int, int, int) ATTRIBUTE_UNUSED;
196
197
198
199
200
201
202static inline int
203sign_extend (int x, int len)
204{
205 int signbit = (1 << (len - 1));
206 int mask = (signbit << 1) - 1;
207 return ((x & mask) ^ signbit) - signbit;
208}
209
210static inline int
211low_sign_extend (int x, int len)
212{
213 return (x >> 1) - ((x & 1) << (len - 1));
214}
215
216
217
218
219
220
221static inline int
222sign_unext (int x, int len)
223{
224 int len_ones;
225
226 len_ones = (1 << len) - 1;
227
228 return x & len_ones;
229}
230
231static inline int
232low_sign_unext (int x, int len)
233{
234 int temp;
235 int sign;
236
237 sign = (x >> (len-1)) & 1;
238
239 temp = sign_unext (x, len-1);
240
241 return (temp << 1) | sign;
242}
243
244static inline int
245re_assemble_3 (int as3)
246{
247 return (( (as3 & 4) << (13-2))
248 | ((as3 & 3) << (13+1)));
249}
250
251static inline int
252re_assemble_12 (int as12)
253{
254 return (( (as12 & 0x800) >> 11)
255 | ((as12 & 0x400) >> (10 - 2))
256 | ((as12 & 0x3ff) << (1 + 2)));
257}
258
259static inline int
260re_assemble_14 (int as14)
261{
262 return (( (as14 & 0x1fff) << 1)
263 | ((as14 & 0x2000) >> 13));
264}
265
266static inline int
267re_assemble_16 (int as16)
268{
269 int s, t;
270
271
272 t = (as16 << 1) & 0xffff;
273 s = (as16 & 0x8000);
274 return (t ^ s ^ (s >> 1)) | (s >> 15);
275}
276
277static inline int
278re_assemble_17 (int as17)
279{
280 return (( (as17 & 0x10000) >> 16)
281 | ((as17 & 0x0f800) << (16 - 11))
282 | ((as17 & 0x00400) >> (10 - 2))
283 | ((as17 & 0x003ff) << (1 + 2)));
284}
285
286static inline int
287re_assemble_21 (int as21)
288{
289 return (( (as21 & 0x100000) >> 20)
290 | ((as21 & 0x0ffe00) >> 8)
291 | ((as21 & 0x000180) << 7)
292 | ((as21 & 0x00007c) << 14)
293 | ((as21 & 0x000003) << 12));
294}
295
296static inline int
297re_assemble_22 (int as22)
298{
299 return (( (as22 & 0x200000) >> 21)
300 | ((as22 & 0x1f0000) << (21 - 16))
301 | ((as22 & 0x00f800) << (16 - 11))
302 | ((as22 & 0x000400) >> (10 - 2))
303 | ((as22 & 0x0003ff) << (1 + 2)));
304}
305
306
307
308
309
310
311
312
313
314
315
316
317static inline bfd_signed_vma
318hppa_field_adjust (bfd_vma sym_val,
319 bfd_signed_vma addend,
320 enum hppa_reloc_field_selector_type_alt r_field)
321{
322 bfd_signed_vma value;
323
324 value = sym_val + addend;
325 switch (r_field)
326 {
327 case e_fsel:
328
329 break;
330
331 case e_nsel:
332
333
334
335
336
337 value = 0;
338 break;
339
340 case e_lsel:
341 case e_nlsel:
342
343 value = value >> 11;
344 break;
345
346 case e_rsel:
347
348 value = value & 0x7ff;
349 break;
350
351 case e_lssel:
352
353 value = value + 0x400;
354 value = value >> 11;
355 break;
356
357 case e_rssel:
358
359
360
361
362 value = ((value & 0x7ff) ^ 0x400) - 0x400;
363 break;
364
365 case e_ldsel:
366
367
368
369 value = value + 0x800;
370 value = value >> 11;
371 break;
372
373 case e_rdsel:
374
375 value = value | -0x800;
376 break;
377
378 case e_lrsel:
379 case e_nlrsel:
380
381 value = sym_val + ((addend + 0x1000) & -0x2000);
382 value = value >> 11;
383 break;
384
385 case e_rrsel:
386
387
388
389
390
391 value = (sym_val & 0x7ff) + (((addend & 0x1fff) ^ 0x1000) - 0x1000);
392 break;
393
394 default:
395 abort ();
396 }
397 return value;
398}
399
400
401#define get_opcode(insn) (((insn) >> 26) & 0x3f)
402
403enum hppa_opcode_type
404{
405
406
407 OP_SYSOP = 0x00,
408 OP_MEMMNG = 0x01,
409 OP_ALU = 0x02,
410 OP_NDXMEM = 0x03,
411 OP_SPOP = 0x04,
412 OP_DIAG = 0x05,
413 OP_FMPYADD = 0x06,
414 OP_UNDEF07 = 0x07,
415 OP_COPRW = 0x09,
416 OP_COPRDW = 0x0b,
417 OP_COPR = 0x0c,
418 OP_FLOAT = 0x0e,
419 OP_PRDSPEC = 0x0f,
420 OP_UNDEF15 = 0x15,
421 OP_UNDEF1d = 0x1d,
422 OP_FMPYSUB = 0x26,
423 OP_FPFUSED = 0x2e,
424 OP_SHEXDP0 = 0x34,
425 OP_SHEXDP1 = 0x35,
426 OP_SHEXDP2 = 0x36,
427 OP_UNDEF37 = 0x37,
428 OP_SHEXDP3 = 0x3c,
429 OP_SHEXDP4 = 0x3d,
430 OP_MULTMED = 0x3e,
431 OP_UNDEF3f = 0x3f,
432
433 OP_LDIL = 0x08,
434 OP_ADDIL = 0x0a,
435
436 OP_LDO = 0x0d,
437 OP_LDB = 0x10,
438 OP_LDH = 0x11,
439 OP_LDW = 0x12,
440 OP_LDWM = 0x13,
441 OP_STB = 0x18,
442 OP_STH = 0x19,
443 OP_STW = 0x1a,
444 OP_STWM = 0x1b,
445
446 OP_LDD = 0x14,
447 OP_STD = 0x1c,
448
449 OP_FLDW = 0x16,
450 OP_LDWL = 0x17,
451 OP_FSTW = 0x1e,
452 OP_STWL = 0x1f,
453
454 OP_COMBT = 0x20,
455 OP_COMIBT = 0x21,
456 OP_COMBF = 0x22,
457 OP_COMIBF = 0x23,
458 OP_CMPBDT = 0x27,
459 OP_ADDBT = 0x28,
460 OP_ADDIBT = 0x29,
461 OP_ADDBF = 0x2a,
462 OP_ADDIBF = 0x2b,
463 OP_CMPBDF = 0x2f,
464 OP_BVB = 0x30,
465 OP_BB = 0x31,
466 OP_MOVB = 0x32,
467 OP_MOVIB = 0x33,
468 OP_CMPIBD = 0x3b,
469
470 OP_COMICLR = 0x24,
471 OP_SUBI = 0x25,
472 OP_ADDIT = 0x2c,
473 OP_ADDI = 0x2d,
474
475 OP_BE = 0x38,
476 OP_BLE = 0x39,
477 OP_BL = 0x3a
478};
479
480
481
482
483
484static inline int
485hppa_rebuild_insn (int insn, int value, int r_format)
486{
487 switch (r_format)
488 {
489 case 11:
490 return (insn & ~ 0x7ff) | low_sign_unext (value, 11);
491
492 case 12:
493 return (insn & ~ 0x1ffd) | re_assemble_12 (value);
494
495
496 case 10:
497 return (insn & ~ 0x3ff1) | re_assemble_14 (value & -8);
498
499 case -11:
500 return (insn & ~ 0x3ff9) | re_assemble_14 (value & -4);
501
502 case 14:
503 return (insn & ~ 0x3fff) | re_assemble_14 (value);
504
505
506 case -10:
507 return (insn & ~ 0xfff1) | re_assemble_16 (value & -8);
508
509 case -16:
510 return (insn & ~ 0xfff9) | re_assemble_16 (value & -4);
511
512 case 16:
513 return (insn & ~ 0xffff) | re_assemble_16 (value);
514
515
516 case 17:
517 return (insn & ~ 0x1f1ffd) | re_assemble_17 (value);
518
519 case 21:
520 return (insn & ~ 0x1fffff) | re_assemble_21 (value);
521
522 case 22:
523 return (insn & ~ 0x3ff1ffd) | re_assemble_22 (value);
524
525 case 32:
526 return value;
527
528 default:
529 abort ();
530 }
531 return insn;
532}
533
534#endif
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559#if !defined(__STDC__) && !defined(const)
560#define const
561#endif
562
563
564
565
566
567
568
569
570
571
572
573
574#undef NONE
575struct pa_opcode
576{
577 const char *name;
578 unsigned long int match;
579 unsigned long int mask;
580 const char *args;
581 enum pa_arch arch;
582 char flags;
583};
584
585
586
587#define FLAG_STRICT 0x1
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808#if 0
809
810
811
812static const char *const completer_chars = ",CcY<>?!@+&U~FfGHINnOoZMadu|/=0123%e$m}";
813#endif
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846static const struct pa_opcode pa_opcodes[] =
847{
848
849
850
851{ "ldi", 0x34000000, 0xffe00000, "l,x", pa20w, 0},
852{ "ldi", 0x34000000, 0xffe0c000, "j,x", pa10, 0},
853
854{ "cmpib", 0xec000000, 0xfc000000, "?Qn5,b,w", pa20, FLAG_STRICT},
855{ "cmpib", 0x84000000, 0xf4000000, "?nn5,b,w", pa10, FLAG_STRICT},
856{ "comib", 0x84000000, 0xfc000000, "?nn5,b,w", pa10, 0},
857
858
859{ "comib", 0x8c000000, 0xfc000000, "?nn5,b,w", pa10, 0},
860{ "cmpb", 0x9c000000, 0xdc000000, "?Nnx,b,w", pa20, FLAG_STRICT},
861{ "cmpb", 0x80000000, 0xf4000000, "?nnx,b,w", pa10, FLAG_STRICT},
862{ "comb", 0x80000000, 0xfc000000, "?nnx,b,w", pa10, 0},
863
864
865{ "comb", 0x88000000, 0xfc000000, "?nnx,b,w", pa10, 0},
866{ "addb", 0xa0000000, 0xf4000000, "?Wnx,b,w", pa20w, FLAG_STRICT},
867{ "addb", 0xa0000000, 0xfc000000, "?@nx,b,w", pa10, 0},
868
869
870{ "addb", 0xa8000000, 0xfc000000, "?@nx,b,w", pa10, 0},
871{ "addib", 0xa4000000, 0xf4000000, "?Wn5,b,w", pa20w, FLAG_STRICT},
872{ "addib", 0xa4000000, 0xfc000000, "?@n5,b,w", pa10, 0},
873
874
875{ "addib", 0xac000000, 0xfc000000, "?@n5,b,w", pa10, 0},
876{ "nop", 0x08000240, 0xffffffff, "", pa10, 0},
877{ "copy", 0x08000240, 0xffe0ffe0, "x,t", pa10, 0},
878{ "mtsar", 0x01601840, 0xffe0ffff, "x", pa10, 0},
879
880
881
882{ "ldd", 0x0c0000c0, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT},
883{ "ldd", 0x0c0000c0, 0xfc0013c0, "cxccx(s,b),t", pa20, FLAG_STRICT},
884{ "ldd", 0x0c0010e0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
885{ "ldd", 0x0c0010e0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
886{ "ldd", 0x0c0010c0, 0xfc00d3c0, "cmcc5(b),t", pa20, FLAG_STRICT},
887{ "ldd", 0x0c0010c0, 0xfc0013c0, "cmcc5(s,b),t", pa20, FLAG_STRICT},
888{ "ldd", 0x50000000, 0xfc000002, "cq&(b),x", pa20w, FLAG_STRICT},
889{ "ldd", 0x50000000, 0xfc00c002, "cq#(b),x", pa20, FLAG_STRICT},
890{ "ldd", 0x50000000, 0xfc000002, "cq#(s,b),x", pa20, FLAG_STRICT},
891{ "ldw", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
892{ "ldw", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
893{ "ldw", 0x0c000080, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
894{ "ldw", 0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
895{ "ldw", 0x0c0010a0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
896{ "ldw", 0x0c0010a0, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
897{ "ldw", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
898{ "ldw", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
899{ "ldw", 0x0c001080, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
900{ "ldw", 0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
901{ "ldw", 0x4c000000, 0xfc000000, "ce<(b),x", pa20w, FLAG_STRICT},
902{ "ldw", 0x5c000004, 0xfc000006, "ce>(b),x", pa20w, FLAG_STRICT},
903{ "ldw", 0x48000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
904{ "ldw", 0x5c000004, 0xfc00c006, "ceK(b),x", pa20, FLAG_STRICT},
905{ "ldw", 0x5c000004, 0xfc000006, "ceK(s,b),x", pa20, FLAG_STRICT},
906{ "ldw", 0x4c000000, 0xfc00c000, "ceJ(b),x", pa10, FLAG_STRICT},
907{ "ldw", 0x4c000000, 0xfc000000, "ceJ(s,b),x", pa10, FLAG_STRICT},
908{ "ldw", 0x48000000, 0xfc00c000, "j(b),x", pa10, 0},
909{ "ldw", 0x48000000, 0xfc000000, "j(s,b),x", pa10, 0},
910{ "ldh", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
911{ "ldh", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
912{ "ldh", 0x0c000040, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
913{ "ldh", 0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
914{ "ldh", 0x0c001060, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
915{ "ldh", 0x0c001060, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
916{ "ldh", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
917{ "ldh", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
918{ "ldh", 0x0c001040, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
919{ "ldh", 0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
920{ "ldh", 0x44000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
921{ "ldh", 0x44000000, 0xfc00c000, "j(b),x", pa10, 0},
922{ "ldh", 0x44000000, 0xfc000000, "j(s,b),x", pa10, 0},
923{ "ldb", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
924{ "ldb", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
925{ "ldb", 0x0c000000, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
926{ "ldb", 0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
927{ "ldb", 0x0c001020, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
928{ "ldb", 0x0c001020, 0xfc1f33e0, "cocc@(s,b),t", pa20, FLAG_STRICT},
929{ "ldb", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
930{ "ldb", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
931{ "ldb", 0x0c001000, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
932{ "ldb", 0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
933{ "ldb", 0x40000000, 0xfc000000, "l(b),x", pa20w, FLAG_STRICT},
934{ "ldb", 0x40000000, 0xfc00c000, "j(b),x", pa10, 0},
935{ "ldb", 0x40000000, 0xfc000000, "j(s,b),x", pa10, 0},
936{ "std", 0x0c0012e0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
937{ "std", 0x0c0012e0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
938{ "std", 0x0c0012c0, 0xfc00d3c0, "cmcCx,V(b)", pa20, FLAG_STRICT},
939{ "std", 0x0c0012c0, 0xfc0013c0, "cmcCx,V(s,b)", pa20, FLAG_STRICT},
940{ "std", 0x70000000, 0xfc000002, "cqx,&(b)", pa20w, FLAG_STRICT},
941{ "std", 0x70000000, 0xfc00c002, "cqx,#(b)", pa20, FLAG_STRICT},
942{ "std", 0x70000000, 0xfc000002, "cqx,#(s,b)", pa20, FLAG_STRICT},
943{ "stw", 0x0c0012a0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
944{ "stw", 0x0c0012a0, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
945{ "stw", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
946{ "stw", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
947{ "stw", 0x0c001280, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
948{ "stw", 0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
949{ "stw", 0x6c000000, 0xfc000000, "cex,<(b)", pa20w, FLAG_STRICT},
950{ "stw", 0x7c000004, 0xfc000006, "cex,>(b)", pa20w, FLAG_STRICT},
951{ "stw", 0x68000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
952{ "stw", 0x7c000004, 0xfc00c006, "cex,K(b)", pa20, FLAG_STRICT},
953{ "stw", 0x7c000004, 0xfc000006, "cex,K(s,b)", pa20, FLAG_STRICT},
954{ "stw", 0x6c000000, 0xfc00c000, "cex,J(b)", pa10, FLAG_STRICT},
955{ "stw", 0x6c000000, 0xfc000000, "cex,J(s,b)", pa10, FLAG_STRICT},
956{ "stw", 0x68000000, 0xfc00c000, "x,j(b)", pa10, 0},
957{ "stw", 0x68000000, 0xfc000000, "x,j(s,b)", pa10, 0},
958{ "sth", 0x0c001260, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
959{ "sth", 0x0c001260, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
960{ "sth", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
961{ "sth", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
962{ "sth", 0x0c001240, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
963{ "sth", 0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
964{ "sth", 0x64000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
965{ "sth", 0x64000000, 0xfc00c000, "x,j(b)", pa10, 0},
966{ "sth", 0x64000000, 0xfc000000, "x,j(s,b)", pa10, 0},
967{ "stb", 0x0c001220, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
968{ "stb", 0x0c001220, 0xfc0033ff, "cocCx,@(s,b)", pa20, FLAG_STRICT},
969{ "stb", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
970{ "stb", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
971{ "stb", 0x0c001200, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
972{ "stb", 0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
973{ "stb", 0x60000000, 0xfc000000, "x,l(b)", pa20w, FLAG_STRICT},
974{ "stb", 0x60000000, 0xfc00c000, "x,j(b)", pa10, 0},
975{ "stb", 0x60000000, 0xfc000000, "x,j(s,b)", pa10, 0},
976{ "ldwm", 0x4c000000, 0xfc00c000, "j(b),x", pa10, 0},
977{ "ldwm", 0x4c000000, 0xfc000000, "j(s,b),x", pa10, 0},
978{ "stwm", 0x6c000000, 0xfc00c000, "x,j(b)", pa10, 0},
979{ "stwm", 0x6c000000, 0xfc000000, "x,j(s,b)", pa10, 0},
980{ "ldwx", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
981{ "ldwx", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
982{ "ldwx", 0x0c000080, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
983{ "ldwx", 0x0c000080, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
984{ "ldwx", 0x0c000080, 0xfc00dfc0, "cXx(b),t", pa10, 0},
985{ "ldwx", 0x0c000080, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
986{ "ldhx", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
987{ "ldhx", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
988{ "ldhx", 0x0c000040, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
989{ "ldhx", 0x0c000040, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
990{ "ldhx", 0x0c000040, 0xfc00dfc0, "cXx(b),t", pa10, 0},
991{ "ldhx", 0x0c000040, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
992{ "ldbx", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
993{ "ldbx", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
994{ "ldbx", 0x0c000000, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
995{ "ldbx", 0x0c000000, 0xfc0013c0, "cxccx(s,b),t", pa11, FLAG_STRICT},
996{ "ldbx", 0x0c000000, 0xfc00dfc0, "cXx(b),t", pa10, 0},
997{ "ldbx", 0x0c000000, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
998{ "ldwa", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
999{ "ldwa", 0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
1000{ "ldwa", 0x0c0011a0, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
1001{ "ldwa", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
1002{ "ldwa", 0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
1003{ "ldcw", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
1004{ "ldcw", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
1005{ "ldcw", 0x0c0001c0, 0xfc00d3c0, "cxcdx(b),t", pa11, FLAG_STRICT},
1006{ "ldcw", 0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT},
1007{ "ldcw", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
1008{ "ldcw", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
1009{ "ldcw", 0x0c0011c0, 0xfc00d3c0, "cmcd5(b),t", pa11, FLAG_STRICT},
1010{ "ldcw", 0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT},
1011{ "stwa", 0x0c0013a0, 0xfc00d3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
1012{ "stwa", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
1013{ "stwa", 0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
1014{ "stby", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, FLAG_STRICT},
1015{ "stby", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT},
1016{ "stby", 0x0c001300, 0xfc00d3c0, "cscCx,V(b)", pa11, FLAG_STRICT},
1017{ "stby", 0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT},
1018{ "ldda", 0x0c000100, 0xfc00d3c0, "cxccx(b),t", pa20, FLAG_STRICT},
1019{ "ldda", 0x0c001120, 0xfc1ff3e0, "cocc@(b),t", pa20, FLAG_STRICT},
1020{ "ldda", 0x0c001100, 0xfc00d3c0, "cmcc5(b),t", pa20, FLAG_STRICT},
1021{ "ldcd", 0x0c000140, 0xfc00d3c0, "cxcdx(b),t", pa20, FLAG_STRICT},
1022{ "ldcd", 0x0c000140, 0xfc0013c0, "cxcdx(s,b),t", pa20, FLAG_STRICT},
1023{ "ldcd", 0x0c001140, 0xfc00d3c0, "cmcd5(b),t", pa20, FLAG_STRICT},
1024{ "ldcd", 0x0c001140, 0xfc0013c0, "cmcd5(s,b),t", pa20, FLAG_STRICT},
1025{ "stda", 0x0c0013e0, 0xfc00f3ff, "cocCx,@(b)", pa20, FLAG_STRICT},
1026{ "stda", 0x0c0013c0, 0xfc00d3c0, "cmcCx,V(b)", pa20, FLAG_STRICT},
1027{ "ldwax", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
1028{ "ldwax", 0x0c000180, 0xfc00d3c0, "cxccx(b),t", pa11, FLAG_STRICT},
1029{ "ldwax", 0x0c000180, 0xfc00dfc0, "cXx(b),t", pa10, 0},
1030{ "ldcwx", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, FLAG_STRICT},
1031{ "ldcwx", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, FLAG_STRICT},
1032{ "ldcwx", 0x0c0001c0, 0xfc00d3c0, "cxcdx(b),t", pa11, FLAG_STRICT},
1033{ "ldcwx", 0x0c0001c0, 0xfc0013c0, "cxcdx(s,b),t", pa11, FLAG_STRICT},
1034{ "ldcwx", 0x0c0001c0, 0xfc00dfc0, "cXx(b),t", pa10, 0},
1035{ "ldcwx", 0x0c0001c0, 0xfc001fc0, "cXx(s,b),t", pa10, 0},
1036{ "ldws", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
1037{ "ldws", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
1038{ "ldws", 0x0c001080, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
1039{ "ldws", 0x0c001080, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
1040{ "ldws", 0x0c001080, 0xfc00dfc0, "cM5(b),t", pa10, 0},
1041{ "ldws", 0x0c001080, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
1042{ "ldhs", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
1043{ "ldhs", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
1044{ "ldhs", 0x0c001040, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
1045{ "ldhs", 0x0c001040, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
1046{ "ldhs", 0x0c001040, 0xfc00dfc0, "cM5(b),t", pa10, 0},
1047{ "ldhs", 0x0c001040, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
1048{ "ldbs", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
1049{ "ldbs", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
1050{ "ldbs", 0x0c001000, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
1051{ "ldbs", 0x0c001000, 0xfc0013c0, "cmcc5(s,b),t", pa11, FLAG_STRICT},
1052{ "ldbs", 0x0c001000, 0xfc00dfc0, "cM5(b),t", pa10, 0},
1053{ "ldbs", 0x0c001000, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
1054{ "ldwas", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
1055{ "ldwas", 0x0c001180, 0xfc00d3c0, "cmcc5(b),t", pa11, FLAG_STRICT},
1056{ "ldwas", 0x0c001180, 0xfc00dfc0, "cM5(b),t", pa10, 0},
1057{ "ldcws", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, FLAG_STRICT},
1058{ "ldcws", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, FLAG_STRICT},
1059{ "ldcws", 0x0c0011c0, 0xfc00d3c0, "cmcd5(b),t", pa11, FLAG_STRICT},
1060{ "ldcws", 0x0c0011c0, 0xfc0013c0, "cmcd5(s,b),t", pa11, FLAG_STRICT},
1061{ "ldcws", 0x0c0011c0, 0xfc00dfc0, "cM5(b),t", pa10, 0},
1062{ "ldcws", 0x0c0011c0, 0xfc001fc0, "cM5(s,b),t", pa10, 0},
1063{ "stws", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
1064{ "stws", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
1065{ "stws", 0x0c001280, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
1066{ "stws", 0x0c001280, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
1067{ "stws", 0x0c001280, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
1068{ "stws", 0x0c001280, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
1069{ "sths", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
1070{ "sths", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
1071{ "sths", 0x0c001240, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
1072{ "sths", 0x0c001240, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
1073{ "sths", 0x0c001240, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
1074{ "sths", 0x0c001240, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
1075{ "stbs", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
1076{ "stbs", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, FLAG_STRICT},
1077{ "stbs", 0x0c001200, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
1078{ "stbs", 0x0c001200, 0xfc0013c0, "cmcCx,V(s,b)", pa11, FLAG_STRICT},
1079{ "stbs", 0x0c001200, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
1080{ "stbs", 0x0c001200, 0xfc001fc0, "cMx,V(s,b)", pa10, 0},
1081{ "stwas", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, FLAG_STRICT},
1082{ "stwas", 0x0c001380, 0xfc00d3c0, "cmcCx,V(b)", pa11, FLAG_STRICT},
1083{ "stwas", 0x0c001380, 0xfc00dfc0, "cMx,V(b)", pa10, 0},
1084{ "stdby", 0x0c001340, 0xfc00d3c0, "cscCx,V(b)", pa20, FLAG_STRICT},
1085{ "stdby", 0x0c001340, 0xfc0013c0, "cscCx,V(s,b)", pa20, FLAG_STRICT},
1086{ "stbys", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, FLAG_STRICT},
1087{ "stbys", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, FLAG_STRICT},
1088{ "stbys", 0x0c001300, 0xfc00d3c0, "cscCx,V(b)", pa11, FLAG_STRICT},
1089{ "stbys", 0x0c001300, 0xfc0013c0, "cscCx,V(s,b)", pa11, FLAG_STRICT},
1090{ "stbys", 0x0c001300, 0xfc00dfc0, "cAx,V(b)", pa10, 0},
1091{ "stbys", 0x0c001300, 0xfc001fc0, "cAx,V(s,b)", pa10, 0},
1092
1093
1094{ "ldo", 0x34000000, 0xfc000000, "l(b),x", pa20w, 0},
1095{ "ldo", 0x34000000, 0xfc00c000, "j(b),x", pa10, 0},
1096{ "ldil", 0x20000000, 0xfc000000, "k,b", pa10, 0},
1097{ "addil", 0x28000000, 0xfc000000, "k,b,Z", pa10, 0},
1098{ "addil", 0x28000000, 0xfc000000, "k,b", pa10, 0},
1099
1100
1101{ "b", 0xe8008000, 0xfc00e000, "cpnXL", pa20, FLAG_STRICT},
1102{ "b", 0xe800a000, 0xfc00e000, "clnXL", pa20, FLAG_STRICT},
1103{ "b", 0xe8000000, 0xfc00e000, "clnW,b", pa10, FLAG_STRICT},
1104{ "b", 0xe8002000, 0xfc00e000, "cgnW,b", pa10, FLAG_STRICT},
1105{ "b", 0xe8000000, 0xffe0e000, "nW", pa10, 0},
1106{ "bl", 0xe8000000, 0xfc00e000, "nW,b", pa10, 0},
1107{ "gate", 0xe8002000, 0xfc00e000, "nW,b", pa10, 0},
1108{ "blr", 0xe8004000, 0xfc00e001, "nx,b", pa10, 0},
1109{ "bv", 0xe800c000, 0xfc00fffd, "nx(b)", pa10, 0},
1110{ "bv", 0xe800c000, 0xfc00fffd, "n(b)", pa10, 0},
1111{ "bve", 0xe800f001, 0xfc1ffffd, "cpn(b)L", pa20, FLAG_STRICT},
1112{ "bve", 0xe800f000, 0xfc1ffffd, "cln(b)L", pa20, FLAG_STRICT},
1113{ "bve", 0xe800d001, 0xfc1ffffd, "cPn(b)", pa20, FLAG_STRICT},
1114{ "bve", 0xe800d000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT},
1115{ "be", 0xe4000000, 0xfc000000, "clnz(S,b),Y", pa10, FLAG_STRICT},
1116{ "be", 0xe4000000, 0xfc000000, "clnz(b),Y", pa10, FLAG_STRICT},
1117{ "be", 0xe0000000, 0xfc000000, "nz(S,b)", pa10, 0},
1118{ "be", 0xe0000000, 0xfc000000, "nz(b)", pa10, 0},
1119{ "ble", 0xe4000000, 0xfc000000, "nz(S,b)", pa10, 0},
1120{ "movb", 0xc8000000, 0xfc000000, "?ynx,b,w", pa10, 0},
1121{ "movib", 0xcc000000, 0xfc000000, "?yn5,b,w", pa10, 0},
1122{ "combt", 0x80000000, 0xfc000000, "?tnx,b,w", pa10, 0},
1123{ "combf", 0x88000000, 0xfc000000, "?tnx,b,w", pa10, 0},
1124{ "comibt", 0x84000000, 0xfc000000, "?tn5,b,w", pa10, 0},
1125{ "comibf", 0x8c000000, 0xfc000000, "?tn5,b,w", pa10, 0},
1126{ "addbt", 0xa0000000, 0xfc000000, "?dnx,b,w", pa10, 0},
1127{ "addbf", 0xa8000000, 0xfc000000, "?dnx,b,w", pa10, 0},
1128{ "addibt", 0xa4000000, 0xfc000000, "?dn5,b,w", pa10, 0},
1129{ "addibf", 0xac000000, 0xfc000000, "?dn5,b,w", pa10, 0},
1130{ "bb", 0xc0004000, 0xffe06000, "?bnx,!,w", pa10, FLAG_STRICT},
1131{ "bb", 0xc0006000, 0xffe06000, "?Bnx,!,w", pa20, FLAG_STRICT},
1132{ "bb", 0xc4004000, 0xfc006000, "?bnx,Q,w", pa10, FLAG_STRICT},
1133{ "bb", 0xc4004000, 0xfc004000, "?Bnx,B,w", pa20, FLAG_STRICT},
1134{ "bvb", 0xc0004000, 0xffe04000, "?bnx,w", pa10, 0},
1135{ "clrbts", 0xe8004005, 0xffffffff, "", pa20, FLAG_STRICT},
1136{ "popbts", 0xe8004005, 0xfffff007, "$", pa20, FLAG_STRICT},
1137{ "pushnom", 0xe8004001, 0xffffffff, "", pa20, FLAG_STRICT},
1138{ "pushbts", 0xe8004001, 0xffe0ffff, "x", pa20, FLAG_STRICT},
1139
1140
1141
1142{ "cmpclr", 0x080008a0, 0xfc000fe0, "?Sx,b,t", pa20, FLAG_STRICT},
1143{ "cmpclr", 0x08000880, 0xfc000fe0, "?sx,b,t", pa10, FLAG_STRICT},
1144{ "comclr", 0x08000880, 0xfc000fe0, "?sx,b,t", pa10, 0},
1145{ "or", 0x08000260, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
1146{ "or", 0x08000240, 0xfc000fe0, "?lx,b,t", pa10, 0},
1147{ "xor", 0x080002a0, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
1148{ "xor", 0x08000280, 0xfc000fe0, "?lx,b,t", pa10, 0},
1149{ "and", 0x08000220, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
1150{ "and", 0x08000200, 0xfc000fe0, "?lx,b,t", pa10, 0},
1151{ "andcm", 0x08000020, 0xfc000fe0, "?Lx,b,t", pa20, FLAG_STRICT},
1152{ "andcm", 0x08000000, 0xfc000fe0, "?lx,b,t", pa10, 0},
1153{ "uxor", 0x080003a0, 0xfc000fe0, "?Ux,b,t", pa20, FLAG_STRICT},
1154{ "uxor", 0x08000380, 0xfc000fe0, "?ux,b,t", pa10, 0},
1155{ "uaddcm", 0x080009a0, 0xfc000fa0, "cT?Ux,b,t", pa20, FLAG_STRICT},
1156{ "uaddcm", 0x08000980, 0xfc000fa0, "cT?ux,b,t", pa10, FLAG_STRICT},
1157{ "uaddcm", 0x08000980, 0xfc000fe0, "?ux,b,t", pa10, 0},
1158{ "uaddcmt", 0x080009c0, 0xfc000fe0, "?ux,b,t", pa10, 0},
1159{ "dcor", 0x08000ba0, 0xfc1f0fa0, "ci?Ub,t", pa20, FLAG_STRICT},
1160{ "dcor", 0x08000b80, 0xfc1f0fa0, "ci?ub,t", pa10, FLAG_STRICT},
1161{ "dcor", 0x08000b80, 0xfc1f0fe0, "?ub,t", pa10, 0},
1162{ "idcor", 0x08000bc0, 0xfc1f0fe0, "?ub,t", pa10, 0},
1163{ "addi", 0xb0000000, 0xfc000000, "ct?ai,b,x", pa10, FLAG_STRICT},
1164{ "addi", 0xb4000000, 0xfc000000, "cv?ai,b,x", pa10, FLAG_STRICT},
1165{ "addi", 0xb4000000, 0xfc000800, "?ai,b,x", pa10, 0},
1166{ "addio", 0xb4000800, 0xfc000800, "?ai,b,x", pa10, 0},
1167{ "addit", 0xb0000000, 0xfc000800, "?ai,b,x", pa10, 0},
1168{ "addito", 0xb0000800, 0xfc000800, "?ai,b,x", pa10, 0},
1169{ "add", 0x08000720, 0xfc0007e0, "cY?Ax,b,t", pa20, FLAG_STRICT},
1170{ "add", 0x08000700, 0xfc0007e0, "cy?ax,b,t", pa10, FLAG_STRICT},
1171{ "add", 0x08000220, 0xfc0003e0, "ca?Ax,b,t", pa20, FLAG_STRICT},
1172{ "add", 0x08000200, 0xfc0003e0, "ca?ax,b,t", pa10, FLAG_STRICT},
1173{ "add", 0x08000600, 0xfc000fe0, "?ax,b,t", pa10, 0},
1174{ "addl", 0x08000a00, 0xfc000fe0, "?ax,b,t", pa10, 0},
1175{ "addo", 0x08000e00, 0xfc000fe0, "?ax,b,t", pa10, 0},
1176{ "addc", 0x08000700, 0xfc000fe0, "?ax,b,t", pa10, 0},
1177{ "addco", 0x08000f00, 0xfc000fe0, "?ax,b,t", pa10, 0},
1178{ "sub", 0x080004e0, 0xfc0007e0, "ct?Sx,b,t", pa20, FLAG_STRICT},
1179{ "sub", 0x080004c0, 0xfc0007e0, "ct?sx,b,t", pa10, FLAG_STRICT},
1180{ "sub", 0x08000520, 0xfc0007e0, "cB?Sx,b,t", pa20, FLAG_STRICT},
1181{ "sub", 0x08000500, 0xfc0007e0, "cb?sx,b,t", pa10, FLAG_STRICT},
1182{ "sub", 0x08000420, 0xfc0007e0, "cv?Sx,b,t", pa20, FLAG_STRICT},
1183{ "sub", 0x08000400, 0xfc0007e0, "cv?sx,b,t", pa10, FLAG_STRICT},
1184{ "sub", 0x08000400, 0xfc000fe0, "?sx,b,t", pa10, 0},
1185{ "subo", 0x08000c00, 0xfc000fe0, "?sx,b,t", pa10, 0},
1186{ "subb", 0x08000500, 0xfc000fe0, "?sx,b,t", pa10, 0},
1187{ "subbo", 0x08000d00, 0xfc000fe0, "?sx,b,t", pa10, 0},
1188{ "subt", 0x080004c0, 0xfc000fe0, "?sx,b,t", pa10, 0},
1189{ "subto", 0x08000cc0, 0xfc000fe0, "?sx,b,t", pa10, 0},
1190{ "ds", 0x08000440, 0xfc000fe0, "?sx,b,t", pa10, 0},
1191{ "subi", 0x94000000, 0xfc000000, "cv?si,b,x", pa10, FLAG_STRICT},
1192{ "subi", 0x94000000, 0xfc000800, "?si,b,x", pa10, 0},
1193{ "subio", 0x94000800, 0xfc000800, "?si,b,x", pa10, 0},
1194{ "cmpiclr", 0x90000800, 0xfc000800, "?Si,b,x", pa20, FLAG_STRICT},
1195{ "cmpiclr", 0x90000000, 0xfc000800, "?si,b,x", pa10, FLAG_STRICT},
1196{ "comiclr", 0x90000000, 0xfc000800, "?si,b,x", pa10, 0},
1197{ "shladd", 0x08000220, 0xfc000320, "ca?Ax,.,b,t", pa20, FLAG_STRICT},
1198{ "shladd", 0x08000200, 0xfc000320, "ca?ax,.,b,t", pa10, FLAG_STRICT},
1199{ "sh1add", 0x08000640, 0xfc000fe0, "?ax,b,t", pa10, 0},
1200{ "sh1addl", 0x08000a40, 0xfc000fe0, "?ax,b,t", pa10, 0},
1201{ "sh1addo", 0x08000e40, 0xfc000fe0, "?ax,b,t", pa10, 0},
1202{ "sh2add", 0x08000680, 0xfc000fe0, "?ax,b,t", pa10, 0},
1203{ "sh2addl", 0x08000a80, 0xfc000fe0, "?ax,b,t", pa10, 0},
1204{ "sh2addo", 0x08000e80, 0xfc000fe0, "?ax,b,t", pa10, 0},
1205{ "sh3add", 0x080006c0, 0xfc000fe0, "?ax,b,t", pa10, 0},
1206{ "sh3addl", 0x08000ac0, 0xfc000fe0, "?ax,b,t", pa10, 0},
1207{ "sh3addo", 0x08000ec0, 0xfc000fe0, "?ax,b,t", pa10, 0},
1208
1209
1210
1211{ "hadd", 0x08000300, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
1212{ "havg", 0x080002c0, 0xfc00ffe0, "x,b,t", pa20, FLAG_STRICT},
1213{ "hshl", 0xf8008800, 0xffe0fc20, "x,*,t", pa20, FLAG_STRICT},
1214{ "hshladd", 0x08000700, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
1215{ "hshr", 0xf800c800, 0xfc1ff820, "cSb,*,t", pa20, FLAG_STRICT},
1216{ "hshradd", 0x08000500, 0xfc00ff20, "x,.,b,t", pa20, FLAG_STRICT},
1217{ "hsub", 0x08000100, 0xfc00ff20, "cHx,b,t", pa20, FLAG_STRICT},
1218{ "mixh", 0xf8008400, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
1219{ "mixw", 0xf8008000, 0xfc009fe0, "chx,b,t", pa20, FLAG_STRICT},
1220{ "permh", 0xf8000000, 0xfc009020, "c*a,t", pa20, FLAG_STRICT},
1221
1222
1223
1224
1225{ "shrpd", 0xd0000200, 0xfc001fe0, "?Xx,b,!,t", pa20, FLAG_STRICT},
1226{ "shrpd", 0xd0000400, 0xfc001400, "?Xx,b,~,t", pa20, FLAG_STRICT},
1227{ "shrpw", 0xd0000000, 0xfc001fe0, "?xx,b,!,t", pa10, FLAG_STRICT},
1228{ "shrpw", 0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, FLAG_STRICT},
1229{ "vshd", 0xd0000000, 0xfc001fe0, "?xx,b,t", pa10, 0},
1230{ "shd", 0xd0000800, 0xfc001c00, "?xx,b,p,t", pa10, 0},
1231{ "extrd", 0xd0001200, 0xfc001ae0, "cS?Xb,!,%,x", pa20, FLAG_STRICT},
1232{ "extrd", 0xd8000000, 0xfc000000, "cS?Xb,q,|,x", pa20, FLAG_STRICT},
1233{ "extrw", 0xd0001000, 0xfc001be0, "cS?xb,!,T,x", pa10, FLAG_STRICT},
1234{ "extrw", 0xd0001800, 0xfc001800, "cS?xb,P,T,x", pa10, FLAG_STRICT},
1235{ "vextru", 0xd0001000, 0xfc001fe0, "?xb,T,x", pa10, 0},
1236{ "vextrs", 0xd0001400, 0xfc001fe0, "?xb,T,x", pa10, 0},
1237{ "extru", 0xd0001800, 0xfc001c00, "?xb,P,T,x", pa10, 0},
1238{ "extrs", 0xd0001c00, 0xfc001c00, "?xb,P,T,x", pa10, 0},
1239{ "depd", 0xd4000200, 0xfc001ae0, "cz?Xx,!,%,b", pa20, FLAG_STRICT},
1240{ "depd", 0xf0000000, 0xfc000000, "cz?Xx,~,|,b", pa20, FLAG_STRICT},
1241{ "depdi", 0xd4001200, 0xfc001ae0, "cz?X5,!,%,b", pa20, FLAG_STRICT},
1242{ "depdi", 0xf4000000, 0xfc000000, "cz?X5,~,|,b", pa20, FLAG_STRICT},
1243{ "depw", 0xd4000000, 0xfc001be0, "cz?xx,!,T,b", pa10, FLAG_STRICT},
1244{ "depw", 0xd4000800, 0xfc001800, "cz?xx,p,T,b", pa10, FLAG_STRICT},
1245{ "depwi", 0xd4001000, 0xfc001be0, "cz?x5,!,T,b", pa10, FLAG_STRICT},
1246{ "depwi", 0xd4001800, 0xfc001800, "cz?x5,p,T,b", pa10, FLAG_STRICT},
1247{ "zvdep", 0xd4000000, 0xfc001fe0, "?xx,T,b", pa10, 0},
1248{ "vdep", 0xd4000400, 0xfc001fe0, "?xx,T,b", pa10, 0},
1249{ "zdep", 0xd4000800, 0xfc001c00, "?xx,p,T,b", pa10, 0},
1250{ "dep", 0xd4000c00, 0xfc001c00, "?xx,p,T,b", pa10, 0},
1251{ "zvdepi", 0xd4001000, 0xfc001fe0, "?x5,T,b", pa10, 0},
1252{ "vdepi", 0xd4001400, 0xfc001fe0, "?x5,T,b", pa10, 0},
1253{ "zdepi", 0xd4001800, 0xfc001c00, "?x5,p,T,b", pa10, 0},
1254{ "depi", 0xd4001c00, 0xfc001c00, "?x5,p,T,b", pa10, 0},
1255
1256
1257
1258{ "break", 0x00000000, 0xfc001fe0, "r,A", pa10, 0},
1259{ "rfi", 0x00000c00, 0xffffff1f, "cr", pa10, FLAG_STRICT},
1260{ "rfi", 0x00000c00, 0xffffffff, "", pa10, 0},
1261{ "rfir", 0x00000ca0, 0xffffffff, "", pa11, 0},
1262{ "ssm", 0x00000d60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
1263{ "ssm", 0x00000d60, 0xffe0ffe0, "R,t", pa10, 0},
1264{ "rsm", 0x00000e60, 0xfc00ffe0, "U,t", pa20, FLAG_STRICT},
1265{ "rsm", 0x00000e60, 0xffe0ffe0, "R,t", pa10, 0},
1266{ "mtsm", 0x00001860, 0xffe0ffff, "x", pa10, 0},
1267{ "ldsid", 0x000010a0, 0xfc1fffe0, "(b),t", pa10, 0},
1268{ "ldsid", 0x000010a0, 0xfc1f3fe0, "(s,b),t", pa10, 0},
1269{ "mtsp", 0x00001820, 0xffe01fff, "x,S", pa10, 0},
1270{ "mtctl", 0x00001840, 0xfc00ffff, "x,^", pa10, 0},
1271{ "mtsarcm", 0x016018C0, 0xffe0ffff, "x", pa20, FLAG_STRICT},
1272{ "mfia", 0x000014A0, 0xffffffe0, "t", pa20, FLAG_STRICT},
1273{ "mfsp", 0x000004a0, 0xffff1fe0, "S,t", pa10, 0},
1274{ "mfctl", 0x016048a0, 0xffffffe0, "cW!,t", pa20, FLAG_STRICT},
1275{ "mfctl", 0x000008a0, 0xfc1fffe0, "^,t", pa10, 0},
1276{ "sync", 0x00000400, 0xffffffff, "", pa10, 0},
1277{ "syncdma", 0x00100400, 0xffffffff, "", pa10, 0},
1278{ "probe", 0x04001180, 0xfc00ffa0, "cw(b),x,t", pa10, FLAG_STRICT},
1279{ "probe", 0x04001180, 0xfc003fa0, "cw(s,b),x,t", pa10, FLAG_STRICT},
1280{ "probei", 0x04003180, 0xfc00ffa0, "cw(b),R,t", pa10, FLAG_STRICT},
1281{ "probei", 0x04003180, 0xfc003fa0, "cw(s,b),R,t", pa10, FLAG_STRICT},
1282{ "prober", 0x04001180, 0xfc00ffe0, "(b),x,t", pa10, 0},
1283{ "prober", 0x04001180, 0xfc003fe0, "(s,b),x,t", pa10, 0},
1284{ "proberi", 0x04003180, 0xfc00ffe0, "(b),R,t", pa10, 0},
1285{ "proberi", 0x04003180, 0xfc003fe0, "(s,b),R,t", pa10, 0},
1286{ "probew", 0x040011c0, 0xfc00ffe0, "(b),x,t", pa10, 0},
1287{ "probew", 0x040011c0, 0xfc003fe0, "(s,b),x,t", pa10, 0},
1288{ "probewi", 0x040031c0, 0xfc00ffe0, "(b),R,t", pa10, 0},
1289{ "probewi", 0x040031c0, 0xfc003fe0, "(s,b),R,t", pa10, 0},
1290{ "lpa", 0x04001340, 0xfc00ffc0, "cZx(b),t", pa10, 0},
1291{ "lpa", 0x04001340, 0xfc003fc0, "cZx(s,b),t", pa10, 0},
1292{ "lci", 0x04001300, 0xfc00ffe0, "x(b),t", pa11, 0},
1293{ "lci", 0x04001300, 0xfc003fe0, "x(s,b),t", pa11, 0},
1294{ "pdtlb", 0x04001600, 0xfc00ffdf, "cLcZx(b)", pa20, FLAG_STRICT},
1295{ "pdtlb", 0x04001600, 0xfc003fdf, "cLcZx(s,b)", pa20, FLAG_STRICT},
1296{ "pdtlb", 0x04001600, 0xfc1fffdf, "cLcZ@(b)", pa20, FLAG_STRICT},
1297{ "pdtlb", 0x04001600, 0xfc1f3fdf, "cLcZ@(s,b)", pa20, FLAG_STRICT},
1298{ "pdtlb", 0x04001200, 0xfc00ffdf, "cZx(b)", pa10, 0},
1299{ "pdtlb", 0x04001200, 0xfc003fdf, "cZx(s,b)", pa10, 0},
1300{ "pitlb", 0x04000600, 0xfc001fdf, "cLcZx(S,b)", pa20, FLAG_STRICT},
1301{ "pitlb", 0x04000600, 0xfc1f1fdf, "cLcZ@(S,b)", pa20, FLAG_STRICT},
1302{ "pitlb", 0x04000200, 0xfc001fdf, "cZx(S,b)", pa10, 0},
1303{ "pdtlbe", 0x04001240, 0xfc00ffdf, "cZx(b)", pa10, 0},
1304{ "pdtlbe", 0x04001240, 0xfc003fdf, "cZx(s,b)", pa10, 0},
1305{ "pitlbe", 0x04000240, 0xfc001fdf, "cZx(S,b)", pa10, 0},
1306{ "idtlba", 0x04001040, 0xfc00ffff, "x,(b)", pa10, 0},
1307{ "idtlba", 0x04001040, 0xfc003fff, "x,(s,b)", pa10, 0},
1308{ "iitlba", 0x04000040, 0xfc001fff, "x,(S,b)", pa10, 0},
1309{ "idtlbp", 0x04001000, 0xfc00ffff, "x,(b)", pa10, 0},
1310{ "idtlbp", 0x04001000, 0xfc003fff, "x,(s,b)", pa10, 0},
1311{ "iitlbp", 0x04000000, 0xfc001fff, "x,(S,b)", pa10, 0},
1312{ "pdc", 0x04001380, 0xfc00ffdf, "cZx(b)", pa10, 0},
1313{ "pdc", 0x04001380, 0xfc003fdf, "cZx(s,b)", pa10, 0},
1314{ "fdc", 0x04001280, 0xfc00ffdf, "cZx(b)", pa10, FLAG_STRICT},
1315{ "fdc", 0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, FLAG_STRICT},
1316{ "fdc", 0x04003280, 0xfc00ffff, "5(b)", pa20, FLAG_STRICT},
1317{ "fdc", 0x04003280, 0xfc003fff, "5(s,b)", pa20, FLAG_STRICT},
1318{ "fdc", 0x04001280, 0xfc00ffdf, "cZx(b)", pa10, 0},
1319{ "fdc", 0x04001280, 0xfc003fdf, "cZx(s,b)", pa10, 0},
1320{ "fic", 0x040013c0, 0xfc00dfdf, "cZx(b)", pa20, FLAG_STRICT},
1321{ "fic", 0x04000280, 0xfc001fdf, "cZx(S,b)", pa10, 0},
1322{ "fdce", 0x040012c0, 0xfc00ffdf, "cZx(b)", pa10, 0},
1323{ "fdce", 0x040012c0, 0xfc003fdf, "cZx(s,b)", pa10, 0},
1324{ "fice", 0x040002c0, 0xfc001fdf, "cZx(S,b)", pa10, 0},
1325{ "diag", 0x14000000, 0xfc000000, "D", pa10, 0},
1326{ "idtlbt", 0x04001800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
1327{ "iitlbt", 0x04000800, 0xfc00ffff, "x,b", pa20, FLAG_STRICT},
1328
1329
1330
1331
1332{ "mtcpu", 0x14001600, 0xfc00ffff, "x,^", pa10, 0},
1333{ "mfcpu", 0x14001A00, 0xfc00ffff, "^,x", pa10, 0},
1334{ "tocen", 0x14403600, 0xffffffff, "", pa10, 0},
1335{ "tocdis", 0x14401620, 0xffffffff, "", pa10, 0},
1336{ "shdwgr", 0x14402600, 0xffffffff, "", pa10, 0},
1337{ "grshdw", 0x14400620, 0xffffffff, "", pa10, 0},
1338
1339
1340
1341{ "gfw", 0x04001680, 0xfc00ffdf, "cZx(b)", pa11, 0},
1342{ "gfw", 0x04001680, 0xfc003fdf, "cZx(s,b)", pa11, 0},
1343{ "gfr", 0x04001a80, 0xfc00ffdf, "cZx(b)", pa11, 0},
1344{ "gfr", 0x04001a80, 0xfc003fdf, "cZx(s,b)", pa11, 0},
1345
1346
1347
1348{ "fldw", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, FLAG_STRICT},
1349{ "fldw", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT},
1350{ "fldw", 0x24000000, 0xfc00d380, "cxccx(b),fT", pa11, FLAG_STRICT},
1351{ "fldw", 0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT},
1352{ "fldw", 0x24001020, 0xfc1ff3a0, "cocc@(b),fT", pa20, FLAG_STRICT},
1353{ "fldw", 0x24001020, 0xfc1f33a0, "cocc@(s,b),fT", pa20, FLAG_STRICT},
1354{ "fldw", 0x24001000, 0xfc00df80, "cM5(b),fT", pa10, FLAG_STRICT},
1355{ "fldw", 0x24001000, 0xfc001f80, "cM5(s,b),fT", pa10, FLAG_STRICT},
1356{ "fldw", 0x24001000, 0xfc00d380, "cmcc5(b),fT", pa11, FLAG_STRICT},
1357{ "fldw", 0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT},
1358{ "fldw", 0x5c000000, 0xfc000004, "y(b),fe", pa20w, FLAG_STRICT},
1359{ "fldw", 0x58000000, 0xfc000000, "cJy(b),fe", pa20w, FLAG_STRICT},
1360{ "fldw", 0x5c000000, 0xfc00c004, "d(b),fe", pa20, FLAG_STRICT},
1361{ "fldw", 0x5c000000, 0xfc000004, "d(s,b),fe", pa20, FLAG_STRICT},
1362{ "fldw", 0x58000000, 0xfc00c000, "cJd(b),fe", pa20, FLAG_STRICT},
1363{ "fldw", 0x58000000, 0xfc000000, "cJd(s,b),fe", pa20, FLAG_STRICT},
1364{ "fldd", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, FLAG_STRICT},
1365{ "fldd", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT},
1366{ "fldd", 0x2c000000, 0xfc00d3c0, "cxccx(b),ft", pa11, FLAG_STRICT},
1367{ "fldd", 0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT},
1368{ "fldd", 0x2c001020, 0xfc1ff3e0, "cocc@(b),ft", pa20, FLAG_STRICT},
1369{ "fldd", 0x2c001020, 0xfc1f33e0, "cocc@(s,b),ft", pa20, FLAG_STRICT},
1370{ "fldd", 0x2c001000, 0xfc00dfc0, "cM5(b),ft", pa10, FLAG_STRICT},
1371{ "fldd", 0x2c001000, 0xfc001fc0, "cM5(s,b),ft", pa10, FLAG_STRICT},
1372{ "fldd", 0x2c001000, 0xfc00d3c0, "cmcc5(b),ft", pa11, FLAG_STRICT},
1373{ "fldd", 0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT},
1374{ "fldd", 0x50000002, 0xfc000002, "cq&(b),fx", pa20w, FLAG_STRICT},
1375{ "fldd", 0x50000002, 0xfc00c002, "cq#(b),fx", pa20, FLAG_STRICT},
1376{ "fldd", 0x50000002, 0xfc000002, "cq#(s,b),fx", pa20, FLAG_STRICT},
1377{ "fstw", 0x24000200, 0xfc00df80, "cXfT,x(b)", pa10, FLAG_STRICT},
1378{ "fstw", 0x24000200, 0xfc001f80, "cXfT,x(s,b)", pa10, FLAG_STRICT},
1379{ "fstw", 0x24000200, 0xfc00d380, "cxcCfT,x(b)", pa11, FLAG_STRICT},
1380{ "fstw", 0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT},
1381{ "fstw", 0x24001220, 0xfc1ff3a0, "cocCfT,@(b)", pa20, FLAG_STRICT},
1382{ "fstw", 0x24001220, 0xfc1f33a0, "cocCfT,@(s,b)", pa20, FLAG_STRICT},
1383{ "fstw", 0x24001200, 0xfc00df80, "cMfT,5(b)", pa10, FLAG_STRICT},
1384{ "fstw", 0x24001200, 0xfc001f80, "cMfT,5(s,b)", pa10, FLAG_STRICT},
1385{ "fstw", 0x24001200, 0xfc00df80, "cMfT,5(b)", pa10, FLAG_STRICT},
1386{ "fstw", 0x24001200, 0xfc001f80, "cMfT,5(s,b)", pa10, FLAG_STRICT},
1387{ "fstw", 0x7c000000, 0xfc000004, "fE,y(b)", pa20w, FLAG_STRICT},
1388{ "fstw", 0x78000000, 0xfc000000, "cJfE,y(b)", pa20w, FLAG_STRICT},
1389{ "fstw", 0x7c000000, 0xfc00c004, "fE,d(b)", pa20, FLAG_STRICT},
1390{ "fstw", 0x7c000000, 0xfc000004, "fE,d(s,b)", pa20, FLAG_STRICT},
1391{ "fstw", 0x78000000, 0xfc00c000, "cJfE,d(b)", pa20, FLAG_STRICT},
1392{ "fstw", 0x78000000, 0xfc000000, "cJfE,d(s,b)", pa20, FLAG_STRICT},
1393{ "fstd", 0x2c000200, 0xfc00dfc0, "cXft,x(b)", pa10, FLAG_STRICT},
1394{ "fstd", 0x2c000200, 0xfc001fc0, "cXft,x(s,b)", pa10, FLAG_STRICT},
1395{ "fstd", 0x2c000200, 0xfc00d3c0, "cxcCft,x(b)", pa11, FLAG_STRICT},
1396{ "fstd", 0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT},
1397{ "fstd", 0x2c001220, 0xfc1ff3e0, "cocCft,@(b)", pa20, FLAG_STRICT},
1398{ "fstd", 0x2c001220, 0xfc1f33e0, "cocCft,@(s,b)", pa20, FLAG_STRICT},
1399{ "fstd", 0x2c001200, 0xfc00dfc0, "cMft,5(b)", pa10, FLAG_STRICT},
1400{ "fstd", 0x2c001200, 0xfc001fc0, "cMft,5(s,b)", pa10, FLAG_STRICT},
1401{ "fstd", 0x2c001200, 0xfc00d3c0, "cmcCft,5(b)", pa11, FLAG_STRICT},
1402{ "fstd", 0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT},
1403{ "fstd", 0x70000002, 0xfc000002, "cqfx,&(b)", pa20w, FLAG_STRICT},
1404{ "fstd", 0x70000002, 0xfc00c002, "cqfx,#(b)", pa20, FLAG_STRICT},
1405{ "fstd", 0x70000002, 0xfc000002, "cqfx,#(s,b)", pa20, FLAG_STRICT},
1406{ "fldwx", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, FLAG_STRICT},
1407{ "fldwx", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, FLAG_STRICT},
1408{ "fldwx", 0x24000000, 0xfc00d380, "cxccx(b),fT", pa11, FLAG_STRICT},
1409{ "fldwx", 0x24000000, 0xfc001380, "cxccx(s,b),fT", pa11, FLAG_STRICT},
1410{ "fldwx", 0x24000000, 0xfc00df80, "cXx(b),fT", pa10, 0},
1411{ "fldwx", 0x24000000, 0xfc001f80, "cXx(s,b),fT", pa10, 0},
1412{ "flddx", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, FLAG_STRICT},
1413{ "flddx", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, FLAG_STRICT},
1414{ "flddx", 0x2c000000, 0xfc00d3c0, "cxccx(b),ft", pa11, FLAG_STRICT},
1415{ "flddx", 0x2c000000, 0xfc0013c0, "cxccx(s,b),ft", pa11, FLAG_STRICT},
1416{ "flddx", 0x2c000000, 0xfc00dfc0, "cXx(b),ft", pa10, 0},
1417{ "flddx", 0x2c000000, 0xfc001fc0, "cXx(s,b),ft", pa10, 0},
1418{ "fstwx", 0x24000200, 0xfc00df80, "cxfT,x(b)", pa10, FLAG_STRICT},
1419{ "fstwx", 0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, FLAG_STRICT},
1420{ "fstwx", 0x24000200, 0xfc00d380, "cxcCfT,x(b)", pa11, FLAG_STRICT},
1421{ "fstwx", 0x24000200, 0xfc001380, "cxcCfT,x(s,b)", pa11, FLAG_STRICT},
1422{ "fstwx", 0x24000200, 0xfc00df80, "cxfT,x(b)", pa10, 0},
1423{ "fstwx", 0x24000200, 0xfc001f80, "cxfT,x(s,b)", pa10, 0},
1424{ "fstdx", 0x2c000200, 0xfc00dfc0, "cxft,x(b)", pa10, FLAG_STRICT},
1425{ "fstdx", 0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, FLAG_STRICT},
1426{ "fstdx", 0x2c000200, 0xfc00d3c0, "cxcCft,x(b)", pa11, FLAG_STRICT},
1427{ "fstdx", 0x2c000200, 0xfc0013c0, "cxcCft,x(s,b)", pa11, FLAG_STRICT},
1428{ "fstdx", 0x2c000200, 0xfc00dfc0, "cxft,x(b)", pa10, 0},
1429{ "fstdx", 0x2c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0},
1430{ "fstqx", 0x3c000200, 0xfc00dfc0, "cxft,x(b)", pa10, 0},
1431{ "fstqx", 0x3c000200, 0xfc001fc0, "cxft,x(s,b)", pa10, 0},
1432{ "fldws", 0x24001000, 0xfc00df80, "cm5(b),fT", pa10, FLAG_STRICT},
1433{ "fldws", 0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, FLAG_STRICT},
1434{ "fldws", 0x24001000, 0xfc00d380, "cmcc5(b),fT", pa11, FLAG_STRICT},
1435{ "fldws", 0x24001000, 0xfc001380, "cmcc5(s,b),fT", pa11, FLAG_STRICT},
1436{ "fldws", 0x24001000, 0xfc00df80, "cm5(b),fT", pa10, 0},
1437{ "fldws", 0x24001000, 0xfc001f80, "cm5(s,b),fT", pa10, 0},
1438{ "fldds", 0x2c001000, 0xfc00dfc0, "cm5(b),ft", pa10, FLAG_STRICT},
1439{ "fldds", 0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, FLAG_STRICT},
1440{ "fldds", 0x2c001000, 0xfc00d3c0, "cmcc5(b),ft", pa11, FLAG_STRICT},
1441{ "fldds", 0x2c001000, 0xfc0013c0, "cmcc5(s,b),ft", pa11, FLAG_STRICT},
1442{ "fldds", 0x2c001000, 0xfc00dfc0, "cm5(b),ft", pa10, 0},
1443{ "fldds", 0x2c001000, 0xfc001fc0, "cm5(s,b),ft", pa10, 0},
1444{ "fstws", 0x24001200, 0xfc00df80, "cmfT,5(b)", pa10, FLAG_STRICT},
1445{ "fstws", 0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, FLAG_STRICT},
1446{ "fstws", 0x24001200, 0xfc00d380, "cmcCfT,5(b)", pa11, FLAG_STRICT},
1447{ "fstws", 0x24001200, 0xfc001380, "cmcCfT,5(s,b)", pa11, FLAG_STRICT},
1448{ "fstws", 0x24001200, 0xfc00df80, "cmfT,5(b)", pa10, 0},
1449{ "fstws", 0x24001200, 0xfc001f80, "cmfT,5(s,b)", pa10, 0},
1450{ "fstds", 0x2c001200, 0xfc00dfc0, "cmft,5(b)", pa10, FLAG_STRICT},
1451{ "fstds", 0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, FLAG_STRICT},
1452{ "fstds", 0x2c001200, 0xfc00d3c0, "cmcCft,5(b)", pa11, FLAG_STRICT},
1453{ "fstds", 0x2c001200, 0xfc0013c0, "cmcCft,5(s,b)", pa11, FLAG_STRICT},
1454{ "fstds", 0x2c001200, 0xfc00dfc0, "cmft,5(b)", pa10, 0},
1455{ "fstds", 0x2c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0},
1456{ "fstqs", 0x3c001200, 0xfc00dfc0, "cmft,5(b)", pa10, 0},
1457{ "fstqs", 0x3c001200, 0xfc001fc0, "cmft,5(s,b)", pa10, 0},
1458{ "fadd", 0x30000600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
1459{ "fadd", 0x38000600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
1460{ "fsub", 0x30002600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
1461{ "fsub", 0x38002600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
1462{ "fmpy", 0x30004600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
1463{ "fmpy", 0x38004600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
1464{ "fdiv", 0x30006600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
1465{ "fdiv", 0x38006600, 0xfc00e720, "IfA,fB,fT", pa10, 0},
1466{ "fsqrt", 0x30008000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
1467{ "fsqrt", 0x38008000, 0xfc1fe720, "FfA,fT", pa10, 0},
1468{ "fabs", 0x30006000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
1469{ "fabs", 0x38006000, 0xfc1fe720, "FfA,fT", pa10, 0},
1470{ "frem", 0x30008600, 0xfc00e7e0, "Ffa,fb,fT", pa10, 0},
1471{ "frem", 0x38008600, 0xfc00e720, "FfA,fB,fT", pa10, 0},
1472{ "frnd", 0x3000a000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
1473{ "frnd", 0x3800a000, 0xfc1fe720, "FfA,fT", pa10, 0},
1474{ "fcpy", 0x30004000, 0xfc1fe7e0, "Ffa,fT", pa10, 0},
1475{ "fcpy", 0x38004000, 0xfc1fe720, "FfA,fT", pa10, 0},
1476{ "fcnvff", 0x30000200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
1477{ "fcnvff", 0x38000200, 0xfc1f8720, "FGfA,fT", pa10, 0},
1478{ "fcnvxf", 0x30008200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
1479{ "fcnvxf", 0x38008200, 0xfc1f8720, "FGfA,fT", pa10, 0},
1480{ "fcnvfx", 0x30010200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
1481{ "fcnvfx", 0x38010200, 0xfc1f8720, "FGfA,fT", pa10, 0},
1482{ "fcnvfxt", 0x30018200, 0xfc1f87e0, "FGfa,fT", pa10, 0},
1483{ "fcnvfxt", 0x38018200, 0xfc1f8720, "FGfA,fT", pa10, 0},
1484{ "fmpyfadd", 0xb8000000, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
1485{ "fmpynfadd", 0xb8000020, 0xfc000020, "IfA,fB,fC,fT", pa20, FLAG_STRICT},
1486{ "fneg", 0x3000c000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
1487{ "fneg", 0x3800c000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
1488{ "fnegabs", 0x3000e000, 0xfc1fe7e0, "Ffa,fT", pa20, FLAG_STRICT},
1489{ "fnegabs", 0x3800e000, 0xfc1fe720, "IfA,fT", pa20, FLAG_STRICT},
1490{ "fcnv", 0x30000200, 0xfc1c0720, "{_fa,fT", pa20, FLAG_STRICT},
1491{ "fcnv", 0x38000200, 0xfc1c0720, "FGfA,fT", pa20, FLAG_STRICT},
1492{ "fcmp", 0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, FLAG_STRICT},
1493{ "fcmp", 0x38000400, 0xfc00e720, "I?ffA,fB", pa10, FLAG_STRICT},
1494{ "fcmp", 0x30000400, 0xfc0007e0, "F?ffa,fb,h", pa20, FLAG_STRICT},
1495{ "fcmp", 0x38000400, 0xfc000720, "I?ffA,fB,h", pa20, FLAG_STRICT},
1496{ "fcmp", 0x30000400, 0xfc00e7e0, "F?ffa,fb", pa10, 0},
1497{ "fcmp", 0x38000400, 0xfc00e720, "I?ffA,fB", pa10, 0},
1498{ "xmpyu", 0x38004700, 0xfc00e720, "fX,fB,fT", pa11, 0},
1499{ "fmpyadd", 0x18000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0},
1500{ "fmpysub", 0x98000000, 0xfc000000, "Hfi,fj,fk,fl,fm", pa11, 0},
1501{ "ftest", 0x30002420, 0xffffffff, "", pa10, FLAG_STRICT},
1502{ "ftest", 0x30002420, 0xffffffe0, ",=", pa20, FLAG_STRICT},
1503{ "ftest", 0x30000420, 0xffff1fff, "m", pa20, FLAG_STRICT},
1504{ "fid", 0x30000000, 0xffffffff, "", pa11, 0},
1505
1506
1507
1508{ "pmdis", 0x30000280, 0xffffffdf, "N", pa20, FLAG_STRICT},
1509{ "pmenb", 0x30000680, 0xffffffff, "", pa20, FLAG_STRICT},
1510
1511
1512
1513{ "spop0", 0x10000000, 0xfc000600, "v,ON", pa10, 0},
1514{ "spop1", 0x10000200, 0xfc000600, "v,oNt", pa10, 0},
1515{ "spop2", 0x10000400, 0xfc000600, "v,1Nb", pa10, 0},
1516{ "spop3", 0x10000600, 0xfc000600, "v,0Nx,b", pa10, 0},
1517{ "copr", 0x30000000, 0xfc000000, "u,2N", pa10, 0},
1518{ "cldw", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
1519{ "cldw", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
1520{ "cldw", 0x24000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
1521{ "cldw", 0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
1522{ "cldw", 0x24001000, 0xfc00d200, "ucocc@(b),t", pa20, FLAG_STRICT},
1523{ "cldw", 0x24001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT},
1524{ "cldw", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
1525{ "cldw", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
1526{ "cldw", 0x24001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
1527{ "cldw", 0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
1528{ "cldd", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
1529{ "cldd", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
1530{ "cldd", 0x2c000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
1531{ "cldd", 0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
1532{ "cldd", 0x2c001000, 0xfc00d200, "ucocc@(b),t", pa20, FLAG_STRICT},
1533{ "cldd", 0x2c001000, 0xfc001200, "ucocc@(s,b),t", pa20, FLAG_STRICT},
1534{ "cldd", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
1535{ "cldd", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
1536{ "cldd", 0x2c001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
1537{ "cldd", 0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
1538{ "cstw", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
1539{ "cstw", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
1540{ "cstw", 0x24000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
1541{ "cstw", 0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
1542{ "cstw", 0x24001200, 0xfc00d200, "ucocCt,@(b)", pa20, FLAG_STRICT},
1543{ "cstw", 0x24001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT},
1544{ "cstw", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
1545{ "cstw", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
1546{ "cstw", 0x24001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
1547{ "cstw", 0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
1548{ "cstd", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
1549{ "cstd", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
1550{ "cstd", 0x2c000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
1551{ "cstd", 0x2c000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
1552{ "cstd", 0x2c001200, 0xfc00d200, "ucocCt,@(b)", pa20, FLAG_STRICT},
1553{ "cstd", 0x2c001200, 0xfc001200, "ucocCt,@(s,b)", pa20, FLAG_STRICT},
1554{ "cstd", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
1555{ "cstd", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
1556{ "cstd", 0x2c001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
1557{ "cstd", 0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
1558{ "cldwx", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
1559{ "cldwx", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
1560{ "cldwx", 0x24000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
1561{ "cldwx", 0x24000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
1562{ "cldwx", 0x24000000, 0xfc00de00, "ucXx(b),t", pa10, 0},
1563{ "cldwx", 0x24000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0},
1564{ "clddx", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, FLAG_STRICT},
1565{ "clddx", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, FLAG_STRICT},
1566{ "clddx", 0x2c000000, 0xfc00d200, "ucxccx(b),t", pa11, FLAG_STRICT},
1567{ "clddx", 0x2c000000, 0xfc001200, "ucxccx(s,b),t", pa11, FLAG_STRICT},
1568{ "clddx", 0x2c000000, 0xfc00de00, "ucXx(b),t", pa10, 0},
1569{ "clddx", 0x2c000000, 0xfc001e00, "ucXx(s,b),t", pa10, 0},
1570{ "cstwx", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
1571{ "cstwx", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
1572{ "cstwx", 0x24000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
1573{ "cstwx", 0x24000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
1574{ "cstwx", 0x24000200, 0xfc00de00, "ucXt,x(b)", pa10, 0},
1575{ "cstwx", 0x24000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0},
1576{ "cstdx", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, FLAG_STRICT},
1577{ "cstdx", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, FLAG_STRICT},
1578{ "cstdx", 0x2c000200, 0xfc00d200, "ucxcCt,x(b)", pa11, FLAG_STRICT},
1579{ "cstdx", 0x2c000200, 0xfc001200, "ucxcCt,x(s,b)", pa11, FLAG_STRICT},
1580{ "cstdx", 0x2c000200, 0xfc00de00, "ucXt,x(b)", pa10, 0},
1581{ "cstdx", 0x2c000200, 0xfc001e00, "ucXt,x(s,b)", pa10, 0},
1582{ "cldws", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
1583{ "cldws", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
1584{ "cldws", 0x24001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
1585{ "cldws", 0x24001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
1586{ "cldws", 0x24001000, 0xfc00de00, "ucM5(b),t", pa10, 0},
1587{ "cldws", 0x24001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0},
1588{ "cldds", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, FLAG_STRICT},
1589{ "cldds", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, FLAG_STRICT},
1590{ "cldds", 0x2c001000, 0xfc00d200, "ucmcc5(b),t", pa11, FLAG_STRICT},
1591{ "cldds", 0x2c001000, 0xfc001200, "ucmcc5(s,b),t", pa11, FLAG_STRICT},
1592{ "cldds", 0x2c001000, 0xfc00de00, "ucM5(b),t", pa10, 0},
1593{ "cldds", 0x2c001000, 0xfc001e00, "ucM5(s,b),t", pa10, 0},
1594{ "cstws", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
1595{ "cstws", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
1596{ "cstws", 0x24001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
1597{ "cstws", 0x24001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
1598{ "cstws", 0x24001200, 0xfc00de00, "ucMt,5(b)", pa10, 0},
1599{ "cstws", 0x24001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0},
1600{ "cstds", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, FLAG_STRICT},
1601{ "cstds", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, FLAG_STRICT},
1602{ "cstds", 0x2c001200, 0xfc00d200, "ucmcCt,5(b)", pa11, FLAG_STRICT},
1603{ "cstds", 0x2c001200, 0xfc001200, "ucmcCt,5(s,b)", pa11, FLAG_STRICT},
1604{ "cstds", 0x2c001200, 0xfc00de00, "ucMt,5(b)", pa10, 0},
1605{ "cstds", 0x2c001200, 0xfc001e00, "ucMt,5(s,b)", pa10, 0},
1606
1607
1608{ "call", 0xe800f000, 0xfc1ffffd, "n(b)", pa20, FLAG_STRICT},
1609{ "call", 0xe800a000, 0xffe0e000, "nW", pa10, FLAG_STRICT},
1610{ "ret", 0xe840d000, 0xfffffffd, "n", pa20, FLAG_STRICT},
1611
1612};
1613
1614#define NUMOPCODES ((sizeof pa_opcodes)/(sizeof pa_opcodes[0]))
1615
1616
1617
1618#define PA_IMM11_AT_31 'i'
1619#define PA_IMM14_AT_31 'j'
1620#define PA_IMM21_AT_31 'k'
1621#define PA_DISP12 'w'
1622#define PA_DISP17 'W'
1623
1624#define N_HPPA_OPERAND_FORMATS 5
1625
1626
1627
1628static const char *const reg_names[] =
1629{
1630 "flags", "r1", "rp", "r3", "r4", "r5", "r6", "r7", "r8", "r9",
1631 "r10", "r11", "r12", "r13", "r14", "r15", "r16", "r17", "r18", "r19",
1632 "r20", "r21", "r22", "r23", "r24", "r25", "r26", "dp", "ret0", "ret1",
1633 "sp", "r31"
1634};
1635
1636
1637
1638static const char *const fp_reg_names[] =
1639{
1640 "fpsr", "fpe2", "fpe4", "fpe6",
1641 "fr4", "fr5", "fr6", "fr7", "fr8",
1642 "fr9", "fr10", "fr11", "fr12", "fr13", "fr14", "fr15",
1643 "fr16", "fr17", "fr18", "fr19", "fr20", "fr21", "fr22", "fr23",
1644 "fr24", "fr25", "fr26", "fr27", "fr28", "fr29", "fr30", "fr31"
1645};
1646
1647typedef unsigned int CORE_ADDR;
1648
1649
1650
1651#define MASK_5 0x1f
1652#define MASK_10 0x3ff
1653#define MASK_11 0x7ff
1654#define MASK_14 0x3fff
1655#define MASK_16 0xffff
1656#define MASK_21 0x1fffff
1657
1658
1659
1660#define GET_FIELD(X, FROM, TO) \
1661 ((X) >> (31 - (TO)) & ((1 << ((TO) - (FROM) + 1)) - 1))
1662
1663#define GET_BIT(X, WHICH) \
1664 GET_FIELD (X, WHICH, WHICH)
1665
1666
1667
1668
1669static const char *const control_reg[] =
1670{
1671 "rctr", "cr1", "cr2", "cr3", "cr4", "cr5", "cr6", "cr7",
1672 "pidr1", "pidr2", "ccr", "sar", "pidr3", "pidr4",
1673 "iva", "eiem", "itmr", "pcsq", "pcoq", "iir", "isr",
1674 "ior", "ipsw", "eirr", "tr0", "tr1", "tr2", "tr3",
1675 "tr4", "tr5", "tr6", "tr7"
1676};
1677
1678static const char *const compare_cond_names[] =
1679{
1680 "", ",=", ",<", ",<=", ",<<", ",<<=", ",sv", ",od",
1681 ",tr", ",<>", ",>=", ",>", ",>>=", ",>>", ",nsv", ",ev"
1682};
1683static const char *const compare_cond_64_names[] =
1684{
1685 "", ",*=", ",*<", ",*<=", ",*<<", ",*<<=", ",*sv", ",*od",
1686 ",*tr", ",*<>", ",*>=", ",*>", ",*>>=", ",*>>", ",*nsv", ",*ev"
1687};
1688static const char *const cmpib_cond_64_names[] =
1689{
1690 ",*<<", ",*=", ",*<", ",*<=", ",*>>=", ",*<>", ",*>=", ",*>"
1691};
1692static const char *const add_cond_names[] =
1693{
1694 "", ",=", ",<", ",<=", ",nuv", ",znv", ",sv", ",od",
1695 ",tr", ",<>", ",>=", ",>", ",uv", ",vnz", ",nsv", ",ev"
1696};
1697static const char *const add_cond_64_names[] =
1698{
1699 "", ",*=", ",*<", ",*<=", ",*nuv", ",*znv", ",*sv", ",*od",
1700 ",*tr", ",*<>", ",*>=", ",*>", ",*uv", ",*vnz", ",*nsv", ",*ev"
1701};
1702static const char *const wide_add_cond_names[] =
1703{
1704 "", ",=", ",<", ",<=", ",nuv", ",*=", ",*<", ",*<=",
1705 ",tr", ",<>", ",>=", ",>", ",uv", ",*<>", ",*>=", ",*>"
1706};
1707static const char *const logical_cond_names[] =
1708{
1709 "", ",=", ",<", ",<=", 0, 0, 0, ",od",
1710 ",tr", ",<>", ",>=", ",>", 0, 0, 0, ",ev"};
1711static const char *const logical_cond_64_names[] =
1712{
1713 "", ",*=", ",*<", ",*<=", 0, 0, 0, ",*od",
1714 ",*tr", ",*<>", ",*>=", ",*>", 0, 0, 0, ",*ev"};
1715static const char *const unit_cond_names[] =
1716{
1717 "", ",swz", ",sbz", ",shz", ",sdc", ",swc", ",sbc", ",shc",
1718 ",tr", ",nwz", ",nbz", ",nhz", ",ndc", ",nwc", ",nbc", ",nhc"
1719};
1720static const char *const unit_cond_64_names[] =
1721{
1722 "", ",*swz", ",*sbz", ",*shz", ",*sdc", ",*swc", ",*sbc", ",*shc",
1723 ",*tr", ",*nwz", ",*nbz", ",*nhz", ",*ndc", ",*nwc", ",*nbc", ",*nhc"
1724};
1725static const char *const shift_cond_names[] =
1726{
1727 "", ",=", ",<", ",od", ",tr", ",<>", ",>=", ",ev"
1728};
1729static const char *const shift_cond_64_names[] =
1730{
1731 "", ",*=", ",*<", ",*od", ",*tr", ",*<>", ",*>=", ",*ev"
1732};
1733static const char *const bb_cond_64_names[] =
1734{
1735 ",*<", ",*>="
1736};
1737static const char *const index_compl_names[] = {"", ",m", ",s", ",sm"};
1738static const char *const short_ldst_compl_names[] = {"", ",ma", "", ",mb"};
1739static const char *const short_bytes_compl_names[] =
1740{
1741 "", ",b,m", ",e", ",e,m"
1742};
1743static const char *const float_format_names[] = {",sgl", ",dbl", "", ",quad"};
1744static const char *const fcnv_fixed_names[] = {",w", ",dw", "", ",qw"};
1745static const char *const fcnv_ufixed_names[] = {",uw", ",udw", "", ",uqw"};
1746static const char *const float_comp_names[] =
1747{
1748 ",false?", ",false", ",?", ",!<=>", ",=", ",=t", ",?=", ",!<>",
1749 ",!?>=", ",<", ",?<", ",!>=", ",!?>", ",<=", ",?<=", ",!>",
1750 ",!?<=", ",>", ",?>", ",!<=", ",!?<", ",>=", ",?>=", ",!<",
1751 ",!?=", ",<>", ",!=", ",!=t", ",!?", ",<=>", ",true?", ",true"
1752};
1753static const char *const signed_unsigned_names[] = {",u", ",s"};
1754static const char *const mix_half_names[] = {",l", ",r"};
1755static const char *const saturation_names[] = {",us", ",ss", 0, ""};
1756static const char *const read_write_names[] = {",r", ",w"};
1757static const char *const add_compl_names[] = { 0, "", ",l", ",tsv" };
1758
1759
1760
1761#define GET_COMPL(insn) (GET_FIELD (insn, 26, 26) | \
1762 GET_FIELD (insn, 18, 18) << 1)
1763
1764#define GET_COND(insn) (GET_FIELD ((insn), 16, 18) + \
1765 (GET_FIELD ((insn), 19, 19) ? 8 : 0))
1766
1767
1768
1769
1770#define fputs_filtered(STR,F) (*info->fprintf_func) (info->stream, "%s", STR)
1771
1772static void
1773fput_reg (unsigned reg, disassemble_info *info)
1774{
1775 (*info->fprintf_func) (info->stream, "%s", reg ? reg_names[reg] : "r0");
1776}
1777
1778static void
1779fput_fp_reg (unsigned reg, disassemble_info *info)
1780{
1781 (*info->fprintf_func) (info->stream, "%s", reg ? fp_reg_names[reg] : "fr0");
1782}
1783
1784static void
1785fput_fp_reg_r (unsigned reg, disassemble_info *info)
1786{
1787
1788 if (reg < 4)
1789 (*info->fprintf_func) (info->stream, "fpe%d", reg * 2 + 1);
1790 else
1791 (*info->fprintf_func) (info->stream, "%sR",
1792 reg ? fp_reg_names[reg] : "fr0");
1793}
1794
1795static void
1796fput_creg (unsigned reg, disassemble_info *info)
1797{
1798 (*info->fprintf_func) (info->stream, "%s", control_reg[reg]);
1799}
1800
1801
1802
1803static void
1804fput_const (unsigned num, disassemble_info *info)
1805{
1806 if ((int) num < 0)
1807 (*info->fprintf_func) (info->stream, "-%x", - (int) num);
1808 else
1809 (*info->fprintf_func) (info->stream, "%x", num);
1810}
1811
1812
1813
1814
1815
1816static int
1817extract_3 (unsigned word)
1818{
1819 return GET_FIELD (word, 18, 18) << 2 | GET_FIELD (word, 16, 17);
1820}
1821
1822static int
1823extract_5_load (unsigned word)
1824{
1825 return low_sign_extend (word >> 16 & MASK_5, 5);
1826}
1827
1828
1829
1830static int
1831extract_5_store (unsigned word)
1832{
1833 return low_sign_extend (word & MASK_5, 5);
1834}
1835
1836
1837
1838static unsigned
1839extract_5r_store (unsigned word)
1840{
1841 return (word & MASK_5);
1842}
1843
1844
1845
1846static unsigned
1847extract_5R_store (unsigned word)
1848{
1849 return (word >> 16 & MASK_5);
1850}
1851
1852
1853
1854static unsigned
1855extract_10U_store (unsigned word)
1856{
1857 return (word >> 16 & MASK_10);
1858}
1859
1860
1861
1862static unsigned
1863extract_5Q_store (unsigned word)
1864{
1865 return (word >> 21 & MASK_5);
1866}
1867
1868
1869
1870static int
1871extract_11 (unsigned word)
1872{
1873 return low_sign_extend (word & MASK_11, 11);
1874}
1875
1876
1877
1878static int
1879extract_14 (unsigned word)
1880{
1881 return low_sign_extend (word & MASK_14, 14);
1882}
1883
1884
1885
1886static int
1887extract_16 (unsigned word)
1888{
1889 int m15, m0, m1;
1890
1891 m0 = GET_BIT (word, 16);
1892 m1 = GET_BIT (word, 17);
1893 m15 = GET_BIT (word, 31);
1894 word = (word >> 1) & 0x1fff;
1895 word = word | (m15 << 15) | ((m15 ^ m0) << 14) | ((m15 ^ m1) << 13);
1896 return sign_extend (word, 16);
1897}
1898
1899
1900
1901static int
1902extract_21 (unsigned word)
1903{
1904 int val;
1905
1906 word &= MASK_21;
1907 word <<= 11;
1908 val = GET_FIELD (word, 20, 20);
1909 val <<= 11;
1910 val |= GET_FIELD (word, 9, 19);
1911 val <<= 2;
1912 val |= GET_FIELD (word, 5, 6);
1913 val <<= 5;
1914 val |= GET_FIELD (word, 0, 4);
1915 val <<= 2;
1916 val |= GET_FIELD (word, 7, 8);
1917 return sign_extend (val, 21) << 11;
1918}
1919
1920
1921
1922static int
1923extract_12 (unsigned word)
1924{
1925 return sign_extend (GET_FIELD (word, 19, 28)
1926 | GET_FIELD (word, 29, 29) << 10
1927 | (word & 0x1) << 11, 12) << 2;
1928}
1929
1930
1931
1932
1933static int
1934extract_17 (unsigned word)
1935{
1936 return sign_extend (GET_FIELD (word, 19, 28)
1937 | GET_FIELD (word, 29, 29) << 10
1938 | GET_FIELD (word, 11, 15) << 11
1939 | (word & 0x1) << 16, 17) << 2;
1940}
1941
1942static int
1943extract_22 (unsigned word)
1944{
1945 return sign_extend (GET_FIELD (word, 19, 28)
1946 | GET_FIELD (word, 29, 29) << 10
1947 | GET_FIELD (word, 11, 15) << 11
1948 | GET_FIELD (word, 6, 10) << 16
1949 | (word & 0x1) << 21, 22) << 2;
1950}
1951
1952
1953
1954int
1955print_insn_hppa (bfd_vma memaddr, disassemble_info *info)
1956{
1957 bfd_byte buffer[4];
1958 unsigned int insn, i;
1959
1960 {
1961 int status =
1962 (*info->read_memory_func) (memaddr, buffer, sizeof (buffer), info);
1963 if (status != 0)
1964 {
1965 (*info->memory_error_func) (status, memaddr, info);
1966 return -1;
1967 }
1968 }
1969
1970 insn = bfd_getb32 (buffer);
1971
1972 for (i = 0; i < NUMOPCODES; ++i)
1973 {
1974 const struct pa_opcode *opcode = &pa_opcodes[i];
1975
1976 if ((insn & opcode->mask) == opcode->match)
1977 {
1978 const char *s;
1979#ifndef BFD64
1980 if (opcode->arch == pa20w)
1981 continue;
1982#endif
1983 (*info->fprintf_func) (info->stream, "%s", opcode->name);
1984
1985 if (!strchr ("cfCY?-+nHNZFIuv{", opcode->args[0]))
1986 (*info->fprintf_func) (info->stream, " ");
1987 for (s = opcode->args; *s != '\0'; ++s)
1988 {
1989 switch (*s)
1990 {
1991 case 'x':
1992 fput_reg (GET_FIELD (insn, 11, 15), info);
1993 break;
1994 case 'a':
1995 case 'b':
1996 fput_reg (GET_FIELD (insn, 6, 10), info);
1997 break;
1998 case '^':
1999 fput_creg (GET_FIELD (insn, 6, 10), info);
2000 break;
2001 case 't':
2002 fput_reg (GET_FIELD (insn, 27, 31), info);
2003 break;
2004
2005
2006 case 'f':
2007 switch (*++s)
2008 {
2009 case 't':
2010 fput_fp_reg (GET_FIELD (insn, 27, 31), info);
2011 break;
2012 case 'T':
2013 if (GET_FIELD (insn, 25, 25))
2014 fput_fp_reg_r (GET_FIELD (insn, 27, 31), info);
2015 else
2016 fput_fp_reg (GET_FIELD (insn, 27, 31), info);
2017 break;
2018 case 'a':
2019 if (GET_FIELD (insn, 25, 25))
2020 fput_fp_reg_r (GET_FIELD (insn, 6, 10), info);
2021 else
2022 fput_fp_reg (GET_FIELD (insn, 6, 10), info);
2023 break;
2024
2025
2026
2027
2028
2029 case 'X':
2030 fputs_filtered (" ", info);
2031
2032
2033 case 'A':
2034 if (GET_FIELD (insn, 24, 24))
2035 fput_fp_reg_r (GET_FIELD (insn, 6, 10), info);
2036 else
2037 fput_fp_reg (GET_FIELD (insn, 6, 10), info);
2038 break;
2039 case 'b':
2040 if (GET_FIELD (insn, 25, 25))
2041 fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
2042 else
2043 fput_fp_reg (GET_FIELD (insn, 11, 15), info);
2044 break;
2045 case 'B':
2046 if (GET_FIELD (insn, 19, 19))
2047 fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
2048 else
2049 fput_fp_reg (GET_FIELD (insn, 11, 15), info);
2050 break;
2051 case 'C':
2052 {
2053 int reg = GET_FIELD (insn, 21, 22);
2054 reg |= GET_FIELD (insn, 16, 18) << 2;
2055 if (GET_FIELD (insn, 23, 23) != 0)
2056 fput_fp_reg_r (reg, info);
2057 else
2058 fput_fp_reg (reg, info);
2059 break;
2060 }
2061 case 'i':
2062 {
2063 int reg = GET_FIELD (insn, 6, 10);
2064
2065 reg |= (GET_FIELD (insn, 26, 26) << 4);
2066 fput_fp_reg (reg, info);
2067 break;
2068 }
2069 case 'j':
2070 {
2071 int reg = GET_FIELD (insn, 11, 15);
2072
2073 reg |= (GET_FIELD (insn, 26, 26) << 4);
2074 fput_fp_reg (reg, info);
2075 break;
2076 }
2077 case 'k':
2078 {
2079 int reg = GET_FIELD (insn, 27, 31);
2080
2081 reg |= (GET_FIELD (insn, 26, 26) << 4);
2082 fput_fp_reg (reg, info);
2083 break;
2084 }
2085 case 'l':
2086 {
2087 int reg = GET_FIELD (insn, 21, 25);
2088
2089 reg |= (GET_FIELD (insn, 26, 26) << 4);
2090 fput_fp_reg (reg, info);
2091 break;
2092 }
2093 case 'm':
2094 {
2095 int reg = GET_FIELD (insn, 16, 20);
2096
2097 reg |= (GET_FIELD (insn, 26, 26) << 4);
2098 fput_fp_reg (reg, info);
2099 break;
2100 }
2101
2102
2103
2104
2105
2106 case 'E':
2107 fputs_filtered (" ", info);
2108
2109
2110 case 'e':
2111 if (GET_FIELD (insn, 30, 30))
2112 fput_fp_reg_r (GET_FIELD (insn, 11, 15), info);
2113 else
2114 fput_fp_reg (GET_FIELD (insn, 11, 15), info);
2115 break;
2116 case 'x':
2117 fput_fp_reg (GET_FIELD (insn, 11, 15), info);
2118 break;
2119 }
2120 break;
2121
2122 case '5':
2123 fput_const (extract_5_load (insn), info);
2124 break;
2125 case 's':
2126 {
2127 int space = GET_FIELD (insn, 16, 17);
2128
2129 if (space != 0)
2130 (*info->fprintf_func) (info->stream, "sr%d", space);
2131 }
2132 break;
2133
2134 case 'S':
2135 (*info->fprintf_func) (info->stream, "sr%d",
2136 extract_3 (insn));
2137 break;
2138
2139
2140 case 'c':
2141 switch (*++s)
2142 {
2143 case 'x':
2144 (*info->fprintf_func)
2145 (info->stream, "%s",
2146 index_compl_names[GET_COMPL (insn)]);
2147 break;
2148 case 'X':
2149 (*info->fprintf_func)
2150 (info->stream, "%s ",
2151 index_compl_names[GET_COMPL (insn)]);
2152 break;
2153 case 'm':
2154 (*info->fprintf_func)
2155 (info->stream, "%s",
2156 short_ldst_compl_names[GET_COMPL (insn)]);
2157 break;
2158 case 'M':
2159 (*info->fprintf_func)
2160 (info->stream, "%s ",
2161 short_ldst_compl_names[GET_COMPL (insn)]);
2162 break;
2163 case 'A':
2164 (*info->fprintf_func)
2165 (info->stream, "%s ",
2166 short_bytes_compl_names[GET_COMPL (insn)]);
2167 break;
2168 case 's':
2169 (*info->fprintf_func)
2170 (info->stream, "%s",
2171 short_bytes_compl_names[GET_COMPL (insn)]);
2172 break;
2173 case 'c':
2174 case 'C':
2175 switch (GET_FIELD (insn, 20, 21))
2176 {
2177 case 1:
2178 (*info->fprintf_func) (info->stream, ",bc ");
2179 break;
2180 case 2:
2181 (*info->fprintf_func) (info->stream, ",sl ");
2182 break;
2183 default:
2184 (*info->fprintf_func) (info->stream, " ");
2185 }
2186 break;
2187 case 'd':
2188 switch (GET_FIELD (insn, 20, 21))
2189 {
2190 case 1:
2191 (*info->fprintf_func) (info->stream, ",co ");
2192 break;
2193 default:
2194 (*info->fprintf_func) (info->stream, " ");
2195 }
2196 break;
2197 case 'o':
2198 (*info->fprintf_func) (info->stream, ",o");
2199 break;
2200 case 'g':
2201 (*info->fprintf_func) (info->stream, ",gate");
2202 break;
2203 case 'p':
2204 (*info->fprintf_func) (info->stream, ",l,push");
2205 break;
2206 case 'P':
2207 (*info->fprintf_func) (info->stream, ",pop");
2208 break;
2209 case 'l':
2210 case 'L':
2211 (*info->fprintf_func) (info->stream, ",l");
2212 break;
2213 case 'w':
2214 (*info->fprintf_func)
2215 (info->stream, "%s ",
2216 read_write_names[GET_FIELD (insn, 25, 25)]);
2217 break;
2218 case 'W':
2219 (*info->fprintf_func) (info->stream, ",w ");
2220 break;
2221 case 'r':
2222 if (GET_FIELD (insn, 23, 26) == 5)
2223 (*info->fprintf_func) (info->stream, ",r");
2224 break;
2225 case 'Z':
2226 if (GET_FIELD (insn, 26, 26))
2227 (*info->fprintf_func) (info->stream, ",m ");
2228 else
2229 (*info->fprintf_func) (info->stream, " ");
2230 break;
2231 case 'i':
2232 if (GET_FIELD (insn, 25, 25))
2233 (*info->fprintf_func) (info->stream, ",i");
2234 break;
2235 case 'z':
2236 if (!GET_FIELD (insn, 21, 21))
2237 (*info->fprintf_func) (info->stream, ",z");
2238 break;
2239 case 'a':
2240 (*info->fprintf_func)
2241 (info->stream, "%s",
2242 add_compl_names[GET_FIELD (insn, 20, 21)]);
2243 break;
2244 case 'Y':
2245 (*info->fprintf_func)
2246 (info->stream, ",dc%s",
2247 add_compl_names[GET_FIELD (insn, 20, 21)]);
2248 break;
2249 case 'y':
2250 (*info->fprintf_func)
2251 (info->stream, ",c%s",
2252 add_compl_names[GET_FIELD (insn, 20, 21)]);
2253 break;
2254 case 'v':
2255 if (GET_FIELD (insn, 20, 20))
2256 (*info->fprintf_func) (info->stream, ",tsv");
2257 break;
2258 case 't':
2259 (*info->fprintf_func) (info->stream, ",tc");
2260 if (GET_FIELD (insn, 20, 20))
2261 (*info->fprintf_func) (info->stream, ",tsv");
2262 break;
2263 case 'B':
2264 (*info->fprintf_func) (info->stream, ",db");
2265 if (GET_FIELD (insn, 20, 20))
2266 (*info->fprintf_func) (info->stream, ",tsv");
2267 break;
2268 case 'b':
2269 (*info->fprintf_func) (info->stream, ",b");
2270 if (GET_FIELD (insn, 20, 20))
2271 (*info->fprintf_func) (info->stream, ",tsv");
2272 break;
2273 case 'T':
2274 if (GET_FIELD (insn, 25, 25))
2275 (*info->fprintf_func) (info->stream, ",tc");
2276 break;
2277 case 'S':
2278
2279 if (*(s + 1) == '?')
2280 (*info->fprintf_func)
2281 (info->stream, "%s",
2282 signed_unsigned_names[GET_FIELD (insn, 21, 21)]);
2283 else
2284 (*info->fprintf_func)
2285 (info->stream, "%s ",
2286 signed_unsigned_names[GET_FIELD (insn, 21, 21)]);
2287 break;
2288 case 'h':
2289 (*info->fprintf_func)
2290 (info->stream, "%s",
2291 mix_half_names[GET_FIELD (insn, 17, 17)]);
2292 break;
2293 case 'H':
2294 (*info->fprintf_func)
2295 (info->stream, "%s ",
2296 saturation_names[GET_FIELD (insn, 24, 25)]);
2297 break;
2298 case '*':
2299 (*info->fprintf_func)
2300 (info->stream, ",%d%d%d%d ",
2301 GET_FIELD (insn, 17, 18), GET_FIELD (insn, 20, 21),
2302 GET_FIELD (insn, 22, 23), GET_FIELD (insn, 24, 25));
2303 break;
2304
2305 case 'q':
2306 {
2307 int m, a;
2308
2309 m = GET_FIELD (insn, 28, 28);
2310 a = GET_FIELD (insn, 29, 29);
2311
2312 if (m && !a)
2313 fputs_filtered (",ma ", info);
2314 else if (m && a)
2315 fputs_filtered (",mb ", info);
2316 else
2317 fputs_filtered (" ", info);
2318 break;
2319 }
2320
2321 case 'J':
2322 {
2323 int opc = GET_FIELD (insn, 0, 5);
2324
2325 if (opc == 0x16 || opc == 0x1e)
2326 {
2327 if (GET_FIELD (insn, 29, 29) == 0)
2328 fputs_filtered (",ma ", info);
2329 else
2330 fputs_filtered (",mb ", info);
2331 }
2332 else
2333 fputs_filtered (" ", info);
2334 break;
2335 }
2336
2337 case 'e':
2338 {
2339 int opc = GET_FIELD (insn, 0, 5);
2340
2341 if (opc == 0x13 || opc == 0x1b)
2342 {
2343 if (GET_FIELD (insn, 18, 18) == 1)
2344 fputs_filtered (",mb ", info);
2345 else
2346 fputs_filtered (",ma ", info);
2347 }
2348 else if (opc == 0x17 || opc == 0x1f)
2349 {
2350 if (GET_FIELD (insn, 31, 31) == 1)
2351 fputs_filtered (",ma ", info);
2352 else
2353 fputs_filtered (",mb ", info);
2354 }
2355 else
2356 fputs_filtered (" ", info);
2357
2358 break;
2359 }
2360 }
2361 break;
2362
2363
2364 case '?':
2365 {
2366 s++;
2367 switch (*s)
2368 {
2369 case 'f':
2370 (*info->fprintf_func)
2371 (info->stream, "%s ",
2372 float_comp_names[GET_FIELD (insn, 27, 31)]);
2373 break;
2374
2375
2376
2377
2378
2379 case 't':
2380 fputs_filtered
2381 (compare_cond_names[GET_FIELD (insn, 16, 18)], info);
2382 break;
2383 case 'n':
2384 fputs_filtered
2385 (compare_cond_names[GET_FIELD (insn, 16, 18)
2386 + GET_FIELD (insn, 4, 4) * 8],
2387 info);
2388 break;
2389 case 'N':
2390 fputs_filtered
2391 (compare_cond_64_names[GET_FIELD (insn, 16, 18)
2392 + GET_FIELD (insn, 2, 2) * 8],
2393 info);
2394 break;
2395 case 'Q':
2396 fputs_filtered
2397 (cmpib_cond_64_names[GET_FIELD (insn, 16, 18)],
2398 info);
2399 break;
2400 case '@':
2401 fputs_filtered
2402 (add_cond_names[GET_FIELD (insn, 16, 18)
2403 + GET_FIELD (insn, 4, 4) * 8],
2404 info);
2405 break;
2406 case 's':
2407 (*info->fprintf_func)
2408 (info->stream, "%s ",
2409 compare_cond_names[GET_COND (insn)]);
2410 break;
2411 case 'S':
2412 (*info->fprintf_func)
2413 (info->stream, "%s ",
2414 compare_cond_64_names[GET_COND (insn)]);
2415 break;
2416 case 'a':
2417 (*info->fprintf_func)
2418 (info->stream, "%s ",
2419 add_cond_names[GET_COND (insn)]);
2420 break;
2421 case 'A':
2422 (*info->fprintf_func)
2423 (info->stream, "%s ",
2424 add_cond_64_names[GET_COND (insn)]);
2425 break;
2426 case 'd':
2427 (*info->fprintf_func)
2428 (info->stream, "%s",
2429 add_cond_names[GET_FIELD (insn, 16, 18)]);
2430 break;
2431
2432 case 'W':
2433 (*info->fprintf_func)
2434 (info->stream, "%s",
2435 wide_add_cond_names[GET_FIELD (insn, 16, 18) +
2436 GET_FIELD (insn, 4, 4) * 8]);
2437 break;
2438
2439 case 'l':
2440 (*info->fprintf_func)
2441 (info->stream, "%s ",
2442 logical_cond_names[GET_COND (insn)]);
2443 break;
2444 case 'L':
2445 (*info->fprintf_func)
2446 (info->stream, "%s ",
2447 logical_cond_64_names[GET_COND (insn)]);
2448 break;
2449 case 'u':
2450 (*info->fprintf_func)
2451 (info->stream, "%s ",
2452 unit_cond_names[GET_COND (insn)]);
2453 break;
2454 case 'U':
2455 (*info->fprintf_func)
2456 (info->stream, "%s ",
2457 unit_cond_64_names[GET_COND (insn)]);
2458 break;
2459 case 'y':
2460 case 'x':
2461 case 'b':
2462 (*info->fprintf_func)
2463 (info->stream, "%s",
2464 shift_cond_names[GET_FIELD (insn, 16, 18)]);
2465
2466
2467
2468 if (s[1] != 'n')
2469 (*info->fprintf_func) (info->stream, " ");
2470 break;
2471 case 'X':
2472 (*info->fprintf_func)
2473 (info->stream, "%s ",
2474 shift_cond_64_names[GET_FIELD (insn, 16, 18)]);
2475 break;
2476 case 'B':
2477 (*info->fprintf_func)
2478 (info->stream, "%s",
2479 bb_cond_64_names[GET_FIELD (insn, 16, 16)]);
2480
2481
2482
2483 if (s[1] != 'n')
2484 (*info->fprintf_func) (info->stream, " ");
2485 break;
2486 }
2487 break;
2488 }
2489
2490 case 'V':
2491 fput_const (extract_5_store (insn), info);
2492 break;
2493 case 'r':
2494 fput_const (extract_5r_store (insn), info);
2495 break;
2496 case 'R':
2497 fput_const (extract_5R_store (insn), info);
2498 break;
2499 case 'U':
2500 fput_const (extract_10U_store (insn), info);
2501 break;
2502 case 'B':
2503 case 'Q':
2504 fput_const (extract_5Q_store (insn), info);
2505 break;
2506 case 'i':
2507 fput_const (extract_11 (insn), info);
2508 break;
2509 case 'j':
2510 fput_const (extract_14 (insn), info);
2511 break;
2512 case 'k':
2513 fputs_filtered ("L%", info);
2514 fput_const (extract_21 (insn), info);
2515 break;
2516 case '<':
2517 case 'l':
2518
2519 fput_const (extract_16 (insn), info);
2520 break;
2521 case 'n':
2522 if (insn & 0x2)
2523 (*info->fprintf_func) (info->stream, ",n ");
2524 else
2525 (*info->fprintf_func) (info->stream, " ");
2526 break;
2527 case 'N':
2528 if ((insn & 0x20) && s[1])
2529 (*info->fprintf_func) (info->stream, ",n ");
2530 else if (insn & 0x20)
2531 (*info->fprintf_func) (info->stream, ",n");
2532 else if (s[1])
2533 (*info->fprintf_func) (info->stream, " ");
2534 break;
2535 case 'w':
2536 (*info->print_address_func)
2537 (memaddr + 8 + extract_12 (insn), info);
2538 break;
2539 case 'W':
2540
2541 (*info->print_address_func)
2542 ((memaddr + 8 + extract_17 (insn)), info);
2543 break;
2544 case 'z':
2545
2546
2547
2548 fput_const (extract_17 (insn), info);
2549 break;
2550
2551 case 'Z':
2552
2553 fputs_filtered ("r1", info);
2554 break;
2555
2556 case 'Y':
2557
2558 fputs_filtered ("sr0,r31", info);
2559 break;
2560
2561 case '@':
2562 (*info->fprintf_func) (info->stream, "0");
2563 break;
2564
2565 case '.':
2566 (*info->fprintf_func) (info->stream, "%d",
2567 GET_FIELD (insn, 24, 25));
2568 break;
2569 case '*':
2570 (*info->fprintf_func) (info->stream, "%d",
2571 GET_FIELD (insn, 22, 25));
2572 break;
2573 case '!':
2574 fputs_filtered ("sar", info);
2575 break;
2576 case 'p':
2577 (*info->fprintf_func) (info->stream, "%d",
2578 31 - GET_FIELD (insn, 22, 26));
2579 break;
2580 case '~':
2581 {
2582 int num;
2583 num = GET_FIELD (insn, 20, 20) << 5;
2584 num |= GET_FIELD (insn, 22, 26);
2585 (*info->fprintf_func) (info->stream, "%d", 63 - num);
2586 break;
2587 }
2588 case 'P':
2589 (*info->fprintf_func) (info->stream, "%d",
2590 GET_FIELD (insn, 22, 26));
2591 break;
2592 case 'q':
2593 {
2594 int num;
2595 num = GET_FIELD (insn, 20, 20) << 5;
2596 num |= GET_FIELD (insn, 22, 26);
2597 (*info->fprintf_func) (info->stream, "%d", num);
2598 break;
2599 }
2600 case 'T':
2601 (*info->fprintf_func) (info->stream, "%d",
2602 32 - GET_FIELD (insn, 27, 31));
2603 break;
2604 case '%':
2605 {
2606 int num;
2607 num = (GET_FIELD (insn, 23, 23) + 1) * 32;
2608 num -= GET_FIELD (insn, 27, 31);
2609 (*info->fprintf_func) (info->stream, "%d", num);
2610 break;
2611 }
2612 case '|':
2613 {
2614 int num;
2615 num = (GET_FIELD (insn, 19, 19) + 1) * 32;
2616 num -= GET_FIELD (insn, 27, 31);
2617 (*info->fprintf_func) (info->stream, "%d", num);
2618 break;
2619 }
2620 case '$':
2621 fput_const (GET_FIELD (insn, 20, 28), info);
2622 break;
2623 case 'A':
2624 fput_const (GET_FIELD (insn, 6, 18), info);
2625 break;
2626 case 'D':
2627 fput_const (GET_FIELD (insn, 6, 31), info);
2628 break;
2629 case 'v':
2630 (*info->fprintf_func) (info->stream, ",%d",
2631 GET_FIELD (insn, 23, 25));
2632 break;
2633 case 'O':
2634 fput_const ((GET_FIELD (insn, 6,20) << 5 |
2635 GET_FIELD (insn, 27, 31)), info);
2636 break;
2637 case 'o':
2638 fput_const (GET_FIELD (insn, 6, 20), info);
2639 break;
2640 case '2':
2641 fput_const ((GET_FIELD (insn, 6, 22) << 5 |
2642 GET_FIELD (insn, 27, 31)), info);
2643 break;
2644 case '1':
2645 fput_const ((GET_FIELD (insn, 11, 20) << 5 |
2646 GET_FIELD (insn, 27, 31)), info);
2647 break;
2648 case '0':
2649 fput_const ((GET_FIELD (insn, 16, 20) << 5 |
2650 GET_FIELD (insn, 27, 31)), info);
2651 break;
2652 case 'u':
2653 (*info->fprintf_func) (info->stream, ",%d",
2654 GET_FIELD (insn, 23, 25));
2655 break;
2656 case 'F':
2657
2658
2659 if (s[1] == 'G' || s[1] == '?')
2660 fputs_filtered
2661 (float_format_names[GET_FIELD (insn, 19, 20)], info);
2662 else
2663 (*info->fprintf_func)
2664 (info->stream, "%s ",
2665 float_format_names[GET_FIELD (insn, 19, 20)]);
2666 break;
2667 case 'G':
2668 (*info->fprintf_func)
2669 (info->stream, "%s ",
2670 float_format_names[GET_FIELD (insn, 17, 18)]);
2671 break;
2672 case 'H':
2673 if (GET_FIELD (insn, 26, 26) == 1)
2674 (*info->fprintf_func) (info->stream, "%s ",
2675 float_format_names[0]);
2676 else
2677 (*info->fprintf_func) (info->stream, "%s ",
2678 float_format_names[1]);
2679 break;
2680 case 'I':
2681
2682
2683 if (s[1] == '?')
2684 fputs_filtered
2685 (float_format_names[GET_FIELD (insn, 20, 20)], info);
2686 else
2687 (*info->fprintf_func)
2688 (info->stream, "%s ",
2689 float_format_names[GET_FIELD (insn, 20, 20)]);
2690 break;
2691
2692 case 'J':
2693 fput_const (extract_14 (insn), info);
2694 break;
2695
2696 case '#':
2697 {
2698 int sign = GET_FIELD (insn, 31, 31);
2699 int imm10 = GET_FIELD (insn, 18, 27);
2700 int disp;
2701
2702 if (sign)
2703 disp = (-1 << 10) | imm10;
2704 else
2705 disp = imm10;
2706
2707 disp <<= 3;
2708 fput_const (disp, info);
2709 break;
2710 }
2711 case 'K':
2712 case 'd':
2713 {
2714 int sign = GET_FIELD (insn, 31, 31);
2715 int imm11 = GET_FIELD (insn, 18, 28);
2716 int disp;
2717
2718 if (sign)
2719 disp = (-1 << 11) | imm11;
2720 else
2721 disp = imm11;
2722
2723 disp <<= 2;
2724 fput_const (disp, info);
2725 break;
2726 }
2727
2728 case '>':
2729 case 'y':
2730 {
2731
2732 int disp = extract_16 (insn);
2733 disp &= ~3;
2734 fput_const (disp, info);
2735 break;
2736 }
2737
2738 case '&':
2739 {
2740
2741 int disp = extract_16 (insn);
2742 disp &= ~7;
2743 fput_const (disp, info);
2744 break;
2745 }
2746
2747 case '_':
2748 break;
2749
2750 case '{':
2751 {
2752 int sub = GET_FIELD (insn, 14, 16);
2753 int df = GET_FIELD (insn, 17, 18);
2754 int sf = GET_FIELD (insn, 19, 20);
2755 const char * const * source = float_format_names;
2756 const char * const * dest = float_format_names;
2757 const char *t = "";
2758
2759 if (sub == 4)
2760 {
2761 fputs_filtered (",UND ", info);
2762 break;
2763 }
2764 if ((sub & 3) == 3)
2765 t = ",t";
2766 if ((sub & 3) == 1)
2767 source = sub & 4 ? fcnv_ufixed_names : fcnv_fixed_names;
2768 if (sub & 2)
2769 dest = sub & 4 ? fcnv_ufixed_names : fcnv_fixed_names;
2770
2771 (*info->fprintf_func) (info->stream, "%s%s%s ",
2772 t, source[sf], dest[df]);
2773 break;
2774 }
2775
2776 case 'm':
2777 {
2778 int y = GET_FIELD (insn, 16, 18);
2779
2780 if (y != 1)
2781 fput_const ((y ^ 1) - 1, info);
2782 }
2783 break;
2784
2785 case 'h':
2786 {
2787 int cbit;
2788
2789 cbit = GET_FIELD (insn, 16, 18);
2790
2791 if (cbit > 0)
2792 (*info->fprintf_func) (info->stream, ",%d", cbit - 1);
2793 break;
2794 }
2795
2796 case '=':
2797 {
2798 int cond = GET_FIELD (insn, 27, 31);
2799
2800 switch (cond)
2801 {
2802 case 0: fputs_filtered (" ", info); break;
2803 case 1: fputs_filtered ("acc ", info); break;
2804 case 2: fputs_filtered ("rej ", info); break;
2805 case 5: fputs_filtered ("acc8 ", info); break;
2806 case 6: fputs_filtered ("rej8 ", info); break;
2807 case 9: fputs_filtered ("acc6 ", info); break;
2808 case 13: fputs_filtered ("acc4 ", info); break;
2809 case 17: fputs_filtered ("acc2 ", info); break;
2810 default: break;
2811 }
2812 break;
2813 }
2814
2815 case 'X':
2816 (*info->print_address_func)
2817 (memaddr + 8 + extract_22 (insn), info);
2818 break;
2819 case 'L':
2820 fputs_filtered (",rp", info);
2821 break;
2822 default:
2823 (*info->fprintf_func) (info->stream, "%c", *s);
2824 break;
2825 }
2826 }
2827 return sizeof (insn);
2828 }
2829 }
2830 (*info->fprintf_func) (info->stream, "#%8x", insn);
2831 return sizeof (insn);
2832}
2833