]> Git Repo - binutils.git/blob - sim/bpf/defs-le.h
Automatic date update in version.in
[binutils.git] / sim / bpf / defs-le.h
1 /* ISA definitions header for ebpfle.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 1996-2022 Free Software Foundation, Inc.
6
7 This 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
30 union 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.  */
79 struct 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
100 struct 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 */
This page took 0.044385 seconds and 4 git commands to generate.