/* DO NOT EDIT!  -*- buffer-read-only: t -*- vi:set ro:  */
/* CPU data for bpf.

THIS FILE IS MACHINE GENERATED WITH CGEN.

Copyright (C) 1996-2020 Free Software Foundation, Inc.

This file is part of the GNU Binutils and/or GDB, the GNU debugger.

   This file is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   It is distributed in the hope that it will be useful, but WITHOUT
   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
   License for more details.

   You should have received a copy of the GNU General Public License along
   with this program; if not, write to the Free Software Foundation, Inc.,
   51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.

*/

#include "sysdep.h"
#include <stdio.h>
#include <stdarg.h>
#include "ansidecl.h"
#include "bfd.h"
#include "symcat.h"
#include "bpf-desc.h"
#include "bpf-opc.h"
#include "opintl.h"
#include "libiberty.h"
#include "xregex.h"

/* Attributes.  */

static const CGEN_ATTR_ENTRY bool_attr[] =
{
  { "#f", 0 },
  { "#t", 1 },
  { 0, 0 }
};

static const CGEN_ATTR_ENTRY MACH_attr[] ATTRIBUTE_UNUSED =
{
  { "base", MACH_BASE },
  { "bpf", MACH_BPF },
  { "xbpf", MACH_XBPF },
  { "max", MACH_MAX },
  { 0, 0 }
};

static const CGEN_ATTR_ENTRY ISA_attr[] ATTRIBUTE_UNUSED =
{
  { "ebpfle", ISA_EBPFLE },
  { "ebpfbe", ISA_EBPFBE },
  { "xbpfle", ISA_XBPFLE },
  { "xbpfbe", ISA_XBPFBE },
  { "max", ISA_MAX },
  { 0, 0 }
};

const CGEN_ATTR_TABLE bpf_cgen_ifield_attr_table[] =
{
  { "MACH", & MACH_attr[0], & MACH_attr[0] },
  { "ISA", & ISA_attr[0], & ISA_attr[0] },
  { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
  { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
  { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
  { "RESERVED", &bool_attr[0], &bool_attr[0] },
  { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
  { "SIGNED", &bool_attr[0], &bool_attr[0] },
  { 0, 0, 0 }
};

const CGEN_ATTR_TABLE bpf_cgen_hardware_attr_table[] =
{
  { "MACH", & MACH_attr[0], & MACH_attr[0] },
  { "ISA", & ISA_attr[0], & ISA_attr[0] },
  { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
  { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] },
  { "PC", &bool_attr[0], &bool_attr[0] },
  { "PROFILE", &bool_attr[0], &bool_attr[0] },
  { 0, 0, 0 }
};

const CGEN_ATTR_TABLE bpf_cgen_operand_attr_table[] =
{
  { "MACH", & MACH_attr[0], & MACH_attr[0] },
  { "ISA", & ISA_attr[0], & ISA_attr[0] },
  { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
  { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] },
  { "ABS-ADDR", &bool_attr[0], &bool_attr[0] },
  { "SIGN-OPT", &bool_attr[0], &bool_attr[0] },
  { "SIGNED", &bool_attr[0], &bool_attr[0] },
  { "NEGATIVE", &bool_attr[0], &bool_attr[0] },
  { "RELAX", &bool_attr[0], &bool_attr[0] },
  { "SEM-ONLY", &bool_attr[0], &bool_attr[0] },
  { 0, 0, 0 }
};

const CGEN_ATTR_TABLE bpf_cgen_insn_attr_table[] =
{
  { "MACH", & MACH_attr[0], & MACH_attr[0] },
  { "ISA", & ISA_attr[0], & ISA_attr[0] },
  { "ALIAS", &bool_attr[0], &bool_attr[0] },
  { "VIRTUAL", &bool_attr[0], &bool_attr[0] },
  { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] },
  { "COND-CTI", &bool_attr[0], &bool_attr[0] },
  { "SKIP-CTI", &bool_attr[0], &bool_attr[0] },
  { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] },
  { "RELAXABLE", &bool_attr[0], &bool_attr[0] },
  { "RELAXED", &bool_attr[0], &bool_attr[0] },
  { "NO-DIS", &bool_attr[0], &bool_attr[0] },
  { "PBB", &bool_attr[0], &bool_attr[0] },
  { 0, 0, 0 }
};

/* Instruction set variants.  */

static const CGEN_ISA bpf_cgen_isa_table[] = {
  { "ebpfle", 64, 64, 64, 128 },
  { "ebpfbe", 64, 64, 64, 128 },
  { "xbpfle", 64, 64, 64, 128 },
  { "xbpfbe", 64, 64, 64, 128 },
  { 0, 0, 0, 0, 0 }
};

/* Machine variants.  */

static const CGEN_MACH bpf_cgen_mach_table[] = {
  { "bpf", "bpf", MACH_BPF, 0 },
  { "xbpf", "xbpf", MACH_XBPF, 0 },
  { 0, 0, 0, 0 }
};

static CGEN_KEYWORD_ENTRY bpf_cgen_opval_h_gpr_entries[] =
{
  { "%r0", 0, {0, {{{0, 0}}}}, 0, 0 },
  { "%r1", 1, {0, {{{0, 0}}}}, 0, 0 },
  { "%r2", 2, {0, {{{0, 0}}}}, 0, 0 },
  { "%r3", 3, {0, {{{0, 0}}}}, 0, 0 },
  { "%r4", 4, {0, {{{0, 0}}}}, 0, 0 },
  { "%r5", 5, {0, {{{0, 0}}}}, 0, 0 },
  { "%r6", 6, {0, {{{0, 0}}}}, 0, 0 },
  { "%r7", 7, {0, {{{0, 0}}}}, 0, 0 },
  { "%r8", 8, {0, {{{0, 0}}}}, 0, 0 },
  { "%r9", 9, {0, {{{0, 0}}}}, 0, 0 },
  { "%fp", 10, {0, {{{0, 0}}}}, 0, 0 },
  { "%r0", 0, {0, {{{0, 0}}}}, 0, 0 },
  { "%r6", 6, {0, {{{0, 0}}}}, 0, 0 },
  { "%r10", 10, {0, {{{0, 0}}}}, 0, 0 }
};

CGEN_KEYWORD bpf_cgen_opval_h_gpr =
{
  & bpf_cgen_opval_h_gpr_entries[0],
  14,
  0, 0, 0, 0, ""
};


/* The hardware table.  */

#define A(a) (1 << CGEN_HW_##a)

const CGEN_HW_ENTRY bpf_cgen_hw_table[] =
{
  { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
  { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
  { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
  { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
  { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
  { "h-gpr", HW_H_GPR, CGEN_ASM_KEYWORD, (PTR) & bpf_cgen_opval_h_gpr, { 0, { { { (1<<MACH_BPF)|(1<<MACH_XBPF), 0 } }, { { 1, "\xf0" } } } } },
  { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
  { "h-sint64", HW_H_SINT64, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } } },
  { 0, 0, CGEN_ASM_NONE, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
};

#undef A


/* The instruction field table.  */

#define A(a) (1 << CGEN_IFLD_##a)

const CGEN_IFLD bpf_cgen_ifld_table[] =
{
  { BPF_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_OP_CODE, "f-op-code", 0, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_OP_SRC, "f-op-src", 0, 8, 3, 1, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_OP_CLASS, "f-op-class", 0, 8, 2, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_OP_MODE, "f-op-mode", 0, 8, 7, 3, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_OP_SIZE, "f-op-size", 0, 8, 4, 2, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_DSTLE, "f-dstle", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }  },
  { BPF_F_SRCLE, "f-srcle", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }  },
  { BPF_F_DSTBE, "f-dstbe", 8, 8, 7, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }  },
  { BPF_F_SRCBE, "f-srcbe", 8, 8, 3, 4, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }  },
  { BPF_F_REGS, "f-regs", 8, 8, 7, 8, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_OFFSET16, "f-offset16", 16, 16, 15, 16, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_IMM32, "f-imm32", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_IMM64_A, "f-imm64-a", 32, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_IMM64_B, "f-imm64-b", 64, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_IMM64_C, "f-imm64-c", 96, 32, 31, 32, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { BPF_F_IMM64, "f-imm64", 0, 0, 0, 0,{ 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
  { 0, 0, 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
};

#undef A



/* multi ifield declarations */

const CGEN_MAYBE_MULTI_IFLD BPF_F_IMM64_MULTI_IFIELD [];


/* multi ifield definitions */

const CGEN_MAYBE_MULTI_IFLD BPF_F_IMM64_MULTI_IFIELD [] =
{
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM64_A] } },
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM64_B] } },
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM64_C] } },
    { 0, { (const PTR) 0 } }
};

