Coverage Report

Created: 2023-06-29 07:13

/src/binutils-gdb/opcodes/bpf-desc.c
Line
Count
Source (jump to first uncovered line)
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
2
{
1599
2
}
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
4
{
1618
5
  while (table->name)
1619
5
    {
1620
5
      if (strcmp (name, table->bfd_name) == 0)
1621
4
  return table;
1622
1
      ++table;
1623
1
    }
1624
0
  return NULL;
1625
4
}
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
4
{
1632
4
  int i;
1633
4
  int machs = cd->machs;
1634
4
  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
4
  const CGEN_HW_ENTRY **selected =
1639
4
    (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));
1640
1641
4
  cd->hw_table.init_entries = init;
1642
4
  cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
1643
4
  memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
1644
  /* ??? For now we just use machs to determine which ones we want.  */
1645
36
  for (i = 0; init[i].name != NULL; ++i)
1646
32
    if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
1647
32
  & machs)
1648
32
      selected[init[i].type] = &init[i];
1649
4
  cd->hw_table.entries = selected;
1650
4
  cd->hw_table.num_entries = MAX_HW;
1651
4
}
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
4
{
1658
4
  cd->ifld_table = & bpf_cgen_ifld_table[0];
1659
4
}
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
4
{
1666
4
  int i;
1667
4
  int machs = cd->machs;
1668
4
  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
4
  const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));
1673
1674
4
  cd->operand_table.init_entries = init;
1675
4
  cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
1676
4
  memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
1677
  /* ??? For now we just use mach to determine which ones we want.  */
1678
48
  for (i = 0; init[i].name != NULL; ++i)
1679
44
    if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
1680
44
  & machs)
1681
44
      selected[init[i].type] = &init[i];
1682
4
  cd->operand_table.entries = selected;
1683
4
  cd->operand_table.num_entries = MAX_OPERANDS;
1684
4
}
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
4
{
1697
4
  int i;
1698
4
  const CGEN_IBASE *ib = & bpf_cgen_insn_table[0];
1699
4
  CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));
1700
1701
4
  memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
1702
1.03k
  for (i = 0; i < MAX_INSNS; ++i)
1703
1.03k
    insns[i].base = &ib[i];
1704
4
  cd->insn_table.init_entries = insns;
1705
4
  cd->insn_table.entry_size = sizeof (CGEN_IBASE);
1706
4
  cd->insn_table.num_init_entries = MAX_INSNS;
