]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - include/opcode/tic6x-insn-formats.h
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / include / opcode / tic6x-insn-formats.h
CommitLineData
40b36596 1/* TI C6X instruction format information.
250d07de 2 Copyright (C) 2010-2021 Free Software Foundation, Inc.
40b36596
JM
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
51dcdd4d
NC
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)) }
40b36596
JM
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 }
51dcdd4d
NC
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/**/
40b36596
JM
65
66/* These are in the order from SPRUFE8, appendices C-H. */
67
68/* Appendix C 32-bit formats. */
69
70FMT(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)))
73FMT(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)))
76FMT(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. */
82FMT(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)))
85FMT(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)))
88FMT(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)))
91FMT(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
51dcdd4d
NC
97/* C-8 */
98FMT(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)))))
101FMT(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)))))
104FMT(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)))))
107FMT(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)))))
110FMT(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)))))
113FMT(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)))))
116FMT(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)))))
119FMT(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)))))
122FMT(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 */
127FMT(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 */
132FMT(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
136FMT(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
140FMT(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
144FMT(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
148FMT(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
152FMT(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
156FMT(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
160FMT(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
164FMT(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 */
169FMT(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 */
174FMT(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
178FMT(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
182FMT(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
186FMT(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
190FMT(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
194FMT(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
198FMT(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
202FMT(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
206FMT(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*/
211FMT(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 */
216FMT(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
220FMT(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
224FMT(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
228FMT(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
232FMT(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
236FMT(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
240FMT(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
244FMT(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
248FMT(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 */
253FMT(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 */
258FMT(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 */
263FMT(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 */
267FMT(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 */
272FMT(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 */
277FMT(d_dx1, 16, 0x1876, 0x1c7e,
278 SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
279
280/* C-21 */
281FMT(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
40b36596
JM
285/* Appendix D 32-bit formats. */
286
287FMT(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)))
290FMT(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)))
293FMT(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
51dcdd4d
NC
299/* D-4 */
300FMT(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
304FMT(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 */
309FMT(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 */
316FMT(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 */
321FMT(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 */
326FMT(l_lx3c, 16, 0x0026, 0x147e,
327 SFLDS3(FLD(src2, 7, 3), FLD(dst, 11, 1), FLD(cst, 13, 3)))
328
329/* D-10 */
330FMT(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 */
334FMT(l_lx1, 16, 0x1866, 0x1c7e,
335 SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
336
40b36596
JM
337/* Appendix E 32-bit formats. */
338
339FMT(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)))
342FMT(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. */
346FMT(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. */
351FMT(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. */
51dcdd4d
NC
356FMT(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)))
359FMT(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)))
40b36596
JM
362
363/* Appendix F 32-bit formats. */
364
365FMT(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)))
368FMT(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)))
371FMT(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)))
374FMT(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)))
377FMT(s_ext_branch_cond_imm, 32, 0x10, 0x7c,
378 CFLDS2(FLD(s, 1, 1), FLD(cst, 7, 21)))
379FMT(s_call_imm_nop, 32, 0x10, 0xe000007c,
380 NFLDS3(FLD(s, 1, 1), FLD(cst, 7, 21), FLD(z, 28, 1)))
381FMT(s_branch_nop_cst, 32, 0x120, 0x1ffc,
382 CFLDS3(FLD(s, 1, 1), FLD(src1, 13, 3), FLD(src2, 16, 12)))
383FMT(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)))
2462afa1 385FMT(s_branch, 32, 0x360, 0xf83effc,
40b36596
JM
386 CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(src2, 18, 5)))
387FMT(s_mvk, 32, 0x28, 0x3c,
388 CFLDS4(FLD(s, 1, 1), FLD(h, 6, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
389FMT(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. */
394FMT(s_addk, 32, 0x50, 0x7c,
395 CFLDS3(FLD(s, 1, 1), FLD(cst, 7, 16), FLD(dst, 23, 5)))
396FMT(s_addkpc, 32, 0x160, 0x1ffc,
397 CFLDS4(FLD(s, 1, 1), FLD(src2, 13, 3), FLD(src1, 16, 7), FLD(dst, 23, 5)))
398FMT(s_b_irp, 32, 0x1800e0, 0x7feffc,
399 CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
400FMT(s_b_nrp, 32, 0x1c00e0, 0x7feffc,
401 CFLDS3(FLD(s, 1, 1), FLD(x, 12, 1), FLD(dst, 23, 5)))
402FMT(s_bdec, 32, 0x1020, 0x1ffc,
403 CFLDS3(FLD(s, 1, 1), FLD(src, 13, 10), FLD(dst, 23, 5)))
404FMT(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
51dcdd4d
NC
409/* F-17 Sbs7 Instruction Format */
410FMT(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 */
414FMT(s_sbu8, 16, BR(1) | 0xc00a, BR(1) | 0xc03e,
415 SFLDS1(FLD(cst, 6, 8)))
416
417/* F-19 Scs10 Instruction Format */
418FMT(s_scs10, 16, BR(1) | 0x001a, BR(1) | 0x003e,
419 SFLDS1(FLD(cst, 6, 10)))
420
421/* F-20 Sbs7c Instruction Format */
422FMT(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 */
426FMT(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 */
430FMT(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
434FMT(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
438FMT(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
442FMT(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 */
447FMT(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 */
452FMT(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 */
457FMT(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)))))
460FMT(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)))))
463FMT(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 */
468FMT(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 */
472FMT(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 */
477FMT(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 */
481FMT(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 */
486FMT(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 */
491FMT(s_sx1, 16, 0x186e, 0x1c7e,
492 SFLDS2(FLD(srcdst, 7, 3), FLD(op, 13, 3)))
493
494/* F-32 Sx1b Instruction Format */
495FMT(s_sx1b, 16, 0x006e, 0x187e,
496 SFLDS2(FLD(src2, 7, 4), FLD(n, 13, 3)))
497
40b36596 498/* Appendix G 16-bit formats will go here. */
51dcdd4d
NC
499FMT(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
504FMT(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 */
509FMT(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 */
514FMT(lsdx1, 16, 0x1866, 0x1c66,
515 SFLDS3(FLD(unit, 3, 2), FLD(srcdst, 7, 3), FLD(op, 13, 3)))
40b36596
JM
516
517/* Appendix H 32-bit formats. */
518
519FMT(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. */
522FMT(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). */
527FMT(nfu_dint, 32, 0x10004000, 0xfffffffc,
528 NFLDS1(FLD(s, 1, 1)))
529FMT(nfu_rint, 32, 0x10006000, 0xfffffffc,
530 NFLDS1(FLD(s, 1, 1)))
531FMT(nfu_swe, 32, 0x10000000, 0xfffffffc,
532 NFLDS1(FLD(s, 1, 1)))
533FMT(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. */
538FMT(nfu_spkernel, 32, 0x00034000, 0xf03ffffc,
539 NFLDS2(FLD(s, 1, 1), FLD(fstgfcyc, 22, 6)))
540FMT(nfu_spkernelr, 32, 0x00036000, 0xfffffffc,
541 NFLDS1(FLD(s, 1, 1)))
542FMT(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
51dcdd4d
NC
547/* H-5 */
548FMT(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*/
559FMT(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 */
564FMT(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 */
568FMT(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 */
572FMT(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 */
576FMT(nfu_unop, 16, 0x0c6e, 0x1fff,
577 FLDS1(FLD(n, 13, 3)))
578
40b36596
JM
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
51dcdd4d
NC
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