Subversion Repositories Kolibri OS

Rev

Rev 5191 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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