1707
4
}
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
4
{
1714
4
  int i;
1715
4
  CGEN_BITSET *isas = cd->isas;
1716
4
  unsigned int machs = cd->machs;
1717
1718
4
  cd->int_insn_p = CGEN_INT_INSN_P;
1719
1720
  /* Data derived from the isa spec.  */
1721
16
#define UNSET (CGEN_SIZE_UNKNOWN + 1)
1722
4
  cd->default_insn_bitsize = UNSET;
1723
4
  cd->base_insn_bitsize = UNSET;
1724
4
  cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
1725
4
  cd->max_insn_bitsize = 0;
1726
20
  for (i = 0; i < MAX_ISAS; ++i)
1727
16
    if (cgen_bitset_contains (isas, i))
1728
4
      {
1729
4
  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
4
  if (cd->default_insn_bitsize == UNSET)
1734
4
    cd->default_insn_bitsize = isa->default_insn_bitsize;
1735
0
  else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
1736
0
    ; /* This is ok.  */
1737
0
  else
1738
0
    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
4
  if (cd->base_insn_bitsize == UNSET)
1743
4
    cd->base_insn_bitsize = isa->base_insn_bitsize;
1744
0
  else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
1745
0
    ; /* This is ok.  */
1746
0
  else
1747
0
    cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;
1748
1749
  /* Set min,max insn sizes.  */
1750
4
  if (isa->min_insn_bitsize < cd->min_insn_bitsize)
1751
4
    cd->min_insn_bitsize = isa->min_insn_bitsize;
1752
4
  if (isa->max_insn_bitsize > cd->max_insn_bitsize)
1753
4
    cd->max_insn_bitsize = isa->max_insn_bitsize;
1754
4
      }
1755
1756
  /* Data derived from the mach spec.  */
1757
16
  for (i = 0; i < MAX_MACHS; ++i)
1758
12
    if (((1 << i) & machs) != 0)
1759
8
      {
1760
8
  const CGEN_MACH *mach = & bpf_cgen_mach_table[i];
1761
1762
8
  if (mach->insn_chunk_bitsize != 0)
1763
0
  {
1764
0
    if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
1765
0
      {
1766
0
        opcodes_error_handler
1767
0
    (/* xgettext:c-format */
1768
0
     _("internal error: bpf_cgen_rebuild_tables: "
1769
0
       "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
1770
0
     cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
1771
0
        abort ();
1772
0
      }
1773
1774
0
    cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
1775
0
  }
1776
8
      }
1777
1778
  /* Determine which hw elements are used by MACH.  */
1779
4
  build_hw_table (cd);
1780
1781
  /* Build the ifield table.  */
1782
4
  build_ifield_table (cd);
1783
1784
  /* Determine which operands are used by MACH/ISA.  */
1785
4
  build_operand_table (cd);
1786
1787
  /* Build the instruction table.  */
1788
4
  build_insn_table (cd);
1789
4
}
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
4
{
1810
4
  CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
1811
4
  static int init_p;
1812
4
  CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
1813
4
  unsigned int machs = 0; /* 0 = "unspecified" */
1814
4
  enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
1815
4
  enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
1816
4
  va_list ap;
1817
1818
4
  if (! init_p)
1819
2
    {
1820
2
      init_tables ();
1821
2
      init_p = 1;
1822
2
    }
1823
1824
4
  memset (cd, 0, sizeof (*cd));
1825
1826
4
  va_start (ap, arg_type);
1827
20
  while (arg_type != CGEN_CPU_OPEN_END)
1828
16
    {
1829
16
      switch (arg_type)
1830
16
  {
1831
4
  case CGEN_CPU_OPEN_ISAS :
1832
4
    isas = va_arg (ap, CGEN_BITSET *);
1833
4
    break;
1834
0
  case CGEN_CPU_OPEN_MACHS :
1835
0
    machs = va_arg (ap, unsigned int);
1836
0
    break;
1837
4
  case CGEN_CPU_OPEN_BFDMACH :
1838
4
    {
1839
4
      const char *name = va_arg (ap, const char *);
1840
4
      const CGEN_MACH *mach =
1841
4
        lookup_mach_via_bfd_name (bpf_cgen_mach_table, name);
1842
1843
4
      if (mach != NULL)
1844
4
        machs |= 1 << mach->num;
1845
4
      break;
1846
0
    }
1847
4
  case CGEN_CPU_OPEN_ENDIAN :
1848
4
    endian = va_arg (ap, enum cgen_endian);
1849
4
    break;
1850
4
  case CGEN_CPU_OPEN_INSN_ENDIAN :
1851
4
    insn_endian = va_arg (ap, enum cgen_endian);
1852
4
    break;
1853
0
  default :
1854
0
    opcodes_error_handler
1855
0
      (/* xgettext:c-format */
1856
0
       _("internal error: bpf_cgen_cpu_open: "
1857
0
         "unsupported argument `%d'"),
1858
0
       arg_type);
1859
0
    abort (); /* ??? return NULL? */
1860
16
  }
1861
16
      arg_type = va_arg (ap, enum cgen_cpu_open_arg);
1862
16
    }
1863
4
  va_end (ap);
1864
1865
  /* Mach unspecified means "all".  */
1866
4
  if (machs == 0)
1867
0
    machs = (1 << MAX_MACHS) - 1;
1868
  /* Base mach is always selected.  */
1869
4
  machs |= 1;
1870
4
  if (endian == CGEN_ENDIAN_UNKNOWN)
1871
0
    {
1872
      /* ??? If target has only one, could have a default.  */
1873
0
      opcodes_error_handler
1874
0
  (/* xgettext:c-format */
1875
0
   _("internal error: bpf_cgen_cpu_open: no endianness specified"));
1876
0
      abort ();
1877
0
    }
1878
1879
4
  cd->isas = cgen_bitset_copy (isas);
1880
4
  cd->machs = machs;
1881
4
  cd->endian = endian;
1882
4
  cd->insn_endian
1883
4
    = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);
1884
1885
  /* Table (re)builder.  */
1886
4
  cd->rebuild_tables = bpf_cgen_rebuild_tables;
1887
4
  bpf_cgen_rebuild_tables (cd);
1888
1889
  /* Default to not allowing signed overflow.  */
1890
4
  cd->signed_overflow_ok_p = 0;
1891
1892
4
  return (CGEN_CPU_DESC) cd;
1893
4
}
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
0
{
1901
0
  return bpf_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
1902
0
             CGEN_CPU_OPEN_ENDIAN, endian,
1903
0
             CGEN_CPU_OPEN_END);
1904
0
}
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
0
{
1914
0
  unsigned int i;
1915
0
  const CGEN_INSN *insns;
1916
1917
0
  if (cd->macro_insn_table.init_entries)
1918
0
    {
1919
0
      insns = cd->macro_insn_table.init_entries;
1920
0
      for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
1921
0
  if (CGEN_INSN_RX ((insns)))
1922
0
    regfree (CGEN_INSN_RX (insns));
1923
0
    }
1924
1925
0
  if (cd->insn_table.init_entries)
1926
0
    {
1927
0
      insns = cd->insn_table.init_entries;
1928
0
      for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
1929
0
  if (CGEN_INSN_RX (insns))
1930
0
    regfree (CGEN_INSN_RX (insns));
1931
0
    }
1932
1933
0
  free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
1934
0
  free ((CGEN_INSN *) cd->insn_table.init_entries);
1935
0
  free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
1936
0
  free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
1937
0
  free (cd);
1938
0
}
1939