/* The operand table.  */

#define A(a) (1 << CGEN_OPERAND_##a)
#define OPERAND(op) BPF_OPERAND_##op

const CGEN_OPERAND bpf_cgen_operand_table[] =
{
/* pc: program counter */
  { "pc", BPF_OPERAND_PC, HW_H_PC, 0, 0,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_NIL] } },
    { 0|A(SEM_ONLY), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
/* dstle: destination register */
  { "dstle", BPF_OPERAND_DSTLE, HW_H_GPR, 3, 4,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_DSTLE] } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }  },
/* srcle: source register */
  { "srcle", BPF_OPERAND_SRCLE, HW_H_GPR, 7, 4,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_SRCLE] } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }  },
/* dstbe: destination register */
  { "dstbe", BPF_OPERAND_DSTBE, HW_H_GPR, 7, 4,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_DSTBE] } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }  },
/* srcbe: source register */
  { "srcbe", BPF_OPERAND_SRCBE, HW_H_GPR, 3, 4,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_SRCBE] } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }  },
/* disp16: 16-bit PC-relative address */
  { "disp16", BPF_OPERAND_DISP16, HW_H_SINT, 15, 16,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_OFFSET16] } },
    { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
/* disp32: 32-bit PC-relative address */
  { "disp32", BPF_OPERAND_DISP32, HW_H_SINT, 31, 32,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM32] } },
    { 0|A(PCREL_ADDR), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
/* imm32: 32-bit immediate */
  { "imm32", BPF_OPERAND_IMM32, HW_H_SINT, 31, 32,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM32] } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
/* offset16: 16-bit offset */
  { "offset16", BPF_OPERAND_OFFSET16, HW_H_SINT, 15, 16,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_OFFSET16] } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
/* imm64: 64-bit immediate */
  { "imm64", BPF_OPERAND_IMM64, HW_H_SINT64, 31, 96,
    { 3, { (const PTR) &BPF_F_IMM64_MULTI_IFIELD[0] } },
    { 0|A(VIRTUAL), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
/* endsize: endianness size immediate: 16, 32 or 64 */
  { "endsize", BPF_OPERAND_ENDSIZE, HW_H_UINT, 31, 32,
    { 0, { (const PTR) &bpf_cgen_ifld_table[BPF_F_IMM32] } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }  },
/* sentinel */
  { 0, 0, 0, 0, 0,
    { 0, { (const PTR) 0 } },
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } }
};

#undef A


/* The instruction table.  */

#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field))
#define A(a) (1 << CGEN_INSN_##a)

