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