[gdb/testsuite] Fix regexp in skip_opencl_tests
[external/binutils.git] / include / opcode / tic6x-insn-formats.h
1 /* TI C6X instruction format information.
2    Copyright (C) 2010-2019 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify
5    it 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,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU 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 /* Define the FMT macro before including this file; it takes a name
20    and the fields from tic6x_insn_format (defined in tic6x.h).  */
21
22 /* Expansion fields values for 16 bits insn.  */
23 #define SAT(a) (((a) & 1) << TIC6X_COMPACT_SAT_POS)
24 #define BR(a) (((a) & 1) << TIC6X_COMPACT_BR_POS)
25 #define DSZ(a) (((a) & 7) << TIC6X_COMPACT_DSZ_POS)
26 /* Composite fields for 16 bits insn.  */
27 #define BFLD(low_pos, width, pos) { (low_pos), (width), (pos) }
28 #define BFLD1(a) 1, { a }
29 #define BFLD2(a, b) 2, { a, b }
30 #define BFLD3(a, b, c) 3, { a, b, c }
31 #define BFLD4(a, b, c, d) 4, { a, b, c, d }
32 #define COMPFLD(name, bitfields) { CONCAT2(tic6x_field_,name),  bitfields }
33 /**/
34 #define FLD(name, pos, width) { CONCAT2(tic6x_field_,name), BFLD1(BFLD(pos, width, 0)) }
35 #define CFLDS FLD(p, 0, 1), FLD(creg, 29, 3), FLD(z, 28, 1)
36 #define CFLDS2(a, b) 5, { CFLDS, a, b }
37 #define CFLDS3(a, b, c) 6, { CFLDS, a, b, c }
38 #define CFLDS4(a, b, c, d) 7, { CFLDS, a, b, c, d }
39 #define CFLDS5(a, b, c, d, e) 8, { CFLDS, a, b, c, d, e }
40 #define CFLDS6(a, b, c, d, e, f) 9, { CFLDS, a, b, c, d, e, f }
41 #define CFLDS7(a, b, c, d, e, f, g) 10, { CFLDS, a, b, c, d, e, f, g }
42 #define CFLDS8(a, b, c, d, e, f, g, h) 11, { CFLDS, a, b, c, d, e, f, g, h }
43 #define NFLDS FLD(p, 0, 1)
44 #define NFLDS1(a) 2, { NFLDS, a }
45 #define NFLDS2(a, b) 3, { NFLDS, a, b }
46 #define NFLDS3(a, b, c) 4, { NFLDS, a, b, c }
47 #define NFLDS5(a, b, c, d, e) 6, { NFLDS, a, b, c, d, e }
48 #define NFLDS6(a, b, c, d, e, f) 7, { NFLDS, a, b, c, d, e, f }
49 #define NFLDS7(a, b, c, d, e, f, g) 8, { NFLDS, a, b, c, d, e, f, g }
50 /* 16 bits insn */
51 #define FLDS1(a) 1, { a }
52 #define FLDS2(a, b) 2, { a, b }
53 #define FLDS3(a, b, c) 3, { a, b, c }
54 #define FLDS4(a, b, c, d) 4, { a, b, c, d }
55 #define FLDS5(a, b, c, d, e) 5, { a, b, c, d, e }
56 #define SFLDS FLD(s, 0, 1)
57 #define SFLDS1(a) 2, { SFLDS, a }
58 #define SFLDS2(a, b) 3, { SFLDS, a, b }
59 #define SFLDS3(a, b, c) 4, { SFLDS, a, b, c }
60 #define SFLDS4(a, b, c, d) 5, { SFLDS, a, b, c, d }
61 #define SFLDS5(a, b, c, d, e) 6, { SFLDS, a, b, c, d, e }
62 #define SFLDS6(a, b, c, d, e, f) 7, { SFLDS, a, b, c, d, e, f }
63 #define SFLDS7(a, b, c, d, e, f, g) 8, { SFLDS, a, b, c, d, e, f, g }
64 /**/
65
66 /* These are in the order from SPRUFE8, appendices C-H.  */
67
68 /* Appendix C 32-bit formats.  */
69
70 FMT(d_1_or_2_src, 32, 0x40, 0x7c,
71     CFLDS5(FLD(s, 1, 1), FLD(op, 7, 6), FLD(src1, 13, 5), FLD(src2, 18, 5),
72            FLD(dst, 23, 5)))
73 FMT(d_ext_1_or_2_src, 32, 0x830, 0xc3c,
74     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
75            FLD(src2, 18, 5), FLD(dst, 23, 5)))
76 FMT(d_load_store, 32, 0x4, 0xc,
77     CFLDS8(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(r, 8, 1),
78            FLD(mode, 9, 4), FLD(offsetR, 13, 5), FLD(baseR, 18, 5),
79            FLD(srcdst, 23, 5)))
80 /* The nonaligned loads and stores have the formats shown in the
81    individual instruction descriptions; the appendix is incorrect.  */
82 FMT(d_load_nonaligned, 32, 0x124, 0x17c,
83     CFLDS7(FLD(s, 1, 1), FLD(y, 7, 1), FLD(mode, 9, 4), FLD(offsetR, 13, 5),
84            FLD(baseR, 18, 5), FLD(sc, 23, 1), FLD(dst, 24, 4)))
85 FMT(d_store_nonaligned, 32, 0x174, 0x17c,
86     CFLDS7(FLD(s, 1, 1), FLD(y, 7, 1), FLD(mode, 9, 4), FLD(offsetR, 13, 5),
87            FLD(baseR, 18, 5), FLD(sc, 23, 1), FLD(src, 24, 4)))
88 FMT(d_load_store_long, 32, 0xc, 0xc,
89     CFLDS5(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(offsetR, 8, 15),
90            FLD(dst, 23, 5)))
91 FMT(d_adda_long, 32, 0x1000000c, 0xf000000c,
92     NFLDS5(FLD(s, 1, 1), FLD(op, 4, 3), FLD(y, 7, 1), FLD(offsetR, 8, 15),
93            FLD(dst, 23, 5)))
94
95 /* Appendix C 16-bit formats will go here.  */
96
97 /* C-8 */
98 FMT(d_doff4_dsz_0xx, 16, DSZ(0) | 0x0004, DSZ(0x4) | 0x0406,
99     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
100            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
101 FMT(d_doff4_dsz_100, 16, DSZ(4) | 0x0004, DSZ(0x7) | 0x0406,
102     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
103            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
104 FMT(d_doff4_dsz_000, 16, DSZ(0) | 0x0004, DSZ(0x7) | 0x0406,
105     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
106            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
107 FMT(d_doff4_dsz_x01, 16, DSZ(1) | 0x0004, DSZ(0x3) | 0x0406,
108     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
109            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
110 FMT(d_doff4_dsz_01x, 16, DSZ(2) | 0x0004, DSZ(0x6) | 0x0406,
111     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
112            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
113 FMT(d_doff4_dsz_111, 16, DSZ(7) | 0x0004, DSZ(0x7) | 0x0406,
114     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
115            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
116 FMT(d_doff4_dsz_x11, 16, DSZ(3) | 0x0004, DSZ(0x3) | 0x0406,
117     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
118            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
119 FMT(d_doff4_dsz_010, 16, DSZ(2) | 0x0004, DSZ(0x7) | 0x0406,
120     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
121            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
122 FMT(d_doff4_dsz_110, 16, DSZ(6) | 0x0004, DSZ(0x7) | 0x0406,
123     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
124            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
125
126 /* C-9 */
127 FMT(d_doff4dw, 16, DSZ(4) | 0x0004, DSZ(0x4) | 0x0406,
128     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2), FLD(sz, 9, 1), FLD(t, 12, 1),
129            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3))))) 
130
131 /* C-10 */
132 FMT(d_dind_dsz_0xx, 16, DSZ(0) | 0x0404, DSZ(0x4) | 0x0c06,
133     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
134            FLD(t, 12, 1), FLD(src1, 13, 3)))
135
136 FMT(d_dind_dsz_x01, 16, DSZ(1) | 0x0404, DSZ(0x3) | 0x0c06,
137     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
138            FLD(t, 12, 1), FLD(src1, 13, 3)))
139
140 FMT(d_dind_dsz_x11, 16, DSZ(3) | 0x0404, DSZ(0x3) | 0x0c06,
141     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
142            FLD(t, 12, 1), FLD(src1, 13, 3)))
143
144 FMT(d_dind_dsz_01x, 16, DSZ(2) | 0x0404, DSZ(0x6) | 0x0c06,
145     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
146            FLD(t, 12, 1), FLD(src1, 13, 3)))
147
148 FMT(d_dind_dsz_000, 16, DSZ(0) | 0x0404, DSZ(0x7) | 0x0c06,
149     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
150            FLD(t, 12, 1), FLD(src1, 13, 3)))
151
152 FMT(d_dind_dsz_010, 16, DSZ(2) | 0x0404, DSZ(0x7) | 0x0c06,
153     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
154            FLD(t, 12, 1), FLD(src1, 13, 3)))
155
156 FMT(d_dind_dsz_100, 16, DSZ(4) | 0x0404, DSZ(0x7) | 0x0c06,
157     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
158            FLD(t, 12, 1), FLD(src1, 13, 3)))
159
160 FMT(d_dind_dsz_110, 16, DSZ(6) | 0x0404, DSZ(0x7) | 0x0c06,
161     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
162            FLD(t, 12, 1), FLD(src1, 13, 3)))
163
164 FMT(d_dind_dsz_111, 16, DSZ(7) | 0x0404, DSZ(0x7) | 0x0c06,
165     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
166            FLD(t, 12, 1), FLD(src1, 13, 3)))
167
168 /* C-11 */
169 FMT(d_dinddw, 16, DSZ(4) | 0x0404, DSZ(0x4) | 0x0c06,
170     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
171            FLD(sz, 9, 1), FLD(t, 12, 1), FLD(src1, 13, 3)))
172
173 /* C-12 */
174 FMT(d_dinc_dsz_x01, 16, DSZ(1) | 0x0c04, DSZ(0x3) | 0xcc06,
175     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
176            FLD(t, 12, 1), FLD(cst, 13, 1)))
177
178 FMT(d_dinc_dsz_0xx, 16, DSZ(0) | 0x0c04, DSZ(0x4) | 0xcc06,
179     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
180            FLD(t, 12, 1), FLD(cst, 13, 1)))
181
182 FMT(d_dinc_dsz_01x, 16, DSZ(2) | 0x0c04, DSZ(0x6) | 0xcc06,
183     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
184            FLD(t, 12, 1), FLD(cst, 13, 1)))
185
186 FMT(d_dinc_dsz_x11,16, DSZ(3) | 0x0c04, DSZ(0x3) | 0xcc06,
187     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
188            FLD(t, 12, 1), FLD(cst, 13, 1)))
189
190 FMT(d_dinc_dsz_000, 16, DSZ(0) | 0x0c04, DSZ(0x7) | 0xcc06,
191     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
192            FLD(t, 12, 1), FLD(cst, 13, 1)))
193
194 FMT(d_dinc_dsz_010, 16, DSZ(2) | 0x0c04, DSZ(0x7) | 0xcc06,
195     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
196            FLD(t, 12, 1), FLD(cst, 13, 1)))
197
198 FMT(d_dinc_dsz_100, 16, DSZ(4) | 0x0c04, DSZ(0x7) | 0xcc06,
199     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
200            FLD(t, 12, 1), FLD(cst, 13, 1)))
201
202 FMT(d_dinc_dsz_110, 16, DSZ(6) | 0x0c04, DSZ(0x7) | 0xcc06,
203     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
204            FLD(t, 12, 1), FLD(cst, 13, 1)))
205
206 FMT(d_dinc_dsz_111, 16, DSZ(7) | 0x0c04, DSZ(0x7) | 0xcc06,
207     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
208            FLD(t, 12, 1), FLD(cst, 13, 1)))
209
210 /* C-13*/
211 FMT(d_dincdw, 16, DSZ(4) | 0x0c04, DSZ(0x4) | 0xcc06,
212     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1), FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
213            FLD(sz, 9, 1), FLD(t, 12, 1), FLD(cst, 13, 1)))
214
215 /* C-14 */
216 FMT(d_ddec_dsz_01x, 16, DSZ(2) | 0x4c04, DSZ(0x6) | 0xcc06,
217     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
218            FLD(t, 12, 1), FLD(cst, 13, 1)))
219
220 FMT(d_ddec_dsz_0xx, 16, DSZ(0) | 0x4c04, DSZ(0x4) | 0xcc06,
221     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
222            FLD(t, 12, 1), FLD(cst, 13, 1)))
223
224 FMT(d_ddec_dsz_x01, 16, DSZ(1) | 0x4c04, DSZ(0x3) | 0xcc06,
225     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
226            FLD(t, 12, 1), FLD(cst, 13, 1)))
227
228 FMT(d_ddec_dsz_x11, 16, DSZ(3) | 0x4c04, DSZ(0x3) | 0xcc06,
229     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
230            FLD(t, 12, 1), FLD(cst, 13, 1)))
231
232 FMT(d_ddec_dsz_000, 16, DSZ(0) | 0x4c04, DSZ(0x7) | 0xcc06,
233     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
234            FLD(t, 12, 1), FLD(cst, 13, 1)))
235
236 FMT(d_ddec_dsz_010, 16, DSZ(2) | 0x4c04, DSZ(0x7) | 0xcc06,
237     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
238            FLD(t, 12, 1), FLD(cst, 13, 1)))
239
240 FMT(d_ddec_dsz_100, 16, DSZ(4) | 0x4c04, DSZ(0x7) | 0xcc06,
241     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
242            FLD(t, 12, 1), FLD(cst, 13, 1)))
243
244 FMT(d_ddec_dsz_110, 16, DSZ(6) | 0x4c04, DSZ(0x7) | 0xcc06,
245     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
246            FLD(t, 12, 1), FLD(cst, 13, 1)))
247
248 FMT(d_ddec_dsz_111, 16, DSZ(7) | 0x4c04, DSZ(0x7) | 0xcc06,
249     SFLDS6(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(ptr, 7, 2), FLD(sz, 9, 1),
250            FLD(t, 12, 1), FLD(cst, 13, 1)))
251
252 /* C-15 */
253 FMT(d_ddecdw, 16, DSZ(4) | 0x4c04, DSZ(0x4) | 0xcc06,
254     SFLDS7(FLD(op, 3, 1), FLD(na, 4, 1),  FLD(srcdst, 5, 2), FLD(ptr, 7, 2),
255            FLD(sz, 9, 1), FLD(t, 12, 1), FLD(cst, 13, 1)))
256
257 /* C-16 */
258 FMT(d_dstk, 16, 0x8c04, 0x8c06,
259     SFLDS4(FLD(op, 3, 1), FLD(srcdst, 4, 3), FLD(t, 12, 1),
260            COMPFLD(cst, BFLD2(BFLD(7, 3, 2), BFLD(13, 2, 0)))))
261
262 /* C-17 */
263 FMT(d_dx2op, 16, 0x0036, 0x047e,
264     SFLDS4(FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1), FLD(srcdst, 13, 3)))
265
266 /* C-18 */
267 FMT(d_dx5, 16, 0x0436, 0x047e,
268     SFLDS2(FLD(dst, 7, 3), 
269            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
270
271 /* C-19 */
272 FMT(d_dx5p, 16, 0x0c76, 0x1c7e,
273     SFLDS2(FLD(op, 7, 1),
274            COMPFLD(cst, BFLD2(BFLD(8, 2, 3), BFLD(13, 3, 0)))))
275
276 /* C-20 */
277 FMT(d_dx1, 16, 0x1876, 0x1c7e,
278     SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
279
280 /* C-21 */
281 FMT(d_dpp, 16, 0x0077, 0x087f,
282     SFLDS5(FLD(srcdst, 7, 4), FLD(t, 12, 1), FLD(cst, 13, 1), FLD(op, 14, 1),
283            FLD(dw, 15, 1)))
284
285 /* Appendix D 32-bit formats.  */
286
287 FMT(l_1_or_2_src, 32, 0x18, 0x1c,
288     CFLDS6(FLD(s, 1, 1), FLD(op, 5, 7), FLD(x, 12, 1), FLD(src1, 13, 5),
289            FLD(src2, 18, 5), FLD(dst, 23, 5)))
290 FMT(l_1_or_2_src_noncond, 32, 0x10000018, 0xf000001c,
291     NFLDS6(FLD(s, 1, 1), FLD(op, 5, 7), FLD(x, 12, 1), FLD(src1, 13, 5),
292            FLD(src2, 18, 5), FLD(dst, 23, 5)))
293 FMT(l_unary, 32, 0x358, 0xffc,
294     CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
295            FLD(dst, 23, 5)))
296
297 /* Appendix D 16-bit formats will go here.  */
298
299 /* D-4 */
300 FMT(l_l3_sat_0, 16, SAT(0) | 0x0000, SAT(1) | 0x040e,
301     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
302            FLD(src1, 13, 3)))
303
304 FMT(l_l3_sat_1, 16, SAT(1) | 0x0000, SAT(1) | 0x040e,
305     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
306            FLD(src1, 13, 3)))
307
308 /* D-5 - combine cst3 and n fields into a single field cst */
309 FMT(l_l3i, 16, 0x0400, 0x040e,
310     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(sn, 11, 1), FLD(x, 12, 1),
311            COMPFLD(cst, BFLD2(BFLD(13, 3, 0), BFLD(11, 1, 3)))))
312
313 /* D-6 Mtbd ? */
314
315 /* D-7 */
316 FMT(l_l2c, 16, 0x0408, 0x040e,
317     SFLDS5(FLD(dst, 4, 1), FLD(src2, 7, 3), FLD(x, 12, 1), FLD(src1, 13, 3),
318            COMPFLD(op, BFLD2(BFLD(5, 2, 0), BFLD(11, 1, 2)))))
319
320 /* D-8 */
321 FMT(l_lx5, 16, 0x0426, 0x047e,
322     SFLDS2(FLD(dst, 7, 3),
323            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
324
325 /* D-9 */
326 FMT(l_lx3c, 16, 0x0026, 0x147e,
327     SFLDS3(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 3)))
328
329 /* D-10 */
330 FMT(l_lx1c, 16, 0x1026, 0x147e,
331     SFLDS4(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 1), FLD(op, 14, 2)))
332
333 /* D-11 */
334 FMT(l_lx1, 16, 0x1866, 0x1c7e,
335     SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
336
337 /* Appendix E 32-bit formats.  */
338
339 FMT(m_compound, 32, 0x30, 0x83c,
340     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
341            FLD(src2, 18, 5), FLD(dst, 23, 5)))
342 FMT(m_1_or_2_src, 32, 0x10000030, 0xf000083c,
343     NFLDS6(FLD(s, 1, 1), FLD(op, 6, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
344            FLD(src2, 18, 5), FLD(dst, 23, 5)))
345 /* Contrary to SPRUFE8, this does have predicate fields.  */
346 FMT(m_unary, 32, 0xf0, 0xffc,
347     CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
348            FLD(dst, 23, 5)))
349
350 /* M-unit formats missing from Appendix E.  */
351 FMT(m_mpy, 32, 0x0, 0x7c,
352     CFLDS6(FLD(s, 1, 1), FLD(op, 7, 5), FLD(x, 12, 1), FLD(src1, 13, 5),
353            FLD(src2, 18, 5), FLD(dst, 23, 5)))
354
355 /* Appendix E 16-bit formats will go here.  */
356 FMT(m_m3_sat_0, 16, SAT(0) | 0x001e, SAT(1) | 0x001e,
357     SFLDS5(FLD(op, 5, 2), FLD(src2, 7, 3), FLD(dst, 10, 2),
358            FLD(x, 12, 1), FLD(src1, 13, 3)))
359 FMT(m_m3_sat_1, 16, SAT(1) | 0x001e, SAT(1) | 0x001e,
360     SFLDS5(FLD(op, 5, 2), FLD(src2, 7, 3), FLD(dst, 10, 2),
361            FLD(x, 12, 1), FLD(src1, 13, 3)))
362
363 /* Appendix F 32-bit formats.  */
364
365 FMT(s_1_or_2_src, 32, 0x20, 0x3c,
366     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 6), FLD(x, 12, 1), FLD(src1, 13, 5),
367            FLD(src2, 18, 5), FLD(dst, 23 ,5)))
368 FMT(s_ext_1_or_2_src, 32, 0xc30, 0xc3c,
369     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
370            FLD(src2, 18, 5), FLD(dst, 23, 5)))
371 FMT(s_ext_1_or_2_src_noncond, 32, 0xc30, 0xe0000c3c,
372     NFLDS7(FLD(s, 1, 1), FLD(op, 6, 4), FLD(x, 12, 1), FLD(src1, 13, 5),
373            FLD(src2, 18, 5), FLD(dst, 23, 5), FLD(z, 28, 1)))
374 FMT(s_unary, 32, 0xf20, 0xffc,
375     CFLDS5(FLD(s, 1, 1), FLD(x, 12, 1), FLD(op, 13, 5), FLD(src2, 18, 5),
376            FLD(dst, 23, 5)))
377 FMT(s_ext_branch_cond_imm, 32, 0x10, 0x7c,
378     CFLDS2(FLD(s, 1, 1), FLD(cst, 7, 21)))
379 FMT(s_call_imm_nop, 32, 0x10, 0xe000007c,
380     NFLDS3(FLD(s, 1, 1), FLD(cst, 7, 21), FLD(z, 28, 1)))
381 FMT(s_branch_nop_cst, 32, 0x120, 0x1ffc,
382     CFLDS3(FLD(s, 1, 1), FLD(src1, 13, 3), FLD(src2, 16, 12)))
383 FMT(s_branch_nop_reg, 32, 0x800360, 0xf830ffc,
384     CFLDS4(FLD(s, 1, 1), FLD(x, 12, 1), FLD(src1, 13, 3), FLD(src2, 18, 5)))
385 FMT(s_branch, 32, 0x360, 0xf83effc,
386     CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(src2, 18, 5)))
387 FMT(s_mvk, 32, 0x28, 0x3c,
388     CFLDS4(FLD(s, 1, 1), FLD(h, 6, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
389 FMT(s_field, 32, 0x8, 0x3c,
390     CFLDS6(FLD(s, 1, 1), FLD(op, 6, 2), FLD(cstb, 8, 5), FLD(csta, 13, 5),
391            FLD(src2, 18, 5), FLD(dst, 23, 5)))
392
393 /* S-unit formats missing from Appendix F.  */
394 FMT(s_addk, 32, 0x50, 0x7c,
395     CFLDS3(FLD(s, 1, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
396 FMT(s_addkpc, 32, 0x160, 0x1ffc,
397     CFLDS4(FLD(s, 1, 1), FLD(src2, 13, 3), FLD(src1, 16, 7), FLD(dst, 23, 5)))
398 FMT(s_b_irp, 32, 0x1800e0, 0x7feffc,
399     CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
400 FMT(s_b_nrp, 32, 0x1c00e0, 0x7feffc,
401     CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
402 FMT(s_bdec, 32, 0x1020, 0x1ffc,
403     CFLDS3(FLD(s, 1, 1), FLD(src, 13, 10), FLD(dst, 23, 5)))
404 FMT(s_bpos, 32, 0x20, 0x1ffc,
405     CFLDS3(FLD(s, 1, 1), FLD(src, 13, 10), FLD(dst, 23, 5)))
406
407 /* Appendix F 16-bit formats will go here.  */
408
409 /* F-17 Sbs7 Instruction Format */
410 FMT(s_sbs7, 16, BR(1) | 0x000a, BR(1) | 0x003e,
411     SFLDS2(FLD(cst, 6, 7), FLD(n, 13, 3)))
412
413 /* F-18 Sbu8 Instruction Format */
414 FMT(s_sbu8, 16, BR(1) | 0xc00a, BR(1) | 0xc03e,
415     SFLDS1(FLD(cst, 6, 8)))
416
417 /* F-19 Scs10 Instruction Format */
418 FMT(s_scs10, 16, BR(1) | 0x001a, BR(1) | 0x003e,
419     SFLDS1(FLD(cst, 6, 10)))
420
421 /* F-20 Sbs7c Instruction Format */
422 FMT(s_sbs7c, 16, BR(1) | 0x002a, BR(1) | 0x002e,
423     SFLDS3(FLD(z, 4, 1), FLD(cst, 6, 7), FLD(n, 13, 3)))
424
425 /* F-21 Sbu8c Instruction Format */
426 FMT(s_sbu8c, 16, BR(1) | 0xc02a, BR(1) |  0xc02e,
427     SFLDS2(FLD(z, 4, 1), FLD(cst, 6, 8)))
428
429 /* F-22 S3 Instruction Format */
430 FMT(s_s3, 16, BR(0) | 0x000a, BR(1) | 0x040e,
431     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
432           FLD(src1, 13, 3)))
433
434 FMT(s_s3_sat_x, 16, BR(0) | SAT(0) | 0x000a, BR(1) | SAT(0) | 0x040e,
435     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
436           FLD(src1, 13, 3)))
437
438 FMT(s_s3_sat_0, 16, BR(0) | SAT(0) | 0x000a, BR(1) | SAT(1) | 0x040e,
439     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
440           FLD(src1, 13, 3)))
441
442 FMT(s_s3_sat_1, 16, BR(0) | SAT(1) | 0x000a, BR(1) | SAT(1) |    0x040e,
443     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
444           FLD(src1, 13, 3)))
445
446 /* F-23 S3i Instruction Format */
447 FMT(s_s3i, 16, BR(0) | 0x040a, BR(1) | 0x040e,
448     SFLDS5(FLD(dst, 4, 3), FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
449            FLD(cst, 13, 3)))
450
451 /* F-24 Smvk8 Instruction Format */
452 FMT(s_smvk8, 16, 0x0012, 0x001e,
453     SFLDS2(FLD(dst, 7, 3),
454            COMPFLD(cst, BFLD4(BFLD(10, 1, 7), BFLD(5, 2, 5), BFLD(11, 2, 3), BFLD(13, 3, 0)))))
455
456 /* F-25 Ssh5 Instruction Format */
457 FMT(s_ssh5_sat_x, 16, SAT(0) | 0x0402, SAT(0) | 0x041e,
458     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
459            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
460 FMT(s_ssh5_sat_0, 16, SAT(0) | 0x0402, SAT(1) | 0x041e,
461     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
462            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
463 FMT(s_ssh5_sat_1, 16, SAT(1) | 0x0402, SAT(1) | 0x041e,
464     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
465            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
466
467 /* F-26 S2sh Instruction Format */
468 FMT(s_s2sh, 16, 0x0462, 0x047e,
469     SFLDS3(FLD(srcdst, 7, 3), FLD(op, 11, 2), FLD(src1, 13, 3)))
470
471 /* F-27 Sc5 Instruction Format */
472 FMT(s_sc5, 16, 0x0002, 0x041e,
473     SFLDS3(FLD(op, 5, 2), FLD(srcdst, 7, 3),
474            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
475
476 /* F-28 S2ext Instruction Format */
477 FMT(s_s2ext, 16, 0x0062, 0x047e,
478     SFLDS3(FLD(src, 7, 3), FLD(op, 11, 2), FLD(dst, 13, 3)))
479
480 /* F-29 Sx2op Instruction Format */
481 FMT(s_sx2op, 16, 0x002e, 0x047e,
482     SFLDS4(FLD(src2, 7, 3), FLD(op, 11, 1), FLD(x, 12, 1),
483            FLD(srcdst, 13, 3)))
484
485 /* F-30 Sx5 Instruction Format */
486 FMT(s_sx5, 16, 0x042e, 0x047e,
487     SFLDS2(FLD(dst, 7, 3),
488            COMPFLD(cst, BFLD2(BFLD(11, 2, 3), BFLD(13, 3, 0)))))
489
490 /* F-31 Sx1 Instruction Format */
491 FMT(s_sx1, 16, 0x186e, 0x1c7e,
492     SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
493
494 /* F-32 Sx1b Instruction Format */
495 FMT(s_sx1b, 16, 0x006e, 0x187e,
496     SFLDS2(FLD(src2, 7, 4), FLD(n, 13, 3)))
497
498 /* Appendix G 16-bit formats will go here.  */
499 FMT(lsdmvto, 16, 0x0006, 0x0066,
500     SFLDS4(FLD(unit, 3, 2), 
501            FLD(x, 12, 1), FLD(dst, 13, 3),
502            COMPFLD(src2, BFLD2(BFLD(10, 2, 3), BFLD(7, 3, 0)))))
503
504 FMT(lsdmvfr, 16, 0x0046, 0x0066,
505     SFLDS4(FLD(unit, 3, 2), FLD(src2, 7, 3), FLD(x, 12, 1),
506            COMPFLD(dst, BFLD2(BFLD(10, 2, 3), BFLD(13, 3, 0)))))
507
508 /* G-3 */
509 FMT(lsdx1c, 16, 0x0866, 0x1c66,
510     SFLDS4(FLD(unit, 3, 2), FLD(dst, 7, 3), FLD(cst, 13, 1),
511            FLD(cc, 14, 2)))
512
513 /* G-4 */
514 FMT(lsdx1, 16, 0x1866, 0x1c66,
515     SFLDS3(FLD(unit, 3, 2), FLD(srcdst, 7, 3), FLD(op, 13, 3)))
516
517 /* Appendix H 32-bit formats.  */
518
519 FMT(nfu_loop_buffer, 32, 0x00020000, 0x00021ffc,
520     CFLDS4(FLD(s, 1, 1), FLD(op, 13, 4), FLD(csta, 18, 5), FLD(cstb, 23, 5)))
521 /* Corrected relative to Appendix H.  */
522 FMT(nfu_nop_idle, 32, 0x00000000, 0xfffe1ffc,
523     NFLDS2(FLD(s, 1, 1), FLD(op, 13, 4)))
524
525 /* No-unit formats missing from Appendix H (given the NOP and IDLE
526    correction).  */
527 FMT(nfu_dint, 32, 0x10004000, 0xfffffffc,
528     NFLDS1(FLD(s, 1, 1)))
529 FMT(nfu_rint, 32, 0x10006000, 0xfffffffc,
530     NFLDS1(FLD(s, 1, 1)))
531 FMT(nfu_swe, 32, 0x10000000, 0xfffffffc,
532     NFLDS1(FLD(s, 1, 1)))
533 FMT(nfu_swenr, 32, 0x10002000, 0xfffffffc,
534     NFLDS1(FLD(s, 1, 1)))
535 /* Although formally covered by the loop buffer format, the fields in
536    that format are not useful for all such instructions and not all
537    instructions can be predicated.  */
538 FMT(nfu_spkernel, 32, 0x00034000, 0xf03ffffc,
539     NFLDS2(FLD(s, 1, 1), FLD(fstgfcyc, 22, 6)))
540 FMT(nfu_spkernelr, 32, 0x00036000, 0xfffffffc,
541     NFLDS1(FLD(s, 1, 1)))
542 FMT(nfu_spmask, 32, 0x00020000, 0xfc021ffc,
543     NFLDS3(FLD(s, 1, 1), FLD(op, 13, 4), FLD(mask, 18, 8)))
544
545 /* Appendix H 16-bit formats will go here.  */
546
547 /* H-5 */
548 FMT(nfu_uspl, 16, 0x0c66, 0xbc7e,
549    FLDS2(FLD(op, 0, 1), COMPFLD(ii, BFLD2(BFLD(7, 3, 0), BFLD(14, 1, 3)))))
550
551 /* H-6 */
552 /* make up some fields to pretend to have s and z fields s for this format
553    so as to fit in other predicated compact instruction to avoid special-
554    casing this instruction in tic6x-dis.c 
555    use op field as a predicate adress register selector (s field)
556    use the first zeroed bit as a z value as this insn only supports [a0]
557    and [b0] predicate forms.
558 */
559 FMT(nfu_uspldr, 16, 0x8c66, 0xbc7e,
560    FLDS4(FLD(op, 0, 1), FLD(s, 0, 1), FLD(z, 3, 1),
561          COMPFLD(ii, BFLD2(BFLD(7, 3, 0), BFLD(14, 1, 3)))))
562
563 /* H-7 */
564 FMT(nfu_uspk, 16, 0x1c66, 0x3c7e,
565    FLDS1(COMPFLD(fstgfcyc, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
566
567 /* H-8a */
568 FMT(nfu_uspma, 16, 0x2c66, 0x3c7e,
569    FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
570
571 /* H-8b */
572 FMT(nfu_uspmb, 16, 0x3c66, 0x3c7e,
573    FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
574
575 /* H-9 */
576 FMT(nfu_unop, 16, 0x0c6e, 0x1fff,
577    FLDS1(FLD(n, 13, 3)))
578
579 #undef FLD
580 #undef CFLDS
581 #undef CFLDS2
582 #undef CFLDS3
583 #undef CFLDS4
584 #undef CFLDS5
585 #undef CFLDS6
586 #undef CFLDS7
587 #undef CFLDS8
588 #undef NFLDS
589 #undef NFLDS1
590 #undef NFLDS2
591 #undef NFLDS3
592 #undef NFLDS5
593 #undef NFLDS6
594 #undef NFLDS7
595 #undef SFLDS
596 #undef SFLDS1
597 #undef SFLDS2
598 #undef SFLDS3
599 #undef SFLDS4
600 #undef SFLDS5
601 #undef SFLDS6
602 #undef SFLDS7
603 #undef BFLD
604 #undef BFLD1
605 #undef BFLD2
606 #undef BFLD3
607 #undef BFLD4
608 #undef FLDS1
609 #undef FLDS2
610 #undef FLDS3
611 #undef FLDS4
612 #undef FLDS5
613 #undef COMPFLD
614 #undef DSZ
615 #undef BR
616 #undef SAT