]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - sim/bpf/defs-le.h
sim: unify -Werror build settings
[thirdparty/binutils-gdb.git] / sim / bpf / defs-le.h
CommitLineData
8c4c1818
JM
1/* ISA definitions header for ebpfle.
2
3THIS FILE IS MACHINE GENERATED WITH CGEN.
4
3666a048 5Copyright (C) 1996-2021 Free Software Foundation, Inc.
8c4c1818
JM
6
7This file is part of the GNU simulators.
8
9 This file is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 It is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
18
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
22
23*/
24
25#ifndef DEFS_BPFBF_EBPFLE_H
26#define DEFS_BPFBF_EBPFLE_H
27
28/* Instruction argument buffer. */
29
30union sem_fields {
31 struct { /* no operands */
32 int empty;
33 } sfmt_empty;
34 struct { /* */
35 INT f_imm32;
36 UINT f_srcle;
37 } sfmt_ldindwle;
38 struct { /* */
39 DI f_imm64;
40 UINT f_dstle;
41 } sfmt_lddwle;
42 struct { /* */
43 INT f_imm32;
44 UINT f_dstle;
45 HI f_offset16;
46 } sfmt_stble;
47 struct { /* */
48 UINT f_dstle;
49 UINT f_srcle;
50 HI f_offset16;
51 } sfmt_ldxwle;
52#if WITH_SCACHE_PBB
53 /* Writeback handler. */
54 struct {
55 /* Pointer to argbuf entry for insn whose results need writing back. */
56 const struct argbuf *abuf;
57 } write;
58 /* x-before handler */
59 struct {
60 /*const SCACHE *insns[MAX_PARALLEL_INSNS];*/
61 int first_p;
62 } before;
63 /* x-after handler */
64 struct {
65 int empty;
66 } after;
67 /* This entry is used to terminate each pbb. */
68 struct {
69 /* Number of insns in pbb. */
70 int insn_count;
71 /* Next pbb to execute. */
72 SCACHE *next;
73 SCACHE *branch_target;
74 } chain;
75#endif
76};
77
78/* The ARGBUF struct. */
79struct argbuf {
80 /* These are the baseclass definitions. */
81 IADDR addr;
82 const IDESC *idesc;
83 char trace_p;
84 char profile_p;
85 /* ??? Temporary hack for skip insns. */
86 char skip_count;
87 char unused;
88 /* cpu specific data follows */
89 union sem semantic;
90 int written;
91 union sem_fields fields;
92};
93
94/* A cached insn.
95
96 ??? SCACHE used to contain more than just argbuf. We could delete the
97 type entirely and always just use ARGBUF, but for future concerns and as
98 a level of abstraction it is left in. */
99
100struct scache {
101 struct argbuf argbuf;
102};
103
104/* Macros to simplify extraction, reading and semantic code.
105 These define and assign the local vars that contain the insn's fields. */
106
107#define EXTRACT_IFMT_EMPTY_VARS \
108 unsigned int length;
109#define EXTRACT_IFMT_EMPTY_CODE \
110 length = 0; \
111
112#define EXTRACT_IFMT_ADDILE_VARS \
113 INT f_imm32; \
114 HI f_offset16; \
115 UINT f_srcle; \
116 UINT f_op_code; \
117 UINT f_dstle; \
118 UINT f_op_src; \
119 UINT f_op_class; \
120 unsigned int length;
121#define EXTRACT_IFMT_ADDILE_CODE \
122 length = 8; \
123 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
124 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
125 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
126 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
127 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
128 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
129 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
130
131#define EXTRACT_IFMT_ADDRLE_VARS \
132 INT f_imm32; \
133 HI f_offset16; \
134 UINT f_srcle; \
135 UINT f_op_code; \
136 UINT f_dstle; \
137 UINT f_op_src; \
138 UINT f_op_class; \
139 unsigned int length;
140#define EXTRACT_IFMT_ADDRLE_CODE \
141 length = 8; \
142 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
143 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
144 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
145 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
146 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
147 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
148 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
149
150#define EXTRACT_IFMT_NEGLE_VARS \
151 INT f_imm32; \
152 HI f_offset16; \
153 UINT f_srcle; \
154 UINT f_op_code; \
155 UINT f_dstle; \
156 UINT f_op_src; \
157 UINT f_op_class; \
158 unsigned int length;
159#define EXTRACT_IFMT_NEGLE_CODE \
160 length = 8; \
161 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
162 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
163 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
164 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
165 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
166 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
167 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
168
169#define EXTRACT_IFMT_ENDLELE_VARS \
170 INT f_imm32; \
171 HI f_offset16; \
172 UINT f_srcle; \
173 UINT f_op_code; \
174 UINT f_dstle; \
175 UINT f_op_src; \
176 UINT f_op_class; \
177 unsigned int length;
178#define EXTRACT_IFMT_ENDLELE_CODE \
179 length = 8; \
180 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
181 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
182 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
183 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
184 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
185 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
186 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
187
188#define EXTRACT_IFMT_LDDWLE_VARS \
189 UINT f_imm64_a; \
190 UINT f_imm64_b; \
191 UINT f_imm64_c; \
192 DI f_imm64; \
193 HI f_offset16; \
194 UINT f_srcle; \
195 UINT f_op_mode; \
196 UINT f_op_size; \
197 UINT f_dstle; \
198 UINT f_op_class; \
199 /* Contents of trailing part of insn. */ \
200 UINT word_1; \
201 UINT word_2; \
202 unsigned int length;
203#define EXTRACT_IFMT_LDDWLE_CODE \
204 length = 16; \
205 word_1 = GETIMEMUSI (current_cpu, pc + 8); \
206 word_2 = GETIMEMUSI (current_cpu, pc + 12); \
207 f_imm64_a = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
208 f_imm64_b = (0|(EXTRACT_LSB0_UINT (word_1, 32, 31, 32) << 0)); \
209 f_imm64_c = (0|(EXTRACT_LSB0_UINT (word_2, 32, 31, 32) << 0)); \
210{\
211 f_imm64 = ((((((UDI) (UINT) (f_imm64_c))) << (32))) | (((UDI) (UINT) (f_imm64_a))));\
212}\
213 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
214 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
215 f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
216 f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
217 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
218 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
219
220#define EXTRACT_IFMT_LDABSW_VARS \
221 INT f_imm32; \
222 HI f_offset16; \
223 UINT f_regs; \
224 UINT f_op_mode; \
225 UINT f_op_size; \
226 UINT f_op_class; \
227 unsigned int length;
228#define EXTRACT_IFMT_LDABSW_CODE \
229 length = 8; \
230 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
231 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
232 f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
233 f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
234 f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
235 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
236
237#define EXTRACT_IFMT_LDINDWLE_VARS \
238 INT f_imm32; \
239 HI f_offset16; \
240 UINT f_srcle; \
241 UINT f_op_mode; \
242 UINT f_op_size; \
243 UINT f_dstle; \
244 UINT f_op_class; \
245 unsigned int length;
246#define EXTRACT_IFMT_LDINDWLE_CODE \
247 length = 8; \
248 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
249 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
250 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
251 f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
252 f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
253 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
254 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
255
256#define EXTRACT_IFMT_LDXWLE_VARS \
257 INT f_imm32; \
258 HI f_offset16; \
259 UINT f_srcle; \
260 UINT f_op_mode; \
261 UINT f_op_size; \
262 UINT f_dstle; \
263 UINT f_op_class; \
264 unsigned int length;
265#define EXTRACT_IFMT_LDXWLE_CODE \
266 length = 8; \
267 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
268 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
269 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
270 f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
271 f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
272 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
273 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
274
275#define EXTRACT_IFMT_STBLE_VARS \
276 INT f_imm32; \
277 HI f_offset16; \
278 UINT f_srcle; \
279 UINT f_op_mode; \
280 UINT f_op_size; \
281 UINT f_dstle; \
282 UINT f_op_class; \
283 unsigned int length;
284#define EXTRACT_IFMT_STBLE_CODE \
285 length = 8; \
286 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
287 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
288 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
289 f_op_mode = EXTRACT_LSB0_LGUINT (insn, 64, 7, 3); \
290 f_op_size = EXTRACT_LSB0_LGUINT (insn, 64, 4, 2); \
291 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
292 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
293
294#define EXTRACT_IFMT_JEQILE_VARS \
295 INT f_imm32; \
296 HI f_offset16; \
297 UINT f_srcle; \
298 UINT f_op_code; \
299 UINT f_dstle; \
300 UINT f_op_src; \
301 UINT f_op_class; \
302 unsigned int length;
303#define EXTRACT_IFMT_JEQILE_CODE \
304 length = 8; \
305 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
306 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
307 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
308 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
309 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
310 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
311 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
312
313#define EXTRACT_IFMT_JEQRLE_VARS \
314 INT f_imm32; \
315 HI f_offset16; \
316 UINT f_srcle; \
317 UINT f_op_code; \
318 UINT f_dstle; \
319 UINT f_op_src; \
320 UINT f_op_class; \
321 unsigned int length;
322#define EXTRACT_IFMT_JEQRLE_CODE \
323 length = 8; \
324 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
325 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
326 f_srcle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 4) << 0)); \
327 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
328 f_dstle = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 11, 4) << 0)); \
329 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
330 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
331
332#define EXTRACT_IFMT_CALLLE_VARS \
333 INT f_imm32; \
334 HI f_offset16; \
335 UINT f_regs; \
336 UINT f_op_code; \
337 UINT f_op_src; \
338 UINT f_op_class; \
339 unsigned int length;
340#define EXTRACT_IFMT_CALLLE_CODE \
341 length = 8; \
342 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
343 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
344 f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
345 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
346 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
347 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
348
349#define EXTRACT_IFMT_JA_VARS \
350 INT f_imm32; \
351 HI f_offset16; \
352 UINT f_regs; \
353 UINT f_op_code; \
354 UINT f_op_src; \
355 UINT f_op_class; \
356 unsigned int length;
357#define EXTRACT_IFMT_JA_CODE \
358 length = 8; \
359 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
360 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
361 f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
362 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
363 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
364 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
365
366#define EXTRACT_IFMT_EXIT_VARS \
367 INT f_imm32; \
368 HI f_offset16; \
369 UINT f_regs; \
370 UINT f_op_code; \
371 UINT f_op_src; \
372 UINT f_op_class; \
373 unsigned int length;
374#define EXTRACT_IFMT_EXIT_CODE \
375 length = 8; \
376 f_imm32 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 63, 32) << 0)); \
377 f_offset16 = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 31, 16) << 0)); \
378 f_regs = (0|(EXTRACT_LSB0_LGUINT (insn, 64, 15, 8) << 0)); \
379 f_op_code = EXTRACT_LSB0_LGUINT (insn, 64, 7, 4); \
380 f_op_src = EXTRACT_LSB0_LGUINT (insn, 64, 3, 1); \
381 f_op_class = EXTRACT_LSB0_LGUINT (insn, 64, 2, 3); \
382
383#endif /* DEFS_BPFBF_EBPFLE_H */