]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - opcodes/bpf-desc.c
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / opcodes / bpf-desc.c
1 /* DO NOT EDIT! -*- buffer-read-only: t -*- vi:set ro: */
2 /* CPU data for bpf.
3
4 THIS FILE IS MACHINE GENERATED WITH CGEN.
5
6 Copyright (C) 1996-2023 Free Software Foundation, Inc.
7
8 This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9
10 This file is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 3, or (at your option)
13 any later version.
14
15 It is distributed in the hope that it will be useful, but WITHOUT
16 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
17 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
18 License for more details.
19
20 You should have received a copy of the GNU General Public License along
21 with this program; if not, write to the Free Software Foundation, Inc.,
22 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
23
24 */
25
26 #include "sysdep.h"
27 #include <stdio.h>
28 #include <stdarg.h>
29 #include <stdlib.h>
30 #include "ansidecl.h"
31 #include "bfd.h"
32 #include "symcat.h"
33 #include "bpf-desc.h"
34 #include "bpf-opc.h"
35 #include "opintl.h"
36 #include "libiberty.h"
37 #include "xregex.h"
38
39 /* Attributes. */
40
41 static const CGEN_ATTR_ENTRY bool_attr[] =
42 {
43 { "#f", 0 },
44 { "#t", 1 },
45 { 0, 0 }
46 };
47
48 static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
49 {
50 { "base", MACH_BASE },
51 { "bpf", MACH_BPF },
52 { "xbpf", MACH_XBPF },
53 { "max", MACH_MAX },
54 { 0, 0 }
55 };
56
57 static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
58 {
59 { "ebpfle", ISA_EBPFLE },
60 { "ebpfbe", ISA_EBPFBE },
61 { "xbpfle", ISA_XBPFLE },
62 { "xbpfbe", ISA_XBPFBE },
63 { "max", ISA_MAX },
64 { 0, 0 }
65 };
66
67 const CGEN_ATTR_TABLE bpf_cgen_ifield_attr_table[] =
68 {
69 { "MACH", & MACH_attr[0], & MACH_attr[0] },
70 { "ISA", & ISA_attr[0], & ISA_attr[0] },
71 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
72 { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
73 { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
74 { "RESERVED", &bool_attr[0], &bool_attr[0] },
75 { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
76 { "SIGNED", &bool_attr[0], &bool_attr[0] },
77 { 0, 0, 0 }
78 };
79
80 const CGEN_ATTR_TABLE bpf_cgen_hardware_attr_table[] =
81 {
82 { "MACH", & MACH_attr[0], & MACH_attr[0] },
83 { "ISA", & ISA_attr[0], & ISA_attr[0] },
84 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
85 { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
86 { "PC", &bool_attr[0], &bool_attr[0] },
87 { "PROFILE", &bool_attr[0], &bool_attr[0] },
88 { 0, 0, 0 }
89 };
90
91 const CGEN_ATTR_TABLE bpf_cgen_operand_attr_table[] =
92 {
93 { "MACH", & MACH_attr[0], & MACH_attr[0] },
94 { "ISA", & ISA_attr[0], & ISA_attr[0] },
95 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
96 { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
97 { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
98 { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
99 { "SIGNED", &bool_attr[0], &bool_attr[0] },
100 { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
101 { "RELAX", &bool_attr[0], &bool_attr[0] },
102 { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
103 { 0, 0, 0 }
104 };
105
106 const CGEN_ATTR_TABLE bpf_cgen_insn_attr_table[] =
107 {
108 { "MACH", & MACH_attr[0], & MACH_attr[0] },
109 { "ISA", & ISA_attr[0], & ISA_attr[0] },
110 { "ALIAS", &bool_attr[0], &bool_attr[0] },
111 { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
112 { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
113 { "COND-CTI", &bool_attr[0], &bool_attr[0] },
114 { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
115 { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
116 { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
117 { "RELAXED", &bool_attr[0], &bool_attr[0] },
118 { "NO-DIS", &bool_attr[0], &bool_attr[0] },
119 { "PBB", &bool_attr[0], &bool_attr[0] },
120 { 0, 0, 0 }
121 };
122
123 /* Instruction set variants. */
124
125 static const CGEN_ISA bpf_cgen_isa_table[] = {
126 { "ebpfle", 64, 64, 64, 128 },
127 { "ebpfbe", 64, 64, 64, 128 },
128 { "xbpfle", 64, 64, 64, 128 },
129 { "xbpfbe", 64, 64, 64, 128 },
130 { 0, 0, 0, 0, 0 }
131 };
132
133 /* Machine variants. */
134
135 static const CGEN_MACH bpf_cgen_mach_table[] = {
136 { "bpf", "bpf", MACH_BPF, 0 },
137 { "xbpf", "xbpf", MACH_XBPF, 0 },
138 { 0, 0, 0, 0 }
139 };
140
141 static CGEN_KEYWORD_ENTRY bpf_cgen_opval_h_gpr_entries[] =
142 {
143 { "%r0", 0, {0, {{{0, 0}}}}, 0, 0 },
144 { "%r1", 1, {0, {{{0, 0}}}}, 0, 0 },
145 { "%r2", 2, {0, {{{0, 0}}}}, 0, 0 },
146 { "%r3", 3, {0, {{{0, 0}}}}, 0, 0 },
147 { "%r4", 4, {0, {{{0, 0}}}}, 0, 0 },
148 { "%r5", 5, {0, {{{0, 0}}}}, 0, 0 },
149 { "%r6", 6, {0, {{{0, 0}}}}, 0, 0 },
150 { "%r7", 7, {0, {{{0, 0}}}}, 0, 0 },
151 { "%r8", 8, {0, {{{0, 0}}}}, 0, 0 },
152 { "%r9", 9, {0, {{{0, 0}}}}, 0, 0 },
153 { "%fp", 10, {0, {{{0, 0}}}}, 0, 0 },
154 { "%r0", 0, {0, {{{0, 0}}}}, 0, 0 },
155 { "%r6", 6, {0, {{{0, 0}}}}, 0, 0 },
156 { "%r10", 10, {0, {{{0, 0}}}}, 0, 0 }
157 };
158
159 CGEN_KEYWORD bpf_cgen_opval_h_gpr =
160 {
161 & bpf_cgen_opval_h_gpr_entries[0],
162 14,
163 0, 0, 0, 0, ""
164 };
165
166
167 /* The hardware table. */
168
169 #define A(a) (1 << CGEN_HW_##a)
170
171 const CGEN_HW_ENTRY bpf_cgen_hw_table[] =
172 {
173 { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
174 { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
175 { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
176 { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
177 { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
178 { "h-gpr", HW_H_GPR, CGEN_ASM_KEYWORD, & bpf_cgen_opval_h_gpr, { 0, { { { (1<<MACH_BPF)|(1<<MACH_XBPF), 0 } }, { { 1, "\xf0" } } } } },
179 { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
180 { "h-sint64", HW_H_SINT64, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
181 { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
182 };
183
184 #undef A
185
186
187 /* The instruction field table. */
188
189 #define A(a) (1 << CGEN_IFLD_##a)
190
191 const CGEN_IFLD bpf_cgen_ifld_table[] =
192 {
193 { BPF_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
194 { BPF_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
195 { BPF_F_OP_CODE, "f-op-code", 0, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
196 { BPF_F_OP_SRC, "f-op-src", 0, 8, 3, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
197 { BPF_F_OP_CLASS, "f-op-class", 0, 8, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
198 { BPF_F_OP_MODE, "f-op-mode", 0, 8, 7, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
199 { BPF_F_OP_SIZE, "f-op-size", 0, 8, 4, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
200 { BPF_F_DSTLE, "f-dstle", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } },
201 { BPF_F_SRCLE, "f-srcle", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } },
202 { BPF_F_DSTBE, "f-dstbe", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } },
203 { BPF_F_SRCBE, "f-srcbe", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } },
204 { BPF_F_REGS, "f-regs", 8, 8, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
205 { BPF_F_OFFSET16, "f-offset16", 16, 16, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
206 { BPF_F_IMM32, "f-imm32", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
207 { BPF_F_IMM64_A, "f-imm64-a", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
208 { BPF_F_IMM64_B, "f-imm64-b", 64, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
209 { BPF_F_IMM64_C, "f-imm64-c", 96, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
210 { BPF_F_IMM64, "f-imm64", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
211 { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
212 };
213
214 #undef A
215
216
217
218 /* multi ifield declarations */
219
220 const CGEN_MAYBE_MULTI_IFLD BPF_F_IMM64_MULTI_IFIELD [];
221
222
223 /* multi ifield definitions */
224
225 const CGEN_MAYBE_MULTI_IFLD BPF_F_IMM64_MULTI_IFIELD [] =
226 {
227 { 0, { &bpf_cgen_ifld_table[BPF_F_IMM64_A] } },
228 { 0, { &bpf_cgen_ifld_table[BPF_F_IMM64_B] } },
229 { 0, { &bpf_cgen_ifld_table[BPF_F_IMM64_C] } },
230 { 0, { 0 } }
231 };
232
233 /* The operand table. */
234
235 #define A(a) (1 << CGEN_OPERAND_##a)
236 #define OPERAND(op) BPF_OPERAND_##op
237
238 const CGEN_OPERAND bpf_cgen_operand_table[] =
239 {
240 /* pc: program counter */
241 { "pc", BPF_OPERAND_PC, HW_H_PC, 0, 0,
242 { 0, { &bpf_cgen_ifld_table[BPF_F_NIL] } },
243 { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
244 /* dstle: destination register */
245 { "dstle", BPF_OPERAND_DSTLE, HW_H_GPR, 3, 4,
246 { 0, { &bpf_cgen_ifld_table[BPF_F_DSTLE] } },
247 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } },
248 /* srcle: source register */
249 { "srcle", BPF_OPERAND_SRCLE, HW_H_GPR, 7, 4,
250 { 0, { &bpf_cgen_ifld_table[BPF_F_SRCLE] } },
251 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } } },
252 /* dstbe: destination register */
253 { "dstbe", BPF_OPERAND_DSTBE, HW_H_GPR, 7, 4,
254 { 0, { &bpf_cgen_ifld_table[BPF_F_DSTBE] } },
255 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } },
256 /* srcbe: source register */
257 { "srcbe", BPF_OPERAND_SRCBE, HW_H_GPR, 3, 4,
258 { 0, { &bpf_cgen_ifld_table[BPF_F_SRCBE] } },
259 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } } },
260 /* disp16: 16-bit PC-relative address */
261 { "disp16", BPF_OPERAND_DISP16, HW_H_SINT, 15, 16,
262 { 0, { &bpf_cgen_ifld_table[BPF_F_OFFSET16] } },
263 { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
264 /* disp32: 32-bit PC-relative address */
265 { "disp32", BPF_OPERAND_DISP32, HW_H_SINT, 31, 32,
266 { 0, { &bpf_cgen_ifld_table[BPF_F_IMM32] } },
267 { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
268 /* imm32: 32-bit immediate */
269 { "imm32", BPF_OPERAND_IMM32, HW_H_SINT, 31, 32,
270 { 0, { &bpf_cgen_ifld_table[BPF_F_IMM32] } },
271 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
272 /* offset16: 16-bit offset */
273 { "offset16", BPF_OPERAND_OFFSET16, HW_H_SINT, 15, 16,
274 { 0, { &bpf_cgen_ifld_table[BPF_F_OFFSET16] } },
275 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
276 /* imm64: 64-bit immediate */
277 { "imm64", BPF_OPERAND_IMM64, HW_H_SINT64, 31, 96,
278 { 3, { &BPF_F_IMM64_MULTI_IFIELD[0] } },
279 { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
280 /* endsize: endianness size immediate: 16, 32 or 64 */
281 { "endsize", BPF_OPERAND_ENDSIZE, HW_H_UINT, 31, 32,
282 { 0, { &bpf_cgen_ifld_table[BPF_F_IMM32] } },
283 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
284 /* sentinel */
285 { 0, 0, 0, 0, 0,
286 { 0, { 0 } },
287 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
288 };
289
290 #undef A
291
292
293 /* The instruction table. */
294
295 #define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
296 #define A(a) (1 << CGEN_INSN_##a)
297
298 static const CGEN_IBASE bpf_cgen_insn_table[MAX_INSNS] =
299 {
300 /* Special null first entry.
301 A `num' value of zero is thus invalid.
302 Also, the special `invalid' insn resides here. */
303 { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } },
304 /* add $dstle,$imm32 */
305 {
306 BPF_INSN_ADDILE, "addile", "add", 64,
307 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
308 },
309 /* add $dstle,$srcle */
310 {
311 BPF_INSN_ADDRLE, "addrle", "add", 64,
312 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
313 },
314 /* add32 $dstle,$imm32 */
315 {
316 BPF_INSN_ADD32ILE, "add32ile", "add32", 64,
317 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
318 },
319 /* add32 $dstle,$srcle */
320 {
321 BPF_INSN_ADD32RLE, "add32rle", "add32", 64,
322 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
323 },
324 /* sub $dstle,$imm32 */
325 {
326 BPF_INSN_SUBILE, "subile", "sub", 64,
327 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
328 },
329 /* sub $dstle,$srcle */
330 {
331 BPF_INSN_SUBRLE, "subrle", "sub", 64,
332 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
333 },
334 /* sub32 $dstle,$imm32 */
335 {
336 BPF_INSN_SUB32ILE, "sub32ile", "sub32", 64,
337 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
338 },
339 /* sub32 $dstle,$srcle */
340 {
341 BPF_INSN_SUB32RLE, "sub32rle", "sub32", 64,
342 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
343 },
344 /* mul $dstle,$imm32 */
345 {
346 BPF_INSN_MULILE, "mulile", "mul", 64,
347 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
348 },
349 /* mul $dstle,$srcle */
350 {
351 BPF_INSN_MULRLE, "mulrle", "mul", 64,
352 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
353 },
354 /* mul32 $dstle,$imm32 */
355 {
356 BPF_INSN_MUL32ILE, "mul32ile", "mul32", 64,
357 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
358 },
359 /* mul32 $dstle,$srcle */
360 {
361 BPF_INSN_MUL32RLE, "mul32rle", "mul32", 64,
362 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
363 },
364 /* div $dstle,$imm32 */
365 {
366 BPF_INSN_DIVILE, "divile", "div", 64,
367 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
368 },
369 /* div $dstle,$srcle */
370 {
371 BPF_INSN_DIVRLE, "divrle", "div", 64,
372 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
373 },
374 /* div32 $dstle,$imm32 */
375 {
376 BPF_INSN_DIV32ILE, "div32ile", "div32", 64,
377 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
378 },
379 /* div32 $dstle,$srcle */
380 {
381 BPF_INSN_DIV32RLE, "div32rle", "div32", 64,
382 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
383 },
384 /* or $dstle,$imm32 */
385 {
386 BPF_INSN_ORILE, "orile", "or", 64,
387 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
388 },
389 /* or $dstle,$srcle */
390 {
391 BPF_INSN_ORRLE, "orrle", "or", 64,
392 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
393 },
394 /* or32 $dstle,$imm32 */
395 {
396 BPF_INSN_OR32ILE, "or32ile", "or32", 64,
397 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
398 },
399 /* or32 $dstle,$srcle */
400 {
401 BPF_INSN_OR32RLE, "or32rle", "or32", 64,
402 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
403 },
404 /* and $dstle,$imm32 */
405 {
406 BPF_INSN_ANDILE, "andile", "and", 64,
407 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
408 },
409 /* and $dstle,$srcle */
410 {
411 BPF_INSN_ANDRLE, "andrle", "and", 64,
412 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
413 },
414 /* and32 $dstle,$imm32 */
415 {
416 BPF_INSN_AND32ILE, "and32ile", "and32", 64,
417 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
418 },
419 /* and32 $dstle,$srcle */
420 {
421 BPF_INSN_AND32RLE, "and32rle", "and32", 64,
422 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
423 },
424 /* lsh $dstle,$imm32 */
425 {
426 BPF_INSN_LSHILE, "lshile", "lsh", 64,
427 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
428 },
429 /* lsh $dstle,$srcle */
430 {
431 BPF_INSN_LSHRLE, "lshrle", "lsh", 64,
432 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
433 },
434 /* lsh32 $dstle,$imm32 */
435 {
436 BPF_INSN_LSH32ILE, "lsh32ile", "lsh32", 64,
437 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
438 },
439 /* lsh32 $dstle,$srcle */
440 {
441 BPF_INSN_LSH32RLE, "lsh32rle", "lsh32", 64,
442 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
443 },
444 /* rsh $dstle,$imm32 */
445 {
446 BPF_INSN_RSHILE, "rshile", "rsh", 64,
447 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
448 },
449 /* rsh $dstle,$srcle */
450 {
451 BPF_INSN_RSHRLE, "rshrle", "rsh", 64,
452 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
453 },
454 /* rsh32 $dstle,$imm32 */
455 {
456 BPF_INSN_RSH32ILE, "rsh32ile", "rsh32", 64,
457 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
458 },
459 /* rsh32 $dstle,$srcle */
460 {
461 BPF_INSN_RSH32RLE, "rsh32rle", "rsh32", 64,
462 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
463 },
464 /* mod $dstle,$imm32 */
465 {
466 BPF_INSN_MODILE, "modile", "mod", 64,
467 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
468 },
469 /* mod $dstle,$srcle */
470 {
471 BPF_INSN_MODRLE, "modrle", "mod", 64,
472 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
473 },
474 /* mod32 $dstle,$imm32 */
475 {
476 BPF_INSN_MOD32ILE, "mod32ile", "mod32", 64,
477 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
478 },
479 /* mod32 $dstle,$srcle */
480 {
481 BPF_INSN_MOD32RLE, "mod32rle", "mod32", 64,
482 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
483 },
484 /* xor $dstle,$imm32 */
485 {
486 BPF_INSN_XORILE, "xorile", "xor", 64,
487 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
488 },
489 /* xor $dstle,$srcle */
490 {
491 BPF_INSN_XORRLE, "xorrle", "xor", 64,
492 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
493 },
494 /* xor32 $dstle,$imm32 */
495 {
496 BPF_INSN_XOR32ILE, "xor32ile", "xor32", 64,
497 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
498 },
499 /* xor32 $dstle,$srcle */
500 {
501 BPF_INSN_XOR32RLE, "xor32rle", "xor32", 64,
502 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
503 },
504 /* arsh $dstle,$imm32 */
505 {
506 BPF_INSN_ARSHILE, "arshile", "arsh", 64,
507 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
508 },
509 /* arsh $dstle,$srcle */
510 {
511 BPF_INSN_ARSHRLE, "arshrle", "arsh", 64,
512 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
513 },
514 /* arsh32 $dstle,$imm32 */
515 {
516 BPF_INSN_ARSH32ILE, "arsh32ile", "arsh32", 64,
517 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
518 },
519 /* arsh32 $dstle,$srcle */
520 {
521 BPF_INSN_ARSH32RLE, "arsh32rle", "arsh32", 64,
522 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
523 },
524 /* sdiv $dstle,$imm32 */
525 {
526 BPF_INSN_SDIVILE, "sdivile", "sdiv", 64,
527 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
528 },
529 /* sdiv $dstle,$srcle */
530 {
531 BPF_INSN_SDIVRLE, "sdivrle", "sdiv", 64,
532 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
533 },
534 /* sdiv32 $dstle,$imm32 */
535 {
536 BPF_INSN_SDIV32ILE, "sdiv32ile", "sdiv32", 64,
537 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
538 },
539 /* sdiv32 $dstle,$srcle */
540 {
541 BPF_INSN_SDIV32RLE, "sdiv32rle", "sdiv32", 64,
542 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
543 },
544 /* smod $dstle,$imm32 */
545 {
546 BPF_INSN_SMODILE, "smodile", "smod", 64,
547 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
548 },
549 /* smod $dstle,$srcle */
550 {
551 BPF_INSN_SMODRLE, "smodrle", "smod", 64,
552 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
553 },
554 /* smod32 $dstle,$imm32 */
555 {
556 BPF_INSN_SMOD32ILE, "smod32ile", "smod32", 64,
557 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
558 },
559 /* smod32 $dstle,$srcle */
560 {
561 BPF_INSN_SMOD32RLE, "smod32rle", "smod32", 64,
562 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
563 },
564 /* neg $dstle */
565 {
566 BPF_INSN_NEGLE, "negle", "neg", 64,
567 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
568 },
569 /* neg32 $dstle */
570 {
571 BPF_INSN_NEG32LE, "neg32le", "neg32", 64,
572 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
573 },
574 /* mov $dstle,$imm32 */
575 {
576 BPF_INSN_MOVILE, "movile", "mov", 64,
577 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
578 },
579 /* mov $dstle,$srcle */
580 {
581 BPF_INSN_MOVRLE, "movrle", "mov", 64,
582 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
583 },
584 /* mov32 $dstle,$imm32 */
585 {
586 BPF_INSN_MOV32ILE, "mov32ile", "mov32", 64,
587 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
588 },
589 /* mov32 $dstle,$srcle */
590 {
591 BPF_INSN_MOV32RLE, "mov32rle", "mov32", 64,
592 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
593 },
594 /* add $dstbe,$imm32 */
595 {
596 BPF_INSN_ADDIBE, "addibe", "add", 64,
597 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
598 },
599 /* add $dstbe,$srcbe */
600 {
601 BPF_INSN_ADDRBE, "addrbe", "add", 64,
602 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
603 },
604 /* add32 $dstbe,$imm32 */
605 {
606 BPF_INSN_ADD32IBE, "add32ibe", "add32", 64,
607 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
608 },
609 /* add32 $dstbe,$srcbe */
610 {
611 BPF_INSN_ADD32RBE, "add32rbe", "add32", 64,
612 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
613 },
614 /* sub $dstbe,$imm32 */
615 {
616 BPF_INSN_SUBIBE, "subibe", "sub", 64,
617 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
618 },
619 /* sub $dstbe,$srcbe */
620 {
621 BPF_INSN_SUBRBE, "subrbe", "sub", 64,
622 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
623 },
624 /* sub32 $dstbe,$imm32 */
625 {
626 BPF_INSN_SUB32IBE, "sub32ibe", "sub32", 64,
627 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
628 },
629 /* sub32 $dstbe,$srcbe */
630 {
631 BPF_INSN_SUB32RBE, "sub32rbe", "sub32", 64,
632 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
633 },
634 /* mul $dstbe,$imm32 */
635 {
636 BPF_INSN_MULIBE, "mulibe", "mul", 64,
637 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
638 },
639 /* mul $dstbe,$srcbe */
640 {
641 BPF_INSN_MULRBE, "mulrbe", "mul", 64,
642 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
643 },
644 /* mul32 $dstbe,$imm32 */
645 {
646 BPF_INSN_MUL32IBE, "mul32ibe", "mul32", 64,
647 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
648 },
649 /* mul32 $dstbe,$srcbe */
650 {
651 BPF_INSN_MUL32RBE, "mul32rbe", "mul32", 64,
652 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
653 },
654 /* div $dstbe,$imm32 */
655 {
656 BPF_INSN_DIVIBE, "divibe", "div", 64,
657 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
658 },
659 /* div $dstbe,$srcbe */
660 {
661 BPF_INSN_DIVRBE, "divrbe", "div", 64,
662 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
663 },
664 /* div32 $dstbe,$imm32 */
665 {
666 BPF_INSN_DIV32IBE, "div32ibe", "div32", 64,
667 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
668 },
669 /* div32 $dstbe,$srcbe */
670 {
671 BPF_INSN_DIV32RBE, "div32rbe", "div32", 64,
672 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
673 },
674 /* or $dstbe,$imm32 */
675 {
676 BPF_INSN_ORIBE, "oribe", "or", 64,
677 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
678 },
679 /* or $dstbe,$srcbe */
680 {
681 BPF_INSN_ORRBE, "orrbe", "or", 64,
682 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
683 },
684 /* or32 $dstbe,$imm32 */
685 {
686 BPF_INSN_OR32IBE, "or32ibe", "or32", 64,
687 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
688 },
689 /* or32 $dstbe,$srcbe */
690 {
691 BPF_INSN_OR32RBE, "or32rbe", "or32", 64,
692 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
693 },
694 /* and $dstbe,$imm32 */
695 {
696 BPF_INSN_ANDIBE, "andibe", "and", 64,
697 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
698 },
699 /* and $dstbe,$srcbe */
700 {
701 BPF_INSN_ANDRBE, "andrbe", "and", 64,
702 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
703 },
704 /* and32 $dstbe,$imm32 */
705 {
706 BPF_INSN_AND32IBE, "and32ibe", "and32", 64,
707 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
708 },
709 /* and32 $dstbe,$srcbe */
710 {
711 BPF_INSN_AND32RBE, "and32rbe", "and32", 64,
712 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
713 },
714 /* lsh $dstbe,$imm32 */
715 {
716 BPF_INSN_LSHIBE, "lshibe", "lsh", 64,
717 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
718 },
719 /* lsh $dstbe,$srcbe */
720 {
721 BPF_INSN_LSHRBE, "lshrbe", "lsh", 64,
722 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
723 },
724 /* lsh32 $dstbe,$imm32 */
725 {
726 BPF_INSN_LSH32IBE, "lsh32ibe", "lsh32", 64,
727 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
728 },
729 /* lsh32 $dstbe,$srcbe */
730 {
731 BPF_INSN_LSH32RBE, "lsh32rbe", "lsh32", 64,
732 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
733 },
734 /* rsh $dstbe,$imm32 */
735 {
736 BPF_INSN_RSHIBE, "rshibe", "rsh", 64,
737 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
738 },
739 /* rsh $dstbe,$srcbe */
740 {
741 BPF_INSN_RSHRBE, "rshrbe", "rsh", 64,
742 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
743 },
744 /* rsh32 $dstbe,$imm32 */
745 {
746 BPF_INSN_RSH32IBE, "rsh32ibe", "rsh32", 64,
747 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
748 },
749 /* rsh32 $dstbe,$srcbe */
750 {
751 BPF_INSN_RSH32RBE, "rsh32rbe", "rsh32", 64,
752 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
753 },
754 /* mod $dstbe,$imm32 */
755 {
756 BPF_INSN_MODIBE, "modibe", "mod", 64,
757 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
758 },
759 /* mod $dstbe,$srcbe */
760 {
761 BPF_INSN_MODRBE, "modrbe", "mod", 64,
762 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
763 },
764 /* mod32 $dstbe,$imm32 */
765 {
766 BPF_INSN_MOD32IBE, "mod32ibe", "mod32", 64,
767 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
768 },
769 /* mod32 $dstbe,$srcbe */
770 {
771 BPF_INSN_MOD32RBE, "mod32rbe", "mod32", 64,
772 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
773 },
774 /* xor $dstbe,$imm32 */
775 {
776 BPF_INSN_XORIBE, "xoribe", "xor", 64,
777 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
778 },
779 /* xor $dstbe,$srcbe */
780 {
781 BPF_INSN_XORRBE, "xorrbe", "xor", 64,
782 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
783 },
784 /* xor32 $dstbe,$imm32 */
785 {
786 BPF_INSN_XOR32IBE, "xor32ibe", "xor32", 64,
787 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
788 },
789 /* xor32 $dstbe,$srcbe */
790 {
791 BPF_INSN_XOR32RBE, "xor32rbe", "xor32", 64,
792 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
793 },
794 /* arsh $dstbe,$imm32 */
795 {
796 BPF_INSN_ARSHIBE, "arshibe", "arsh", 64,
797 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
798 },
799 /* arsh $dstbe,$srcbe */
800 {
801 BPF_INSN_ARSHRBE, "arshrbe", "arsh", 64,
802 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
803 },
804 /* arsh32 $dstbe,$imm32 */
805 {
806 BPF_INSN_ARSH32IBE, "arsh32ibe", "arsh32", 64,
807 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
808 },
809 /* arsh32 $dstbe,$srcbe */
810 {
811 BPF_INSN_ARSH32RBE, "arsh32rbe", "arsh32", 64,
812 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
813 },
814 /* sdiv $dstbe,$imm32 */
815 {
816 BPF_INSN_SDIVIBE, "sdivibe", "sdiv", 64,
817 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
818 },
819 /* sdiv $dstbe,$srcbe */
820 {
821 BPF_INSN_SDIVRBE, "sdivrbe", "sdiv", 64,
822 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
823 },
824 /* sdiv32 $dstbe,$imm32 */
825 {
826 BPF_INSN_SDIV32IBE, "sdiv32ibe", "sdiv32", 64,
827 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
828 },
829 /* sdiv32 $dstbe,$srcbe */
830 {
831 BPF_INSN_SDIV32RBE, "sdiv32rbe", "sdiv32", 64,
832 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
833 },
834 /* smod $dstbe,$imm32 */
835 {
836 BPF_INSN_SMODIBE, "smodibe", "smod", 64,
837 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
838 },
839 /* smod $dstbe,$srcbe */
840 {
841 BPF_INSN_SMODRBE, "smodrbe", "smod", 64,
842 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
843 },
844 /* smod32 $dstbe,$imm32 */
845 {
846 BPF_INSN_SMOD32IBE, "smod32ibe", "smod32", 64,
847 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
848 },
849 /* smod32 $dstbe,$srcbe */
850 {
851 BPF_INSN_SMOD32RBE, "smod32rbe", "smod32", 64,
852 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
853 },
854 /* neg $dstbe */
855 {
856 BPF_INSN_NEGBE, "negbe", "neg", 64,
857 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
858 },
859 /* neg32 $dstbe */
860 {
861 BPF_INSN_NEG32BE, "neg32be", "neg32", 64,
862 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
863 },
864 /* mov $dstbe,$imm32 */
865 {
866 BPF_INSN_MOVIBE, "movibe", "mov", 64,
867 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
868 },
869 /* mov $dstbe,$srcbe */
870 {
871 BPF_INSN_MOVRBE, "movrbe", "mov", 64,
872 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
873 },
874 /* mov32 $dstbe,$imm32 */
875 {
876 BPF_INSN_MOV32IBE, "mov32ibe", "mov32", 64,
877 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
878 },
879 /* mov32 $dstbe,$srcbe */
880 {
881 BPF_INSN_MOV32RBE, "mov32rbe", "mov32", 64,
882 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
883 },
884 /* endle $dstle,$endsize */
885 {
886 BPF_INSN_ENDLELE, "endlele", "endle", 64,
887 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
888 },
889 /* endbe $dstle,$endsize */
890 {
891 BPF_INSN_ENDBELE, "endbele", "endbe", 64,
892 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
893 },
894 /* endle $dstbe,$endsize */
895 {
896 BPF_INSN_ENDLEBE, "endlebe", "endle", 64,
897 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
898 },
899 /* endbe $dstbe,$endsize */
900 {
901 BPF_INSN_ENDBEBE, "endbebe", "endbe", 64,
902 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
903 },
904 /* lddw $dstle,$imm64 */
905 {
906 BPF_INSN_LDDWLE, "lddwle", "lddw", 128,
907 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
908 },
909 /* lddw $dstbe,$imm64 */
910 {
911 BPF_INSN_LDDWBE, "lddwbe", "lddw", 128,
912 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
913 },
914 /* ldabsw $imm32 */
915 {
916 BPF_INSN_LDABSW, "ldabsw", "ldabsw", 64,
917 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
918 },
919 /* ldabsh $imm32 */
920 {
921 BPF_INSN_LDABSH, "ldabsh", "ldabsh", 64,
922 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
923 },
924 /* ldabsb $imm32 */
925 {
926 BPF_INSN_LDABSB, "ldabsb", "ldabsb", 64,
927 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
928 },
929 /* ldabsdw $imm32 */
930 {
931 BPF_INSN_LDABSDW, "ldabsdw", "ldabsdw", 64,
932 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
933 },
934 /* ldindw $srcle,$imm32 */
935 {
936 BPF_INSN_LDINDWLE, "ldindwle", "ldindw", 64,
937 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
938 },
939 /* ldindh $srcle,$imm32 */
940 {
941 BPF_INSN_LDINDHLE, "ldindhle", "ldindh", 64,
942 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
943 },
944 /* ldindb $srcle,$imm32 */
945 {
946 BPF_INSN_LDINDBLE, "ldindble", "ldindb", 64,
947 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
948 },
949 /* ldinddw $srcle,$imm32 */
950 {
951 BPF_INSN_LDINDDWLE, "ldinddwle", "ldinddw", 64,
952 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
953 },
954 /* ldindw $srcbe,$imm32 */
955 {
956 BPF_INSN_LDINDWBE, "ldindwbe", "ldindw", 64,
957 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
958 },
959 /* ldindh $srcbe,$imm32 */
960 {
961 BPF_INSN_LDINDHBE, "ldindhbe", "ldindh", 64,
962 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
963 },
964 /* ldindb $srcbe,$imm32 */
965 {
966 BPF_INSN_LDINDBBE, "ldindbbe", "ldindb", 64,
967 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
968 },
969 /* ldinddw $srcbe,$imm32 */
970 {
971 BPF_INSN_LDINDDWBE, "ldinddwbe", "ldinddw", 64,
972 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
973 },
974 /* ldxw $dstle,[$srcle+$offset16] */
975 {
976 BPF_INSN_LDXWLE, "ldxwle", "ldxw", 64,
977 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
978 },
979 /* ldxh $dstle,[$srcle+$offset16] */
980 {
981 BPF_INSN_LDXHLE, "ldxhle", "ldxh", 64,
982 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
983 },
984 /* ldxb $dstle,[$srcle+$offset16] */
985 {
986 BPF_INSN_LDXBLE, "ldxble", "ldxb", 64,
987 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
988 },
989 /* ldxdw $dstle,[$srcle+$offset16] */
990 {
991 BPF_INSN_LDXDWLE, "ldxdwle", "ldxdw", 64,
992 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
993 },
994 /* stxw [$dstle+$offset16],$srcle */
995 {
996 BPF_INSN_STXWLE, "stxwle", "stxw", 64,
997 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
998 },
999 /* stxh [$dstle+$offset16],$srcle */
1000 {
1001 BPF_INSN_STXHLE, "stxhle", "stxh", 64,
1002 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1003 },
1004 /* stxb [$dstle+$offset16],$srcle */
1005 {
1006 BPF_INSN_STXBLE, "stxble", "stxb", 64,
1007 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1008 },
1009 /* stxdw [$dstle+$offset16],$srcle */
1010 {
1011 BPF_INSN_STXDWLE, "stxdwle", "stxdw", 64,
1012 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1013 },
1014 /* ldxw $dstbe,[$srcbe+$offset16] */
1015 {
1016 BPF_INSN_LDXWBE, "ldxwbe", "ldxw", 64,
1017 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1018 },
1019 /* ldxh $dstbe,[$srcbe+$offset16] */
1020 {
1021 BPF_INSN_LDXHBE, "ldxhbe", "ldxh", 64,
1022 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1023 },
1024 /* ldxb $dstbe,[$srcbe+$offset16] */
1025 {
1026 BPF_INSN_LDXBBE, "ldxbbe", "ldxb", 64,
1027 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1028 },
1029 /* ldxdw $dstbe,[$srcbe+$offset16] */
1030 {
1031 BPF_INSN_LDXDWBE, "ldxdwbe", "ldxdw", 64,
1032 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1033 },
1034 /* stxw [$dstbe+$offset16],$srcbe */
1035 {
1036 BPF_INSN_STXWBE, "stxwbe", "stxw", 64,
1037 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1038 },
1039 /* stxh [$dstbe+$offset16],$srcbe */
1040 {
1041 BPF_INSN_STXHBE, "stxhbe", "stxh", 64,
1042 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1043 },
1044 /* stxb [$dstbe+$offset16],$srcbe */
1045 {
1046 BPF_INSN_STXBBE, "stxbbe", "stxb", 64,
1047 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1048 },
1049 /* stxdw [$dstbe+$offset16],$srcbe */
1050 {
1051 BPF_INSN_STXDWBE, "stxdwbe", "stxdw", 64,
1052 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1053 },
1054 /* stb [$dstle+$offset16],$imm32 */
1055 {
1056 BPF_INSN_STBLE, "stble", "stb", 64,
1057 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1058 },
1059 /* sth [$dstle+$offset16],$imm32 */
1060 {
1061 BPF_INSN_STHLE, "sthle", "sth", 64,
1062 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1063 },
1064 /* stw [$dstle+$offset16],$imm32 */
1065 {
1066 BPF_INSN_STWLE, "stwle", "stw", 64,
1067 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1068 },
1069 /* stdw [$dstle+$offset16],$imm32 */
1070 {
1071 BPF_INSN_STDWLE, "stdwle", "stdw", 64,
1072 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1073 },
1074 /* stb [$dstbe+$offset16],$imm32 */
1075 {
1076 BPF_INSN_STBBE, "stbbe", "stb", 64,
1077 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1078 },
1079 /* sth [$dstbe+$offset16],$imm32 */
1080 {
1081 BPF_INSN_STHBE, "sthbe", "sth", 64,
1082 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1083 },
1084 /* stw [$dstbe+$offset16],$imm32 */
1085 {
1086 BPF_INSN_STWBE, "stwbe", "stw", 64,
1087 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1088 },
1089 /* stdw [$dstbe+$offset16],$imm32 */
1090 {
1091 BPF_INSN_STDWBE, "stdwbe", "stdw", 64,
1092 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1093 },
1094 /* jeq $dstle,$imm32,$disp16 */
1095 {
1096 BPF_INSN_JEQILE, "jeqile", "jeq", 64,
1097 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1098 },
1099 /* jeq $dstle,$srcle,$disp16 */
1100 {
1101 BPF_INSN_JEQRLE, "jeqrle", "jeq", 64,
1102 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1103 },
1104 /* jeq32 $dstle,$imm32,$disp16 */
1105 {
1106 BPF_INSN_JEQ32ILE, "jeq32ile", "jeq32", 64,
1107 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1108 },
1109 /* jeq32 $dstle,$srcle,$disp16 */
1110 {
1111 BPF_INSN_JEQ32RLE, "jeq32rle", "jeq32", 64,
1112 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1113 },
1114 /* jgt $dstle,$imm32,$disp16 */
1115 {
1116 BPF_INSN_JGTILE, "jgtile", "jgt", 64,
1117 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1118 },
1119 /* jgt $dstle,$srcle,$disp16 */
1120 {
1121 BPF_INSN_JGTRLE, "jgtrle", "jgt", 64,
1122 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1123 },
1124 /* jgt32 $dstle,$imm32,$disp16 */
1125 {
1126 BPF_INSN_JGT32ILE, "jgt32ile", "jgt32", 64,
1127 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1128 },
1129 /* jgt32 $dstle,$srcle,$disp16 */
1130 {
1131 BPF_INSN_JGT32RLE, "jgt32rle", "jgt32", 64,
1132 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1133 },
1134 /* jge $dstle,$imm32,$disp16 */
1135 {
1136 BPF_INSN_JGEILE, "jgeile", "jge", 64,
1137 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1138 },
1139 /* jge $dstle,$srcle,$disp16 */
1140 {
1141 BPF_INSN_JGERLE, "jgerle", "jge", 64,
1142 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1143 },
1144 /* jge32 $dstle,$imm32,$disp16 */
1145 {
1146 BPF_INSN_JGE32ILE, "jge32ile", "jge32", 64,
1147 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1148 },
1149 /* jge32 $dstle,$srcle,$disp16 */
1150 {
1151 BPF_INSN_JGE32RLE, "jge32rle", "jge32", 64,
1152 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1153 },
1154 /* jlt $dstle,$imm32,$disp16 */
1155 {
1156 BPF_INSN_JLTILE, "jltile", "jlt", 64,
1157 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1158 },
1159 /* jlt $dstle,$srcle,$disp16 */
1160 {
1161 BPF_INSN_JLTRLE, "jltrle", "jlt", 64,
1162 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1163 },
1164 /* jlt32 $dstle,$imm32,$disp16 */
1165 {
1166 BPF_INSN_JLT32ILE, "jlt32ile", "jlt32", 64,
1167 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1168 },
1169 /* jlt32 $dstle,$srcle,$disp16 */
1170 {
1171 BPF_INSN_JLT32RLE, "jlt32rle", "jlt32", 64,
1172 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1173 },
1174 /* jle $dstle,$imm32,$disp16 */
1175 {
1176 BPF_INSN_JLEILE, "jleile", "jle", 64,
1177 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1178 },
1179 /* jle $dstle,$srcle,$disp16 */
1180 {
1181 BPF_INSN_JLERLE, "jlerle", "jle", 64,
1182 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1183 },
1184 /* jle32 $dstle,$imm32,$disp16 */
1185 {
1186 BPF_INSN_JLE32ILE, "jle32ile", "jle32", 64,
1187 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1188 },
1189 /* jle32 $dstle,$srcle,$disp16 */
1190 {
1191 BPF_INSN_JLE32RLE, "jle32rle", "jle32", 64,
1192 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1193 },
1194 /* jset $dstle,$imm32,$disp16 */
1195 {
1196 BPF_INSN_JSETILE, "jsetile", "jset", 64,
1197 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1198 },
1199 /* jset $dstle,$srcle,$disp16 */
1200 {
1201 BPF_INSN_JSETRLE, "jsetrle", "jset", 64,
1202 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1203 },
1204 /* jset32 $dstle,$imm32,$disp16 */
1205 {
1206 BPF_INSN_JSET32ILE, "jset32ile", "jset32", 64,
1207 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1208 },
1209 /* jset32 $dstle,$srcle,$disp16 */
1210 {
1211 BPF_INSN_JSET32RLE, "jset32rle", "jset32", 64,
1212 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1213 },
1214 /* jne $dstle,$imm32,$disp16 */
1215 {
1216 BPF_INSN_JNEILE, "jneile", "jne", 64,
1217 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1218 },
1219 /* jne $dstle,$srcle,$disp16 */
1220 {
1221 BPF_INSN_JNERLE, "jnerle", "jne", 64,
1222 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1223 },
1224 /* jne32 $dstle,$imm32,$disp16 */
1225 {
1226 BPF_INSN_JNE32ILE, "jne32ile", "jne32", 64,
1227 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1228 },
1229 /* jne32 $dstle,$srcle,$disp16 */
1230 {
1231 BPF_INSN_JNE32RLE, "jne32rle", "jne32", 64,
1232 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1233 },
1234 /* jsgt $dstle,$imm32,$disp16 */
1235 {
1236 BPF_INSN_JSGTILE, "jsgtile", "jsgt", 64,
1237 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1238 },
1239 /* jsgt $dstle,$srcle,$disp16 */
1240 {
1241 BPF_INSN_JSGTRLE, "jsgtrle", "jsgt", 64,
1242 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1243 },
1244 /* jsgt32 $dstle,$imm32,$disp16 */
1245 {
1246 BPF_INSN_JSGT32ILE, "jsgt32ile", "jsgt32", 64,
1247 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1248 },
1249 /* jsgt32 $dstle,$srcle,$disp16 */
1250 {
1251 BPF_INSN_JSGT32RLE, "jsgt32rle", "jsgt32", 64,
1252 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1253 },
1254 /* jsge $dstle,$imm32,$disp16 */
1255 {
1256 BPF_INSN_JSGEILE, "jsgeile", "jsge", 64,
1257 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1258 },
1259 /* jsge $dstle,$srcle,$disp16 */
1260 {
1261 BPF_INSN_JSGERLE, "jsgerle", "jsge", 64,
1262 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1263 },
1264 /* jsge32 $dstle,$imm32,$disp16 */
1265 {
1266 BPF_INSN_JSGE32ILE, "jsge32ile", "jsge32", 64,
1267 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1268 },
1269 /* jsge32 $dstle,$srcle,$disp16 */
1270 {
1271 BPF_INSN_JSGE32RLE, "jsge32rle", "jsge32", 64,
1272 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1273 },
1274 /* jslt $dstle,$imm32,$disp16 */
1275 {
1276 BPF_INSN_JSLTILE, "jsltile", "jslt", 64,
1277 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1278 },
1279 /* jslt $dstle,$srcle,$disp16 */
1280 {
1281 BPF_INSN_JSLTRLE, "jsltrle", "jslt", 64,
1282 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1283 },
1284 /* jslt32 $dstle,$imm32,$disp16 */
1285 {
1286 BPF_INSN_JSLT32ILE, "jslt32ile", "jslt32", 64,
1287 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1288 },
1289 /* jslt32 $dstle,$srcle,$disp16 */
1290 {
1291 BPF_INSN_JSLT32RLE, "jslt32rle", "jslt32", 64,
1292 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1293 },
1294 /* jsle $dstle,$imm32,$disp16 */
1295 {
1296 BPF_INSN_JSLEILE, "jsleile", "jsle", 64,
1297 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1298 },
1299 /* jsle $dstle,$srcle,$disp16 */
1300 {
1301 BPF_INSN_JSLERLE, "jslerle", "jsle", 64,
1302 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1303 },
1304 /* jsle32 $dstle,$imm32,$disp16 */
1305 {
1306 BPF_INSN_JSLE32ILE, "jsle32ile", "jsle32", 64,
1307 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1308 },
1309 /* jsle32 $dstle,$srcle,$disp16 */
1310 {
1311 BPF_INSN_JSLE32RLE, "jsle32rle", "jsle32", 64,
1312 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1313 },
1314 /* jeq $dstbe,$imm32,$disp16 */
1315 {
1316 BPF_INSN_JEQIBE, "jeqibe", "jeq", 64,
1317 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1318 },
1319 /* jeq $dstbe,$srcbe,$disp16 */
1320 {
1321 BPF_INSN_JEQRBE, "jeqrbe", "jeq", 64,
1322 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1323 },
1324 /* jeq32 $dstbe,$imm32,$disp16 */
1325 {
1326 BPF_INSN_JEQ32IBE, "jeq32ibe", "jeq32", 64,
1327 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1328 },
1329 /* jeq32 $dstbe,$srcbe,$disp16 */
1330 {
1331 BPF_INSN_JEQ32RBE, "jeq32rbe", "jeq32", 64,
1332 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1333 },
1334 /* jgt $dstbe,$imm32,$disp16 */
1335 {
1336 BPF_INSN_JGTIBE, "jgtibe", "jgt", 64,
1337 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1338 },
1339 /* jgt $dstbe,$srcbe,$disp16 */
1340 {
1341 BPF_INSN_JGTRBE, "jgtrbe", "jgt", 64,
1342 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1343 },
1344 /* jgt32 $dstbe,$imm32,$disp16 */
1345 {
1346 BPF_INSN_JGT32IBE, "jgt32ibe", "jgt32", 64,
1347 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1348 },
1349 /* jgt32 $dstbe,$srcbe,$disp16 */
1350 {
1351 BPF_INSN_JGT32RBE, "jgt32rbe", "jgt32", 64,
1352 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1353 },
1354 /* jge $dstbe,$imm32,$disp16 */
1355 {
1356 BPF_INSN_JGEIBE, "jgeibe", "jge", 64,
1357 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1358 },
1359 /* jge $dstbe,$srcbe,$disp16 */
1360 {
1361 BPF_INSN_JGERBE, "jgerbe", "jge", 64,
1362 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1363 },
1364 /* jge32 $dstbe,$imm32,$disp16 */
1365 {
1366 BPF_INSN_JGE32IBE, "jge32ibe", "jge32", 64,
1367 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1368 },
1369 /* jge32 $dstbe,$srcbe,$disp16 */
1370 {
1371 BPF_INSN_JGE32RBE, "jge32rbe", "jge32", 64,
1372 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1373 },
1374 /* jlt $dstbe,$imm32,$disp16 */
1375 {
1376 BPF_INSN_JLTIBE, "jltibe", "jlt", 64,
1377 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1378 },
1379 /* jlt $dstbe,$srcbe,$disp16 */
1380 {
1381 BPF_INSN_JLTRBE, "jltrbe", "jlt", 64,
1382 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1383 },
1384 /* jlt32 $dstbe,$imm32,$disp16 */
1385 {
1386 BPF_INSN_JLT32IBE, "jlt32ibe", "jlt32", 64,
1387 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1388 },
1389 /* jlt32 $dstbe,$srcbe,$disp16 */
1390 {
1391 BPF_INSN_JLT32RBE, "jlt32rbe", "jlt32", 64,
1392 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1393 },
1394 /* jle $dstbe,$imm32,$disp16 */
1395 {
1396 BPF_INSN_JLEIBE, "jleibe", "jle", 64,
1397 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1398 },
1399 /* jle $dstbe,$srcbe,$disp16 */
1400 {
1401 BPF_INSN_JLERBE, "jlerbe", "jle", 64,
1402 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1403 },
1404 /* jle32 $dstbe,$imm32,$disp16 */
1405 {
1406 BPF_INSN_JLE32IBE, "jle32ibe", "jle32", 64,
1407 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1408 },
1409 /* jle32 $dstbe,$srcbe,$disp16 */
1410 {
1411 BPF_INSN_JLE32RBE, "jle32rbe", "jle32", 64,
1412 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1413 },
1414 /* jset $dstbe,$imm32,$disp16 */
1415 {
1416 BPF_INSN_JSETIBE, "jsetibe", "jset", 64,
1417 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1418 },
1419 /* jset $dstbe,$srcbe,$disp16 */
1420 {
1421 BPF_INSN_JSETRBE, "jsetrbe", "jset", 64,
1422 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1423 },
1424 /* jset32 $dstbe,$imm32,$disp16 */
1425 {
1426 BPF_INSN_JSET32IBE, "jset32ibe", "jset32", 64,
1427 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1428 },
1429 /* jset32 $dstbe,$srcbe,$disp16 */
1430 {
1431 BPF_INSN_JSET32RBE, "jset32rbe", "jset32", 64,
1432 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1433 },
1434 /* jne $dstbe,$imm32,$disp16 */
1435 {
1436 BPF_INSN_JNEIBE, "jneibe", "jne", 64,
1437 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1438 },
1439 /* jne $dstbe,$srcbe,$disp16 */
1440 {
1441 BPF_INSN_JNERBE, "jnerbe", "jne", 64,
1442 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1443 },
1444 /* jne32 $dstbe,$imm32,$disp16 */
1445 {
1446 BPF_INSN_JNE32IBE, "jne32ibe", "jne32", 64,
1447 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1448 },
1449 /* jne32 $dstbe,$srcbe,$disp16 */
1450 {
1451 BPF_INSN_JNE32RBE, "jne32rbe", "jne32", 64,
1452 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1453 },
1454 /* jsgt $dstbe,$imm32,$disp16 */
1455 {
1456 BPF_INSN_JSGTIBE, "jsgtibe", "jsgt", 64,
1457 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1458 },
1459 /* jsgt $dstbe,$srcbe,$disp16 */
1460 {
1461 BPF_INSN_JSGTRBE, "jsgtrbe", "jsgt", 64,
1462 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1463 },
1464 /* jsgt32 $dstbe,$imm32,$disp16 */
1465 {
1466 BPF_INSN_JSGT32IBE, "jsgt32ibe", "jsgt32", 64,
1467 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1468 },
1469 /* jsgt32 $dstbe,$srcbe,$disp16 */
1470 {
1471 BPF_INSN_JSGT32RBE, "jsgt32rbe", "jsgt32", 64,
1472 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1473 },
1474 /* jsge $dstbe,$imm32,$disp16 */
1475 {
1476 BPF_INSN_JSGEIBE, "jsgeibe", "jsge", 64,
1477 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1478 },
1479 /* jsge $dstbe,$srcbe,$disp16 */
1480 {
1481 BPF_INSN_JSGERBE, "jsgerbe", "jsge", 64,
1482 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1483 },
1484 /* jsge32 $dstbe,$imm32,$disp16 */
1485 {
1486 BPF_INSN_JSGE32IBE, "jsge32ibe", "jsge32", 64,
1487 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1488 },
1489 /* jsge32 $dstbe,$srcbe,$disp16 */
1490 {
1491 BPF_INSN_JSGE32RBE, "jsge32rbe", "jsge32", 64,
1492 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1493 },
1494 /* jslt $dstbe,$imm32,$disp16 */
1495 {
1496 BPF_INSN_JSLTIBE, "jsltibe", "jslt", 64,
1497 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1498 },
1499 /* jslt $dstbe,$srcbe,$disp16 */
1500 {
1501 BPF_INSN_JSLTRBE, "jsltrbe", "jslt", 64,
1502 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1503 },
1504 /* jslt32 $dstbe,$imm32,$disp16 */
1505 {
1506 BPF_INSN_JSLT32IBE, "jslt32ibe", "jslt32", 64,
1507 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1508 },
1509 /* jslt32 $dstbe,$srcbe,$disp16 */
1510 {
1511 BPF_INSN_JSLT32RBE, "jslt32rbe", "jslt32", 64,
1512 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1513 },
1514 /* jsle $dstbe,$imm32,$disp16 */
1515 {
1516 BPF_INSN_JSLEIBE, "jsleibe", "jsle", 64,
1517 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1518 },
1519 /* jsle $dstbe,$srcbe,$disp16 */
1520 {
1521 BPF_INSN_JSLERBE, "jslerbe", "jsle", 64,
1522 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1523 },
1524 /* jsle32 $dstbe,$imm32,$disp16 */
1525 {
1526 BPF_INSN_JSLE32IBE, "jsle32ibe", "jsle32", 64,
1527 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1528 },
1529 /* jsle32 $dstbe,$srcbe,$disp16 */
1530 {
1531 BPF_INSN_JSLE32RBE, "jsle32rbe", "jsle32", 64,
1532 { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1533 },
1534 /* call $disp32 */
1535 {
1536 BPF_INSN_CALLLE, "callle", "call", 64,
1537 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1538 },
1539 /* call $disp32 */
1540 {
1541 BPF_INSN_CALLBE, "callbe", "call", 64,
1542 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1543 },
1544 /* call $dstle */
1545 {
1546 BPF_INSN_CALLRLE, "callrle", "call", 64,
1547 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
1548 },
1549 /* call $dstbe */
1550 {
1551 BPF_INSN_CALLRBE, "callrbe", "call", 64,
1552 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
1553 },
1554 /* ja $disp16 */
1555 {
1556 BPF_INSN_JA, "ja", "ja", 64,
1557 { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
1558 },
1559 /* exit */
1560 {
1561 BPF_INSN_EXIT, "exit", "exit", 64,
1562 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
1563 },
1564 /* xadddw [$dstle+$offset16],$srcle */
1565 {
1566 BPF_INSN_XADDDWLE, "xadddwle", "xadddw", 64,
1567 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1568 },
1569 /* xaddw [$dstle+$offset16],$srcle */
1570 {
1571 BPF_INSN_XADDWLE, "xaddwle", "xaddw", 64,
1572 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
1573 },
1574 /* xadddw [$dstbe+$offset16],$srcbe */
1575 {
1576 BPF_INSN_XADDDWBE, "xadddwbe", "xadddw", 64,
1577 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1578 },
1579 /* xaddw [$dstbe+$offset16],$srcbe */
1580 {
1581 BPF_INSN_XADDWBE, "xaddwbe", "xaddw", 64,
1582 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
1583 },
1584 /* brkpt */
1585 {
1586 BPF_INSN_BRKPT, "brkpt", "brkpt", 64,
1587 { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
1588 },
1589 };
1590
1591 #undef OP
1592 #undef A
1593
1594 /* Initialize anything needed to be done once, before any cpu_open call. */
1595
1596 static void
1597 init_tables (void)
1598 {
1599 }
1600
1601 #ifndef opcodes_error_handler
1602 #define opcodes_error_handler(...) \
1603 fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
1604 #endif
1605
1606 static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
1607 static void build_hw_table (CGEN_CPU_TABLE *);
1608 static void build_ifield_table (CGEN_CPU_TABLE *);
1609 static void build_operand_table (CGEN_CPU_TABLE *);
1610 static void build_insn_table (CGEN_CPU_TABLE *);
1611 static void bpf_cgen_rebuild_tables (CGEN_CPU_TABLE *);
1612
1613 /* Subroutine of bpf_cgen_cpu_open to look up a mach via its bfd name. */
1614
1615 static const CGEN_MACH *
1616 lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
1617 {
1618 while (table->name)
1619 {
1620 if (strcmp (name, table->bfd_name) == 0)
1621 return table;
1622 ++table;
1623 }
1624 return NULL;
1625 }
1626
1627 /* Subroutine of bpf_cgen_cpu_open to build the hardware table. */
1628
1629 static void
1630 build_hw_table (CGEN_CPU_TABLE *cd)
1631 {
1632 int i;
1633 int machs = cd->machs;
1634 const CGEN_HW_ENTRY *init = & bpf_cgen_hw_table[0];
1635 /* MAX_HW is only an upper bound on the number of selected entries.
1636 However each entry is indexed by it's enum so there can be holes in
1637 the table. */
1638 const CGEN_HW_ENTRY **selected =
1639 (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
1640
1641 cd->hw_table.init_entries = init;
1642 cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
1643 memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
1644 /* ??? For now we just use machs to determine which ones we want. */
1645 for (i = 0; init[i].name != NULL; ++i)
1646 if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
1647 & machs)
1648 selected[init[i].type] = &init[i];
1649 cd->hw_table.entries = selected;
1650 cd->hw_table.num_entries = MAX_HW;
1651 }
1652
1653 /* Subroutine of bpf_cgen_cpu_open to build the hardware table. */
1654
1655 static void
1656 build_ifield_table (CGEN_CPU_TABLE *cd)
1657 {
1658 cd->ifld_table = & bpf_cgen_ifld_table[0];
1659 }
1660
1661 /* Subroutine of bpf_cgen_cpu_open to build the hardware table. */
1662
1663 static void
1664 build_operand_table (CGEN_CPU_TABLE *cd)
1665 {
1666 int i;
1667 int machs = cd->machs;
1668 const CGEN_OPERAND *init = & bpf_cgen_operand_table[0];
1669 /* MAX_OPERANDS is only an upper bound on the number of selected entries.
1670 However each entry is indexed by it's enum so there can be holes in
1671 the table. */
1672 const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
1673
1674 cd->operand_table.init_entries = init;
1675 cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
1676 memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
1677 /* ??? For now we just use mach to determine which ones we want. */
1678 for (i = 0; init[i].name != NULL; ++i)
1679 if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
1680 & machs)
1681 selected[init[i].type] = &init[i];
1682 cd->operand_table.entries = selected;
1683 cd->operand_table.num_entries = MAX_OPERANDS;
1684 }
1685
1686 /* Subroutine of bpf_cgen_cpu_open to build the hardware table.
1687 ??? This could leave out insns not supported by the specified mach/isa,
1688 but that would cause errors like "foo only supported by bar" to become
1689 "unknown insn", so for now we include all insns and require the app to
1690 do the checking later.
1691 ??? On the other hand, parsing of such insns may require their hardware or
1692 operand elements to be in the table [which they mightn't be]. */
1693
1694 static void
1695 build_insn_table (CGEN_CPU_TABLE *cd)
1696 {
1697 int i;
1698 const CGEN_IBASE *ib = & bpf_cgen_insn_table[0];
1699 CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
1700
1701 memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
1702 for (i = 0; i < MAX_INSNS; ++i)
1703 insns[i].base = &ib[i];
1704 cd->insn_table.init_entries = insns;
1705 cd->insn_table.entry_size = sizeof (CGEN_IBASE);
1706 cd->insn_table.num_init_entries = MAX_INSNS;
1707 }
1708
1709 /* Subroutine of bpf_cgen_cpu_open to rebuild the tables. */
1710
1711 static void
1712 bpf_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
1713 {
1714 int i;
1715 CGEN_BITSET *isas = cd->isas;
1716 unsigned int machs = cd->machs;
1717
1718 cd->int_insn_p = CGEN_INT_INSN_P;
1719
1720 /* Data derived from the isa spec. */
1721 #define UNSET (CGEN_SIZE_UNKNOWN + 1)
1722 cd->default_insn_bitsize = UNSET;
1723 cd->base_insn_bitsize = UNSET;
1724 cd->min_insn_bitsize = 65535; /* Some ridiculously big number. */
1725 cd->max_insn_bitsize = 0;
1726 for (i = 0; i < MAX_ISAS; ++i)
1727 if (cgen_bitset_contains (isas, i))
1728 {
1729 const CGEN_ISA *isa = & bpf_cgen_isa_table[i];
1730
1731 /* Default insn sizes of all selected isas must be
1732 equal or we set the result to 0, meaning "unknown". */
1733 if (cd->default_insn_bitsize == UNSET)
1734 cd->default_insn_bitsize = isa->default_insn_bitsize;
1735 else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
1736 ; /* This is ok. */
1737 else
1738 cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;
1739
1740 /* Base insn sizes of all selected isas must be equal
1741 or we set the result to 0, meaning "unknown". */
1742 if (cd->base_insn_bitsize == UNSET)
1743 cd->base_insn_bitsize = isa->base_insn_bitsize;
1744 else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
1745 ; /* This is ok. */
1746 else
1747 cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
1748
1749 /* Set min,max insn sizes. */
1750 if (isa->min_insn_bitsize < cd->min_insn_bitsize)
1751 cd->min_insn_bitsize = isa->min_insn_bitsize;
1752 if (isa->max_insn_bitsize > cd->max_insn_bitsize)
1753 cd->max_insn_bitsize = isa->max_insn_bitsize;
1754 }
1755
1756 /* Data derived from the mach spec. */
1757 for (i = 0; i < MAX_MACHS; ++i)
1758 if (((1 << i) & machs) != 0)
1759 {
1760 const CGEN_MACH *mach = & bpf_cgen_mach_table[i];
1761
1762 if (mach->insn_chunk_bitsize != 0)
1763 {
1764 if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
1765 {
1766 opcodes_error_handler
1767 (/* xgettext:c-format */
1768 _("internal error: bpf_cgen_rebuild_tables: "
1769 "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
1770 cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
1771 abort ();
1772 }
1773
1774 cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
1775 }
1776 }
1777
1778 /* Determine which hw elements are used by MACH. */
1779 build_hw_table (cd);
1780
1781 /* Build the ifield table. */
1782 build_ifield_table (cd);
1783
1784 /* Determine which operands are used by MACH/ISA. */
1785 build_operand_table (cd);
1786
1787 /* Build the instruction table. */
1788 build_insn_table (cd);
1789 }
1790
1791 /* Initialize a cpu table and return a descriptor.
1792 It's much like opening a file, and must be the first function called.
1793 The arguments are a set of (type/value) pairs, terminated with
1794 CGEN_CPU_OPEN_END.
1795
1796 Currently supported values:
1797 CGEN_CPU_OPEN_ISAS: bitmap of values in enum isa_attr
1798 CGEN_CPU_OPEN_MACHS: bitmap of values in enum mach_attr
1799 CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
1800 CGEN_CPU_OPEN_ENDIAN: specify endian choice
1801 CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice
1802 CGEN_CPU_OPEN_END: terminates arguments
1803
1804 ??? Simultaneous multiple isas might not make sense, but it's not (yet)
1805 precluded. */
1806
1807 CGEN_CPU_DESC
1808 bpf_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
1809 {
1810 CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
1811 static int init_p;
1812 CGEN_BITSET *isas = 0; /* 0 = "unspecified" */
1813 unsigned int machs = 0; /* 0 = "unspecified" */
1814 enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
1815 enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
1816 va_list ap;
1817
1818 if (! init_p)
1819 {
1820 init_tables ();
1821 init_p = 1;
1822 }
1823
1824 memset (cd, 0, sizeof (*cd));
1825
1826 va_start (ap, arg_type);
1827 while (arg_type != CGEN_CPU_OPEN_END)
1828 {
1829 switch (arg_type)
1830 {
1831 case CGEN_CPU_OPEN_ISAS :
1832 isas = va_arg (ap, CGEN_BITSET *);
1833 break;
1834 case CGEN_CPU_OPEN_MACHS :
1835 machs = va_arg (ap, unsigned int);
1836 break;
1837 case CGEN_CPU_OPEN_BFDMACH :
1838 {
1839 const char *name = va_arg (ap, const char *);
1840 const CGEN_MACH *mach =
1841 lookup_mach_via_bfd_name (bpf_cgen_mach_table, name);
1842
1843 if (mach != NULL)
1844 machs |= 1 << mach->num;
1845 break;
1846 }
1847 case CGEN_CPU_OPEN_ENDIAN :
1848 endian = va_arg (ap, enum cgen_endian);
1849 break;
1850 case CGEN_CPU_OPEN_INSN_ENDIAN :
1851 insn_endian = va_arg (ap, enum cgen_endian);
1852 break;
1853 default :
1854 opcodes_error_handler
1855 (/* xgettext:c-format */
1856 _("internal error: bpf_cgen_cpu_open: "
1857 "unsupported argument `%d'"),
1858 arg_type);
1859 abort (); /* ??? return NULL? */
1860 }
1861 arg_type = va_arg (ap, enum cgen_cpu_open_arg);
1862 }
1863 va_end (ap);
1864
1865 /* Mach unspecified means "all". */
1866 if (machs == 0)
1867 machs = (1 << MAX_MACHS) - 1;
1868 /* Base mach is always selected. */
1869 machs |= 1;
1870 if (endian == CGEN_ENDIAN_UNKNOWN)
1871 {
1872 /* ??? If target has only one, could have a default. */
1873 opcodes_error_handler
1874 (/* xgettext:c-format */
1875 _("internal error: bpf_cgen_cpu_open: no endianness specified"));
1876 abort ();
1877 }
1878
1879 cd->isas = cgen_bitset_copy (isas);
1880 cd->machs = machs;
1881 cd->endian = endian;
1882 cd->insn_endian
1883 = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);
1884
1885 /* Table (re)builder. */
1886 cd->rebuild_tables = bpf_cgen_rebuild_tables;
1887 bpf_cgen_rebuild_tables (cd);
1888
1889 /* Default to not allowing signed overflow. */
1890 cd->signed_overflow_ok_p = 0;
1891
1892 return (CGEN_CPU_DESC) cd;
1893 }
1894
1895 /* Cover fn to bpf_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
1896 MACH_NAME is the bfd name of the mach. */
1897
1898 CGEN_CPU_DESC
1899 bpf_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
1900 {
1901 return bpf_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
1902 CGEN_CPU_OPEN_ENDIAN, endian,
1903 CGEN_CPU_OPEN_END);
1904 }
1905
1906 /* Close a cpu table.
1907 ??? This can live in a machine independent file, but there's currently
1908 no place to put this file (there's no libcgen). libopcodes is the wrong
1909 place as some simulator ports use this but they don't use libopcodes. */
1910
1911 void
1912 bpf_cgen_cpu_close (CGEN_CPU_DESC cd)
1913 {
1914 unsigned int i;
1915 const CGEN_INSN *insns;
1916
1917 if (cd->macro_insn_table.init_entries)
1918 {
1919 insns = cd->macro_insn_table.init_entries;
1920 for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
1921 if (CGEN_INSN_RX ((insns)))
1922 regfree (CGEN_INSN_RX (insns));
1923 }
1924
1925 if (cd->insn_table.init_entries)
1926 {
1927 insns = cd->insn_table.init_entries;
1928 for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
1929 if (CGEN_INSN_RX (insns))
1930 regfree (CGEN_INSN_RX (insns));
1931 }
1932
1933 free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
1934 free ((CGEN_INSN *) cd->insn_table.init_entries);
1935 free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
1936 free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
1937 free (cd);
1938 }
1939