1 /* TI C6X instruction format information.
2 Copyright (C) 2010-2024 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)))