tilepro.h revision 1.1.1.6 1 1.1 christos /* TILEPro opcode information.
2 1.1 christos *
3 1.1.1.6 christos * Copyright (C) 2011-2022 Free Software Foundation, Inc.
4 1.1 christos *
5 1.1 christos * This program is free software; you can redistribute it and/or modify
6 1.1 christos * it under the terms of the GNU General Public License as published by
7 1.1 christos * the Free Software Foundation; either version 3 of the License, or
8 1.1 christos * (at your option) any later version.
9 1.1 christos *
10 1.1 christos * This program is distributed in the hope that it will be useful,
11 1.1 christos * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 1.1 christos * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 1.1 christos * GNU General Public License for more details.
14 1.1 christos *
15 1.1 christos * You should have received a copy of the GNU General Public License
16 1.1 christos * along with this program; if not, write to the Free Software
17 1.1 christos * Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
18 1.1 christos * MA 02110-1301, USA.
19 1.1 christos */
20 1.1 christos
21 1.1 christos #ifndef opcode_tilepro_h
22 1.1 christos #define opcode_tilepro_h
23 1.1 christos
24 1.1 christos typedef unsigned long long tilepro_bundle_bits;
25 1.1 christos
26 1.1 christos
27 1.1 christos enum
28 1.1 christos {
29 1.1 christos TILEPRO_MAX_OPERANDS = 5 /* mm */
30 1.1 christos };
31 1.1 christos
32 1.1 christos typedef enum
33 1.1 christos {
34 1.1 christos TILEPRO_OPC_BPT,
35 1.1 christos TILEPRO_OPC_INFO,
36 1.1 christos TILEPRO_OPC_INFOL,
37 1.1 christos TILEPRO_OPC_J,
38 1.1 christos TILEPRO_OPC_JAL,
39 1.1 christos TILEPRO_OPC_LW_TLS,
40 1.1 christos TILEPRO_OPC_LW_TLS_SN,
41 1.1 christos TILEPRO_OPC_MOVE,
42 1.1 christos TILEPRO_OPC_MOVE_SN,
43 1.1 christos TILEPRO_OPC_MOVEI,
44 1.1 christos TILEPRO_OPC_MOVEI_SN,
45 1.1 christos TILEPRO_OPC_MOVELI,
46 1.1 christos TILEPRO_OPC_MOVELI_SN,
47 1.1 christos TILEPRO_OPC_MOVELIS,
48 1.1 christos TILEPRO_OPC_PREFETCH,
49 1.1 christos TILEPRO_OPC_RAISE,
50 1.1 christos TILEPRO_OPC_ADD,
51 1.1 christos TILEPRO_OPC_ADD_SN,
52 1.1 christos TILEPRO_OPC_ADDB,
53 1.1 christos TILEPRO_OPC_ADDB_SN,
54 1.1 christos TILEPRO_OPC_ADDBS_U,
55 1.1 christos TILEPRO_OPC_ADDBS_U_SN,
56 1.1 christos TILEPRO_OPC_ADDH,
57 1.1 christos TILEPRO_OPC_ADDH_SN,
58 1.1 christos TILEPRO_OPC_ADDHS,
59 1.1 christos TILEPRO_OPC_ADDHS_SN,
60 1.1 christos TILEPRO_OPC_ADDI,
61 1.1 christos TILEPRO_OPC_ADDI_SN,
62 1.1 christos TILEPRO_OPC_ADDIB,
63 1.1 christos TILEPRO_OPC_ADDIB_SN,
64 1.1 christos TILEPRO_OPC_ADDIH,
65 1.1 christos TILEPRO_OPC_ADDIH_SN,
66 1.1 christos TILEPRO_OPC_ADDLI,
67 1.1 christos TILEPRO_OPC_ADDLI_SN,
68 1.1 christos TILEPRO_OPC_ADDLIS,
69 1.1 christos TILEPRO_OPC_ADDS,
70 1.1 christos TILEPRO_OPC_ADDS_SN,
71 1.1 christos TILEPRO_OPC_ADIFFB_U,
72 1.1 christos TILEPRO_OPC_ADIFFB_U_SN,
73 1.1 christos TILEPRO_OPC_ADIFFH,
74 1.1 christos TILEPRO_OPC_ADIFFH_SN,
75 1.1 christos TILEPRO_OPC_AND,
76 1.1 christos TILEPRO_OPC_AND_SN,
77 1.1 christos TILEPRO_OPC_ANDI,
78 1.1 christos TILEPRO_OPC_ANDI_SN,
79 1.1 christos TILEPRO_OPC_AULI,
80 1.1 christos TILEPRO_OPC_AVGB_U,
81 1.1 christos TILEPRO_OPC_AVGB_U_SN,
82 1.1 christos TILEPRO_OPC_AVGH,
83 1.1 christos TILEPRO_OPC_AVGH_SN,
84 1.1 christos TILEPRO_OPC_BBNS,
85 1.1 christos TILEPRO_OPC_BBNS_SN,
86 1.1 christos TILEPRO_OPC_BBNST,
87 1.1 christos TILEPRO_OPC_BBNST_SN,
88 1.1 christos TILEPRO_OPC_BBS,
89 1.1 christos TILEPRO_OPC_BBS_SN,
90 1.1 christos TILEPRO_OPC_BBST,
91 1.1 christos TILEPRO_OPC_BBST_SN,
92 1.1 christos TILEPRO_OPC_BGEZ,
93 1.1 christos TILEPRO_OPC_BGEZ_SN,
94 1.1 christos TILEPRO_OPC_BGEZT,
95 1.1 christos TILEPRO_OPC_BGEZT_SN,
96 1.1 christos TILEPRO_OPC_BGZ,
97 1.1 christos TILEPRO_OPC_BGZ_SN,
98 1.1 christos TILEPRO_OPC_BGZT,
99 1.1 christos TILEPRO_OPC_BGZT_SN,
100 1.1 christos TILEPRO_OPC_BITX,
101 1.1 christos TILEPRO_OPC_BITX_SN,
102 1.1 christos TILEPRO_OPC_BLEZ,
103 1.1 christos TILEPRO_OPC_BLEZ_SN,
104 1.1 christos TILEPRO_OPC_BLEZT,
105 1.1 christos TILEPRO_OPC_BLEZT_SN,
106 1.1 christos TILEPRO_OPC_BLZ,
107 1.1 christos TILEPRO_OPC_BLZ_SN,
108 1.1 christos TILEPRO_OPC_BLZT,
109 1.1 christos TILEPRO_OPC_BLZT_SN,
110 1.1 christos TILEPRO_OPC_BNZ,
111 1.1 christos TILEPRO_OPC_BNZ_SN,
112 1.1 christos TILEPRO_OPC_BNZT,
113 1.1 christos TILEPRO_OPC_BNZT_SN,
114 1.1 christos TILEPRO_OPC_BYTEX,
115 1.1 christos TILEPRO_OPC_BYTEX_SN,
116 1.1 christos TILEPRO_OPC_BZ,
117 1.1 christos TILEPRO_OPC_BZ_SN,
118 1.1 christos TILEPRO_OPC_BZT,
119 1.1 christos TILEPRO_OPC_BZT_SN,
120 1.1 christos TILEPRO_OPC_CLZ,
121 1.1 christos TILEPRO_OPC_CLZ_SN,
122 1.1 christos TILEPRO_OPC_CRC32_32,
123 1.1 christos TILEPRO_OPC_CRC32_32_SN,
124 1.1 christos TILEPRO_OPC_CRC32_8,
125 1.1 christos TILEPRO_OPC_CRC32_8_SN,
126 1.1 christos TILEPRO_OPC_CTZ,
127 1.1 christos TILEPRO_OPC_CTZ_SN,
128 1.1 christos TILEPRO_OPC_DRAIN,
129 1.1 christos TILEPRO_OPC_DTLBPR,
130 1.1 christos TILEPRO_OPC_DWORD_ALIGN,
131 1.1 christos TILEPRO_OPC_DWORD_ALIGN_SN,
132 1.1 christos TILEPRO_OPC_FINV,
133 1.1 christos TILEPRO_OPC_FLUSH,
134 1.1 christos TILEPRO_OPC_FNOP,
135 1.1 christos TILEPRO_OPC_ICOH,
136 1.1 christos TILEPRO_OPC_ILL,
137 1.1 christos TILEPRO_OPC_INTHB,
138 1.1 christos TILEPRO_OPC_INTHB_SN,
139 1.1 christos TILEPRO_OPC_INTHH,
140 1.1 christos TILEPRO_OPC_INTHH_SN,
141 1.1 christos TILEPRO_OPC_INTLB,
142 1.1 christos TILEPRO_OPC_INTLB_SN,
143 1.1 christos TILEPRO_OPC_INTLH,
144 1.1 christos TILEPRO_OPC_INTLH_SN,
145 1.1 christos TILEPRO_OPC_INV,
146 1.1 christos TILEPRO_OPC_IRET,
147 1.1 christos TILEPRO_OPC_JALB,
148 1.1 christos TILEPRO_OPC_JALF,
149 1.1 christos TILEPRO_OPC_JALR,
150 1.1 christos TILEPRO_OPC_JALRP,
151 1.1 christos TILEPRO_OPC_JB,
152 1.1 christos TILEPRO_OPC_JF,
153 1.1 christos TILEPRO_OPC_JR,
154 1.1 christos TILEPRO_OPC_JRP,
155 1.1 christos TILEPRO_OPC_LB,
156 1.1 christos TILEPRO_OPC_LB_SN,
157 1.1 christos TILEPRO_OPC_LB_U,
158 1.1 christos TILEPRO_OPC_LB_U_SN,
159 1.1 christos TILEPRO_OPC_LBADD,
160 1.1 christos TILEPRO_OPC_LBADD_SN,
161 1.1 christos TILEPRO_OPC_LBADD_U,
162 1.1 christos TILEPRO_OPC_LBADD_U_SN,
163 1.1 christos TILEPRO_OPC_LH,
164 1.1 christos TILEPRO_OPC_LH_SN,
165 1.1 christos TILEPRO_OPC_LH_U,
166 1.1 christos TILEPRO_OPC_LH_U_SN,
167 1.1 christos TILEPRO_OPC_LHADD,
168 1.1 christos TILEPRO_OPC_LHADD_SN,
169 1.1 christos TILEPRO_OPC_LHADD_U,
170 1.1 christos TILEPRO_OPC_LHADD_U_SN,
171 1.1 christos TILEPRO_OPC_LNK,
172 1.1 christos TILEPRO_OPC_LNK_SN,
173 1.1 christos TILEPRO_OPC_LW,
174 1.1 christos TILEPRO_OPC_LW_SN,
175 1.1 christos TILEPRO_OPC_LW_NA,
176 1.1 christos TILEPRO_OPC_LW_NA_SN,
177 1.1 christos TILEPRO_OPC_LWADD,
178 1.1 christos TILEPRO_OPC_LWADD_SN,
179 1.1 christos TILEPRO_OPC_LWADD_NA,
180 1.1 christos TILEPRO_OPC_LWADD_NA_SN,
181 1.1 christos TILEPRO_OPC_MAXB_U,
182 1.1 christos TILEPRO_OPC_MAXB_U_SN,
183 1.1 christos TILEPRO_OPC_MAXH,
184 1.1 christos TILEPRO_OPC_MAXH_SN,
185 1.1 christos TILEPRO_OPC_MAXIB_U,
186 1.1 christos TILEPRO_OPC_MAXIB_U_SN,
187 1.1 christos TILEPRO_OPC_MAXIH,
188 1.1 christos TILEPRO_OPC_MAXIH_SN,
189 1.1 christos TILEPRO_OPC_MF,
190 1.1 christos TILEPRO_OPC_MFSPR,
191 1.1 christos TILEPRO_OPC_MINB_U,
192 1.1 christos TILEPRO_OPC_MINB_U_SN,
193 1.1 christos TILEPRO_OPC_MINH,
194 1.1 christos TILEPRO_OPC_MINH_SN,
195 1.1 christos TILEPRO_OPC_MINIB_U,
196 1.1 christos TILEPRO_OPC_MINIB_U_SN,
197 1.1 christos TILEPRO_OPC_MINIH,
198 1.1 christos TILEPRO_OPC_MINIH_SN,
199 1.1 christos TILEPRO_OPC_MM,
200 1.1 christos TILEPRO_OPC_MNZ,
201 1.1 christos TILEPRO_OPC_MNZ_SN,
202 1.1 christos TILEPRO_OPC_MNZB,
203 1.1 christos TILEPRO_OPC_MNZB_SN,
204 1.1 christos TILEPRO_OPC_MNZH,
205 1.1 christos TILEPRO_OPC_MNZH_SN,
206 1.1 christos TILEPRO_OPC_MTSPR,
207 1.1 christos TILEPRO_OPC_MULHH_SS,
208 1.1 christos TILEPRO_OPC_MULHH_SS_SN,
209 1.1 christos TILEPRO_OPC_MULHH_SU,
210 1.1 christos TILEPRO_OPC_MULHH_SU_SN,
211 1.1 christos TILEPRO_OPC_MULHH_UU,
212 1.1 christos TILEPRO_OPC_MULHH_UU_SN,
213 1.1 christos TILEPRO_OPC_MULHHA_SS,
214 1.1 christos TILEPRO_OPC_MULHHA_SS_SN,
215 1.1 christos TILEPRO_OPC_MULHHA_SU,
216 1.1 christos TILEPRO_OPC_MULHHA_SU_SN,
217 1.1 christos TILEPRO_OPC_MULHHA_UU,
218 1.1 christos TILEPRO_OPC_MULHHA_UU_SN,
219 1.1 christos TILEPRO_OPC_MULHHSA_UU,
220 1.1 christos TILEPRO_OPC_MULHHSA_UU_SN,
221 1.1 christos TILEPRO_OPC_MULHL_SS,
222 1.1 christos TILEPRO_OPC_MULHL_SS_SN,
223 1.1 christos TILEPRO_OPC_MULHL_SU,
224 1.1 christos TILEPRO_OPC_MULHL_SU_SN,
225 1.1 christos TILEPRO_OPC_MULHL_US,
226 1.1 christos TILEPRO_OPC_MULHL_US_SN,
227 1.1 christos TILEPRO_OPC_MULHL_UU,
228 1.1 christos TILEPRO_OPC_MULHL_UU_SN,
229 1.1 christos TILEPRO_OPC_MULHLA_SS,
230 1.1 christos TILEPRO_OPC_MULHLA_SS_SN,
231 1.1 christos TILEPRO_OPC_MULHLA_SU,
232 1.1 christos TILEPRO_OPC_MULHLA_SU_SN,
233 1.1 christos TILEPRO_OPC_MULHLA_US,
234 1.1 christos TILEPRO_OPC_MULHLA_US_SN,
235 1.1 christos TILEPRO_OPC_MULHLA_UU,
236 1.1 christos TILEPRO_OPC_MULHLA_UU_SN,
237 1.1 christos TILEPRO_OPC_MULHLSA_UU,
238 1.1 christos TILEPRO_OPC_MULHLSA_UU_SN,
239 1.1 christos TILEPRO_OPC_MULLL_SS,
240 1.1 christos TILEPRO_OPC_MULLL_SS_SN,
241 1.1 christos TILEPRO_OPC_MULLL_SU,
242 1.1 christos TILEPRO_OPC_MULLL_SU_SN,
243 1.1 christos TILEPRO_OPC_MULLL_UU,
244 1.1 christos TILEPRO_OPC_MULLL_UU_SN,
245 1.1 christos TILEPRO_OPC_MULLLA_SS,
246 1.1 christos TILEPRO_OPC_MULLLA_SS_SN,
247 1.1 christos TILEPRO_OPC_MULLLA_SU,
248 1.1 christos TILEPRO_OPC_MULLLA_SU_SN,
249 1.1 christos TILEPRO_OPC_MULLLA_UU,
250 1.1 christos TILEPRO_OPC_MULLLA_UU_SN,
251 1.1 christos TILEPRO_OPC_MULLLSA_UU,
252 1.1 christos TILEPRO_OPC_MULLLSA_UU_SN,
253 1.1 christos TILEPRO_OPC_MVNZ,
254 1.1 christos TILEPRO_OPC_MVNZ_SN,
255 1.1 christos TILEPRO_OPC_MVZ,
256 1.1 christos TILEPRO_OPC_MVZ_SN,
257 1.1 christos TILEPRO_OPC_MZ,
258 1.1 christos TILEPRO_OPC_MZ_SN,
259 1.1 christos TILEPRO_OPC_MZB,
260 1.1 christos TILEPRO_OPC_MZB_SN,
261 1.1 christos TILEPRO_OPC_MZH,
262 1.1 christos TILEPRO_OPC_MZH_SN,
263 1.1 christos TILEPRO_OPC_NAP,
264 1.1 christos TILEPRO_OPC_NOP,
265 1.1 christos TILEPRO_OPC_NOR,
266 1.1 christos TILEPRO_OPC_NOR_SN,
267 1.1 christos TILEPRO_OPC_OR,
268 1.1 christos TILEPRO_OPC_OR_SN,
269 1.1 christos TILEPRO_OPC_ORI,
270 1.1 christos TILEPRO_OPC_ORI_SN,
271 1.1 christos TILEPRO_OPC_PACKBS_U,
272 1.1 christos TILEPRO_OPC_PACKBS_U_SN,
273 1.1 christos TILEPRO_OPC_PACKHB,
274 1.1 christos TILEPRO_OPC_PACKHB_SN,
275 1.1 christos TILEPRO_OPC_PACKHS,
276 1.1 christos TILEPRO_OPC_PACKHS_SN,
277 1.1 christos TILEPRO_OPC_PACKLB,
278 1.1 christos TILEPRO_OPC_PACKLB_SN,
279 1.1 christos TILEPRO_OPC_PCNT,
280 1.1 christos TILEPRO_OPC_PCNT_SN,
281 1.1 christos TILEPRO_OPC_RL,
282 1.1 christos TILEPRO_OPC_RL_SN,
283 1.1 christos TILEPRO_OPC_RLI,
284 1.1 christos TILEPRO_OPC_RLI_SN,
285 1.1 christos TILEPRO_OPC_S1A,
286 1.1 christos TILEPRO_OPC_S1A_SN,
287 1.1 christos TILEPRO_OPC_S2A,
288 1.1 christos TILEPRO_OPC_S2A_SN,
289 1.1 christos TILEPRO_OPC_S3A,
290 1.1 christos TILEPRO_OPC_S3A_SN,
291 1.1 christos TILEPRO_OPC_SADAB_U,
292 1.1 christos TILEPRO_OPC_SADAB_U_SN,
293 1.1 christos TILEPRO_OPC_SADAH,
294 1.1 christos TILEPRO_OPC_SADAH_SN,
295 1.1 christos TILEPRO_OPC_SADAH_U,
296 1.1 christos TILEPRO_OPC_SADAH_U_SN,
297 1.1 christos TILEPRO_OPC_SADB_U,
298 1.1 christos TILEPRO_OPC_SADB_U_SN,
299 1.1 christos TILEPRO_OPC_SADH,
300 1.1 christos TILEPRO_OPC_SADH_SN,
301 1.1 christos TILEPRO_OPC_SADH_U,
302 1.1 christos TILEPRO_OPC_SADH_U_SN,
303 1.1 christos TILEPRO_OPC_SB,
304 1.1 christos TILEPRO_OPC_SBADD,
305 1.1 christos TILEPRO_OPC_SEQ,
306 1.1 christos TILEPRO_OPC_SEQ_SN,
307 1.1 christos TILEPRO_OPC_SEQB,
308 1.1 christos TILEPRO_OPC_SEQB_SN,
309 1.1 christos TILEPRO_OPC_SEQH,
310 1.1 christos TILEPRO_OPC_SEQH_SN,
311 1.1 christos TILEPRO_OPC_SEQI,
312 1.1 christos TILEPRO_OPC_SEQI_SN,
313 1.1 christos TILEPRO_OPC_SEQIB,
314 1.1 christos TILEPRO_OPC_SEQIB_SN,
315 1.1 christos TILEPRO_OPC_SEQIH,
316 1.1 christos TILEPRO_OPC_SEQIH_SN,
317 1.1 christos TILEPRO_OPC_SH,
318 1.1 christos TILEPRO_OPC_SHADD,
319 1.1 christos TILEPRO_OPC_SHL,
320 1.1 christos TILEPRO_OPC_SHL_SN,
321 1.1 christos TILEPRO_OPC_SHLB,
322 1.1 christos TILEPRO_OPC_SHLB_SN,
323 1.1 christos TILEPRO_OPC_SHLH,
324 1.1 christos TILEPRO_OPC_SHLH_SN,
325 1.1 christos TILEPRO_OPC_SHLI,
326 1.1 christos TILEPRO_OPC_SHLI_SN,
327 1.1 christos TILEPRO_OPC_SHLIB,
328 1.1 christos TILEPRO_OPC_SHLIB_SN,
329 1.1 christos TILEPRO_OPC_SHLIH,
330 1.1 christos TILEPRO_OPC_SHLIH_SN,
331 1.1 christos TILEPRO_OPC_SHR,
332 1.1 christos TILEPRO_OPC_SHR_SN,
333 1.1 christos TILEPRO_OPC_SHRB,
334 1.1 christos TILEPRO_OPC_SHRB_SN,
335 1.1 christos TILEPRO_OPC_SHRH,
336 1.1 christos TILEPRO_OPC_SHRH_SN,
337 1.1 christos TILEPRO_OPC_SHRI,
338 1.1 christos TILEPRO_OPC_SHRI_SN,
339 1.1 christos TILEPRO_OPC_SHRIB,
340 1.1 christos TILEPRO_OPC_SHRIB_SN,
341 1.1 christos TILEPRO_OPC_SHRIH,
342 1.1 christos TILEPRO_OPC_SHRIH_SN,
343 1.1 christos TILEPRO_OPC_SLT,
344 1.1 christos TILEPRO_OPC_SLT_SN,
345 1.1 christos TILEPRO_OPC_SLT_U,
346 1.1 christos TILEPRO_OPC_SLT_U_SN,
347 1.1 christos TILEPRO_OPC_SLTB,
348 1.1 christos TILEPRO_OPC_SLTB_SN,
349 1.1 christos TILEPRO_OPC_SLTB_U,
350 1.1 christos TILEPRO_OPC_SLTB_U_SN,
351 1.1 christos TILEPRO_OPC_SLTE,
352 1.1 christos TILEPRO_OPC_SLTE_SN,
353 1.1 christos TILEPRO_OPC_SLTE_U,
354 1.1 christos TILEPRO_OPC_SLTE_U_SN,
355 1.1 christos TILEPRO_OPC_SLTEB,
356 1.1 christos TILEPRO_OPC_SLTEB_SN,
357 1.1 christos TILEPRO_OPC_SLTEB_U,
358 1.1 christos TILEPRO_OPC_SLTEB_U_SN,
359 1.1 christos TILEPRO_OPC_SLTEH,
360 1.1 christos TILEPRO_OPC_SLTEH_SN,
361 1.1 christos TILEPRO_OPC_SLTEH_U,
362 1.1 christos TILEPRO_OPC_SLTEH_U_SN,
363 1.1 christos TILEPRO_OPC_SLTH,
364 1.1 christos TILEPRO_OPC_SLTH_SN,
365 1.1 christos TILEPRO_OPC_SLTH_U,
366 1.1 christos TILEPRO_OPC_SLTH_U_SN,
367 1.1 christos TILEPRO_OPC_SLTI,
368 1.1 christos TILEPRO_OPC_SLTI_SN,
369 1.1 christos TILEPRO_OPC_SLTI_U,
370 1.1 christos TILEPRO_OPC_SLTI_U_SN,
371 1.1 christos TILEPRO_OPC_SLTIB,
372 1.1 christos TILEPRO_OPC_SLTIB_SN,
373 1.1 christos TILEPRO_OPC_SLTIB_U,
374 1.1 christos TILEPRO_OPC_SLTIB_U_SN,
375 1.1 christos TILEPRO_OPC_SLTIH,
376 1.1 christos TILEPRO_OPC_SLTIH_SN,
377 1.1 christos TILEPRO_OPC_SLTIH_U,
378 1.1 christos TILEPRO_OPC_SLTIH_U_SN,
379 1.1 christos TILEPRO_OPC_SNE,
380 1.1 christos TILEPRO_OPC_SNE_SN,
381 1.1 christos TILEPRO_OPC_SNEB,
382 1.1 christos TILEPRO_OPC_SNEB_SN,
383 1.1 christos TILEPRO_OPC_SNEH,
384 1.1 christos TILEPRO_OPC_SNEH_SN,
385 1.1 christos TILEPRO_OPC_SRA,
386 1.1 christos TILEPRO_OPC_SRA_SN,
387 1.1 christos TILEPRO_OPC_SRAB,
388 1.1 christos TILEPRO_OPC_SRAB_SN,
389 1.1 christos TILEPRO_OPC_SRAH,
390 1.1 christos TILEPRO_OPC_SRAH_SN,
391 1.1 christos TILEPRO_OPC_SRAI,
392 1.1 christos TILEPRO_OPC_SRAI_SN,
393 1.1 christos TILEPRO_OPC_SRAIB,
394 1.1 christos TILEPRO_OPC_SRAIB_SN,
395 1.1 christos TILEPRO_OPC_SRAIH,
396 1.1 christos TILEPRO_OPC_SRAIH_SN,
397 1.1 christos TILEPRO_OPC_SUB,
398 1.1 christos TILEPRO_OPC_SUB_SN,
399 1.1 christos TILEPRO_OPC_SUBB,
400 1.1 christos TILEPRO_OPC_SUBB_SN,
401 1.1 christos TILEPRO_OPC_SUBBS_U,
402 1.1 christos TILEPRO_OPC_SUBBS_U_SN,
403 1.1 christos TILEPRO_OPC_SUBH,
404 1.1 christos TILEPRO_OPC_SUBH_SN,
405 1.1 christos TILEPRO_OPC_SUBHS,
406 1.1 christos TILEPRO_OPC_SUBHS_SN,
407 1.1 christos TILEPRO_OPC_SUBS,
408 1.1 christos TILEPRO_OPC_SUBS_SN,
409 1.1 christos TILEPRO_OPC_SW,
410 1.1 christos TILEPRO_OPC_SWADD,
411 1.1 christos TILEPRO_OPC_SWINT0,
412 1.1 christos TILEPRO_OPC_SWINT1,
413 1.1 christos TILEPRO_OPC_SWINT2,
414 1.1 christos TILEPRO_OPC_SWINT3,
415 1.1 christos TILEPRO_OPC_TBLIDXB0,
416 1.1 christos TILEPRO_OPC_TBLIDXB0_SN,
417 1.1 christos TILEPRO_OPC_TBLIDXB1,
418 1.1 christos TILEPRO_OPC_TBLIDXB1_SN,
419 1.1 christos TILEPRO_OPC_TBLIDXB2,
420 1.1 christos TILEPRO_OPC_TBLIDXB2_SN,
421 1.1 christos TILEPRO_OPC_TBLIDXB3,
422 1.1 christos TILEPRO_OPC_TBLIDXB3_SN,
423 1.1 christos TILEPRO_OPC_TNS,
424 1.1 christos TILEPRO_OPC_TNS_SN,
425 1.1 christos TILEPRO_OPC_WH64,
426 1.1 christos TILEPRO_OPC_XOR,
427 1.1 christos TILEPRO_OPC_XOR_SN,
428 1.1 christos TILEPRO_OPC_XORI,
429 1.1 christos TILEPRO_OPC_XORI_SN,
430 1.1 christos TILEPRO_OPC_NONE
431 1.1 christos } tilepro_mnemonic;
432 1.1 christos
433 1.1 christos /* 64-bit pattern for a { bpt ; nop } bundle. */
434 1.1 christos #define TILEPRO_BPT_BUNDLE 0x400b3cae70166000ULL
435 1.1 christos
436 1.1 christos #ifndef DISASM_ONLY
437 1.1 christos
438 1.1 christos enum
439 1.1 christos {
440 1.1 christos TILEPRO_SN_MAX_OPERANDS = 6 /* route */
441 1.1 christos };
442 1.1 christos
443 1.1 christos typedef enum
444 1.1 christos {
445 1.1 christos TILEPRO_SN_OPC_BZ,
446 1.1 christos TILEPRO_SN_OPC_BNZ,
447 1.1 christos TILEPRO_SN_OPC_JRR,
448 1.1 christos TILEPRO_SN_OPC_FNOP,
449 1.1 christos TILEPRO_SN_OPC_BLZ,
450 1.1 christos TILEPRO_SN_OPC_NOP,
451 1.1 christos TILEPRO_SN_OPC_MOVEI,
452 1.1 christos TILEPRO_SN_OPC_MOVE,
453 1.1 christos TILEPRO_SN_OPC_BGEZ,
454 1.1 christos TILEPRO_SN_OPC_JR,
455 1.1 christos TILEPRO_SN_OPC_BLEZ,
456 1.1 christos TILEPRO_SN_OPC_BBNS,
457 1.1 christos TILEPRO_SN_OPC_JALRR,
458 1.1 christos TILEPRO_SN_OPC_BPT,
459 1.1 christos TILEPRO_SN_OPC_JALR,
460 1.1 christos TILEPRO_SN_OPC_SHR1,
461 1.1 christos TILEPRO_SN_OPC_BGZ,
462 1.1 christos TILEPRO_SN_OPC_BBS,
463 1.1 christos TILEPRO_SN_OPC_SHL8II,
464 1.1 christos TILEPRO_SN_OPC_ADDI,
465 1.1 christos TILEPRO_SN_OPC_HALT,
466 1.1 christos TILEPRO_SN_OPC_ROUTE,
467 1.1 christos TILEPRO_SN_OPC_NONE
468 1.1 christos } tilepro_sn_mnemonic;
469 1.1 christos
470 1.1 christos extern const unsigned char tilepro_sn_route_encode[6 * 6 * 6];
471 1.1 christos extern const signed char tilepro_sn_route_decode[256][3];
472 1.1 christos extern const char tilepro_sn_direction_names[6][5];
473 1.1 christos extern const signed char tilepro_sn_dest_map[6][6];
474 1.1 christos #endif /* DISASM_ONLY */
475 1.1 christos
476 1.1 christos
477 1.1 christos static __inline unsigned int
478 1.1 christos get_BrOff_SN(tilepro_bundle_bits num)
479 1.1 christos {
480 1.1 christos const unsigned int n = (unsigned int)num;
481 1.1 christos return (((n >> 0)) & 0x3ff);
482 1.1 christos }
483 1.1 christos
484 1.1 christos static __inline unsigned int
485 1.1 christos get_BrOff_X1(tilepro_bundle_bits n)
486 1.1 christos {
487 1.1 christos return (((unsigned int)(n >> 43)) & 0x00007fff) |
488 1.1 christos (((unsigned int)(n >> 20)) & 0x00018000);
489 1.1 christos }
490 1.1 christos
491 1.1 christos static __inline unsigned int
492 1.1 christos get_BrType_X1(tilepro_bundle_bits n)
493 1.1 christos {
494 1.1 christos return (((unsigned int)(n >> 31)) & 0xf);
495 1.1 christos }
496 1.1 christos
497 1.1 christos static __inline unsigned int
498 1.1 christos get_Dest_Imm8_X1(tilepro_bundle_bits n)
499 1.1 christos {
500 1.1 christos return (((unsigned int)(n >> 31)) & 0x0000003f) |
501 1.1 christos (((unsigned int)(n >> 43)) & 0x000000c0);
502 1.1 christos }
503 1.1 christos
504 1.1 christos static __inline unsigned int
505 1.1 christos get_Dest_SN(tilepro_bundle_bits num)
506 1.1 christos {
507 1.1 christos const unsigned int n = (unsigned int)num;
508 1.1 christos return (((n >> 2)) & 0x3);
509 1.1 christos }
510 1.1 christos
511 1.1 christos static __inline unsigned int
512 1.1 christos get_Dest_X0(tilepro_bundle_bits num)
513 1.1 christos {
514 1.1 christos const unsigned int n = (unsigned int)num;
515 1.1 christos return (((n >> 0)) & 0x3f);
516 1.1 christos }
517 1.1 christos
518 1.1 christos static __inline unsigned int
519 1.1 christos get_Dest_X1(tilepro_bundle_bits n)
520 1.1 christos {
521 1.1 christos return (((unsigned int)(n >> 31)) & 0x3f);
522 1.1 christos }
523 1.1 christos
524 1.1 christos static __inline unsigned int
525 1.1 christos get_Dest_Y0(tilepro_bundle_bits num)
526 1.1 christos {
527 1.1 christos const unsigned int n = (unsigned int)num;
528 1.1 christos return (((n >> 0)) & 0x3f);
529 1.1 christos }
530 1.1 christos
531 1.1 christos static __inline unsigned int
532 1.1 christos get_Dest_Y1(tilepro_bundle_bits n)
533 1.1 christos {
534 1.1 christos return (((unsigned int)(n >> 31)) & 0x3f);
535 1.1 christos }
536 1.1 christos
537 1.1 christos static __inline unsigned int
538 1.1 christos get_Imm16_X0(tilepro_bundle_bits num)
539 1.1 christos {
540 1.1 christos const unsigned int n = (unsigned int)num;
541 1.1 christos return (((n >> 12)) & 0xffff);
542 1.1 christos }
543 1.1 christos
544 1.1 christos static __inline unsigned int
545 1.1 christos get_Imm16_X1(tilepro_bundle_bits n)
546 1.1 christos {
547 1.1 christos return (((unsigned int)(n >> 43)) & 0xffff);
548 1.1 christos }
549 1.1 christos
550 1.1 christos static __inline unsigned int
551 1.1 christos get_Imm8_SN(tilepro_bundle_bits num)
552 1.1 christos {
553 1.1 christos const unsigned int n = (unsigned int)num;
554 1.1 christos return (((n >> 0)) & 0xff);
555 1.1 christos }
556 1.1 christos
557 1.1 christos static __inline unsigned int
558 1.1 christos get_Imm8_X0(tilepro_bundle_bits num)
559 1.1 christos {
560 1.1 christos const unsigned int n = (unsigned int)num;
561 1.1 christos return (((n >> 12)) & 0xff);
562 1.1 christos }
563 1.1 christos
564 1.1 christos static __inline unsigned int
565 1.1 christos get_Imm8_X1(tilepro_bundle_bits n)
566 1.1 christos {
567 1.1 christos return (((unsigned int)(n >> 43)) & 0xff);
568 1.1 christos }
569 1.1 christos
570 1.1 christos static __inline unsigned int
571 1.1 christos get_Imm8_Y0(tilepro_bundle_bits num)
572 1.1 christos {
573 1.1 christos const unsigned int n = (unsigned int)num;
574 1.1 christos return (((n >> 12)) & 0xff);
575 1.1 christos }
576 1.1 christos
577 1.1 christos static __inline unsigned int
578 1.1 christos get_Imm8_Y1(tilepro_bundle_bits n)
579 1.1 christos {
580 1.1 christos return (((unsigned int)(n >> 43)) & 0xff);
581 1.1 christos }
582 1.1 christos
583 1.1 christos static __inline unsigned int
584 1.1 christos get_ImmOpcodeExtension_X0(tilepro_bundle_bits num)
585 1.1 christos {
586 1.1 christos const unsigned int n = (unsigned int)num;
587 1.1 christos return (((n >> 20)) & 0x7f);
588 1.1 christos }
589 1.1 christos
590 1.1 christos static __inline unsigned int
591 1.1 christos get_ImmOpcodeExtension_X1(tilepro_bundle_bits n)
592 1.1 christos {
593 1.1 christos return (((unsigned int)(n >> 51)) & 0x7f);
594 1.1 christos }
595 1.1 christos
596 1.1 christos static __inline unsigned int
597 1.1 christos get_ImmRROpcodeExtension_SN(tilepro_bundle_bits num)
598 1.1 christos {
599 1.1 christos const unsigned int n = (unsigned int)num;
600 1.1 christos return (((n >> 8)) & 0x3);
601 1.1 christos }
602 1.1 christos
603 1.1 christos static __inline unsigned int
604 1.1 christos get_JOffLong_X1(tilepro_bundle_bits n)
605 1.1 christos {
606 1.1 christos return (((unsigned int)(n >> 43)) & 0x00007fff) |
607 1.1 christos (((unsigned int)(n >> 20)) & 0x00018000) |
608 1.1 christos (((unsigned int)(n >> 14)) & 0x001e0000) |
609 1.1 christos (((unsigned int)(n >> 16)) & 0x07e00000) |
610 1.1 christos (((unsigned int)(n >> 31)) & 0x18000000);
611 1.1 christos }
612 1.1 christos
613 1.1 christos static __inline unsigned int
614 1.1 christos get_JOff_X1(tilepro_bundle_bits n)
615 1.1 christos {
616 1.1 christos return (((unsigned int)(n >> 43)) & 0x00007fff) |
617 1.1 christos (((unsigned int)(n >> 20)) & 0x00018000) |
618 1.1 christos (((unsigned int)(n >> 14)) & 0x001e0000) |
619 1.1 christos (((unsigned int)(n >> 16)) & 0x07e00000) |
620 1.1 christos (((unsigned int)(n >> 31)) & 0x08000000);
621 1.1 christos }
622 1.1 christos
623 1.1 christos static __inline unsigned int
624 1.1 christos get_MF_Imm15_X1(tilepro_bundle_bits n)
625 1.1 christos {
626 1.1 christos return (((unsigned int)(n >> 37)) & 0x00003fff) |
627 1.1 christos (((unsigned int)(n >> 44)) & 0x00004000);
628 1.1 christos }
629 1.1 christos
630 1.1 christos static __inline unsigned int
631 1.1 christos get_MMEnd_X0(tilepro_bundle_bits num)
632 1.1 christos {
633 1.1 christos const unsigned int n = (unsigned int)num;
634 1.1 christos return (((n >> 18)) & 0x1f);
635 1.1 christos }
636 1.1 christos
637 1.1 christos static __inline unsigned int
638 1.1 christos get_MMEnd_X1(tilepro_bundle_bits n)
639 1.1 christos {
640 1.1 christos return (((unsigned int)(n >> 49)) & 0x1f);
641 1.1 christos }
642 1.1 christos
643 1.1 christos static __inline unsigned int
644 1.1 christos get_MMStart_X0(tilepro_bundle_bits num)
645 1.1 christos {
646 1.1 christos const unsigned int n = (unsigned int)num;
647 1.1 christos return (((n >> 23)) & 0x1f);
648 1.1 christos }
649 1.1 christos
650 1.1 christos static __inline unsigned int
651 1.1 christos get_MMStart_X1(tilepro_bundle_bits n)
652 1.1 christos {
653 1.1 christos return (((unsigned int)(n >> 54)) & 0x1f);
654 1.1 christos }
655 1.1 christos
656 1.1 christos static __inline unsigned int
657 1.1 christos get_MT_Imm15_X1(tilepro_bundle_bits n)
658 1.1 christos {
659 1.1 christos return (((unsigned int)(n >> 31)) & 0x0000003f) |
660 1.1 christos (((unsigned int)(n >> 37)) & 0x00003fc0) |
661 1.1 christos (((unsigned int)(n >> 44)) & 0x00004000);
662 1.1 christos }
663 1.1 christos
664 1.1 christos static __inline unsigned int
665 1.1 christos get_Mode(tilepro_bundle_bits n)
666 1.1 christos {
667 1.1 christos return (((unsigned int)(n >> 63)) & 0x1);
668 1.1 christos }
669 1.1 christos
670 1.1 christos static __inline unsigned int
671 1.1 christos get_NoRegOpcodeExtension_SN(tilepro_bundle_bits num)
672 1.1 christos {
673 1.1 christos const unsigned int n = (unsigned int)num;
674 1.1 christos return (((n >> 0)) & 0xf);
675 1.1 christos }
676 1.1 christos
677 1.1 christos static __inline unsigned int
678 1.1 christos get_Opcode_SN(tilepro_bundle_bits num)
679 1.1 christos {
680 1.1 christos const unsigned int n = (unsigned int)num;
681 1.1 christos return (((n >> 10)) & 0x3f);
682 1.1 christos }
683 1.1 christos
684 1.1 christos static __inline unsigned int
685 1.1 christos get_Opcode_X0(tilepro_bundle_bits num)
686 1.1 christos {
687 1.1 christos const unsigned int n = (unsigned int)num;
688 1.1 christos return (((n >> 28)) & 0x7);
689 1.1 christos }
690 1.1 christos
691 1.1 christos static __inline unsigned int
692 1.1 christos get_Opcode_X1(tilepro_bundle_bits n)
693 1.1 christos {
694 1.1 christos return (((unsigned int)(n >> 59)) & 0xf);
695 1.1 christos }
696 1.1 christos
697 1.1 christos static __inline unsigned int
698 1.1 christos get_Opcode_Y0(tilepro_bundle_bits num)
699 1.1 christos {
700 1.1 christos const unsigned int n = (unsigned int)num;
701 1.1 christos return (((n >> 27)) & 0xf);
702 1.1 christos }
703 1.1 christos
704 1.1 christos static __inline unsigned int
705 1.1 christos get_Opcode_Y1(tilepro_bundle_bits n)
706 1.1 christos {
707 1.1 christos return (((unsigned int)(n >> 59)) & 0xf);
708 1.1 christos }
709 1.1 christos
710 1.1 christos static __inline unsigned int
711 1.1 christos get_Opcode_Y2(tilepro_bundle_bits n)
712 1.1 christos {
713 1.1 christos return (((unsigned int)(n >> 56)) & 0x7);
714 1.1 christos }
715 1.1 christos
716 1.1 christos static __inline unsigned int
717 1.1 christos get_RROpcodeExtension_SN(tilepro_bundle_bits num)
718 1.1 christos {
719 1.1 christos const unsigned int n = (unsigned int)num;
720 1.1 christos return (((n >> 4)) & 0xf);
721 1.1 christos }
722 1.1 christos
723 1.1 christos static __inline unsigned int
724 1.1 christos get_RRROpcodeExtension_X0(tilepro_bundle_bits num)
725 1.1 christos {
726 1.1 christos const unsigned int n = (unsigned int)num;
727 1.1 christos return (((n >> 18)) & 0x1ff);
728 1.1 christos }
729 1.1 christos
730 1.1 christos static __inline unsigned int
731 1.1 christos get_RRROpcodeExtension_X1(tilepro_bundle_bits n)
732 1.1 christos {
733 1.1 christos return (((unsigned int)(n >> 49)) & 0x1ff);
734 1.1 christos }
735 1.1 christos
736 1.1 christos static __inline unsigned int
737 1.1 christos get_RRROpcodeExtension_Y0(tilepro_bundle_bits num)
738 1.1 christos {
739 1.1 christos const unsigned int n = (unsigned int)num;
740 1.1 christos return (((n >> 18)) & 0x3);
741 1.1 christos }
742 1.1 christos
743 1.1 christos static __inline unsigned int
744 1.1 christos get_RRROpcodeExtension_Y1(tilepro_bundle_bits n)
745 1.1 christos {
746 1.1 christos return (((unsigned int)(n >> 49)) & 0x3);
747 1.1 christos }
748 1.1 christos
749 1.1 christos static __inline unsigned int
750 1.1 christos get_RouteOpcodeExtension_SN(tilepro_bundle_bits num)
751 1.1 christos {
752 1.1 christos const unsigned int n = (unsigned int)num;
753 1.1 christos return (((n >> 0)) & 0x3ff);
754 1.1 christos }
755 1.1 christos
756 1.1 christos static __inline unsigned int
757 1.1 christos get_S_X0(tilepro_bundle_bits num)
758 1.1 christos {
759 1.1 christos const unsigned int n = (unsigned int)num;
760 1.1 christos return (((n >> 27)) & 0x1);
761 1.1 christos }
762 1.1 christos
763 1.1 christos static __inline unsigned int
764 1.1 christos get_S_X1(tilepro_bundle_bits n)
765 1.1 christos {
766 1.1 christos return (((unsigned int)(n >> 58)) & 0x1);
767 1.1 christos }
768 1.1 christos
769 1.1 christos static __inline unsigned int
770 1.1 christos get_ShAmt_X0(tilepro_bundle_bits num)
771 1.1 christos {
772 1.1 christos const unsigned int n = (unsigned int)num;
773 1.1 christos return (((n >> 12)) & 0x1f);
774 1.1 christos }
775 1.1 christos
776 1.1 christos static __inline unsigned int
777 1.1 christos get_ShAmt_X1(tilepro_bundle_bits n)
778 1.1 christos {
779 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f);
780 1.1 christos }
781 1.1 christos
782 1.1 christos static __inline unsigned int
783 1.1 christos get_ShAmt_Y0(tilepro_bundle_bits num)
784 1.1 christos {
785 1.1 christos const unsigned int n = (unsigned int)num;
786 1.1 christos return (((n >> 12)) & 0x1f);
787 1.1 christos }
788 1.1 christos
789 1.1 christos static __inline unsigned int
790 1.1 christos get_ShAmt_Y1(tilepro_bundle_bits n)
791 1.1 christos {
792 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f);
793 1.1 christos }
794 1.1 christos
795 1.1 christos static __inline unsigned int
796 1.1 christos get_SrcA_X0(tilepro_bundle_bits num)
797 1.1 christos {
798 1.1 christos const unsigned int n = (unsigned int)num;
799 1.1 christos return (((n >> 6)) & 0x3f);
800 1.1 christos }
801 1.1 christos
802 1.1 christos static __inline unsigned int
803 1.1 christos get_SrcA_X1(tilepro_bundle_bits n)
804 1.1 christos {
805 1.1 christos return (((unsigned int)(n >> 37)) & 0x3f);
806 1.1 christos }
807 1.1 christos
808 1.1 christos static __inline unsigned int
809 1.1 christos get_SrcA_Y0(tilepro_bundle_bits num)
810 1.1 christos {
811 1.1 christos const unsigned int n = (unsigned int)num;
812 1.1 christos return (((n >> 6)) & 0x3f);
813 1.1 christos }
814 1.1 christos
815 1.1 christos static __inline unsigned int
816 1.1 christos get_SrcA_Y1(tilepro_bundle_bits n)
817 1.1 christos {
818 1.1 christos return (((unsigned int)(n >> 37)) & 0x3f);
819 1.1 christos }
820 1.1 christos
821 1.1 christos static __inline unsigned int
822 1.1 christos get_SrcA_Y2(tilepro_bundle_bits n)
823 1.1 christos {
824 1.1 christos return (((n >> 26)) & 0x00000001) |
825 1.1 christos (((unsigned int)(n >> 50)) & 0x0000003e);
826 1.1 christos }
827 1.1 christos
828 1.1 christos static __inline unsigned int
829 1.1 christos get_SrcBDest_Y2(tilepro_bundle_bits num)
830 1.1 christos {
831 1.1 christos const unsigned int n = (unsigned int)num;
832 1.1 christos return (((n >> 20)) & 0x3f);
833 1.1 christos }
834 1.1 christos
835 1.1 christos static __inline unsigned int
836 1.1 christos get_SrcB_X0(tilepro_bundle_bits num)
837 1.1 christos {
838 1.1 christos const unsigned int n = (unsigned int)num;
839 1.1 christos return (((n >> 12)) & 0x3f);
840 1.1 christos }
841 1.1 christos
842 1.1 christos static __inline unsigned int
843 1.1 christos get_SrcB_X1(tilepro_bundle_bits n)
844 1.1 christos {
845 1.1 christos return (((unsigned int)(n >> 43)) & 0x3f);
846 1.1 christos }
847 1.1 christos
848 1.1 christos static __inline unsigned int
849 1.1 christos get_SrcB_Y0(tilepro_bundle_bits num)
850 1.1 christos {
851 1.1 christos const unsigned int n = (unsigned int)num;
852 1.1 christos return (((n >> 12)) & 0x3f);
853 1.1 christos }
854 1.1 christos
855 1.1 christos static __inline unsigned int
856 1.1 christos get_SrcB_Y1(tilepro_bundle_bits n)
857 1.1 christos {
858 1.1 christos return (((unsigned int)(n >> 43)) & 0x3f);
859 1.1 christos }
860 1.1 christos
861 1.1 christos static __inline unsigned int
862 1.1 christos get_Src_SN(tilepro_bundle_bits num)
863 1.1 christos {
864 1.1 christos const unsigned int n = (unsigned int)num;
865 1.1 christos return (((n >> 0)) & 0x3);
866 1.1 christos }
867 1.1 christos
868 1.1 christos static __inline unsigned int
869 1.1 christos get_UnOpcodeExtension_X0(tilepro_bundle_bits num)
870 1.1 christos {
871 1.1 christos const unsigned int n = (unsigned int)num;
872 1.1 christos return (((n >> 12)) & 0x1f);
873 1.1 christos }
874 1.1 christos
875 1.1 christos static __inline unsigned int
876 1.1 christos get_UnOpcodeExtension_X1(tilepro_bundle_bits n)
877 1.1 christos {
878 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f);
879 1.1 christos }
880 1.1 christos
881 1.1 christos static __inline unsigned int
882 1.1 christos get_UnOpcodeExtension_Y0(tilepro_bundle_bits num)
883 1.1 christos {
884 1.1 christos const unsigned int n = (unsigned int)num;
885 1.1 christos return (((n >> 12)) & 0x1f);
886 1.1 christos }
887 1.1 christos
888 1.1 christos static __inline unsigned int
889 1.1 christos get_UnOpcodeExtension_Y1(tilepro_bundle_bits n)
890 1.1 christos {
891 1.1 christos return (((unsigned int)(n >> 43)) & 0x1f);
892 1.1 christos }
893 1.1 christos
894 1.1 christos static __inline unsigned int
895 1.1 christos get_UnShOpcodeExtension_X0(tilepro_bundle_bits num)
896 1.1 christos {
897 1.1 christos const unsigned int n = (unsigned int)num;
898 1.1 christos return (((n >> 17)) & 0x3ff);
899 1.1 christos }
900 1.1 christos
901 1.1 christos static __inline unsigned int
902 1.1 christos get_UnShOpcodeExtension_X1(tilepro_bundle_bits n)
903 1.1 christos {
904 1.1 christos return (((unsigned int)(n >> 48)) & 0x3ff);
905 1.1 christos }
906 1.1 christos
907 1.1 christos static __inline unsigned int
908 1.1 christos get_UnShOpcodeExtension_Y0(tilepro_bundle_bits num)
909 1.1 christos {
910 1.1 christos const unsigned int n = (unsigned int)num;
911 1.1 christos return (((n >> 17)) & 0x7);
912 1.1 christos }
913 1.1 christos
914 1.1 christos static __inline unsigned int
915 1.1 christos get_UnShOpcodeExtension_Y1(tilepro_bundle_bits n)
916 1.1 christos {
917 1.1 christos return (((unsigned int)(n >> 48)) & 0x7);
918 1.1 christos }
919 1.1 christos
920 1.1 christos
921 1.1 christos static __inline int
922 1.1 christos sign_extend(int n, int num_bits)
923 1.1 christos {
924 1.1 christos int shift = (int)(sizeof(int) * 8 - num_bits);
925 1.1 christos return (n << shift) >> shift;
926 1.1 christos }
927 1.1 christos
928 1.1 christos
929 1.1 christos
930 1.1 christos static __inline tilepro_bundle_bits
931 1.1 christos create_BrOff_SN(int num)
932 1.1 christos {
933 1.1 christos const unsigned int n = (unsigned int)num;
934 1.1 christos return ((n & 0x3ff) << 0);
935 1.1 christos }
936 1.1 christos
937 1.1 christos static __inline tilepro_bundle_bits
938 1.1 christos create_BrOff_X1(int num)
939 1.1 christos {
940 1.1 christos const unsigned int n = (unsigned int)num;
941 1.1 christos return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
942 1.1 christos (((tilepro_bundle_bits)(n & 0x00018000)) << 20);
943 1.1 christos }
944 1.1 christos
945 1.1 christos static __inline tilepro_bundle_bits
946 1.1 christos create_BrType_X1(int num)
947 1.1 christos {
948 1.1 christos const unsigned int n = (unsigned int)num;
949 1.1 christos return (((tilepro_bundle_bits)(n & 0xf)) << 31);
950 1.1 christos }
951 1.1 christos
952 1.1 christos static __inline tilepro_bundle_bits
953 1.1 christos create_Dest_Imm8_X1(int num)
954 1.1 christos {
955 1.1 christos const unsigned int n = (unsigned int)num;
956 1.1 christos return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) |
957 1.1 christos (((tilepro_bundle_bits)(n & 0x000000c0)) << 43);
958 1.1 christos }
959 1.1 christos
960 1.1 christos static __inline tilepro_bundle_bits
961 1.1 christos create_Dest_SN(int num)
962 1.1 christos {
963 1.1 christos const unsigned int n = (unsigned int)num;
964 1.1 christos return ((n & 0x3) << 2);
965 1.1 christos }
966 1.1 christos
967 1.1 christos static __inline tilepro_bundle_bits
968 1.1 christos create_Dest_X0(int num)
969 1.1 christos {
970 1.1 christos const unsigned int n = (unsigned int)num;
971 1.1 christos return ((n & 0x3f) << 0);
972 1.1 christos }
973 1.1 christos
974 1.1 christos static __inline tilepro_bundle_bits
975 1.1 christos create_Dest_X1(int num)
976 1.1 christos {
977 1.1 christos const unsigned int n = (unsigned int)num;
978 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 31);
979 1.1 christos }
980 1.1 christos
981 1.1 christos static __inline tilepro_bundle_bits
982 1.1 christos create_Dest_Y0(int num)
983 1.1 christos {
984 1.1 christos const unsigned int n = (unsigned int)num;
985 1.1 christos return ((n & 0x3f) << 0);
986 1.1 christos }
987 1.1 christos
988 1.1 christos static __inline tilepro_bundle_bits
989 1.1 christos create_Dest_Y1(int num)
990 1.1 christos {
991 1.1 christos const unsigned int n = (unsigned int)num;
992 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 31);
993 1.1 christos }
994 1.1 christos
995 1.1 christos static __inline tilepro_bundle_bits
996 1.1 christos create_Imm16_X0(int num)
997 1.1 christos {
998 1.1 christos const unsigned int n = (unsigned int)num;
999 1.1 christos return ((n & 0xffff) << 12);
1000 1.1 christos }
1001 1.1 christos
1002 1.1 christos static __inline tilepro_bundle_bits
1003 1.1 christos create_Imm16_X1(int num)
1004 1.1 christos {
1005 1.1 christos const unsigned int n = (unsigned int)num;
1006 1.1 christos return (((tilepro_bundle_bits)(n & 0xffff)) << 43);
1007 1.1 christos }
1008 1.1 christos
1009 1.1 christos static __inline tilepro_bundle_bits
1010 1.1 christos create_Imm8_SN(int num)
1011 1.1 christos {
1012 1.1 christos const unsigned int n = (unsigned int)num;
1013 1.1 christos return ((n & 0xff) << 0);
1014 1.1 christos }
1015 1.1 christos
1016 1.1 christos static __inline tilepro_bundle_bits
1017 1.1 christos create_Imm8_X0(int num)
1018 1.1 christos {
1019 1.1 christos const unsigned int n = (unsigned int)num;
1020 1.1 christos return ((n & 0xff) << 12);
1021 1.1 christos }
1022 1.1 christos
1023 1.1 christos static __inline tilepro_bundle_bits
1024 1.1 christos create_Imm8_X1(int num)
1025 1.1 christos {
1026 1.1 christos const unsigned int n = (unsigned int)num;
1027 1.1 christos return (((tilepro_bundle_bits)(n & 0xff)) << 43);
1028 1.1 christos }
1029 1.1 christos
1030 1.1 christos static __inline tilepro_bundle_bits
1031 1.1 christos create_Imm8_Y0(int num)
1032 1.1 christos {
1033 1.1 christos const unsigned int n = (unsigned int)num;
1034 1.1 christos return ((n & 0xff) << 12);
1035 1.1 christos }
1036 1.1 christos
1037 1.1 christos static __inline tilepro_bundle_bits
1038 1.1 christos create_Imm8_Y1(int num)
1039 1.1 christos {
1040 1.1 christos const unsigned int n = (unsigned int)num;
1041 1.1 christos return (((tilepro_bundle_bits)(n & 0xff)) << 43);
1042 1.1 christos }
1043 1.1 christos
1044 1.1 christos static __inline tilepro_bundle_bits
1045 1.1 christos create_ImmOpcodeExtension_X0(int num)
1046 1.1 christos {
1047 1.1 christos const unsigned int n = (unsigned int)num;
1048 1.1 christos return ((n & 0x7f) << 20);
1049 1.1 christos }
1050 1.1 christos
1051 1.1 christos static __inline tilepro_bundle_bits
1052 1.1 christos create_ImmOpcodeExtension_X1(int num)
1053 1.1 christos {
1054 1.1 christos const unsigned int n = (unsigned int)num;
1055 1.1 christos return (((tilepro_bundle_bits)(n & 0x7f)) << 51);
1056 1.1 christos }
1057 1.1 christos
1058 1.1 christos static __inline tilepro_bundle_bits
1059 1.1 christos create_ImmRROpcodeExtension_SN(int num)
1060 1.1 christos {
1061 1.1 christos const unsigned int n = (unsigned int)num;
1062 1.1 christos return ((n & 0x3) << 8);
1063 1.1 christos }
1064 1.1 christos
1065 1.1 christos static __inline tilepro_bundle_bits
1066 1.1 christos create_JOffLong_X1(int num)
1067 1.1 christos {
1068 1.1 christos const unsigned int n = (unsigned int)num;
1069 1.1 christos return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
1070 1.1 christos (((tilepro_bundle_bits)(n & 0x00018000)) << 20) |
1071 1.1 christos (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) |
1072 1.1 christos (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) |
1073 1.1 christos (((tilepro_bundle_bits)(n & 0x18000000)) << 31);
1074 1.1 christos }
1075 1.1 christos
1076 1.1 christos static __inline tilepro_bundle_bits
1077 1.1 christos create_JOff_X1(int num)
1078 1.1 christos {
1079 1.1 christos const unsigned int n = (unsigned int)num;
1080 1.1 christos return (((tilepro_bundle_bits)(n & 0x00007fff)) << 43) |
1081 1.1 christos (((tilepro_bundle_bits)(n & 0x00018000)) << 20) |
1082 1.1 christos (((tilepro_bundle_bits)(n & 0x001e0000)) << 14) |
1083 1.1 christos (((tilepro_bundle_bits)(n & 0x07e00000)) << 16) |
1084 1.1 christos (((tilepro_bundle_bits)(n & 0x08000000)) << 31);
1085 1.1 christos }
1086 1.1 christos
1087 1.1 christos static __inline tilepro_bundle_bits
1088 1.1 christos create_MF_Imm15_X1(int num)
1089 1.1 christos {
1090 1.1 christos const unsigned int n = (unsigned int)num;
1091 1.1 christos return (((tilepro_bundle_bits)(n & 0x00003fff)) << 37) |
1092 1.1 christos (((tilepro_bundle_bits)(n & 0x00004000)) << 44);
1093 1.1 christos }
1094 1.1 christos
1095 1.1 christos static __inline tilepro_bundle_bits
1096 1.1 christos create_MMEnd_X0(int num)
1097 1.1 christos {
1098 1.1 christos const unsigned int n = (unsigned int)num;
1099 1.1 christos return ((n & 0x1f) << 18);
1100 1.1 christos }
1101 1.1 christos
1102 1.1 christos static __inline tilepro_bundle_bits
1103 1.1 christos create_MMEnd_X1(int num)
1104 1.1 christos {
1105 1.1 christos const unsigned int n = (unsigned int)num;
1106 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 49);
1107 1.1 christos }
1108 1.1 christos
1109 1.1 christos static __inline tilepro_bundle_bits
1110 1.1 christos create_MMStart_X0(int num)
1111 1.1 christos {
1112 1.1 christos const unsigned int n = (unsigned int)num;
1113 1.1 christos return ((n & 0x1f) << 23);
1114 1.1 christos }
1115 1.1 christos
1116 1.1 christos static __inline tilepro_bundle_bits
1117 1.1 christos create_MMStart_X1(int num)
1118 1.1 christos {
1119 1.1 christos const unsigned int n = (unsigned int)num;
1120 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 54);
1121 1.1 christos }
1122 1.1 christos
1123 1.1 christos static __inline tilepro_bundle_bits
1124 1.1 christos create_MT_Imm15_X1(int num)
1125 1.1 christos {
1126 1.1 christos const unsigned int n = (unsigned int)num;
1127 1.1 christos return (((tilepro_bundle_bits)(n & 0x0000003f)) << 31) |
1128 1.1 christos (((tilepro_bundle_bits)(n & 0x00003fc0)) << 37) |
1129 1.1 christos (((tilepro_bundle_bits)(n & 0x00004000)) << 44);
1130 1.1 christos }
1131 1.1 christos
1132 1.1 christos static __inline tilepro_bundle_bits
1133 1.1 christos create_Mode(int num)
1134 1.1 christos {
1135 1.1 christos const unsigned int n = (unsigned int)num;
1136 1.1 christos return (((tilepro_bundle_bits)(n & 0x1)) << 63);
1137 1.1 christos }
1138 1.1 christos
1139 1.1 christos static __inline tilepro_bundle_bits
1140 1.1 christos create_NoRegOpcodeExtension_SN(int num)
1141 1.1 christos {
1142 1.1 christos const unsigned int n = (unsigned int)num;
1143 1.1 christos return ((n & 0xf) << 0);
1144 1.1 christos }
1145 1.1 christos
1146 1.1 christos static __inline tilepro_bundle_bits
1147 1.1 christos create_Opcode_SN(int num)
1148 1.1 christos {
1149 1.1 christos const unsigned int n = (unsigned int)num;
1150 1.1 christos return ((n & 0x3f) << 10);
1151 1.1 christos }
1152 1.1 christos
1153 1.1 christos static __inline tilepro_bundle_bits
1154 1.1 christos create_Opcode_X0(int num)
1155 1.1 christos {
1156 1.1 christos const unsigned int n = (unsigned int)num;
1157 1.1 christos return ((n & 0x7) << 28);
1158 1.1 christos }
1159 1.1 christos
1160 1.1 christos static __inline tilepro_bundle_bits
1161 1.1 christos create_Opcode_X1(int num)
1162 1.1 christos {
1163 1.1 christos const unsigned int n = (unsigned int)num;
1164 1.1 christos return (((tilepro_bundle_bits)(n & 0xf)) << 59);
1165 1.1 christos }
1166 1.1 christos
1167 1.1 christos static __inline tilepro_bundle_bits
1168 1.1 christos create_Opcode_Y0(int num)
1169 1.1 christos {
1170 1.1 christos const unsigned int n = (unsigned int)num;
1171 1.1 christos return ((n & 0xf) << 27);
1172 1.1 christos }
1173 1.1 christos
1174 1.1 christos static __inline tilepro_bundle_bits
1175 1.1 christos create_Opcode_Y1(int num)
1176 1.1 christos {
1177 1.1 christos const unsigned int n = (unsigned int)num;
1178 1.1 christos return (((tilepro_bundle_bits)(n & 0xf)) << 59);
1179 1.1 christos }
1180 1.1 christos
1181 1.1 christos static __inline tilepro_bundle_bits
1182 1.1 christos create_Opcode_Y2(int num)
1183 1.1 christos {
1184 1.1 christos const unsigned int n = (unsigned int)num;
1185 1.1 christos return (((tilepro_bundle_bits)(n & 0x7)) << 56);
1186 1.1 christos }
1187 1.1 christos
1188 1.1 christos static __inline tilepro_bundle_bits
1189 1.1 christos create_RROpcodeExtension_SN(int num)
1190 1.1 christos {
1191 1.1 christos const unsigned int n = (unsigned int)num;
1192 1.1 christos return ((n & 0xf) << 4);
1193 1.1 christos }
1194 1.1 christos
1195 1.1 christos static __inline tilepro_bundle_bits
1196 1.1 christos create_RRROpcodeExtension_X0(int num)
1197 1.1 christos {
1198 1.1 christos const unsigned int n = (unsigned int)num;
1199 1.1 christos return ((n & 0x1ff) << 18);
1200 1.1 christos }
1201 1.1 christos
1202 1.1 christos static __inline tilepro_bundle_bits
1203 1.1 christos create_RRROpcodeExtension_X1(int num)
1204 1.1 christos {
1205 1.1 christos const unsigned int n = (unsigned int)num;
1206 1.1 christos return (((tilepro_bundle_bits)(n & 0x1ff)) << 49);
1207 1.1 christos }
1208 1.1 christos
1209 1.1 christos static __inline tilepro_bundle_bits
1210 1.1 christos create_RRROpcodeExtension_Y0(int num)
1211 1.1 christos {
1212 1.1 christos const unsigned int n = (unsigned int)num;
1213 1.1 christos return ((n & 0x3) << 18);
1214 1.1 christos }
1215 1.1 christos
1216 1.1 christos static __inline tilepro_bundle_bits
1217 1.1 christos create_RRROpcodeExtension_Y1(int num)
1218 1.1 christos {
1219 1.1 christos const unsigned int n = (unsigned int)num;
1220 1.1 christos return (((tilepro_bundle_bits)(n & 0x3)) << 49);
1221 1.1 christos }
1222 1.1 christos
1223 1.1 christos static __inline tilepro_bundle_bits
1224 1.1 christos create_RouteOpcodeExtension_SN(int num)
1225 1.1 christos {
1226 1.1 christos const unsigned int n = (unsigned int)num;
1227 1.1 christos return ((n & 0x3ff) << 0);
1228 1.1 christos }
1229 1.1 christos
1230 1.1 christos static __inline tilepro_bundle_bits
1231 1.1 christos create_S_X0(int num)
1232 1.1 christos {
1233 1.1 christos const unsigned int n = (unsigned int)num;
1234 1.1 christos return ((n & 0x1) << 27);
1235 1.1 christos }
1236 1.1 christos
1237 1.1 christos static __inline tilepro_bundle_bits
1238 1.1 christos create_S_X1(int num)
1239 1.1 christos {
1240 1.1 christos const unsigned int n = (unsigned int)num;
1241 1.1 christos return (((tilepro_bundle_bits)(n & 0x1)) << 58);
1242 1.1 christos }
1243 1.1 christos
1244 1.1 christos static __inline tilepro_bundle_bits
1245 1.1 christos create_ShAmt_X0(int num)
1246 1.1 christos {
1247 1.1 christos const unsigned int n = (unsigned int)num;
1248 1.1 christos return ((n & 0x1f) << 12);
1249 1.1 christos }
1250 1.1 christos
1251 1.1 christos static __inline tilepro_bundle_bits
1252 1.1 christos create_ShAmt_X1(int num)
1253 1.1 christos {
1254 1.1 christos const unsigned int n = (unsigned int)num;
1255 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1256 1.1 christos }
1257 1.1 christos
1258 1.1 christos static __inline tilepro_bundle_bits
1259 1.1 christos create_ShAmt_Y0(int num)
1260 1.1 christos {
1261 1.1 christos const unsigned int n = (unsigned int)num;
1262 1.1 christos return ((n & 0x1f) << 12);
1263 1.1 christos }
1264 1.1 christos
1265 1.1 christos static __inline tilepro_bundle_bits
1266 1.1 christos create_ShAmt_Y1(int num)
1267 1.1 christos {
1268 1.1 christos const unsigned int n = (unsigned int)num;
1269 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1270 1.1 christos }
1271 1.1 christos
1272 1.1 christos static __inline tilepro_bundle_bits
1273 1.1 christos create_SrcA_X0(int num)
1274 1.1 christos {
1275 1.1 christos const unsigned int n = (unsigned int)num;
1276 1.1 christos return ((n & 0x3f) << 6);
1277 1.1 christos }
1278 1.1 christos
1279 1.1 christos static __inline tilepro_bundle_bits
1280 1.1 christos create_SrcA_X1(int num)
1281 1.1 christos {
1282 1.1 christos const unsigned int n = (unsigned int)num;
1283 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 37);
1284 1.1 christos }
1285 1.1 christos
1286 1.1 christos static __inline tilepro_bundle_bits
1287 1.1 christos create_SrcA_Y0(int num)
1288 1.1 christos {
1289 1.1 christos const unsigned int n = (unsigned int)num;
1290 1.1 christos return ((n & 0x3f) << 6);
1291 1.1 christos }
1292 1.1 christos
1293 1.1 christos static __inline tilepro_bundle_bits
1294 1.1 christos create_SrcA_Y1(int num)
1295 1.1 christos {
1296 1.1 christos const unsigned int n = (unsigned int)num;
1297 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 37);
1298 1.1 christos }
1299 1.1 christos
1300 1.1 christos static __inline tilepro_bundle_bits
1301 1.1 christos create_SrcA_Y2(int num)
1302 1.1 christos {
1303 1.1 christos const unsigned int n = (unsigned int)num;
1304 1.1 christos return ((n & 0x00000001) << 26) |
1305 1.1 christos (((tilepro_bundle_bits)(n & 0x0000003e)) << 50);
1306 1.1 christos }
1307 1.1 christos
1308 1.1 christos static __inline tilepro_bundle_bits
1309 1.1 christos create_SrcBDest_Y2(int num)
1310 1.1 christos {
1311 1.1 christos const unsigned int n = (unsigned int)num;
1312 1.1 christos return ((n & 0x3f) << 20);
1313 1.1 christos }
1314 1.1 christos
1315 1.1 christos static __inline tilepro_bundle_bits
1316 1.1 christos create_SrcB_X0(int num)
1317 1.1 christos {
1318 1.1 christos const unsigned int n = (unsigned int)num;
1319 1.1 christos return ((n & 0x3f) << 12);
1320 1.1 christos }
1321 1.1 christos
1322 1.1 christos static __inline tilepro_bundle_bits
1323 1.1 christos create_SrcB_X1(int num)
1324 1.1 christos {
1325 1.1 christos const unsigned int n = (unsigned int)num;
1326 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 43);
1327 1.1 christos }
1328 1.1 christos
1329 1.1 christos static __inline tilepro_bundle_bits
1330 1.1 christos create_SrcB_Y0(int num)
1331 1.1 christos {
1332 1.1 christos const unsigned int n = (unsigned int)num;
1333 1.1 christos return ((n & 0x3f) << 12);
1334 1.1 christos }
1335 1.1 christos
1336 1.1 christos static __inline tilepro_bundle_bits
1337 1.1 christos create_SrcB_Y1(int num)
1338 1.1 christos {
1339 1.1 christos const unsigned int n = (unsigned int)num;
1340 1.1 christos return (((tilepro_bundle_bits)(n & 0x3f)) << 43);
1341 1.1 christos }
1342 1.1 christos
1343 1.1 christos static __inline tilepro_bundle_bits
1344 1.1 christos create_Src_SN(int num)
1345 1.1 christos {
1346 1.1 christos const unsigned int n = (unsigned int)num;
1347 1.1 christos return ((n & 0x3) << 0);
1348 1.1 christos }
1349 1.1 christos
1350 1.1 christos static __inline tilepro_bundle_bits
1351 1.1 christos create_UnOpcodeExtension_X0(int num)
1352 1.1 christos {
1353 1.1 christos const unsigned int n = (unsigned int)num;
1354 1.1 christos return ((n & 0x1f) << 12);
1355 1.1 christos }
1356 1.1 christos
1357 1.1 christos static __inline tilepro_bundle_bits
1358 1.1 christos create_UnOpcodeExtension_X1(int num)
1359 1.1 christos {
1360 1.1 christos const unsigned int n = (unsigned int)num;
1361 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1362 1.1 christos }
1363 1.1 christos
1364 1.1 christos static __inline tilepro_bundle_bits
1365 1.1 christos create_UnOpcodeExtension_Y0(int num)
1366 1.1 christos {
1367 1.1 christos const unsigned int n = (unsigned int)num;
1368 1.1 christos return ((n & 0x1f) << 12);
1369 1.1 christos }
1370 1.1 christos
1371 1.1 christos static __inline tilepro_bundle_bits
1372 1.1 christos create_UnOpcodeExtension_Y1(int num)
1373 1.1 christos {
1374 1.1 christos const unsigned int n = (unsigned int)num;
1375 1.1 christos return (((tilepro_bundle_bits)(n & 0x1f)) << 43);
1376 1.1 christos }
1377 1.1 christos
1378 1.1 christos static __inline tilepro_bundle_bits
1379 1.1 christos create_UnShOpcodeExtension_X0(int num)
1380 1.1 christos {
1381 1.1 christos const unsigned int n = (unsigned int)num;
1382 1.1 christos return ((n & 0x3ff) << 17);
1383 1.1 christos }
1384 1.1 christos
1385 1.1 christos static __inline tilepro_bundle_bits
1386 1.1 christos create_UnShOpcodeExtension_X1(int num)
1387 1.1 christos {
1388 1.1 christos const unsigned int n = (unsigned int)num;
1389 1.1 christos return (((tilepro_bundle_bits)(n & 0x3ff)) << 48);
1390 1.1 christos }
1391 1.1 christos
1392 1.1 christos static __inline tilepro_bundle_bits
1393 1.1 christos create_UnShOpcodeExtension_Y0(int num)
1394 1.1 christos {
1395 1.1 christos const unsigned int n = (unsigned int)num;
1396 1.1 christos return ((n & 0x7) << 17);
1397 1.1 christos }
1398 1.1 christos
1399 1.1 christos static __inline tilepro_bundle_bits
1400 1.1 christos create_UnShOpcodeExtension_Y1(int num)
1401 1.1 christos {
1402 1.1 christos const unsigned int n = (unsigned int)num;
1403 1.1 christos return (((tilepro_bundle_bits)(n & 0x7)) << 48);
1404 1.1 christos }
1405 1.1 christos
1406 1.1 christos
1407 1.1 christos
1408 1.1 christos typedef enum
1409 1.1 christos {
1410 1.1 christos TILEPRO_PIPELINE_X0,
1411 1.1 christos TILEPRO_PIPELINE_X1,
1412 1.1 christos TILEPRO_PIPELINE_Y0,
1413 1.1 christos TILEPRO_PIPELINE_Y1,
1414 1.1 christos TILEPRO_PIPELINE_Y2,
1415 1.1.1.6 christos TILEPRO_NUM_PIPELINE_ENCODINGS
1416 1.1 christos } tilepro_pipeline;
1417 1.1 christos
1418 1.1 christos #define tilepro_is_x_pipeline(p) ((int)(p) <= (int)TILEPRO_PIPELINE_X1)
1419 1.1 christos
1420 1.1 christos typedef enum
1421 1.1 christos {
1422 1.1 christos TILEPRO_OP_TYPE_REGISTER,
1423 1.1 christos TILEPRO_OP_TYPE_IMMEDIATE,
1424 1.1 christos TILEPRO_OP_TYPE_ADDRESS,
1425 1.1 christos TILEPRO_OP_TYPE_SPR
1426 1.1 christos } tilepro_operand_type;
1427 1.1 christos
1428 1.1 christos /* This is the bit that determines if a bundle is in the Y encoding. */
1429 1.1 christos #define TILEPRO_BUNDLE_Y_ENCODING_MASK ((tilepro_bundle_bits)1 << 63)
1430 1.1 christos
1431 1.1 christos enum
1432 1.1 christos {
1433 1.1 christos /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */
1434 1.1 christos TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE = 3,
1435 1.1 christos
1436 1.1 christos /* Log base 2 of TILEPRO_BUNDLE_SIZE_IN_BYTES. */
1437 1.1 christos TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES = 3,
1438 1.1 christos
1439 1.1 christos /* Instructions take this many bytes. */
1440 1.1 christos TILEPRO_BUNDLE_SIZE_IN_BYTES = 1 << TILEPRO_LOG2_BUNDLE_SIZE_IN_BYTES,
1441 1.1 christos
1442 1.1 christos /* Log base 2 of TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES. */
1443 1.1 christos TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3,
1444 1.1 christos
1445 1.1 christos /* Bundles should be aligned modulo this number of bytes. */
1446 1.1 christos TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES =
1447 1.1 christos (1 << TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES),
1448 1.1 christos
1449 1.1 christos /* Log base 2 of TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES. */
1450 1.1 christos TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES = 1,
1451 1.1 christos
1452 1.1 christos /* Static network instructions take this many bytes. */
1453 1.1 christos TILEPRO_SN_INSTRUCTION_SIZE_IN_BYTES =
1454 1.1 christos (1 << TILEPRO_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES),
1455 1.1 christos
1456 1.1 christos /* Number of registers (some are magic, such as network I/O). */
1457 1.1 christos TILEPRO_NUM_REGISTERS = 64,
1458 1.1 christos
1459 1.1 christos /* Number of static network registers. */
1460 1.1 christos TILEPRO_NUM_SN_REGISTERS = 4
1461 1.1 christos };
1462 1.1 christos
1463 1.1 christos
1464 1.1 christos struct tilepro_operand
1465 1.1 christos {
1466 1.1 christos /* Is this operand a register, immediate or address? */
1467 1.1 christos tilepro_operand_type type;
1468 1.1 christos
1469 1.1 christos /* The default relocation type for this operand. */
1470 1.1 christos signed int default_reloc : 16;
1471 1.1 christos
1472 1.1 christos /* How many bits is this value? (used for range checking) */
1473 1.1 christos unsigned int num_bits : 5;
1474 1.1 christos
1475 1.1 christos /* Is the value signed? (used for range checking) */
1476 1.1 christos unsigned int is_signed : 1;
1477 1.1 christos
1478 1.1 christos /* Is this operand a source register? */
1479 1.1 christos unsigned int is_src_reg : 1;
1480 1.1 christos
1481 1.1 christos /* Is this operand written? (i.e. is it a destination register) */
1482 1.1 christos unsigned int is_dest_reg : 1;
1483 1.1 christos
1484 1.1 christos /* Is this operand PC-relative? */
1485 1.1 christos unsigned int is_pc_relative : 1;
1486 1.1 christos
1487 1.1 christos /* By how many bits do we right shift the value before inserting? */
1488 1.1 christos unsigned int rightshift : 2;
1489 1.1 christos
1490 1.1 christos /* Return the bits for this operand to be ORed into an existing bundle. */
1491 1.1 christos tilepro_bundle_bits (*insert) (int op);
1492 1.1 christos
1493 1.1 christos /* Extract this operand and return it. */
1494 1.1 christos unsigned int (*extract) (tilepro_bundle_bits bundle);
1495 1.1 christos };
1496 1.1 christos
1497 1.1 christos
1498 1.1 christos extern const struct tilepro_operand tilepro_operands[];
1499 1.1 christos
1500 1.1 christos /* One finite-state machine per pipe for rapid instruction decoding. */
1501 1.1 christos extern const unsigned short * const
1502 1.1 christos tilepro_bundle_decoder_fsms[TILEPRO_NUM_PIPELINE_ENCODINGS];
1503 1.1 christos
1504 1.1 christos
1505 1.1 christos struct tilepro_opcode
1506 1.1 christos {
1507 1.1 christos /* The opcode mnemonic, e.g. "add" */
1508 1.1 christos const char *name;
1509 1.1 christos
1510 1.1 christos /* The enum value for this mnemonic. */
1511 1.1 christos tilepro_mnemonic mnemonic;
1512 1.1 christos
1513 1.1 christos /* A bit mask of which of the five pipes this instruction
1514 1.1 christos is compatible with:
1515 1.1 christos X0 0x01
1516 1.1 christos X1 0x02
1517 1.1 christos Y0 0x04
1518 1.1 christos Y1 0x08
1519 1.1 christos Y2 0x10 */
1520 1.1 christos unsigned char pipes;
1521 1.1 christos
1522 1.1 christos /* How many operands are there? */
1523 1.1 christos unsigned char num_operands;
1524 1.1 christos
1525 1.1 christos /* Which register does this write implicitly, or TREG_ZERO if none? */
1526 1.1 christos unsigned char implicitly_written_register;
1527 1.1 christos
1528 1.1 christos /* Can this be bundled with other instructions (almost always true). */
1529 1.1 christos unsigned char can_bundle;
1530 1.1 christos
1531 1.1 christos /* The description of the operands. Each of these is an
1532 1.1 christos * index into the tilepro_operands[] table. */
1533 1.1 christos unsigned char operands[TILEPRO_NUM_PIPELINE_ENCODINGS][TILEPRO_MAX_OPERANDS];
1534 1.1 christos
1535 1.1 christos #if !defined(__KERNEL__) && !defined(_LIBC)
1536 1.1 christos /* A mask of which bits have predefined values for each pipeline.
1537 1.1 christos * This is useful for disassembly. */
1538 1.1 christos tilepro_bundle_bits fixed_bit_masks[TILEPRO_NUM_PIPELINE_ENCODINGS];
1539 1.1 christos
1540 1.1 christos /* For each bit set in fixed_bit_masks, what the value is for this
1541 1.1 christos * instruction. */
1542 1.1 christos tilepro_bundle_bits fixed_bit_values[TILEPRO_NUM_PIPELINE_ENCODINGS];
1543 1.1 christos #endif
1544 1.1 christos };
1545 1.1 christos
1546 1.1 christos extern const struct tilepro_opcode tilepro_opcodes[];
1547 1.1 christos
1548 1.1 christos #if !defined(__KERNEL__) && !defined(_LIBC)
1549 1.1 christos
1550 1.1 christos typedef unsigned short tilepro_sn_instruction_bits;
1551 1.1 christos
1552 1.1 christos struct tilepro_sn_opcode
1553 1.1 christos {
1554 1.1 christos /* The opcode mnemonic, e.g. "add" */
1555 1.1 christos const char *name;
1556 1.1 christos
1557 1.1 christos /* The enum value for this mnemonic. */
1558 1.1 christos tilepro_sn_mnemonic mnemonic;
1559 1.1 christos
1560 1.1 christos /* How many operands are there? */
1561 1.1 christos unsigned char num_operands;
1562 1.1 christos
1563 1.1 christos /* The description of the operands. Each of these is an
1564 1.1 christos * index into the tilepro_operands[] table. */
1565 1.1 christos unsigned char operands[TILEPRO_SN_MAX_OPERANDS];
1566 1.1 christos
1567 1.1 christos /* A mask of which bits have predefined values.
1568 1.1 christos * This is useful for disassembly. */
1569 1.1 christos tilepro_sn_instruction_bits fixed_bit_mask;
1570 1.1 christos
1571 1.1 christos /* For each bit set in fixed_bit_masks, what its value is. */
1572 1.1 christos tilepro_sn_instruction_bits fixed_bit_values;
1573 1.1 christos };
1574 1.1 christos
1575 1.1 christos extern const struct tilepro_sn_opcode tilepro_sn_opcodes[];
1576 1.1 christos
1577 1.1 christos #endif /* !__KERNEL__ && !_LIBC */
1578 1.1 christos
1579 1.1 christos /* Used for non-textual disassembly into structs. */
1580 1.1 christos struct tilepro_decoded_instruction
1581 1.1 christos {
1582 1.1 christos const struct tilepro_opcode *opcode;
1583 1.1 christos const struct tilepro_operand *operands[TILEPRO_MAX_OPERANDS];
1584 1.1 christos int operand_values[TILEPRO_MAX_OPERANDS];
1585 1.1 christos };
1586 1.1 christos
1587 1.1 christos
1588 1.1 christos /* Disassemble a bundle into a struct for machine processing. */
1589 1.1 christos extern int parse_insn_tilepro(tilepro_bundle_bits bits,
1590 1.1 christos unsigned int pc,
1591 1.1 christos struct tilepro_decoded_instruction
1592 1.1 christos decoded[TILEPRO_MAX_INSTRUCTIONS_PER_BUNDLE]);
1593 1.1 christos
1594 1.1 christos
1595 1.1 christos /* Given a set of bundle bits and a specific pipe, returns which
1596 1.1 christos * instruction the bundle contains in that pipe.
1597 1.1 christos */
1598 1.1 christos extern const struct tilepro_opcode *
1599 1.1 christos find_opcode(tilepro_bundle_bits bits, tilepro_pipeline pipe);
1600 1.1 christos
1601 1.1 christos
1602 1.1 christos #if !defined(__KERNEL__) && !defined(_LIBC)
1603 1.1 christos /* Canonical names of all the registers. */
1604 1.1 christos /* ISSUE: This table lives in "tilepro-dis.c" */
1605 1.1 christos extern const char * const tilepro_register_names[];
1606 1.1 christos
1607 1.1 christos /* Descriptor for a special-purpose register. */
1608 1.1 christos struct tilepro_spr
1609 1.1 christos {
1610 1.1 christos /* The number */
1611 1.1 christos int number;
1612 1.1 christos
1613 1.1 christos /* The name */
1614 1.1 christos const char *name;
1615 1.1 christos };
1616 1.1 christos
1617 1.1 christos /* List of all the SPRs; ordered by increasing number. */
1618 1.1 christos extern const struct tilepro_spr tilepro_sprs[];
1619 1.1 christos
1620 1.1 christos /* Number of special-purpose registers. */
1621 1.1 christos extern const int tilepro_num_sprs;
1622 1.1 christos
1623 1.1 christos extern const char *
1624 1.1 christos get_tilepro_spr_name (int num);
1625 1.1 christos #endif /* !__KERNEL__ && !_LIBC */
1626 1.1 christos
1627 1.1 christos /* Make a few "tile_" variables to simply common code between
1628 1.1 christos architectures. */
1629 1.1 christos
1630 1.1 christos typedef tilepro_bundle_bits tile_bundle_bits;
1631 1.1 christos #define TILE_BUNDLE_SIZE_IN_BYTES TILEPRO_BUNDLE_SIZE_IN_BYTES
1632 1.1 christos #define TILE_BUNDLE_ALIGNMENT_IN_BYTES TILEPRO_BUNDLE_ALIGNMENT_IN_BYTES
1633 1.1 christos #define TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES \
1634 1.1 christos TILEPRO_LOG2_BUNDLE_ALIGNMENT_IN_BYTES
1635 1.1 christos
1636 1.1 christos #endif /* opcode_tilepro_h */
1637