static const CGEN_IBASE bpf_cgen_insn_table[MAX_INSNS] =
{
  /* Special null first entry.
     A `num' value of zero is thus invalid.
     Also, the special `invalid' insn resides here.  */
  { 0, 0, 0, 0, { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x80" } } } } },
/* add $dstle,$imm32 */
  {
    BPF_INSN_ADDILE, "addile", "add", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* add $dstle,$srcle */
  {
    BPF_INSN_ADDRLE, "addrle", "add", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* add32 $dstle,$imm32 */
  {
    BPF_INSN_ADD32ILE, "add32ile", "add32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* add32 $dstle,$srcle */
  {
    BPF_INSN_ADD32RLE, "add32rle", "add32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* sub $dstle,$imm32 */
  {
    BPF_INSN_SUBILE, "subile", "sub", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* sub $dstle,$srcle */
  {
    BPF_INSN_SUBRLE, "subrle", "sub", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* sub32 $dstle,$imm32 */
  {
    BPF_INSN_SUB32ILE, "sub32ile", "sub32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* sub32 $dstle,$srcle */
  {
    BPF_INSN_SUB32RLE, "sub32rle", "sub32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mul $dstle,$imm32 */
  {
    BPF_INSN_MULILE, "mulile", "mul", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mul $dstle,$srcle */
  {
    BPF_INSN_MULRLE, "mulrle", "mul", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mul32 $dstle,$imm32 */
  {
    BPF_INSN_MUL32ILE, "mul32ile", "mul32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mul32 $dstle,$srcle */
  {
    BPF_INSN_MUL32RLE, "mul32rle", "mul32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* div $dstle,$imm32 */
  {
    BPF_INSN_DIVILE, "divile", "div", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* div $dstle,$srcle */
  {
    BPF_INSN_DIVRLE, "divrle", "div", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* div32 $dstle,$imm32 */
  {
    BPF_INSN_DIV32ILE, "div32ile", "div32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* div32 $dstle,$srcle */
  {
    BPF_INSN_DIV32RLE, "div32rle", "div32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* or $dstle,$imm32 */
  {
    BPF_INSN_ORILE, "orile", "or", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* or $dstle,$srcle */
  {
    BPF_INSN_ORRLE, "orrle", "or", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* or32 $dstle,$imm32 */
  {
    BPF_INSN_OR32ILE, "or32ile", "or32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* or32 $dstle,$srcle */
  {
    BPF_INSN_OR32RLE, "or32rle", "or32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* and $dstle,$imm32 */
  {
    BPF_INSN_ANDILE, "andile", "and", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* and $dstle,$srcle */
  {
    BPF_INSN_ANDRLE, "andrle", "and", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* and32 $dstle,$imm32 */
  {
    BPF_INSN_AND32ILE, "and32ile", "and32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* and32 $dstle,$srcle */
  {
    BPF_INSN_AND32RLE, "and32rle", "and32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* lsh $dstle,$imm32 */
  {
    BPF_INSN_LSHILE, "lshile", "lsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* lsh $dstle,$srcle */
  {
    BPF_INSN_LSHRLE, "lshrle", "lsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* lsh32 $dstle,$imm32 */
  {
    BPF_INSN_LSH32ILE, "lsh32ile", "lsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* lsh32 $dstle,$srcle */
  {
    BPF_INSN_LSH32RLE, "lsh32rle", "lsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* rsh $dstle,$imm32 */
  {
    BPF_INSN_RSHILE, "rshile", "rsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* rsh $dstle,$srcle */
  {
    BPF_INSN_RSHRLE, "rshrle", "rsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* rsh32 $dstle,$imm32 */
  {
    BPF_INSN_RSH32ILE, "rsh32ile", "rsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* rsh32 $dstle,$srcle */
  {
    BPF_INSN_RSH32RLE, "rsh32rle", "rsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mod $dstle,$imm32 */
  {
    BPF_INSN_MODILE, "modile", "mod", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mod $dstle,$srcle */
  {
    BPF_INSN_MODRLE, "modrle", "mod", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mod32 $dstle,$imm32 */
  {
    BPF_INSN_MOD32ILE, "mod32ile", "mod32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mod32 $dstle,$srcle */
  {
    BPF_INSN_MOD32RLE, "mod32rle", "mod32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* xor $dstle,$imm32 */
  {
    BPF_INSN_XORILE, "xorile", "xor", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* xor $dstle,$srcle */
  {
    BPF_INSN_XORRLE, "xorrle", "xor", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* xor32 $dstle,$imm32 */
  {
    BPF_INSN_XOR32ILE, "xor32ile", "xor32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* xor32 $dstle,$srcle */
  {
    BPF_INSN_XOR32RLE, "xor32rle", "xor32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* arsh $dstle,$imm32 */
  {
    BPF_INSN_ARSHILE, "arshile", "arsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* arsh $dstle,$srcle */
  {
    BPF_INSN_ARSHRLE, "arshrle", "arsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* arsh32 $dstle,$imm32 */
  {
    BPF_INSN_ARSH32ILE, "arsh32ile", "arsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* arsh32 $dstle,$srcle */
  {
    BPF_INSN_ARSH32RLE, "arsh32rle", "arsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* neg $dstle */
  {
    BPF_INSN_NEGLE, "negle", "neg", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* neg32 $dstle */
  {
    BPF_INSN_NEG32LE, "neg32le", "neg32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mov $dstle,$imm32 */
  {
    BPF_INSN_MOVILE, "movile", "mov", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mov $dstle,$srcle */
  {
    BPF_INSN_MOVRLE, "movrle", "mov", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mov32 $dstle,$imm32 */
  {
    BPF_INSN_MOV32ILE, "mov32ile", "mov32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* mov32 $dstle,$srcle */
  {
    BPF_INSN_MOV32RLE, "mov32rle", "mov32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* add $dstbe,$imm32 */
  {
    BPF_INSN_ADDIBE, "addibe", "add", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* add $dstbe,$srcbe */
  {
    BPF_INSN_ADDRBE, "addrbe", "add", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* add32 $dstbe,$imm32 */
  {
    BPF_INSN_ADD32IBE, "add32ibe", "add32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* add32 $dstbe,$srcbe */
  {
    BPF_INSN_ADD32RBE, "add32rbe", "add32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* sub $dstbe,$imm32 */
  {
    BPF_INSN_SUBIBE, "subibe", "sub", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* sub $dstbe,$srcbe */
  {
    BPF_INSN_SUBRBE, "subrbe", "sub", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* sub32 $dstbe,$imm32 */
  {
    BPF_INSN_SUB32IBE, "sub32ibe", "sub32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* sub32 $dstbe,$srcbe */
  {
    BPF_INSN_SUB32RBE, "sub32rbe", "sub32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mul $dstbe,$imm32 */
  {
    BPF_INSN_MULIBE, "mulibe", "mul", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mul $dstbe,$srcbe */
  {
    BPF_INSN_MULRBE, "mulrbe", "mul", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mul32 $dstbe,$imm32 */
  {
    BPF_INSN_MUL32IBE, "mul32ibe", "mul32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mul32 $dstbe,$srcbe */
  {
    BPF_INSN_MUL32RBE, "mul32rbe", "mul32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* div $dstbe,$imm32 */
  {
    BPF_INSN_DIVIBE, "divibe", "div", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* div $dstbe,$srcbe */
  {
    BPF_INSN_DIVRBE, "divrbe", "div", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* div32 $dstbe,$imm32 */
  {
    BPF_INSN_DIV32IBE, "div32ibe", "div32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* div32 $dstbe,$srcbe */
  {
    BPF_INSN_DIV32RBE, "div32rbe", "div32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* or $dstbe,$imm32 */
  {
    BPF_INSN_ORIBE, "oribe", "or", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* or $dstbe,$srcbe */
  {
    BPF_INSN_ORRBE, "orrbe", "or", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* or32 $dstbe,$imm32 */
  {
    BPF_INSN_OR32IBE, "or32ibe", "or32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* or32 $dstbe,$srcbe */
  {
    BPF_INSN_OR32RBE, "or32rbe", "or32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* and $dstbe,$imm32 */
  {
    BPF_INSN_ANDIBE, "andibe", "and", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* and $dstbe,$srcbe */
  {
    BPF_INSN_ANDRBE, "andrbe", "and", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* and32 $dstbe,$imm32 */
  {
    BPF_INSN_AND32IBE, "and32ibe", "and32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* and32 $dstbe,$srcbe */
  {
    BPF_INSN_AND32RBE, "and32rbe", "and32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* lsh $dstbe,$imm32 */
  {
    BPF_INSN_LSHIBE, "lshibe", "lsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* lsh $dstbe,$srcbe */
  {
    BPF_INSN_LSHRBE, "lshrbe", "lsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* lsh32 $dstbe,$imm32 */
  {
    BPF_INSN_LSH32IBE, "lsh32ibe", "lsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* lsh32 $dstbe,$srcbe */
  {
    BPF_INSN_LSH32RBE, "lsh32rbe", "lsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* rsh $dstbe,$imm32 */
  {
    BPF_INSN_RSHIBE, "rshibe", "rsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* rsh $dstbe,$srcbe */
  {
    BPF_INSN_RSHRBE, "rshrbe", "rsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* rsh32 $dstbe,$imm32 */
  {
    BPF_INSN_RSH32IBE, "rsh32ibe", "rsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* rsh32 $dstbe,$srcbe */
  {
    BPF_INSN_RSH32RBE, "rsh32rbe", "rsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mod $dstbe,$imm32 */
  {
    BPF_INSN_MODIBE, "modibe", "mod", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mod $dstbe,$srcbe */
  {
    BPF_INSN_MODRBE, "modrbe", "mod", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mod32 $dstbe,$imm32 */
  {
    BPF_INSN_MOD32IBE, "mod32ibe", "mod32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mod32 $dstbe,$srcbe */
  {
    BPF_INSN_MOD32RBE, "mod32rbe", "mod32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* xor $dstbe,$imm32 */
  {
    BPF_INSN_XORIBE, "xoribe", "xor", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* xor $dstbe,$srcbe */
  {
    BPF_INSN_XORRBE, "xorrbe", "xor", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* xor32 $dstbe,$imm32 */
  {
    BPF_INSN_XOR32IBE, "xor32ibe", "xor32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* xor32 $dstbe,$srcbe */
  {
    BPF_INSN_XOR32RBE, "xor32rbe", "xor32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* arsh $dstbe,$imm32 */
  {
    BPF_INSN_ARSHIBE, "arshibe", "arsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* arsh $dstbe,$srcbe */
  {
    BPF_INSN_ARSHRBE, "arshrbe", "arsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* arsh32 $dstbe,$imm32 */
  {
    BPF_INSN_ARSH32IBE, "arsh32ibe", "arsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* arsh32 $dstbe,$srcbe */
  {
    BPF_INSN_ARSH32RBE, "arsh32rbe", "arsh32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* neg $dstbe */
  {
    BPF_INSN_NEGBE, "negbe", "neg", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* neg32 $dstbe */
  {
    BPF_INSN_NEG32BE, "neg32be", "neg32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mov $dstbe,$imm32 */
  {
    BPF_INSN_MOVIBE, "movibe", "mov", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mov $dstbe,$srcbe */
  {
    BPF_INSN_MOVRBE, "movrbe", "mov", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mov32 $dstbe,$imm32 */
  {
    BPF_INSN_MOV32IBE, "mov32ibe", "mov32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* mov32 $dstbe,$srcbe */
  {
    BPF_INSN_MOV32RBE, "mov32rbe", "mov32", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* endle $dstle,$endsize */
  {
    BPF_INSN_ENDLELE, "endlele", "endle", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* endbe $dstle,$endsize */
  {
    BPF_INSN_ENDBELE, "endbele", "endbe", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* endle $dstbe,$endsize */
  {
    BPF_INSN_ENDLEBE, "endlebe", "endle", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* endbe $dstbe,$endsize */
  {
    BPF_INSN_ENDBEBE, "endbebe", "endbe", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* lddw $dstle,$imm64 */
  {
    BPF_INSN_LDDWLE, "lddwle", "lddw", 128,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* lddw $dstbe,$imm64 */
  {
    BPF_INSN_LDDWBE, "lddwbe", "lddw", 128,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldabsw $imm32 */
  {
    BPF_INSN_LDABSW, "ldabsw", "ldabsw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
  },
/* ldabsh $imm32 */
  {
    BPF_INSN_LDABSH, "ldabsh", "ldabsh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
  },
/* ldabsb $imm32 */
  {
    BPF_INSN_LDABSB, "ldabsb", "ldabsb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
  },
/* ldabsdw $imm32 */
  {
    BPF_INSN_LDABSDW, "ldabsdw", "ldabsdw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
  },
/* ldindw $srcle,$imm32 */
  {
    BPF_INSN_LDINDWLE, "ldindwle", "ldindw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldindh $srcle,$imm32 */
  {
    BPF_INSN_LDINDHLE, "ldindhle", "ldindh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldindb $srcle,$imm32 */
  {
    BPF_INSN_LDINDBLE, "ldindble", "ldindb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldinddw $srcle,$imm32 */
  {
    BPF_INSN_LDINDDWLE, "ldinddwle", "ldinddw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldindw $srcbe,$imm32 */
  {
    BPF_INSN_LDINDWBE, "ldindwbe", "ldindw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldindh $srcbe,$imm32 */
  {
    BPF_INSN_LDINDHBE, "ldindhbe", "ldindh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldindb $srcbe,$imm32 */
  {
    BPF_INSN_LDINDBBE, "ldindbbe", "ldindb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldinddw $srcbe,$imm32 */
  {
    BPF_INSN_LDINDDWBE, "ldinddwbe", "ldinddw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldxw $dstle,[$srcle+$offset16] */
  {
    BPF_INSN_LDXWLE, "ldxwle", "ldxw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldxh $dstle,[$srcle+$offset16] */
  {
    BPF_INSN_LDXHLE, "ldxhle", "ldxh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldxb $dstle,[$srcle+$offset16] */
  {
    BPF_INSN_LDXBLE, "ldxble", "ldxb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldxdw $dstle,[$srcle+$offset16] */
  {
    BPF_INSN_LDXDWLE, "ldxdwle", "ldxdw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* stxw [$dstle+$offset16],$srcle */
  {
    BPF_INSN_STXWLE, "stxwle", "stxw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* stxh [$dstle+$offset16],$srcle */
  {
    BPF_INSN_STXHLE, "stxhle", "stxh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* stxb [$dstle+$offset16],$srcle */
  {
    BPF_INSN_STXBLE, "stxble", "stxb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* stxdw [$dstle+$offset16],$srcle */
  {
    BPF_INSN_STXDWLE, "stxdwle", "stxdw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* ldxw $dstbe,[$srcbe+$offset16] */
  {
    BPF_INSN_LDXWBE, "ldxwbe", "ldxw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldxh $dstbe,[$srcbe+$offset16] */
  {
    BPF_INSN_LDXHBE, "ldxhbe", "ldxh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldxb $dstbe,[$srcbe+$offset16] */
  {
    BPF_INSN_LDXBBE, "ldxbbe", "ldxb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* ldxdw $dstbe,[$srcbe+$offset16] */
  {
    BPF_INSN_LDXDWBE, "ldxdwbe", "ldxdw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* stxw [$dstbe+$offset16],$srcbe */
  {
    BPF_INSN_STXWBE, "stxwbe", "stxw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* stxh [$dstbe+$offset16],$srcbe */
  {
    BPF_INSN_STXHBE, "stxhbe", "stxh", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* stxb [$dstbe+$offset16],$srcbe */
  {
    BPF_INSN_STXBBE, "stxbbe", "stxb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* stxdw [$dstbe+$offset16],$srcbe */
  {
    BPF_INSN_STXDWBE, "stxdwbe", "stxdw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* stb [$dstle+$offset16],$imm32 */
  {
    BPF_INSN_STBLE, "stble", "stb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* sth [$dstle+$offset16],$imm32 */
  {
    BPF_INSN_STHLE, "sthle", "sth", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* stw [$dstle+$offset16],$imm32 */
  {
    BPF_INSN_STWLE, "stwle", "stw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* stdw [$dstle+$offset16],$imm32 */
  {
    BPF_INSN_STDWLE, "stdwle", "stdw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* stb [$dstbe+$offset16],$imm32 */
  {
    BPF_INSN_STBBE, "stbbe", "stb", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* sth [$dstbe+$offset16],$imm32 */
  {
    BPF_INSN_STHBE, "sthbe", "sth", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* stw [$dstbe+$offset16],$imm32 */
  {
    BPF_INSN_STWBE, "stwbe", "stw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* stdw [$dstbe+$offset16],$imm32 */
  {
    BPF_INSN_STDWBE, "stdwbe", "stdw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jeq $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JEQILE, "jeqile", "jeq", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jeq $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JEQRLE, "jeqrle", "jeq", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jeq32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JEQ32ILE, "jeq32ile", "jeq32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jeq32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JEQ32RLE, "jeq32rle", "jeq32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jgt $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JGTILE, "jgtile", "jgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jgt $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JGTRLE, "jgtrle", "jgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jgt32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JGT32ILE, "jgt32ile", "jgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jgt32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JGT32RLE, "jgt32rle", "jgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jge $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JGEILE, "jgeile", "jge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jge $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JGERLE, "jgerle", "jge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jge32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JGE32ILE, "jge32ile", "jge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jge32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JGE32RLE, "jge32rle", "jge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jlt $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JLTILE, "jltile", "jlt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jlt $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JLTRLE, "jltrle", "jlt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jlt32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JLT32ILE, "jlt32ile", "jlt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jlt32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JLT32RLE, "jlt32rle", "jlt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jle $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JLEILE, "jleile", "jle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jle $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JLERLE, "jlerle", "jle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jle32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JLE32ILE, "jle32ile", "jle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jle32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JLE32RLE, "jle32rle", "jle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jset $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSETILE, "jsetile", "jset", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jset $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSETRLE, "jsetrle", "jset", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jset32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSET32ILE, "jset32ile", "jset32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jset32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSET32RLE, "jset32rle", "jset32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jne $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JNEILE, "jneile", "jne", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jne $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JNERLE, "jnerle", "jne", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jne32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JNE32ILE, "jne32ile", "jne32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jne32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JNE32RLE, "jne32rle", "jne32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsgt $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSGTILE, "jsgtile", "jsgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsgt $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSGTRLE, "jsgtrle", "jsgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsgt32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSGT32ILE, "jsgt32ile", "jsgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsgt32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSGT32RLE, "jsgt32rle", "jsgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsge $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSGEILE, "jsgeile", "jsge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsge $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSGERLE, "jsgerle", "jsge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsge32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSGE32ILE, "jsge32ile", "jsge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsge32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSGE32RLE, "jsge32rle", "jsge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jslt $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSLTILE, "jsltile", "jslt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jslt $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSLTRLE, "jsltrle", "jslt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jslt32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSLT32ILE, "jslt32ile", "jslt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jslt32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSLT32RLE, "jslt32rle", "jslt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsle $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSLEILE, "jsleile", "jsle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsle $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSLERLE, "jslerle", "jsle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsle32 $dstle,$imm32,$disp16 */
  {
    BPF_INSN_JSLE32ILE, "jsle32ile", "jsle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jsle32 $dstle,$srcle,$disp16 */
  {
    BPF_INSN_JSLE32RLE, "jsle32rle", "jsle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* jeq $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JEQIBE, "jeqibe", "jeq", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jeq $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JEQRBE, "jeqrbe", "jeq", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jeq32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JEQ32IBE, "jeq32ibe", "jeq32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jeq32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JEQ32RBE, "jeq32rbe", "jeq32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jgt $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JGTIBE, "jgtibe", "jgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jgt $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JGTRBE, "jgtrbe", "jgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jgt32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JGT32IBE, "jgt32ibe", "jgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jgt32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JGT32RBE, "jgt32rbe", "jgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jge $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JGEIBE, "jgeibe", "jge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jge $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JGERBE, "jgerbe", "jge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jge32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JGE32IBE, "jge32ibe", "jge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jge32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JGE32RBE, "jge32rbe", "jge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jlt $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JLTIBE, "jltibe", "jlt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jlt $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JLTRBE, "jltrbe", "jlt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jlt32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JLT32IBE, "jlt32ibe", "jlt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jlt32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JLT32RBE, "jlt32rbe", "jlt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jle $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JLEIBE, "jleibe", "jle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jle $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JLERBE, "jlerbe", "jle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jle32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JLE32IBE, "jle32ibe", "jle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jle32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JLE32RBE, "jle32rbe", "jle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jset $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSETIBE, "jsetibe", "jset", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jset $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSETRBE, "jsetrbe", "jset", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jset32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSET32IBE, "jset32ibe", "jset32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jset32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSET32RBE, "jset32rbe", "jset32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jne $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JNEIBE, "jneibe", "jne", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jne $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JNERBE, "jnerbe", "jne", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jne32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JNE32IBE, "jne32ibe", "jne32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jne32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JNE32RBE, "jne32rbe", "jne32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsgt $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSGTIBE, "jsgtibe", "jsgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsgt $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSGTRBE, "jsgtrbe", "jsgt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsgt32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSGT32IBE, "jsgt32ibe", "jsgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsgt32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSGT32RBE, "jsgt32rbe", "jsgt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsge $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSGEIBE, "jsgeibe", "jsge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsge $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSGERBE, "jsgerbe", "jsge", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsge32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSGE32IBE, "jsge32ibe", "jsge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsge32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSGE32RBE, "jsge32rbe", "jsge32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jslt $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSLTIBE, "jsltibe", "jslt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jslt $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSLTRBE, "jsltrbe", "jslt", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jslt32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSLT32IBE, "jslt32ibe", "jslt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jslt32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSLT32RBE, "jslt32rbe", "jslt32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsle $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSLEIBE, "jsleibe", "jsle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsle $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSLERBE, "jslerbe", "jsle", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsle32 $dstbe,$imm32,$disp16 */
  {
    BPF_INSN_JSLE32IBE, "jsle32ibe", "jsle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* jsle32 $dstbe,$srcbe,$disp16 */
  {
    BPF_INSN_JSLE32RBE, "jsle32rbe", "jsle32", 64,
    { 0|A(COND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* call $disp32 */
  {
    BPF_INSN_CALLLE, "callle", "call", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* call $disp32 */
  {
    BPF_INSN_CALLBE, "callbe", "call", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* call $dstle */
  {
    BPF_INSN_CALLRLE, "callrle", "call", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x20" } } } }
  },
/* call $dstbe */
  {
    BPF_INSN_CALLRBE, "callrbe", "call", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x10" } } } }
  },
/* ja $disp16 */
  {
    BPF_INSN_JA, "ja", "ja", 64,
    { 0|A(UNCOND_CTI), { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
  },
/* exit */
  {
    BPF_INSN_EXIT, "exit", "exit", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
  },
/* xadddw [$dstle+$offset16],$srcle */
  {
    BPF_INSN_XADDDWLE, "xadddwle", "xadddw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* xaddw [$dstle+$offset16],$srcle */
  {
    BPF_INSN_XADDWLE, "xaddwle", "xaddw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xa0" } } } }
  },
/* xadddw [$dstbe+$offset16],$srcbe */
  {
    BPF_INSN_XADDDWBE, "xadddwbe", "xadddw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* xaddw [$dstbe+$offset16],$srcbe */
  {
    BPF_INSN_XADDWBE, "xaddwbe", "xaddw", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\x50" } } } }
  },
/* brkpt */
  {
    BPF_INSN_BRKPT, "brkpt", "brkpt", 64,
    { 0, { { { (1<<MACH_BASE), 0 } }, { { 1, "\xf0" } } } }
  },
};

#undef OP
#undef A

/* Initialize anything needed to be done once, before any cpu_open call.  */

static void
init_tables (void)
{
}

#ifndef opcodes_error_handler
#define opcodes_error_handler(...) \
  fprintf (stderr, __VA_ARGS__); fputc ('\n', stderr)
#endif

static const CGEN_MACH * lookup_mach_via_bfd_name (const CGEN_MACH *, const char *);
static void build_hw_table      (CGEN_CPU_TABLE *);
static void build_ifield_table  (CGEN_CPU_TABLE *);
static void build_operand_table (CGEN_CPU_TABLE *);
static void build_insn_table    (CGEN_CPU_TABLE *);
static void bpf_cgen_rebuild_tables (CGEN_CPU_TABLE *);

/* Subroutine of bpf_cgen_cpu_open to look up a mach via its bfd name.  */

static const CGEN_MACH *
lookup_mach_via_bfd_name (const CGEN_MACH *table, const char *name)
{
  while (table->name)
    {
      if (strcmp (name, table->bfd_name) == 0)
	return table;
      ++table;
    }
  return NULL;
}

/* Subroutine of bpf_cgen_cpu_open to build the hardware table.  */

static void
build_hw_table (CGEN_CPU_TABLE *cd)
{
  int i;
  int machs = cd->machs;
  const CGEN_HW_ENTRY *init = & bpf_cgen_hw_table[0];
  /* MAX_HW is only an upper bound on the number of selected entries.
     However each entry is indexed by it's enum so there can be holes in
     the table.  */
  const CGEN_HW_ENTRY **selected =
    (const CGEN_HW_ENTRY **) xmalloc (MAX_HW * sizeof (CGEN_HW_ENTRY *));

  cd->hw_table.init_entries = init;
  cd->hw_table.entry_size = sizeof (CGEN_HW_ENTRY);
  memset (selected, 0, MAX_HW * sizeof (CGEN_HW_ENTRY *));
  /* ??? For now we just use machs to determine which ones we want.  */
  for (i = 0; init[i].name != NULL; ++i)
    if (CGEN_HW_ATTR_VALUE (&init[i], CGEN_HW_MACH)
	& machs)
      selected[init[i].type] = &init[i];
  cd->hw_table.entries = selected;
  cd->hw_table.num_entries = MAX_HW;
}

/* Subroutine of bpf_cgen_cpu_open to build the hardware table.  */

static void
build_ifield_table (CGEN_CPU_TABLE *cd)
{
  cd->ifld_table = & bpf_cgen_ifld_table[0];
}

/* Subroutine of bpf_cgen_cpu_open to build the hardware table.  */

static void
build_operand_table (CGEN_CPU_TABLE *cd)
{
  int i;
  int machs = cd->machs;
  const CGEN_OPERAND *init = & bpf_cgen_operand_table[0];
  /* MAX_OPERANDS is only an upper bound on the number of selected entries.
     However each entry is indexed by it's enum so there can be holes in
     the table.  */
  const CGEN_OPERAND **selected = xmalloc (MAX_OPERANDS * sizeof (* selected));

  cd->operand_table.init_entries = init;
  cd->operand_table.entry_size = sizeof (CGEN_OPERAND);
  memset (selected, 0, MAX_OPERANDS * sizeof (CGEN_OPERAND *));
  /* ??? For now we just use mach to determine which ones we want.  */
  for (i = 0; init[i].name != NULL; ++i)
    if (CGEN_OPERAND_ATTR_VALUE (&init[i], CGEN_OPERAND_MACH)
	& machs)
      selected[init[i].type] = &init[i];
  cd->operand_table.entries = selected;
  cd->operand_table.num_entries = MAX_OPERANDS;
}

/* Subroutine of bpf_cgen_cpu_open to build the hardware table.
   ??? This could leave out insns not supported by the specified mach/isa,
   but that would cause errors like "foo only supported by bar" to become
   "unknown insn", so for now we include all insns and require the app to
   do the checking later.
   ??? On the other hand, parsing of such insns may require their hardware or
   operand elements to be in the table [which they mightn't be].  */

static void
build_insn_table (CGEN_CPU_TABLE *cd)
{
  int i;
  const CGEN_IBASE *ib = & bpf_cgen_insn_table[0];
  CGEN_INSN *insns = xmalloc (MAX_INSNS * sizeof (CGEN_INSN));

  memset (insns, 0, MAX_INSNS * sizeof (CGEN_INSN));
  for (i = 0; i < MAX_INSNS; ++i)
    insns[i].base = &ib[i];
  cd->insn_table.init_entries = insns;
  cd->insn_table.entry_size = sizeof (CGEN_IBASE);
  cd->insn_table.num_init_entries = MAX_INSNS;
}

/* Subroutine of bpf_cgen_cpu_open to rebuild the tables.  */

static void
bpf_cgen_rebuild_tables (CGEN_CPU_TABLE *cd)
{
  int i;
  CGEN_BITSET *isas = cd->isas;
  unsigned int machs = cd->machs;

  cd->int_insn_p = CGEN_INT_INSN_P;

  /* Data derived from the isa spec.  */
#define UNSET (CGEN_SIZE_UNKNOWN + 1)
  cd->default_insn_bitsize = UNSET;
  cd->base_insn_bitsize = UNSET;
  cd->min_insn_bitsize = 65535; /* Some ridiculously big number.  */
  cd->max_insn_bitsize = 0;
  for (i = 0; i < MAX_ISAS; ++i)
    if (cgen_bitset_contains (isas, i))
      {
	const CGEN_ISA *isa = & bpf_cgen_isa_table[i];

	/* Default insn sizes of all selected isas must be
	   equal or we set the result to 0, meaning "unknown".  */
	if (cd->default_insn_bitsize == UNSET)
	  cd->default_insn_bitsize = isa->default_insn_bitsize;
	else if (isa->default_insn_bitsize == cd->default_insn_bitsize)
	  ; /* This is ok.  */
	else
	  cd->default_insn_bitsize = CGEN_SIZE_UNKNOWN;

	/* Base insn sizes of all selected isas must be equal
	   or we set the result to 0, meaning "unknown".  */
	if (cd->base_insn_bitsize == UNSET)
	  cd->base_insn_bitsize = isa->base_insn_bitsize;
	else if (isa->base_insn_bitsize == cd->base_insn_bitsize)
	  ; /* This is ok.  */
	else
	  cd->base_insn_bitsize = CGEN_SIZE_UNKNOWN;

	/* Set min,max insn sizes.  */
	if (isa->min_insn_bitsize < cd->min_insn_bitsize)
	  cd->min_insn_bitsize = isa->min_insn_bitsize;
	if (isa->max_insn_bitsize > cd->max_insn_bitsize)
	  cd->max_insn_bitsize = isa->max_insn_bitsize;
      }

  /* Data derived from the mach spec.  */
  for (i = 0; i < MAX_MACHS; ++i)
    if (((1 << i) & machs) != 0)
      {
	const CGEN_MACH *mach = & bpf_cgen_mach_table[i];

	if (mach->insn_chunk_bitsize != 0)
	{
	  if (cd->insn_chunk_bitsize != 0 && cd->insn_chunk_bitsize != mach->insn_chunk_bitsize)
	    {
	      opcodes_error_handler
		(/* xgettext:c-format */
		 _("internal error: bpf_cgen_rebuild_tables: "
		   "conflicting insn-chunk-bitsize values: `%d' vs. `%d'"),
		 cd->insn_chunk_bitsize, mach->insn_chunk_bitsize);
	      abort ();
	    }

 	  cd->insn_chunk_bitsize = mach->insn_chunk_bitsize;
	}
      }

  /* Determine which hw elements are used by MACH.  */
  build_hw_table (cd);

  /* Build the ifield table.  */
  build_ifield_table (cd);

  /* Determine which operands are used by MACH/ISA.  */
  build_operand_table (cd);

  /* Build the instruction table.  */
  build_insn_table (cd);
}

/* Initialize a cpu table and return a descriptor.
   It's much like opening a file, and must be the first function called.
   The arguments are a set of (type/value) pairs, terminated with
   CGEN_CPU_OPEN_END.

   Currently supported values:
   CGEN_CPU_OPEN_ISAS:    bitmap of values in enum isa_attr
   CGEN_CPU_OPEN_MACHS:   bitmap of values in enum mach_attr
   CGEN_CPU_OPEN_BFDMACH: specify 1 mach using bfd name
   CGEN_CPU_OPEN_ENDIAN:  specify endian choice
   CGEN_CPU_OPEN_INSN_ENDIAN: specify instruction endian choice
   CGEN_CPU_OPEN_END:     terminates arguments

   ??? Simultaneous multiple isas might not make sense, but it's not (yet)
   precluded.  */

CGEN_CPU_DESC
bpf_cgen_cpu_open (enum cgen_cpu_open_arg arg_type, ...)
{
  CGEN_CPU_TABLE *cd = (CGEN_CPU_TABLE *) xmalloc (sizeof (CGEN_CPU_TABLE));
  static int init_p;
  CGEN_BITSET *isas = 0;  /* 0 = "unspecified" */
  unsigned int machs = 0; /* 0 = "unspecified" */
  enum cgen_endian endian = CGEN_ENDIAN_UNKNOWN;
  enum cgen_endian insn_endian = CGEN_ENDIAN_UNKNOWN;
  va_list ap;

  if (! init_p)
    {
      init_tables ();
      init_p = 1;
    }

  memset (cd, 0, sizeof (*cd));

  va_start (ap, arg_type);
  while (arg_type != CGEN_CPU_OPEN_END)
    {
      switch (arg_type)
	{
	case CGEN_CPU_OPEN_ISAS :
	  isas = va_arg (ap, CGEN_BITSET *);
	  break;
	case CGEN_CPU_OPEN_MACHS :
	  machs = va_arg (ap, unsigned int);
	  break;
	case CGEN_CPU_OPEN_BFDMACH :
	  {
	    const char *name = va_arg (ap, const char *);
	    const CGEN_MACH *mach =
	      lookup_mach_via_bfd_name (bpf_cgen_mach_table, name);

	    if (mach != NULL)
	      machs |= 1 << mach->num;
	    break;
	  }
	case CGEN_CPU_OPEN_ENDIAN :
	  endian = va_arg (ap, enum cgen_endian);
	  break;
	case CGEN_CPU_OPEN_INSN_ENDIAN :
	  insn_endian = va_arg (ap, enum cgen_endian);
	  break;
	default :
	  opcodes_error_handler
	    (/* xgettext:c-format */
	     _("internal error: bpf_cgen_cpu_open: "
	       "unsupported argument `%d'"),
	     arg_type);
	  abort (); /* ??? return NULL? */
	}
      arg_type = va_arg (ap, enum cgen_cpu_open_arg);
    }
  va_end (ap);

  /* Mach unspecified means "all".  */
  if (machs == 0)
    machs = (1 << MAX_MACHS) - 1;
  /* Base mach is always selected.  */
  machs |= 1;
  if (endian == CGEN_ENDIAN_UNKNOWN)
    {
      /* ??? If target has only one, could have a default.  */
      opcodes_error_handler
	(/* xgettext:c-format */
	 _("internal error: bpf_cgen_cpu_open: no endianness specified"));
      abort ();
    }

  cd->isas = cgen_bitset_copy (isas);
  cd->machs = machs;
  cd->endian = endian;
  cd->insn_endian
    = (insn_endian == CGEN_ENDIAN_UNKNOWN ? endian : insn_endian);

  /* Table (re)builder.  */
  cd->rebuild_tables = bpf_cgen_rebuild_tables;
  bpf_cgen_rebuild_tables (cd);

  /* Default to not allowing signed overflow.  */
  cd->signed_overflow_ok_p = 0;

  return (CGEN_CPU_DESC) cd;
}

/* Cover fn to bpf_cgen_cpu_open to handle the simple case of 1 isa, 1 mach.
   MACH_NAME is the bfd name of the mach.  */

CGEN_CPU_DESC
bpf_cgen_cpu_open_1 (const char *mach_name, enum cgen_endian endian)
{
  return bpf_cgen_cpu_open (CGEN_CPU_OPEN_BFDMACH, mach_name,
			       CGEN_CPU_OPEN_ENDIAN, endian,
			       CGEN_CPU_OPEN_END);
}

/* Close a cpu table.
   ??? This can live in a machine independent file, but there's currently
   no place to put this file (there's no libcgen).  libopcodes is the wrong
   place as some simulator ports use this but they don't use libopcodes.  */

void
bpf_cgen_cpu_close (CGEN_CPU_DESC cd)
{
  unsigned int i;
  const CGEN_INSN *insns;

  if (cd->macro_insn_table.init_entries)
    {
      insns = cd->macro_insn_table.init_entries;
      for (i = 0; i < cd->macro_insn_table.num_init_entries; ++i, ++insns)
	if (CGEN_INSN_RX ((insns)))
	  regfree (CGEN_INSN_RX (insns));
    }

  if (cd->insn_table.init_entries)
    {
      insns = cd->insn_table.init_entries;
      for (i = 0; i < cd->insn_table.num_init_entries; ++i, ++insns)
	if (CGEN_INSN_RX (insns))
	  regfree (CGEN_INSN_RX (insns));
    }

  free ((CGEN_INSN *) cd->macro_insn_table.init_entries);
  free ((CGEN_INSN *) cd->insn_table.init_entries);
  free ((CGEN_HW_ENTRY *) cd->hw_table.entries);
  free ((CGEN_HW_ENTRY *) cd->operand_table.entries);
  free (cd);
}

