source: trunk/libs/newlib/src/include/opcode/tic6x-insn-formats.h @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 23.8 KB
Line 
1/* TI C6X instruction format information.
2   Copyright 2010-2013 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
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
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
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
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
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.  */
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)))
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)))
385FMT(s_branch, 32, 0x360, 0xf83effc,
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
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
498/* Appendix G 16-bit formats will go here.  */
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)))
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
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
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
Note: See TracBrowser for help on using the repository browser.