1 |
38 |
julius |
/* Copyright (C) 2000, 2002, 2007 Free Software Foundation
|
2 |
|
|
Contributed by Alexandre Oliva <aoliva@redhat.com>
|
3 |
|
|
|
4 |
|
|
This file is free software; you can redistribute it and/or modify it
|
5 |
|
|
under the terms of the GNU General Public License as published by
|
6 |
|
|
the Free Software Foundation; either version 3 of the License, or
|
7 |
|
|
(at your option) any later version.
|
8 |
|
|
|
9 |
|
|
This program is distributed in the hope that it will be useful, but
|
10 |
|
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
11 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
12 |
|
|
General Public License for more details.
|
13 |
|
|
|
14 |
|
|
You should have received a copy of the GNU General Public License
|
15 |
|
|
along with this program; if not, write to the Free Software
|
16 |
|
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
17 |
|
|
MA 02110-1301, USA. */
|
18 |
|
|
|
19 |
|
|
/* Generator of tests for insns introduced in AM33 2.0. */
|
20 |
|
|
|
21 |
|
|
#define INSN_REPEAT 11
|
22 |
|
|
|
23 |
|
|
/* See the following file for usage and documentation. */
|
24 |
|
|
#include "../all/test-gen.c"
|
25 |
|
|
|
26 |
|
|
/* These are the AM33 registers. */
|
27 |
|
|
const char *am33_regs[] = {
|
28 |
|
|
/* These are the canonical names, i.e., those printed by the
|
29 |
|
|
* disassembler. */
|
30 |
|
|
"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7",
|
31 |
|
|
"a0", "a1", "a2", "a3", "d0", "d1", "d2", "d3",
|
32 |
|
|
/* These are aliases that the assembler should also recognize. */
|
33 |
|
|
"e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7",
|
34 |
|
|
"r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15"
|
35 |
|
|
};
|
36 |
|
|
|
37 |
|
|
/* Signed constants of the given sizes. */
|
38 |
|
|
#define d8(shift) signed_constant( 8, shift, 1)
|
39 |
|
|
#define d16(shift) signed_constant(16, shift, 1)
|
40 |
|
|
#define d24(shift) signed_constant(24, shift, 1)
|
41 |
|
|
#define d32(shift) signed_constant(32, shift, 1)
|
42 |
|
|
#define u8(shift) unsigned_constant( 8, shift, 1)
|
43 |
|
|
#define u24(shift) unsigned_constant(24, shift, 1)
|
44 |
|
|
#define a16(shift) absolute_address(16, shift, 1)
|
45 |
|
|
|
46 |
|
|
/* Emit an AM33 register shifted by these many words. */
|
47 |
|
|
#define amreg(shift) reg_r (am33_regs, shift, 15, mk_get_bits (5u))
|
48 |
|
|
#define spreg literal ("sp")
|
49 |
|
|
#define fcreg literal ("fpcr")
|
50 |
|
|
|
51 |
|
|
/* Emit an AM33-2 FP single-precision register, with the 4 least
|
52 |
|
|
* significant bits shifted by shiftlow and the most significant bit
|
53 |
|
|
* shifted by shifthigh. */
|
54 |
|
|
int
|
55 |
|
|
freg (func_arg *arg, insn_data *data)
|
56 |
|
|
#define freg(shiftlow, shifthigh) { freg, { i1: shiftlow, i2: shifthigh } }
|
57 |
|
|
{
|
58 |
|
|
unsigned val = get_bits (5u);
|
59 |
|
|
|
60 |
|
|
data->as_in = data->dis_out = (char*)malloc (3 + ulen (val, 10));
|
61 |
|
|
sprintf (data->as_in, "fs%u", val);
|
62 |
|
|
data->bits = val;
|
63 |
|
|
data->bits = ((data->bits & 15) << arg->i1) | ((data->bits >> 4) << arg->i2);
|
64 |
|
|
|
65 |
|
|
return 0;
|
66 |
|
|
}
|
67 |
|
|
|
68 |
|
|
/* Emit an AM33-2 FP single-precision register in the ``accumulator''
|
69 |
|
|
* range, with the 2 least significant bits shifted by shiftlow and
|
70 |
|
|
* the most significant bit shifted by shifthigh. */
|
71 |
|
|
int
|
72 |
|
|
areg (func_arg *arg, insn_data *data)
|
73 |
|
|
#define areg(shiftlow, shifthigh) { areg, { i1: shiftlow, i2: shifthigh } }
|
74 |
|
|
{
|
75 |
|
|
unsigned val = get_bits (3u);
|
76 |
|
|
|
77 |
|
|
data->as_in = data->dis_out = (char*)malloc (4);
|
78 |
|
|
sprintf (data->as_in, "fs%u", val);
|
79 |
|
|
data->bits = val;
|
80 |
|
|
data->bits = ((data->bits & 3) << arg->i1) | ((data->bits >> 2) << arg->i2);
|
81 |
|
|
|
82 |
|
|
return 0;
|
83 |
|
|
}
|
84 |
|
|
|
85 |
|
|
/* Emit an AM33-2 FP double-precision register, with the 4 least
|
86 |
|
|
* significant bits shifted by shiftlow and the most significant bit
|
87 |
|
|
* shifted by shifthigh. */
|
88 |
|
|
int
|
89 |
|
|
dreg (func_arg *arg, insn_data *data)
|
90 |
|
|
#define dreg(shiftlow, shifthigh) { dreg, { i1: shiftlow, i2: shifthigh } }
|
91 |
|
|
{
|
92 |
|
|
unsigned val = 2 * get_bits (4u);
|
93 |
|
|
|
94 |
|
|
data->as_in = data->dis_out = (char*)malloc (3 + ulen (val, 10));
|
95 |
|
|
sprintf (data->as_in, "fd%u", val);
|
96 |
|
|
data->bits = val;
|
97 |
|
|
data->bits = ((data->bits & 15) << arg->i1) | ((data->bits >> 4) << arg->i2);
|
98 |
|
|
|
99 |
|
|
return 0;
|
100 |
|
|
}
|
101 |
|
|
|
102 |
|
|
/* Emit a signed 8-bit PC-relative offset from the current insn to the
|
103 |
|
|
* last emitted label. */
|
104 |
|
|
int
|
105 |
|
|
d8pcoff (func_arg *arg, insn_data *data)
|
106 |
|
|
#define d8pcoff(shift) { d8pcoff, { p1: shift } }
|
107 |
|
|
{
|
108 |
|
|
int diff = insn_size - arg->i1/8 - 1;
|
109 |
|
|
int displacement = current_offset - last_label_offset;
|
110 |
|
|
char *current_address = malloc (strlen (last_label_name) + 4
|
111 |
|
|
+ ulen (displacement, 16) + 1);
|
112 |
|
|
|
113 |
|
|
/* Make sure we're not too far from the target. */
|
114 |
|
|
if (displacement > 128)
|
115 |
|
|
abort ();
|
116 |
|
|
|
117 |
|
|
data->as_in = strdup (last_label_name);
|
118 |
|
|
|
119 |
|
|
/* Calculate the address that will be printed by the disassembler as
|
120 |
|
|
the target of the jump. Since it won't take relocations into
|
121 |
|
|
account, it will be the insn's own address. */
|
122 |
|
|
if (current_offset == last_label_offset)
|
123 |
|
|
strcpy (current_address, last_label_name);
|
124 |
|
|
else
|
125 |
|
|
sprintf (current_address, "%s\\+0x%x", last_label_name, displacement);
|
126 |
|
|
|
127 |
|
|
/* Compute the complete label, including the relocation message
|
128 |
|
|
printed as an additional message. The relocation will point us
|
129 |
|
|
to the intended target label plus an offset equal to the offset
|
130 |
|
|
of the displacement within the current insn. We do not account
|
131 |
|
|
for the case in which this displacement is zero, since it doesn't
|
132 |
|
|
come up on this platform. */
|
133 |
|
|
data->dis_out = malloc (8 + 2 + strlen (current_address) + 2
|
134 |
|
|
+ 3 + ulen (current_offset + diff, 16) + 19
|
135 |
|
|
+ strlen (last_label_name) + 4
|
136 |
|
|
+ ulen (diff, 16) + 1);
|
137 |
|
|
sprintf (data->dis_out, "0*%x <%s>\n"
|
138 |
|
|
"\t\t\t%x: R_MN10300_PCREL8\t%s\\+0x%x",
|
139 |
|
|
current_offset, current_address,
|
140 |
|
|
current_offset + diff, last_label_name, diff);
|
141 |
|
|
|
142 |
|
|
free (current_address);
|
143 |
|
|
|
144 |
|
|
return 0;
|
145 |
|
|
}
|
146 |
|
|
|
147 |
|
|
/* Emit a signed 8-bit PC-relative offset from the current insn to the
|
148 |
|
|
* current section. */
|
149 |
|
|
int
|
150 |
|
|
d8pcsec (func_arg *arg, insn_data *data)
|
151 |
|
|
#define d8pcsec(shift) { d8pcsec, { p1: shift } }
|
152 |
|
|
{
|
153 |
|
|
int diff = insn_size - arg->i1/8 - 1;
|
154 |
|
|
int displacement = current_offset - last_label_offset;
|
155 |
|
|
char *current_address = malloc (strlen (last_label_name) + 4
|
156 |
|
|
+ ulen (displacement, 16) + 1);
|
157 |
|
|
|
158 |
|
|
/* Make sure we're not too far from the target. */
|
159 |
|
|
if (displacement > 128)
|
160 |
|
|
abort ();
|
161 |
|
|
|
162 |
|
|
data->as_in = strdup (last_label_name);
|
163 |
|
|
|
164 |
|
|
/* Calculate the address that will be printed by the disassembler as
|
165 |
|
|
the target of the jump. Since it won't take relocations into
|
166 |
|
|
account, it will be the insn's own address. */
|
167 |
|
|
|
168 |
|
|
if (current_offset == last_label_offset)
|
169 |
|
|
strcpy (current_address, last_label_name);
|
170 |
|
|
else
|
171 |
|
|
sprintf (current_address, "%s\\+0x%x", last_label_name, displacement);
|
172 |
|
|
|
173 |
|
|
|
174 |
|
|
/* Compute the complete label, including the relocation message
|
175 |
|
|
printed as an additional message. The relocation will point us
|
176 |
|
|
to the intended target label plus an offset equal to the offset
|
177 |
|
|
of the displacement within the current insn. We do not account
|
178 |
|
|
for the case in which this displacement is zero, since it doesn't
|
179 |
|
|
come up on this platform. */
|
180 |
|
|
data->dis_out = malloc (8 + 2 + strlen (current_address) + 2
|
181 |
|
|
+ 3 + ulen (current_offset + diff, 16) + 33);
|
182 |
|
|
sprintf (data->dis_out, "0*%x <%s>\n"
|
183 |
|
|
"\t\t\t%x: R_MN10300_PCREL8\tcondjmp\\+0x2",
|
184 |
|
|
current_offset, current_address,
|
185 |
|
|
current_offset + diff);
|
186 |
|
|
|
187 |
|
|
free (current_address);
|
188 |
|
|
|
189 |
|
|
return 0;
|
190 |
|
|
}
|
191 |
|
|
|
192 |
|
|
/* Convenience wrapper to define_insn. */
|
193 |
|
|
#define def_am_insn(insname, variant, size, word, funcs...) \
|
194 |
|
|
define_insn(insname ## _ ## variant, \
|
195 |
|
|
insn_size_bits (insname, size, \
|
196 |
|
|
((unsigned long long)word) << 8*(size-2)), \
|
197 |
|
|
tab, \
|
198 |
|
|
## funcs)
|
199 |
|
|
#define am_insn(insname, variant) insn (insname ## _ ## variant)
|
200 |
|
|
|
201 |
|
|
#define def_bit_insn(insname, word) \
|
202 |
|
|
def_am_insn (insname, i8a16, 5, word, \
|
203 |
|
|
u8(0), comma, lparen, a16 (8), rparen, tick_random);
|
204 |
|
|
#define bit_insn(insname) insn (insname ## _ ## i8a16)
|
205 |
|
|
|
206 |
|
|
/* Data cache pre-fetch insns. */
|
207 |
|
|
def_am_insn (dcpf, r, 3, 0xf9a6, lparen, amreg (4), rparen);
|
208 |
|
|
def_am_insn (dcpf, sp, 3, 0xf9a7, lparen, spreg, rparen);
|
209 |
|
|
def_am_insn (dcpf, rr, 4, 0xfba6,
|
210 |
|
|
lparen, amreg(12), comma, amreg (8), rparen, tick_random);
|
211 |
|
|
def_am_insn (dcpf, d8r, 4, 0xfba7,
|
212 |
|
|
lparen, d8 (0), comma, amreg (12), rparen, tick_random);
|
213 |
|
|
def_am_insn (dcpf, d24r, 6, 0xfda7,
|
214 |
|
|
lparen, d24(0), comma, amreg (28), rparen, tick_random);
|
215 |
|
|
def_am_insn (dcpf, d32r, 7, 0xfe46,
|
216 |
|
|
lparen, d32(0), comma, amreg (36), rparen, tick_random);
|
217 |
|
|
|
218 |
|
|
/* Define the group of data cache pre-fetch insns. */
|
219 |
|
|
func *dcpf_insns[] = {
|
220 |
|
|
am_insn (dcpf, r),
|
221 |
|
|
am_insn (dcpf, sp),
|
222 |
|
|
am_insn (dcpf, rr),
|
223 |
|
|
am_insn (dcpf, d8r),
|
224 |
|
|
am_insn (dcpf, d24r),
|
225 |
|
|
am_insn (dcpf, d32r),
|
226 |
|
|
|
227 |
|
|
};
|
228 |
|
|
|
229 |
|
|
/* Bit operations. */
|
230 |
|
|
def_bit_insn (bset, 0xfe80);
|
231 |
|
|
def_bit_insn (bclr, 0xfe81);
|
232 |
|
|
def_bit_insn (btst, 0xfe82);
|
233 |
|
|
|
234 |
|
|
/* Define the group of bit insns. */
|
235 |
|
|
func *bit_insns[] = {
|
236 |
|
|
bit_insn (bset),
|
237 |
|
|
bit_insn (bclr),
|
238 |
|
|
bit_insn (btst),
|
239 |
|
|
|
240 |
|
|
};
|
241 |
|
|
|
242 |
|
|
/* Define the single-precision FP move insns. */
|
243 |
|
|
def_am_insn (fmov, irfs, 3, 0xf920,
|
244 |
|
|
lparen, amreg (4), rparen, comma,
|
245 |
|
|
freg (0, 8), tick_random);
|
246 |
|
|
def_am_insn (fmov, rpfs, 3, 0xf922,
|
247 |
|
|
lparen, amreg (4), plus, rparen, comma,
|
248 |
|
|
freg (0, 8), tick_random);
|
249 |
|
|
def_am_insn (fmov, spfs, 3, 0xf924,
|
250 |
|
|
lparen, spreg, rparen, comma, freg (0, 8));
|
251 |
|
|
def_am_insn (fmov, vrfs, 3, 0xf926,
|
252 |
|
|
amreg (4), comma, freg (0, 8), tick_random);
|
253 |
|
|
def_am_insn (fmov, fsir, 3, 0xf930,
|
254 |
|
|
freg (4, 9), comma, lparen, amreg (0), rparen, tick_random);
|
255 |
|
|
def_am_insn (fmov, fsrp, 3, 0xf931,
|
256 |
|
|
freg (4, 9), comma, lparen, amreg (0), plus, rparen, tick_random);
|
257 |
|
|
def_am_insn (fmov, fssp, 3, 0xf934,
|
258 |
|
|
freg (4, 9), comma, lparen, spreg, rparen);
|
259 |
|
|
def_am_insn (fmov, fsvr, 3, 0xf935,
|
260 |
|
|
freg (4, 9), comma, amreg (0), tick_random);
|
261 |
|
|
def_am_insn (fmov, fsfs, 3, 0xf940,
|
262 |
|
|
freg (4, 9), comma, freg (0, 8), tick_random);
|
263 |
|
|
def_am_insn (fmov, d8rfs, 4, 0xfb20,
|
264 |
|
|
lparen, d8 (0), comma, amreg (12), rparen, comma,
|
265 |
|
|
freg (8, 16));
|
266 |
|
|
def_am_insn (fmov, rpi8fs, 4, 0xfb22,
|
267 |
|
|
lparen, amreg (12), plus, comma, d8 (0), rparen, comma,
|
268 |
|
|
freg (8, 16));
|
269 |
|
|
def_am_insn (fmov, d8spfs, 4, 0xfb24,
|
270 |
|
|
lparen, u8 (0), comma, spreg, rparen, comma, freg (8, 16),
|
271 |
|
|
tick_random);
|
272 |
|
|
def_am_insn (fmov, irrfs, 4, 0xfb27,
|
273 |
|
|
lparen, amreg (12), comma, amreg (8), rparen, comma,
|
274 |
|
|
freg (4, 1));
|
275 |
|
|
def_am_insn (fmov, fsd8r, 4, 0xfb30,
|
276 |
|
|
freg (12, 17), comma, lparen, d8 (0), comma, amreg (8), rparen);
|
277 |
|
|
def_am_insn (fmov, fsrpi8, 4, 0xfb31,
|
278 |
|
|
freg (12, 17), comma,
|
279 |
|
|
lparen, amreg (8), plus, comma, d8 (0), rparen);
|
280 |
|
|
def_am_insn (fmov, fsd8sp, 4, 0xfb34,
|
281 |
|
|
freg (12, 17), comma,
|
282 |
|
|
lparen, u8 (0), comma, spreg, rparen, tick_random);
|
283 |
|
|
def_am_insn (fmov, fsirr, 4, 0xfb37,
|
284 |
|
|
freg (4, 1), comma,
|
285 |
|
|
lparen, amreg (12), comma, amreg (8), rparen);
|
286 |
|
|
def_am_insn (fmov, d24rfs, 6, 0xfd20,
|
287 |
|
|
lparen, d24 (0), comma, amreg (28), rparen, comma, freg (24, 32));
|
288 |
|
|
def_am_insn (fmov, rpi24fs, 6, 0xfd22,
|
289 |
|
|
lparen, amreg (28), plus, comma, d24 (0), rparen, comma,
|
290 |
|
|
freg (24, 32));
|
291 |
|
|
def_am_insn (fmov, d24spfs, 6, 0xfd24,
|
292 |
|
|
lparen, u24 (0), comma, spreg, rparen, comma,
|
293 |
|
|
freg (24, 32), tick_random);
|
294 |
|
|
def_am_insn (fmov, fsd24r, 6, 0xfd30,
|
295 |
|
|
freg (28, 33), comma, lparen, d24 (0), comma, amreg (24), rparen);
|
296 |
|
|
def_am_insn (fmov, fsrpi24, 6, 0xfd31,
|
297 |
|
|
freg (28, 33), comma,
|
298 |
|
|
lparen, amreg (24), plus, comma, d24 (0), rparen);
|
299 |
|
|
def_am_insn (fmov, fsd24sp, 6, 0xfd34,
|
300 |
|
|
freg (28, 33), comma,
|
301 |
|
|
lparen, u24 (0), comma, spreg, rparen, tick_random);
|
302 |
|
|
def_am_insn (fmov, d32rfs, 7, 0xfe20,
|
303 |
|
|
lparen, d32 (0), comma, amreg (36), rparen, comma, freg (32, 40));
|
304 |
|
|
def_am_insn (fmov, rpi32fs, 7, 0xfe22,
|
305 |
|
|
lparen, amreg (36), plus, comma, d32 (0), rparen, comma,
|
306 |
|
|
freg (32, 40));
|
307 |
|
|
def_am_insn (fmov, d32spfs, 7, 0xfe24,
|
308 |
|
|
lparen, d32 (0), comma, spreg, rparen, comma,
|
309 |
|
|
freg (32, 40), tick_random);
|
310 |
|
|
def_am_insn (fmov, i32fs, 7, 0xfe26,
|
311 |
|
|
d32 (0), comma, freg (32, 40), tick_random);
|
312 |
|
|
def_am_insn (fmov, fsd32r, 7, 0xfe30,
|
313 |
|
|
freg (36, 41), comma, lparen, d32 (0), comma, amreg (32), rparen);
|
314 |
|
|
def_am_insn (fmov, fsrpi32, 7, 0xfe31,
|
315 |
|
|
freg (36, 41), comma,
|
316 |
|
|
lparen, amreg (32), plus, comma, d32 (0), rparen);
|
317 |
|
|
def_am_insn (fmov, fsd32sp, 7, 0xfe34,
|
318 |
|
|
freg (36, 41), comma,
|
319 |
|
|
lparen, d32 (0), comma, spreg, rparen, tick_random);
|
320 |
|
|
|
321 |
|
|
/* Define the group of single-precision FP move insns. */
|
322 |
|
|
func *fmovs_insns[] = {
|
323 |
|
|
am_insn (fmov, irfs),
|
324 |
|
|
am_insn (fmov, rpfs),
|
325 |
|
|
am_insn (fmov, spfs),
|
326 |
|
|
am_insn (fmov, vrfs),
|
327 |
|
|
am_insn (fmov, fsir),
|
328 |
|
|
am_insn (fmov, fsrp),
|
329 |
|
|
am_insn (fmov, fssp),
|
330 |
|
|
am_insn (fmov, fsvr),
|
331 |
|
|
am_insn (fmov, fsfs),
|
332 |
|
|
am_insn (fmov, d8rfs),
|
333 |
|
|
am_insn (fmov, rpi8fs),
|
334 |
|
|
am_insn (fmov, d8spfs),
|
335 |
|
|
am_insn (fmov, irrfs),
|
336 |
|
|
am_insn (fmov, fsd8r),
|
337 |
|
|
am_insn (fmov, fsrpi8),
|
338 |
|
|
am_insn (fmov, fsd8sp),
|
339 |
|
|
am_insn (fmov, fsirr),
|
340 |
|
|
am_insn (fmov, d24rfs),
|
341 |
|
|
am_insn (fmov, rpi24fs),
|
342 |
|
|
am_insn (fmov, d24spfs),
|
343 |
|
|
am_insn (fmov, fsd24r),
|
344 |
|
|
am_insn (fmov, fsrpi24),
|
345 |
|
|
am_insn (fmov, fsd24sp),
|
346 |
|
|
am_insn (fmov, d32rfs),
|
347 |
|
|
am_insn (fmov, rpi32fs),
|
348 |
|
|
am_insn (fmov, d32spfs),
|
349 |
|
|
am_insn (fmov, i32fs),
|
350 |
|
|
am_insn (fmov, fsd32r),
|
351 |
|
|
am_insn (fmov, fsrpi32),
|
352 |
|
|
am_insn (fmov, fsd32sp),
|
353 |
|
|
|
354 |
|
|
};
|
355 |
|
|
|
356 |
|
|
/* Define the double-precision FP move insns. */
|
357 |
|
|
def_am_insn (fmov, irfd, 3, 0xf9a0,
|
358 |
|
|
lparen, amreg (4), rparen, comma, dreg (0, 8), tick_random);
|
359 |
|
|
def_am_insn (fmov, rpfd, 3, 0xf9a2,
|
360 |
|
|
lparen, amreg (4), plus, rparen, comma, dreg (0, 8), tick_random);
|
361 |
|
|
def_am_insn (fmov, spfd, 3, 0xf9a4,
|
362 |
|
|
lparen, spreg, rparen, comma, dreg (0, 8));
|
363 |
|
|
def_am_insn (fmov, fdir, 3, 0xf9b0,
|
364 |
|
|
dreg (4, 9), comma, lparen, amreg (0), rparen, tick_random);
|
365 |
|
|
def_am_insn (fmov, fdrp, 3, 0xf9b1,
|
366 |
|
|
dreg (4, 9), comma, lparen, amreg (0), plus, rparen, tick_random);
|
367 |
|
|
def_am_insn (fmov, fdsp, 3, 0xf9b4,
|
368 |
|
|
dreg (4, 9), comma, lparen, spreg, rparen);
|
369 |
|
|
def_am_insn (fmov, fdfd, 3, 0xf9c0,
|
370 |
|
|
dreg (4, 9), comma, dreg (0, 8), tick_random);
|
371 |
|
|
def_am_insn (fmov, irrfd, 4, 0xfb47,
|
372 |
|
|
lparen, amreg (12), comma, amreg (8), rparen, comma, dreg (4, 1));
|
373 |
|
|
def_am_insn (fmov, fdirr, 4, 0xfb57,
|
374 |
|
|
dreg (4, 1), comma, lparen, amreg (12), comma, amreg (8), rparen);
|
375 |
|
|
def_am_insn (fmov, d8rfd, 4, 0xfba0,
|
376 |
|
|
lparen, d8 (0), comma, amreg (12), rparen, comma, dreg (8, 16));
|
377 |
|
|
def_am_insn (fmov, rpi8fd, 4, 0xfba2,
|
378 |
|
|
lparen, amreg (12), plus, comma, d8 (0), rparen, comma,
|
379 |
|
|
dreg (8, 16));
|
380 |
|
|
def_am_insn (fmov, d8spfd, 4, 0xfba4,
|
381 |
|
|
lparen, u8 (0), comma, spreg, rparen, comma,
|
382 |
|
|
dreg (8, 16), tick_random);
|
383 |
|
|
def_am_insn (fmov, fdd8r, 4, 0xfbb0,
|
384 |
|
|
dreg (12, 17), comma, lparen, d8 (0), comma, amreg (8), rparen);
|
385 |
|
|
def_am_insn (fmov, fdrpi8, 4, 0xfbb1,
|
386 |
|
|
dreg (12, 17), comma,
|
387 |
|
|
lparen, amreg (8), plus, comma, d8 (0), rparen);
|
388 |
|
|
def_am_insn (fmov, fdi8sp, 4, 0xfbb4,
|
389 |
|
|
dreg (12, 17), comma,
|
390 |
|
|
lparen, u8 (0), comma, spreg, rparen, tick_random);
|
391 |
|
|
def_am_insn (fmov, d24rfd, 6, 0xfda0,
|
392 |
|
|
lparen, d24 (0), comma, amreg (28), rparen, comma, dreg (24, 32));
|
393 |
|
|
def_am_insn (fmov, rpi24fd, 6, 0xfda2,
|
394 |
|
|
lparen, amreg (28), plus, comma, d24 (0), rparen, comma,
|
395 |
|
|
dreg (24, 32));
|
396 |
|
|
def_am_insn (fmov, d24spfd, 6, 0xfda4,
|
397 |
|
|
lparen, u24 (0), comma, spreg, rparen, comma,
|
398 |
|
|
dreg (24, 32), tick_random);
|
399 |
|
|
def_am_insn (fmov, fdd24r, 6, 0xfdb0,
|
400 |
|
|
dreg (28, 33), comma,
|
401 |
|
|
lparen, d24 (0), comma, amreg (24), rparen);
|
402 |
|
|
def_am_insn (fmov, fdrpi24, 6, 0xfdb1,
|
403 |
|
|
dreg (28, 33), comma,
|
404 |
|
|
lparen, amreg (24), plus, comma, d24 (0), rparen);
|
405 |
|
|
def_am_insn (fmov, fdd24sp, 6, 0xfdb4,
|
406 |
|
|
dreg (28, 33), comma,
|
407 |
|
|
lparen, u24 (0), comma, spreg, rparen, tick_random);
|
408 |
|
|
def_am_insn (fmov, d32rfd, 7, 0xfe40,
|
409 |
|
|
lparen, d32 (0), comma, amreg (36), rparen, comma, dreg (32, 40));
|
410 |
|
|
def_am_insn (fmov, rpi32fd, 7, 0xfe42,
|
411 |
|
|
lparen, amreg (36), plus, comma, d32 (0), rparen, comma,
|
412 |
|
|
dreg (32, 40));
|
413 |
|
|
def_am_insn (fmov, d32spfd, 7, 0xfe44,
|
414 |
|
|
lparen, d32 (0), comma, spreg, rparen, comma,
|
415 |
|
|
dreg (32, 40), tick_random);
|
416 |
|
|
def_am_insn (fmov, fdd32r, 7, 0xfe50,
|
417 |
|
|
dreg (36, 41), comma,
|
418 |
|
|
lparen, d32 (0), comma, amreg (32), rparen);
|
419 |
|
|
def_am_insn (fmov, fdrpi32, 7, 0xfe51,
|
420 |
|
|
dreg (36, 41), comma,
|
421 |
|
|
lparen, amreg (32), plus, comma, d32 (0), rparen);
|
422 |
|
|
def_am_insn (fmov, fdd32sp, 7, 0xfe54,
|
423 |
|
|
dreg (36, 41), comma,
|
424 |
|
|
lparen, d32 (0), comma, spreg, rparen, tick_random);
|
425 |
|
|
|
426 |
|
|
/* Define the group of double-precision FP move insns. */
|
427 |
|
|
func *fmovd_insns[] = {
|
428 |
|
|
am_insn (fmov, irfd),
|
429 |
|
|
am_insn (fmov, rpfd),
|
430 |
|
|
am_insn (fmov, spfd),
|
431 |
|
|
am_insn (fmov, fdir),
|
432 |
|
|
am_insn (fmov, fdrp),
|
433 |
|
|
am_insn (fmov, fdsp),
|
434 |
|
|
am_insn (fmov, fdfd),
|
435 |
|
|
am_insn (fmov, irrfd),
|
436 |
|
|
am_insn (fmov, fdirr),
|
437 |
|
|
am_insn (fmov, d8rfd),
|
438 |
|
|
am_insn (fmov, rpi8fd),
|
439 |
|
|
am_insn (fmov, d8spfd),
|
440 |
|
|
am_insn (fmov, fdd8r),
|
441 |
|
|
am_insn (fmov, fdrpi8),
|
442 |
|
|
am_insn (fmov, fdi8sp),
|
443 |
|
|
am_insn (fmov, d24rfd),
|
444 |
|
|
am_insn (fmov, rpi24fd),
|
445 |
|
|
am_insn (fmov, d24spfd),
|
446 |
|
|
am_insn (fmov, fdd24r),
|
447 |
|
|
am_insn (fmov, fdrpi24),
|
448 |
|
|
am_insn (fmov, fdd24sp),
|
449 |
|
|
am_insn (fmov, d32rfd),
|
450 |
|
|
am_insn (fmov, rpi32fd),
|
451 |
|
|
am_insn (fmov, d32spfd),
|
452 |
|
|
am_insn (fmov, fdd32r),
|
453 |
|
|
am_insn (fmov, fdrpi32),
|
454 |
|
|
am_insn (fmov, fdd32sp),
|
455 |
|
|
|
456 |
|
|
};
|
457 |
|
|
|
458 |
|
|
/* Define fmov FPCR insns. */
|
459 |
|
|
def_am_insn (fmov, vrfc, 3, 0xf9b5,
|
460 |
|
|
amreg (4), comma, fcreg);
|
461 |
|
|
def_am_insn (fmov, fcvr, 3, 0xf9b7,
|
462 |
|
|
fcreg, comma, amreg (0));
|
463 |
|
|
def_am_insn (fmov, i32fc, 6, 0xfdb5,
|
464 |
|
|
d32 (0), comma, fcreg);
|
465 |
|
|
|
466 |
|
|
/* Define the group of FPCR move insns. */
|
467 |
|
|
func *fmovc_insns[] = {
|
468 |
|
|
am_insn (fmov, vrfc),
|
469 |
|
|
am_insn (fmov, fcvr),
|
470 |
|
|
am_insn (fmov, i32fc),
|
471 |
|
|
|
472 |
|
|
};
|
473 |
|
|
|
474 |
|
|
/* Define single-precision floating-point arithmetic insns. */
|
475 |
|
|
def_am_insn (fabs, fs, 3, 0xf944, freg (0, 8));
|
476 |
|
|
def_am_insn (fabs, fsfs, 4, 0xfb44,
|
477 |
|
|
freg (12, 3), comma, freg (4, 1), tick_random);
|
478 |
|
|
def_am_insn (fneg, fs, 3, 0xf946, freg (0, 8));
|
479 |
|
|
def_am_insn (fneg, fsfs, 4, 0xfb46,
|
480 |
|
|
freg (12, 3), comma, freg (4, 1), tick_random);
|
481 |
|
|
def_am_insn (frsqrt, fs, 3, 0xf950, freg (0, 8));
|
482 |
|
|
def_am_insn (frsqrt, fsfs, 4, 0xfb50,
|
483 |
|
|
freg (12, 3), comma, freg (4, 1), tick_random);
|
484 |
|
|
def_am_insn (fsqrt, fs, 3, 0xf952, freg (0, 8));
|
485 |
|
|
def_am_insn (fsqrt, fsfs, 4, 0xfb54,
|
486 |
|
|
freg (12, 3), comma, freg (4, 1), tick_random);
|
487 |
|
|
def_am_insn (fcmp, fsfs, 3, 0xf954,
|
488 |
|
|
freg (4, 9), comma, freg (0, 8), tick_random);
|
489 |
|
|
def_am_insn (fcmp, i32fs, 7, 0xfe35,
|
490 |
|
|
d32 (0), comma, freg (36, 41), tick_random);
|
491 |
|
|
def_am_insn (fadd, fsfs, 3, 0xf960,
|
492 |
|
|
freg (4, 9), comma, freg (0, 8), tick_random);
|
493 |
|
|
def_am_insn (fadd, fsfsfs, 4, 0xfb60,
|
494 |
|
|
freg (12, 3), comma, freg (8, 2), comma, freg (4, 1));
|
495 |
|
|
def_am_insn (fadd, i32fsfs, 7, 0xfe60,
|
496 |
|
|
d32 (0), comma, freg (36, 41), comma, freg (32, 40));
|
497 |
|
|
def_am_insn (fsub, fsfs, 3, 0xf964,
|
498 |
|
|
freg (4, 9), comma, freg (0, 8), tick_random);
|
499 |
|
|
def_am_insn (fsub, fsfsfs, 4, 0xfb64,
|
500 |
|
|
freg (12, 3), comma, freg (8, 2), comma, freg (4, 1));
|
501 |
|
|
def_am_insn (fsub, i32fsfs, 7, 0xfe64,
|
502 |
|
|
d32 (0), comma, freg (36, 41), comma, freg (32, 40));
|
503 |
|
|
def_am_insn (fmul, fsfs, 3, 0xf970,
|
504 |
|
|
freg (4, 9), comma, freg (0, 8), tick_random);
|
505 |
|
|
def_am_insn (fmul, fsfsfs, 4, 0xfb70,
|
506 |
|
|
freg (12, 3), comma, freg (8, 2), comma, freg (4, 1));
|
507 |
|
|
def_am_insn (fmul, i32fsfs, 7, 0xfe70,
|
508 |
|
|
d32 (0), comma, freg (36, 41), comma, freg (32, 40));
|
509 |
|
|
def_am_insn (fdiv, fsfs, 3, 0xf974,
|
510 |
|
|
freg (4, 9), comma, freg (0, 8), tick_random);
|
511 |
|
|
def_am_insn (fdiv, fsfsfs, 4, 0xfb74,
|
512 |
|
|
freg (12, 3), comma, freg (8, 2), comma, freg (4, 1));
|
513 |
|
|
def_am_insn (fdiv, i32fsfs, 7, 0xfe74,
|
514 |
|
|
d32 (0), comma, freg (36, 41), comma, freg (32, 40));
|
515 |
|
|
|
516 |
|
|
/* Define the group of single-precision floating-point arithmetic insns. */
|
517 |
|
|
func *sfparith_insns[] = {
|
518 |
|
|
am_insn (fabs, fs),
|
519 |
|
|
am_insn (fabs, fsfs),
|
520 |
|
|
am_insn (fneg, fs),
|
521 |
|
|
am_insn (fneg, fsfs),
|
522 |
|
|
am_insn (frsqrt, fs),
|
523 |
|
|
am_insn (frsqrt, fsfs),
|
524 |
|
|
am_insn (fsqrt, fs),
|
525 |
|
|
am_insn (fsqrt, fsfs),
|
526 |
|
|
am_insn (fcmp, fsfs),
|
527 |
|
|
am_insn (fcmp, i32fs),
|
528 |
|
|
am_insn (fadd, fsfs),
|
529 |
|
|
am_insn (fadd, fsfsfs),
|
530 |
|
|
am_insn (fadd, i32fsfs),
|
531 |
|
|
am_insn (fsub, fsfs),
|
532 |
|
|
am_insn (fsub, fsfsfs),
|
533 |
|
|
am_insn (fsub, i32fsfs),
|
534 |
|
|
am_insn (fmul, fsfs),
|
535 |
|
|
am_insn (fmul, fsfsfs),
|
536 |
|
|
am_insn (fmul, i32fsfs),
|
537 |
|
|
am_insn (fdiv, fsfs),
|
538 |
|
|
am_insn (fdiv, fsfsfs),
|
539 |
|
|
am_insn (fdiv, i32fsfs),
|
540 |
|
|
|
541 |
|
|
};
|
542 |
|
|
|
543 |
|
|
/* Define floating-point accumulator arithmetic insns. */
|
544 |
|
|
def_am_insn (fmadd, , 4, 0xfb80,
|
545 |
|
|
freg (12, 3), comma, freg (8, 2), comma,
|
546 |
|
|
freg (4, 1), comma, areg (16, 0), tick_random);
|
547 |
|
|
def_am_insn (fmsub, , 4, 0xfb84,
|
548 |
|
|
freg (12, 3), comma, freg (8, 2), comma,
|
549 |
|
|
freg (4, 1), comma, areg (16, 0), tick_random);
|
550 |
|
|
def_am_insn (fnmadd, , 4, 0xfb90,
|
551 |
|
|
freg (12, 3), comma, freg (8, 2), comma,
|
552 |
|
|
freg (4, 1), comma, areg (16, 0), tick_random);
|
553 |
|
|
def_am_insn (fnmsub, , 4, 0xfb94,
|
554 |
|
|
freg (12, 3), comma, freg (8, 2), comma,
|
555 |
|
|
freg (4, 1), comma, areg (16, 0), tick_random);
|
556 |
|
|
|
557 |
|
|
/* Define the group of floating-point accumulator arithmetic insns. */
|
558 |
|
|
func *fpacc_insns[] = {
|
559 |
|
|
am_insn (fmadd, ),
|
560 |
|
|
am_insn (fmsub, ),
|
561 |
|
|
am_insn (fnmadd, ),
|
562 |
|
|
am_insn (fnmsub, ),
|
563 |
|
|
|
564 |
|
|
};
|
565 |
|
|
|
566 |
|
|
/* Define double-precision floating-point arithmetic insns. */
|
567 |
|
|
def_am_insn (fabs, fd, 3, 0xf9c4, dreg (0, 8));
|
568 |
|
|
def_am_insn (fabs, fdfd, 4, 0xfbc4,
|
569 |
|
|
dreg (12, 3), comma, dreg (4, 1), tick_random);
|
570 |
|
|
def_am_insn (fneg, fd, 3, 0xf9c6, dreg (0, 8));
|
571 |
|
|
def_am_insn (fneg, fdfd, 4, 0xfbc6,
|
572 |
|
|
dreg (12, 3), comma, dreg (4, 1), tick_random);
|
573 |
|
|
def_am_insn (frsqrt, fd, 3, 0xf9d0, dreg (0, 8));
|
574 |
|
|
def_am_insn (frsqrt, fdfd, 4, 0xfbd0,
|
575 |
|
|
dreg (12, 3), comma, dreg (4, 1), tick_random);
|
576 |
|
|
def_am_insn (fsqrt, fd, 3, 0xf9d2, dreg (0, 8));
|
577 |
|
|
def_am_insn (fsqrt, fdfd, 4, 0xfbd4,
|
578 |
|
|
dreg (12, 3), comma, dreg (4, 1), tick_random);
|
579 |
|
|
def_am_insn (fcmp, fdfd, 3, 0xf9d4,
|
580 |
|
|
dreg (4, 9), comma, dreg (0, 8), tick_random);
|
581 |
|
|
def_am_insn (fadd, fdfd, 3, 0xf9e0,
|
582 |
|
|
dreg (4, 9), comma, dreg (0, 8), tick_random);
|
583 |
|
|
def_am_insn (fadd, fdfdfd, 4, 0xfbe0,
|
584 |
|
|
dreg (12, 3), comma, dreg (8, 2), comma, dreg (4, 1));
|
585 |
|
|
def_am_insn (fsub, fdfd, 3, 0xf9e4,
|
586 |
|
|
dreg (4, 9), comma, dreg (0, 8), tick_random);
|
587 |
|
|
def_am_insn (fsub, fdfdfd, 4, 0xfbe4,
|
588 |
|
|
dreg (12, 3), comma, dreg (8, 2), comma, dreg (4, 1));
|
589 |
|
|
def_am_insn (fmul, fdfd, 3, 0xf9f0,
|
590 |
|
|
dreg (4, 9), comma, dreg (0, 8), tick_random);
|
591 |
|
|
def_am_insn (fmul, fdfdfd, 4, 0xfbf0,
|
592 |
|
|
dreg (12, 3), comma, dreg (8, 2), comma, dreg (4, 1));
|
593 |
|
|
def_am_insn (fdiv, fdfd, 3, 0xf9f4,
|
594 |
|
|
dreg (4, 9), comma, dreg (0, 8), tick_random);
|
595 |
|
|
def_am_insn (fdiv, fdfdfd, 4, 0xfbf4,
|
596 |
|
|
dreg (12, 3), comma, dreg (8, 2), comma, dreg (4, 1));
|
597 |
|
|
|
598 |
|
|
/* Define the group of double-precision floating-point arithmetic insns. */
|
599 |
|
|
func *dfparith_insns[] = {
|
600 |
|
|
am_insn (fabs, fd),
|
601 |
|
|
am_insn (fabs, fdfd),
|
602 |
|
|
am_insn (fneg, fd),
|
603 |
|
|
am_insn (fneg, fdfd),
|
604 |
|
|
am_insn (frsqrt, fd),
|
605 |
|
|
am_insn (frsqrt, fdfd),
|
606 |
|
|
am_insn (fsqrt, fd),
|
607 |
|
|
am_insn (fsqrt, fdfd),
|
608 |
|
|
am_insn (fcmp, fdfd),
|
609 |
|
|
am_insn (fadd, fdfd),
|
610 |
|
|
am_insn (fadd, fdfdfd),
|
611 |
|
|
am_insn (fsub, fdfd),
|
612 |
|
|
am_insn (fsub, fdfdfd),
|
613 |
|
|
am_insn (fmul, fdfd),
|
614 |
|
|
am_insn (fmul, fdfdfd),
|
615 |
|
|
am_insn (fdiv, fdfd),
|
616 |
|
|
am_insn (fdiv, fdfdfd),
|
617 |
|
|
|
618 |
|
|
};
|
619 |
|
|
|
620 |
|
|
/* Define floating-point conversion insns. */
|
621 |
|
|
def_am_insn (ftoi, fsfs, 4, 0xfb40,
|
622 |
|
|
freg (12, 3), comma, freg (4, 1), tick_random);
|
623 |
|
|
def_am_insn (itof, fsfs, 4, 0xfb42,
|
624 |
|
|
freg (12, 3), comma, freg (4, 1), tick_random);
|
625 |
|
|
def_am_insn (ftod, fsfd, 4, 0xfb52,
|
626 |
|
|
freg (12, 3), comma, dreg (4, 1), tick_random);
|
627 |
|
|
def_am_insn (dtof, fdfs, 4, 0xfb56,
|
628 |
|
|
dreg (12, 3), comma, freg (4, 1), tick_random);
|
629 |
|
|
|
630 |
|
|
/* Define the group of floating-point conversion insns. */
|
631 |
|
|
func *fpconv_insns[] = {
|
632 |
|
|
am_insn (ftoi, fsfs),
|
633 |
|
|
am_insn (itof, fsfs),
|
634 |
|
|
am_insn (ftod, fsfd),
|
635 |
|
|
am_insn (dtof, fdfs),
|
636 |
|
|
|
637 |
|
|
};
|
638 |
|
|
|
639 |
|
|
/* Define conditional jump insns. */
|
640 |
|
|
def_am_insn (fbeq, , 3, 0xf8d0, d8pcsec (0));
|
641 |
|
|
def_am_insn (fbne, , 3, 0xf8d1, d8pcsec (0));
|
642 |
|
|
def_am_insn (fbgt, , 3, 0xf8d2, d8pcsec (0));
|
643 |
|
|
def_am_insn (fbge, , 3, 0xf8d3, d8pcsec (0));
|
644 |
|
|
def_am_insn (fblt, , 3, 0xf8d4, d8pcsec (0));
|
645 |
|
|
def_am_insn (fble, , 3, 0xf8d5, d8pcsec (0));
|
646 |
|
|
def_am_insn (fbuo, , 3, 0xf8d6, d8pcsec (0));
|
647 |
|
|
def_am_insn (fblg, , 3, 0xf8d7, d8pcsec (0));
|
648 |
|
|
def_am_insn (fbleg,, 3, 0xf8d8, d8pcsec (0));
|
649 |
|
|
def_am_insn (fbug, , 3, 0xf8d9, d8pcsec (0));
|
650 |
|
|
def_am_insn (fbuge,, 3, 0xf8da, d8pcsec (0));
|
651 |
|
|
def_am_insn (fbul, , 3, 0xf8db, d8pcsec (0));
|
652 |
|
|
def_am_insn (fbule,, 3, 0xf8dc, d8pcsec (0));
|
653 |
|
|
def_am_insn (fbue, , 3, 0xf8dd, d8pcsec (0));
|
654 |
|
|
def_am_insn (fleq, , 2, 0xf0d0, nothing);
|
655 |
|
|
def_am_insn (flne, , 2, 0xf0d1, nothing);
|
656 |
|
|
def_am_insn (flgt, , 2, 0xf0d2, nothing);
|
657 |
|
|
def_am_insn (flge, , 2, 0xf0d3, nothing);
|
658 |
|
|
def_am_insn (fllt, , 2, 0xf0d4, nothing);
|
659 |
|
|
def_am_insn (flle, , 2, 0xf0d5, nothing);
|
660 |
|
|
def_am_insn (fluo, , 2, 0xf0d6, nothing);
|
661 |
|
|
def_am_insn (fllg, , 2, 0xf0d7, nothing);
|
662 |
|
|
def_am_insn (flleg,, 2, 0xf0d8, nothing);
|
663 |
|
|
def_am_insn (flug, , 2, 0xf0d9, nothing);
|
664 |
|
|
def_am_insn (fluge,, 2, 0xf0da, nothing);
|
665 |
|
|
def_am_insn (flul, , 2, 0xf0db, nothing);
|
666 |
|
|
def_am_insn (flule,, 2, 0xf0dc, nothing);
|
667 |
|
|
def_am_insn (flue, , 2, 0xf0dd, nothing);
|
668 |
|
|
|
669 |
|
|
/* Define the group of conditional jump insns. */
|
670 |
|
|
func *condjmp_insns[] = {
|
671 |
|
|
am_insn (fbeq, ),
|
672 |
|
|
am_insn (fbne, ),
|
673 |
|
|
am_insn (fbgt, ),
|
674 |
|
|
am_insn (fbge, ),
|
675 |
|
|
am_insn (fblt, ),
|
676 |
|
|
am_insn (fble, ),
|
677 |
|
|
am_insn (fbuo, ),
|
678 |
|
|
am_insn (fblg, ),
|
679 |
|
|
am_insn (fbleg, ),
|
680 |
|
|
am_insn (fbug, ),
|
681 |
|
|
am_insn (fbuge, ),
|
682 |
|
|
am_insn (fbul, ),
|
683 |
|
|
am_insn (fbule, ),
|
684 |
|
|
am_insn (fbue, ),
|
685 |
|
|
am_insn (fleq, ),
|
686 |
|
|
am_insn (flne, ),
|
687 |
|
|
am_insn (flgt, ),
|
688 |
|
|
am_insn (flge, ),
|
689 |
|
|
am_insn (fllt, ),
|
690 |
|
|
am_insn (flle, ),
|
691 |
|
|
am_insn (fluo, ),
|
692 |
|
|
am_insn (fllg, ),
|
693 |
|
|
am_insn (flleg, ),
|
694 |
|
|
am_insn (flug, ),
|
695 |
|
|
am_insn (fluge, ),
|
696 |
|
|
am_insn (flul, ),
|
697 |
|
|
am_insn (flule, ),
|
698 |
|
|
am_insn (flue, ),
|
699 |
|
|
|
700 |
|
|
};
|
701 |
|
|
|
702 |
|
|
/* Define the set of all groups. */
|
703 |
|
|
group_t
|
704 |
|
|
groups[] = {
|
705 |
|
|
{ "dcpf", dcpf_insns },
|
706 |
|
|
{ "bit", bit_insns },
|
707 |
|
|
{ "fmovs", fmovs_insns },
|
708 |
|
|
{ "fmovd", fmovd_insns },
|
709 |
|
|
{ "fmovc", fmovc_insns },
|
710 |
|
|
{ "sfparith", sfparith_insns },
|
711 |
|
|
{ "fpacc", fpacc_insns },
|
712 |
|
|
{ "dfparith", dfparith_insns },
|
713 |
|
|
{ "fpconv", fpconv_insns },
|
714 |
|
|
{ "condjmp", condjmp_insns },
|
715 |
|
|
{ 0 }
|
716 |
|
|
};
|
717 |
|
|
|
718 |
|
|
int
|
719 |
|
|
main(int argc, char *argv[])
|
720 |
|
|
{
|
721 |
|
|
FILE *as_in = stdout, *dis_out = stderr;
|
722 |
|
|
|
723 |
|
|
/* Check whether we're filtering insns. */
|
724 |
|
|
if (argc > 1)
|
725 |
|
|
skip_list = argv + 1;
|
726 |
|
|
|
727 |
|
|
/* Output assembler header. */
|
728 |
|
|
fputs ("\t.text\n"
|
729 |
|
|
"\t.am33_2\n",
|
730 |
|
|
as_in);
|
731 |
|
|
/* Output comments for the testsuite-driver and the initial
|
732 |
|
|
* disassembler output. */
|
733 |
|
|
fputs ("#objdump: -dr --prefix-address --show-raw-insn\n"
|
734 |
|
|
"#name: AM33/2.0\n"
|
735 |
|
|
"\n"
|
736 |
|
|
".*: +file format.*elf32-mn10300.*\n"
|
737 |
|
|
"\n"
|
738 |
|
|
"Disassembly of section .text:\n",
|
739 |
|
|
dis_out);
|
740 |
|
|
|
741 |
|
|
/* Now emit all (selected) insns. */
|
742 |
|
|
output_groups (groups, as_in, dis_out);
|
743 |
|
|
|
744 |
|
|
exit (0);
|
745 |
|
|
}
|