1 /* TI C6X instruction format information.
2 Copyright (C) 2010-2017 Free Software Foundation, Inc.
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.
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.
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. */
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). */
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 }
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 }
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 }
66 /* These are in the order from SPRUFE8, appendices C-H. */
68 /* Appendix C 32-bit formats. */
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),
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),
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),
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),
95 /* Appendix C 16-bit formats will go here. */
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)))))
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)))))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))
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)))))
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)))
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)))))
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)))))
277 FMT(d_dx1, 16, 0x1876, 0x1c7e,
278 SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
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),
285 /* Appendix D 32-bit formats. */
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),
297 /* Appendix D 16-bit formats will go here. */
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),
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),
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)))))
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)))))
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)))))
326 FMT(l_lx3c, 16, 0x0026, 0x147e,
327 SFLDS3(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 3)))
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)))
334 FMT(l_lx1, 16, 0x1866, 0x1c7e,
335 SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
337 /* Appendix E 32-bit formats. */
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),
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)))
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)))
363 /* Appendix F 32-bit formats. */
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),
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)))
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)))
407 /* Appendix F 16-bit formats will go here. */
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)))
413 /* F-18 Sbu8 Instruction Format */
414 FMT(s_sbu8, 16, BR(1) | 0xc00a, BR(1) | 0xc03e,
415 SFLDS1(FLD(cst, 6, 8)))
417 /* F-19 Scs10 Instruction Format */
418 FMT(s_scs10, 16, BR(1) | 0x001a, BR(1) | 0x003e,
419 SFLDS1(FLD(cst, 6, 10)))
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)))
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)))
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),
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),
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),
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),
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),
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)))))
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)))))
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)))
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)))))
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)))
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),
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)))))
490 /* F-31 Sx1 Instruction Format */
491 FMT(s_sx1, 16, 0x186e, 0x1c7e,
492 SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
494 /* F-32 Sx1b Instruction Format */
495 FMT(s_sx1b, 16, 0x006e, 0x187e,
496 SFLDS2(FLD(src2, 7, 4), FLD(n, 13, 3)))
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)))))
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)))))
509 FMT(lsdx1c, 16, 0x0866, 0x1c66,
510 SFLDS4(FLD(unit, 3, 2), FLD(dst, 7, 3), FLD(cst, 13, 1),
514 FMT(lsdx1, 16, 0x1866, 0x1c66,
515 SFLDS3(FLD(unit, 3, 2), FLD(srcdst, 7, 3), FLD(op, 13, 3)))
517 /* Appendix H 32-bit formats. */
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)))
525 /* No-unit formats missing from Appendix H (given the NOP and IDLE
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)))
545 /* Appendix H 16-bit formats will go here. */
548 FMT(nfu_uspl, 16, 0x0c66, 0xbc7e,
549 FLDS2(FLD(op, 0, 1), COMPFLD(ii, BFLD2(BFLD(7, 3, 0), BFLD(14, 1, 3)))))
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.
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)))))
564 FMT(nfu_uspk, 16, 0x1c66, 0x3c7e,
565 FLDS1(COMPFLD(fstgfcyc, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
568 FMT(nfu_uspma, 16, 0x2c66, 0x3c7e,
569 FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
572 FMT(nfu_uspmb, 16, 0x3c66, 0x3c7e,
573 FLDS1(COMPFLD(mask, BFLD3(BFLD(0, 1, 0), BFLD(7, 3, 1), BFLD(14, 2, 4)))))
576 FMT(nfu_unop, 16, 0x0c6e, 0x1fff,
577 FLDS1(FLD(n, 13, 3)))