/////////////////////////////////////////////////////////////////////////
// $Id$
/////////////////////////////////////////////////////////////////////////
//
//   Copyright (c) 2011-2024 Stanislav Shwartsman
//          Written by Stanislav Shwartsman [sshwarts at sourceforge net]
//
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library 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
//  Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with this library; if not, write to the Free Software
//  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA B 02110-1301 USA
//
/////////////////////////////////////////////////////////////////////////

#include "config.h"

#if BX_SUPPORT_AVX

#ifndef BX_STANDALONE_DECODER
#define BX_STANDALONE_DECODER
#endif

#include "fetchdecode.h"

// 256 entries for XOP-encoded map 0x8 opcodes
static const Bit64u BxOpcodeGroup_XOP_0x8_01[] = {
  form_opcode(ATTR_NNN1 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_BLCFILL_BqEq),
  form_opcode(ATTR_NNN1 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_BLCFILL_BdEd),

  form_opcode(ATTR_NNN2 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_BLSFILL_BqEq),
  form_opcode(ATTR_NNN2 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_BLSFILL_BdEd),

  form_opcode(ATTR_NNN3 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_BLCS_BqEq),
  form_opcode(ATTR_NNN3 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_BLCS_BdEd),

  form_opcode(ATTR_NNN4 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_TZMSK_BqEq),
  form_opcode(ATTR_NNN4 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_TZMSK_BdEd),

  form_opcode(ATTR_NNN5 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_BLCIC_BqEq),
  form_opcode(ATTR_NNN5 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_BLCIC_BdEd),

  form_opcode(ATTR_NNN6 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_BLSIC_BqEq),
  form_opcode(ATTR_NNN6 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_BLSIC_BdEd),

  form_opcode(ATTR_NNN7 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_T1MSKC_BqEq),
  last_opcode(ATTR_NNN7 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_T1MSKC_BdEd)
};

static const Bit64u BxOpcodeGroup_XOP_0x8_02[] = {
  form_opcode(ATTR_NNN1 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_BLCMSK_BqEq),
  form_opcode(ATTR_NNN1 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_BLCMSK_BdEd),

  form_opcode(ATTR_NNN6 | ATTR_IS64 | ATTR_VEX_L0 | ATTR_VEX_W0, BX_IA_BLCI_BqEq),
  last_opcode(ATTR_NNN6 |             ATTR_VEX_L0 | ATTR_VEX_W1, BX_IA_BLCI_BdEd)
};

static const Bit64u BxOpcodeGroup_XOP_0x8_85[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSSWW_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_86[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSSWD_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_87[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSSDQL_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_8E[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSSDD_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_8F[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSSDQH_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_95[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSWW_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_96[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSWD_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_97[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSDQL_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_9E[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSDD_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_9F[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMACSDQH_VdqHdqWdqVIb) };

static const Bit64u BxOpcodeGroup_XOP_0x8_A2[] = {
  form_opcode(ATTR_VEX_W0, BX_IA_VPCMOV_VdqHdqVIbWdq),
  last_opcode(ATTR_VEX_W1, BX_IA_VPCMOV_VdqHdqWdqVIb)
};

static const Bit64u BxOpcodeGroup_XOP_0x8_A3[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPPERM_VdqHdqVIbWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPPERM_VdqHdqWdqVIb)
};

static const Bit64u BxOpcodeGroup_XOP_0x8_A6[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMADCSSWD_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_B6[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPMADCSWD_VdqHdqWdqVIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_C0[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTB_VdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_C1[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTW_VdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_C2[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTD_VdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_C3[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTQ_VdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_CC[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMB_VdqHdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_CD[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMW_VdqHdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_CE[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMD_VdqHdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_CF[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMQ_VdqHdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_EC[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMUB_VdqHdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_ED[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMUW_VdqHdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_EE[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMUD_VdqHdqWdqIb) };
static const Bit64u BxOpcodeGroup_XOP_0x8_EF[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPCOMUQ_VdqHdqWdqIb) };

// 256 entries for XOP-encoded map 0x9 opcodes
static const Bit64u BxOpcodeGroup_XOP_0x9_80[] = { last_opcode(ATTR_VEX_W0, BX_IA_VFRCZPS_VpsWps) };
static const Bit64u BxOpcodeGroup_XOP_0x9_81[] = { last_opcode(ATTR_VEX_W0, BX_IA_VFRCZPD_VpdWpd) };
static const Bit64u BxOpcodeGroup_XOP_0x9_82[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VFRCZSS_VssWss) };
static const Bit64u BxOpcodeGroup_XOP_0x9_83[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VFRCZSD_VsdWsd) };

static const Bit64u BxOpcodeGroup_XOP_0x9_88[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHAB_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHAB_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_89[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHAW_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHAW_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_8A[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHAD_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHAD_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_8B[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHAQ_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHAQ_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_90[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTB_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPROTB_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_91[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTW_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPROTW_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_92[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTD_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPROTD_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_93[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPROTQ_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPROTQ_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_94[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHLB_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHLB_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_95[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHLW_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHLW_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_96[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHLD_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHLD_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_97[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPSHLQ_VdqHdqWdq),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0, BX_IA_VPSHLQ_VdqWdqHdq)
};

static const Bit64u BxOpcodeGroup_XOP_0x9_C1[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDBW_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_C2[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDBD_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_C3[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDBQ_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_C6[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDWD_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_C7[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDWQ_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_CB[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDDQ_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_D1[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDUBW_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_D2[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDUBD_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_D3[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDUBQ_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_D6[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDUWD_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_D7[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDUWQ_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_DB[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHADDUDQ_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_E1[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHSUBBW_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_E2[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHSUBWD_VdqWdq) };
static const Bit64u BxOpcodeGroup_XOP_0x9_E3[] = { last_opcode(ATTR_VEX_W0 | ATTR_VEX_L0, BX_IA_VPHSUBDQ_VdqWdq) };

// 256 entries for XOP-encoded map 0xA opcodes
static const Bit64u BxOpcodeGroup_XOP_0xA_10[] = {
  form_opcode(ATTR_VEX_W0 | ATTR_VEX_L0,             BX_IA_BEXTR_GdEdId),
  last_opcode(ATTR_VEX_W1 | ATTR_VEX_L0 | ATTR_IS64, BX_IA_BEXTR_GqEqId)
};

/* ************************************************************************ */

const Bit64u *BxOpcodeTableXOP[256*3] = {
  // 256 entries for XOP-encoded map 0x8 opcodes
  /* 00  */ ( BxOpcodeGroup_ERR ),
  /* 01  */ ( BxOpcodeGroup_XOP_0x8_01 ),
  /* 02  */ ( BxOpcodeGroup_XOP_0x8_02 ),
  /* 03  */ ( BxOpcodeGroup_ERR ),
  /* 04  */ ( BxOpcodeGroup_ERR ),
  /* 05  */ ( BxOpcodeGroup_ERR ),
  /* 06  */ ( BxOpcodeGroup_ERR ),
  /* 07  */ ( BxOpcodeGroup_ERR ),
  /* 08  */ ( BxOpcodeGroup_ERR ),
  /* 09  */ ( BxOpcodeGroup_ERR ),
  /* 0A  */ ( BxOpcodeGroup_ERR ),
  /* 0B  */ ( BxOpcodeGroup_ERR ),
  /* 0C  */ ( BxOpcodeGroup_ERR ),
  /* 0D  */ ( BxOpcodeGroup_ERR ),
  /* 0E  */ ( BxOpcodeGroup_ERR ),
  /* 0F  */ ( BxOpcodeGroup_ERR ),
  /* 10  */ ( BxOpcodeGroup_ERR ),
  /* 11  */ ( BxOpcodeGroup_ERR ),
  /* 12  */ ( BxOpcodeGroup_ERR ),
  /* 13  */ ( BxOpcodeGroup_ERR ),
  /* 14  */ ( BxOpcodeGroup_ERR ),
  /* 15  */ ( BxOpcodeGroup_ERR ),
  /* 16  */ ( BxOpcodeGroup_ERR ),
  /* 17  */ ( BxOpcodeGroup_ERR ),
  /* 18  */ ( BxOpcodeGroup_ERR ),
  /* 19  */ ( BxOpcodeGroup_ERR ),
  /* 1A  */ ( BxOpcodeGroup_ERR ),
  /* 1B  */ ( BxOpcodeGroup_ERR ),
  /* 1C  */ ( BxOpcodeGroup_ERR ),
  /* 1D  */ ( BxOpcodeGroup_ERR ),
  /* 1E  */ ( BxOpcodeGroup_ERR ),
  /* 1F  */ ( BxOpcodeGroup_ERR ),
  /* 20  */ ( BxOpcodeGroup_ERR ),
  /* 21  */ ( BxOpcodeGroup_ERR ),
  /* 22  */ ( BxOpcodeGroup_ERR ),
  /* 23  */ ( BxOpcodeGroup_ERR ),
  /* 24  */ ( BxOpcodeGroup_ERR ),
  /* 25  */ ( BxOpcodeGroup_ERR ),
  /* 26  */ ( BxOpcodeGroup_ERR ),
  /* 27  */ ( BxOpcodeGroup_ERR ),
  /* 28  */ ( BxOpcodeGroup_ERR ),
  /* 29  */ ( BxOpcodeGroup_ERR ),
  /* 2A  */ ( BxOpcodeGroup_ERR ),
  /* 2B  */ ( BxOpcodeGroup_ERR ),
  /* 2C  */ ( BxOpcodeGroup_ERR ),
  /* 2D  */ ( BxOpcodeGroup_ERR ),
  /* 2E  */ ( BxOpcodeGroup_ERR ),
  /* 2F  */ ( BxOpcodeGroup_ERR ),
  /* 30  */ ( BxOpcodeGroup_ERR ),
  /* 31  */ ( BxOpcodeGroup_ERR ),
  /* 32  */ ( BxOpcodeGroup_ERR ),
  /* 33  */ ( BxOpcodeGroup_ERR ),
  /* 34  */ ( BxOpcodeGroup_ERR ),
  /* 35  */ ( BxOpcodeGroup_ERR ),
  /* 36  */ ( BxOpcodeGroup_ERR ),
  /* 37  */ ( BxOpcodeGroup_ERR ),
  /* 38  */ ( BxOpcodeGroup_ERR ),
  /* 39  */ ( BxOpcodeGroup_ERR ),
  /* 3A  */ ( BxOpcodeGroup_ERR ),
  /* 3B  */ ( BxOpcodeGroup_ERR ),
  /* 3C  */ ( BxOpcodeGroup_ERR ),
  /* 3D  */ ( BxOpcodeGroup_ERR ),
  /* 3E  */ ( BxOpcodeGroup_ERR ),
  /* 3F  */ ( BxOpcodeGroup_ERR ),
  /* 40  */ ( BxOpcodeGroup_ERR ),
  /* 41  */ ( BxOpcodeGroup_ERR ),
  /* 42  */ ( BxOpcodeGroup_ERR ),
  /* 43  */ ( BxOpcodeGroup_ERR ),
  /* 44  */ ( BxOpcodeGroup_ERR ),
  /* 45  */ ( BxOpcodeGroup_ERR ),
  /* 46  */ ( BxOpcodeGroup_ERR ),
  /* 47  */ ( BxOpcodeGroup_ERR ),
  /* 48  */ ( BxOpcodeGroup_ERR ),
  /* 49  */ ( BxOpcodeGroup_ERR ),
  /* 4A  */ ( BxOpcodeGroup_ERR ),
  /* 4B  */ ( BxOpcodeGroup_ERR ),
  /* 4C  */ ( BxOpcodeGroup_ERR ),
  /* 4D  */ ( BxOpcodeGroup_ERR ),
  /* 4E  */ ( BxOpcodeGroup_ERR ),
  /* 4F  */ ( BxOpcodeGroup_ERR ),
  /* 50  */ ( BxOpcodeGroup_ERR ),
  /* 51  */ ( BxOpcodeGroup_ERR ),
  /* 52  */ ( BxOpcodeGroup_ERR ),
  /* 53  */ ( BxOpcodeGroup_ERR ),
  /* 54  */ ( BxOpcodeGroup_ERR ),
  /* 55  */ ( BxOpcodeGroup_ERR ),
  /* 56  */ ( BxOpcodeGroup_ERR ),
  /* 57  */ ( BxOpcodeGroup_ERR ),
  /* 58  */ ( BxOpcodeGroup_ERR ),
  /* 59  */ ( BxOpcodeGroup_ERR ),
  /* 5A  */ ( BxOpcodeGroup_ERR ),
  /* 5B  */ ( BxOpcodeGroup_ERR ),
  /* 5C  */ ( BxOpcodeGroup_ERR ),
  /* 5D  */ ( BxOpcodeGroup_ERR ),
  /* 5E  */ ( BxOpcodeGroup_ERR ),
  /* 5F  */ ( BxOpcodeGroup_ERR ),
  /* 60  */ ( BxOpcodeGroup_ERR ),
  /* 61  */ ( BxOpcodeGroup_ERR ),
  /* 62  */ ( BxOpcodeGroup_ERR ),
  /* 63  */ ( BxOpcodeGroup_ERR ),
  /* 64  */ ( BxOpcodeGroup_ERR ),
  /* 65  */ ( BxOpcodeGroup_ERR ),
  /* 66  */ ( BxOpcodeGroup_ERR ),
  /* 67  */ ( BxOpcodeGroup_ERR ),
  /* 68  */ ( BxOpcodeGroup_ERR ),
  /* 69  */ ( BxOpcodeGroup_ERR ),
  /* 6A  */ ( BxOpcodeGroup_ERR ),
  /* 6B  */ ( BxOpcodeGroup_ERR ),
  /* 6C  */ ( BxOpcodeGroup_ERR ),
  /* 6D  */ ( BxOpcodeGroup_ERR ),
  /* 6E  */ ( BxOpcodeGroup_ERR ),
  /* 6F  */ ( BxOpcodeGroup_ERR ),
  /* 70  */ ( BxOpcodeGroup_ERR ),
  /* 71  */ ( BxOpcodeGroup_ERR ),
  /* 72  */ ( BxOpcodeGroup_ERR ),
  /* 73  */ ( BxOpcodeGroup_ERR ),
  /* 74  */ ( BxOpcodeGroup_ERR ),
  /* 75  */ ( BxOpcodeGroup_ERR ),
  /* 76  */ ( BxOpcodeGroup_ERR ),
  /* 77  */ ( BxOpcodeGroup_ERR ),
  /* 78  */ ( BxOpcodeGroup_ERR ),
  /* 79  */ ( BxOpcodeGroup_ERR ),
  /* 7A  */ ( BxOpcodeGroup_ERR ),
  /* 7B  */ ( BxOpcodeGroup_ERR ),
  /* 7C  */ ( BxOpcodeGroup_ERR ),
  /* 7D  */ ( BxOpcodeGroup_ERR ),
  /* 7E  */ ( BxOpcodeGroup_ERR ),
  /* 7F  */ ( BxOpcodeGroup_ERR ),
  /* 80  */ ( BxOpcodeGroup_ERR ),
  /* 81  */ ( BxOpcodeGroup_ERR ),
  /* 82  */ ( BxOpcodeGroup_ERR ),
  /* 83  */ ( BxOpcodeGroup_ERR ),
  /* 84  */ ( BxOpcodeGroup_ERR ),
  /* 85  */ ( BxOpcodeGroup_XOP_0x8_85 ),
  /* 86  */ ( BxOpcodeGroup_XOP_0x8_86 ),
  /* 87  */ ( BxOpcodeGroup_XOP_0x8_87 ),
  /* 88  */ ( BxOpcodeGroup_ERR ),
  /* 89  */ ( BxOpcodeGroup_ERR ),
  /* 8A  */ ( BxOpcodeGroup_ERR ),
  /* 8B  */ ( BxOpcodeGroup_ERR ),
  /* 8C  */ ( BxOpcodeGroup_ERR ),
  /* 8D  */ ( BxOpcodeGroup_ERR ),
  /* 8E  */ ( BxOpcodeGroup_XOP_0x8_8E ),
  /* 8F  */ ( BxOpcodeGroup_XOP_0x8_8F ),
  /* 90  */ ( BxOpcodeGroup_ERR ),
  /* 91  */ ( BxOpcodeGroup_ERR ),
  /* 92  */ ( BxOpcodeGroup_ERR ),
  /* 93  */ ( BxOpcodeGroup_ERR ),
  /* 94  */ ( BxOpcodeGroup_ERR ),
  /* 95  */ ( BxOpcodeGroup_XOP_0x8_95 ),
  /* 96  */ ( BxOpcodeGroup_XOP_0x8_96 ),
  /* 97  */ ( BxOpcodeGroup_XOP_0x8_97 ),
  /* 98  */ ( BxOpcodeGroup_ERR ),
  /* 99  */ ( BxOpcodeGroup_ERR ),
  /* 9A  */ ( BxOpcodeGroup_ERR ),
  /* 9B  */ ( BxOpcodeGroup_ERR ),
  /* 9C  */ ( BxOpcodeGroup_ERR ),
  /* 9D  */ ( BxOpcodeGroup_ERR ),
  /* 9E  */ ( BxOpcodeGroup_XOP_0x8_9E ),
  /* 9F  */ ( BxOpcodeGroup_XOP_0x8_9F ),
  /* A0  */ ( BxOpcodeGroup_ERR ),
  /* A1  */ ( BxOpcodeGroup_ERR ),
  /* A2  */ ( BxOpcodeGroup_XOP_0x8_A2 ),
  /* A3  */ ( BxOpcodeGroup_XOP_0x8_A3 ),
  /* A4  */ ( BxOpcodeGroup_ERR ),
  /* A5  */ ( BxOpcodeGroup_ERR ),
  /* A6  */ ( BxOpcodeGroup_XOP_0x8_A6 ),
  /* A7  */ ( BxOpcodeGroup_ERR ),
  /* A8  */ ( BxOpcodeGroup_ERR ),
  /* A9  */ ( BxOpcodeGroup_ERR ),
  /* AA  */ ( BxOpcodeGroup_ERR ),
  /* AB  */ ( BxOpcodeGroup_ERR ),
  /* AC  */ ( BxOpcodeGroup_ERR ),
  /* AD  */ ( BxOpcodeGroup_ERR ),
  /* AE  */ ( BxOpcodeGroup_ERR ),
  /* AF  */ ( BxOpcodeGroup_ERR ),
  /* B0  */ ( BxOpcodeGroup_ERR ),
  /* B1  */ ( BxOpcodeGroup_ERR ),
  /* B2  */ ( BxOpcodeGroup_ERR ),
  /* B3  */ ( BxOpcodeGroup_ERR ),
  /* B4  */ ( BxOpcodeGroup_ERR ),
  /* B5  */ ( BxOpcodeGroup_ERR ),
  /* B6  */ ( BxOpcodeGroup_XOP_0x8_B6 ),
  /* B7  */ ( BxOpcodeGroup_ERR ),
  /* B8  */ ( BxOpcodeGroup_ERR ),
  /* B9  */ ( BxOpcodeGroup_ERR ),
  /* BA  */ ( BxOpcodeGroup_ERR ),
  /* BB  */ ( BxOpcodeGroup_ERR ),
  /* BC  */ ( BxOpcodeGroup_ERR ),
  /* BD  */ ( BxOpcodeGroup_ERR ),
  /* BE  */ ( BxOpcodeGroup_ERR ),
  /* BF  */ ( BxOpcodeGroup_ERR ),
  /* C0  */ ( BxOpcodeGroup_XOP_0x8_C0 ),
  /* C1  */ ( BxOpcodeGroup_XOP_0x8_C1 ),
  /* C2  */ ( BxOpcodeGroup_XOP_0x8_C2 ),
  /* C3  */ ( BxOpcodeGroup_XOP_0x8_C3 ),
  /* C4  */ ( BxOpcodeGroup_ERR ),
  /* C5  */ ( BxOpcodeGroup_ERR ),
  /* C6  */ ( BxOpcodeGroup_ERR ),
  /* C7  */ ( BxOpcodeGroup_ERR ),
  /* C8  */ ( BxOpcodeGroup_ERR ),
  /* C9  */ ( BxOpcodeGroup_ERR ),
  /* CA  */ ( BxOpcodeGroup_ERR ),
  /* CB  */ ( BxOpcodeGroup_ERR ),
  /* CC  */ ( BxOpcodeGroup_XOP_0x8_CC ),
  /* CD  */ ( BxOpcodeGroup_XOP_0x8_CD ),
  /* CE  */ ( BxOpcodeGroup_XOP_0x8_CE ),
  /* CF  */ ( BxOpcodeGroup_XOP_0x8_CF ),
  /* D0  */ ( BxOpcodeGroup_ERR ),
  /* D1  */ ( BxOpcodeGroup_ERR ),
  /* D2  */ ( BxOpcodeGroup_ERR ),
  /* D3  */ ( BxOpcodeGroup_ERR ),
  /* D4  */ ( BxOpcodeGroup_ERR ),
  /* D5  */ ( BxOpcodeGroup_ERR ),
  /* D6  */ ( BxOpcodeGroup_ERR ),
  /* D7  */ ( BxOpcodeGroup_ERR ),
  /* D8  */ ( BxOpcodeGroup_ERR ),
  /* D9  */ ( BxOpcodeGroup_ERR ),
  /* DA  */ ( BxOpcodeGroup_ERR ),
  /* DB  */ ( BxOpcodeGroup_ERR ),
  /* DC  */ ( BxOpcodeGroup_ERR ),
  /* DD  */ ( BxOpcodeGroup_ERR ),
  /* DE  */ ( BxOpcodeGroup_ERR ),
  /* DF  */ ( BxOpcodeGroup_ERR ),
  /* E0  */ ( BxOpcodeGroup_ERR ),
  /* E1  */ ( BxOpcodeGroup_ERR ),
  /* E2  */ ( BxOpcodeGroup_ERR ),
  /* E3  */ ( BxOpcodeGroup_ERR ),
  /* E4  */ ( BxOpcodeGroup_ERR ),
  /* E5  */ ( BxOpcodeGroup_ERR ),
  /* E6  */ ( BxOpcodeGroup_ERR ),
  /* E7  */ ( BxOpcodeGroup_ERR ),
  /* E8  */ ( BxOpcodeGroup_ERR ),
  /* E9  */ ( BxOpcodeGroup_ERR ),
  /* EA  */ ( BxOpcodeGroup_ERR ),
  /* EB  */ ( BxOpcodeGroup_ERR ),
  /* EC  */ ( BxOpcodeGroup_XOP_0x8_EC ),
  /* ED  */ ( BxOpcodeGroup_XOP_0x8_ED ),
  /* EE  */ ( BxOpcodeGroup_XOP_0x8_EE ),
  /* EF  */ ( BxOpcodeGroup_XOP_0x8_EF ),
  /* F0  */ ( BxOpcodeGroup_ERR ),
  /* F1  */ ( BxOpcodeGroup_ERR ),
  /* F2  */ ( BxOpcodeGroup_ERR ),
  /* F3  */ ( BxOpcodeGroup_ERR ),
  /* F4  */ ( BxOpcodeGroup_ERR ),
  /* F5  */ ( BxOpcodeGroup_ERR ),
  /* F6  */ ( BxOpcodeGroup_ERR ),
  /* F7  */ ( BxOpcodeGroup_ERR ),
  /* F8  */ ( BxOpcodeGroup_ERR ),
  /* F9  */ ( BxOpcodeGroup_ERR ),
  /* FA  */ ( BxOpcodeGroup_ERR ),
  /* FB  */ ( BxOpcodeGroup_ERR ),
  /* FC  */ ( BxOpcodeGroup_ERR ),
  /* FD  */ ( BxOpcodeGroup_ERR ),
  /* FE  */ ( BxOpcodeGroup_ERR ),
  /* FF  */ ( BxOpcodeGroup_ERR ),

  // 256 entries for XOP-encoded map 0x9 opcodes
  /* 00  */ ( BxOpcodeGroup_ERR ),
  /* 01  */ ( BxOpcodeGroup_ERR ),
  /* 02  */ ( BxOpcodeGroup_ERR ),
  /* 03  */ ( BxOpcodeGroup_ERR ),
  /* 04  */ ( BxOpcodeGroup_ERR ),
  /* 05  */ ( BxOpcodeGroup_ERR ),
  /* 06  */ ( BxOpcodeGroup_ERR ),
  /* 07  */ ( BxOpcodeGroup_ERR ),
  /* 08  */ ( BxOpcodeGroup_ERR ),
  /* 09  */ ( BxOpcodeGroup_ERR ),
  /* 0A  */ ( BxOpcodeGroup_ERR ),
  /* 0B  */ ( BxOpcodeGroup_ERR ),
  /* 0C  */ ( BxOpcodeGroup_ERR ),
  /* 0D  */ ( BxOpcodeGroup_ERR ),
  /* 0E  */ ( BxOpcodeGroup_ERR ),
  /* 0F  */ ( BxOpcodeGroup_ERR ),
  /* 10  */ ( BxOpcodeGroup_ERR ),
  /* 11  */ ( BxOpcodeGroup_ERR ),
  /* 12  */ ( BxOpcodeGroup_ERR ),
  /* 13  */ ( BxOpcodeGroup_ERR ),
  /* 14  */ ( BxOpcodeGroup_ERR ),
  /* 15  */ ( BxOpcodeGroup_ERR ),
  /* 16  */ ( BxOpcodeGroup_ERR ),
  /* 17  */ ( BxOpcodeGroup_ERR ),
  /* 18  */ ( BxOpcodeGroup_ERR ),
  /* 19  */ ( BxOpcodeGroup_ERR ),
  /* 1A  */ ( BxOpcodeGroup_ERR ),
  /* 1B  */ ( BxOpcodeGroup_ERR ),
  /* 1C  */ ( BxOpcodeGroup_ERR ),
  /* 1D  */ ( BxOpcodeGroup_ERR ),
  /* 1E  */ ( BxOpcodeGroup_ERR ),
  /* 1F  */ ( BxOpcodeGroup_ERR ),
  /* 20  */ ( BxOpcodeGroup_ERR ),
  /* 21  */ ( BxOpcodeGroup_ERR ),
  /* 22  */ ( BxOpcodeGroup_ERR ),
  /* 23  */ ( BxOpcodeGroup_ERR ),
  /* 24  */ ( BxOpcodeGroup_ERR ),
  /* 25  */ ( BxOpcodeGroup_ERR ),
  /* 26  */ ( BxOpcodeGroup_ERR ),
  /* 27  */ ( BxOpcodeGroup_ERR ),
  /* 28  */ ( BxOpcodeGroup_ERR ),
  /* 29  */ ( BxOpcodeGroup_ERR ),
  /* 2A  */ ( BxOpcodeGroup_ERR ),
  /* 2B  */ ( BxOpcodeGroup_ERR ),
  /* 2C  */ ( BxOpcodeGroup_ERR ),
  /* 2D  */ ( BxOpcodeGroup_ERR ),
  /* 2E  */ ( BxOpcodeGroup_ERR ),
  /* 2F  */ ( BxOpcodeGroup_ERR ),
  /* 30  */ ( BxOpcodeGroup_ERR ),
  /* 31  */ ( BxOpcodeGroup_ERR ),
  /* 32  */ ( BxOpcodeGroup_ERR ),
  /* 33  */ ( BxOpcodeGroup_ERR ),
  /* 34  */ ( BxOpcodeGroup_ERR ),
  /* 35  */ ( BxOpcodeGroup_ERR ),
  /* 36  */ ( BxOpcodeGroup_ERR ),
  /* 37  */ ( BxOpcodeGroup_ERR ),
  /* 38  */ ( BxOpcodeGroup_ERR ),
  /* 39  */ ( BxOpcodeGroup_ERR ),
  /* 3A  */ ( BxOpcodeGroup_ERR ),
  /* 3B  */ ( BxOpcodeGroup_ERR ),
  /* 3C  */ ( BxOpcodeGroup_ERR ),
  /* 3D  */ ( BxOpcodeGroup_ERR ),
  /* 3E  */ ( BxOpcodeGroup_ERR ),
  /* 3F  */ ( BxOpcodeGroup_ERR ),
  /* 40  */ ( BxOpcodeGroup_ERR ),
  /* 41  */ ( BxOpcodeGroup_ERR ),
  /* 42  */ ( BxOpcodeGroup_ERR ),
  /* 43  */ ( BxOpcodeGroup_ERR ),
  /* 44  */ ( BxOpcodeGroup_ERR ),
  /* 45  */ ( BxOpcodeGroup_ERR ),
  /* 46  */ ( BxOpcodeGroup_ERR ),
  /* 47  */ ( BxOpcodeGroup_ERR ),
  /* 48  */ ( BxOpcodeGroup_ERR ),
  /* 49  */ ( BxOpcodeGroup_ERR ),
  /* 4A  */ ( BxOpcodeGroup_ERR ),
  /* 4B  */ ( BxOpcodeGroup_ERR ),
  /* 4C  */ ( BxOpcodeGroup_ERR ),
  /* 4D  */ ( BxOpcodeGroup_ERR ),
  /* 4E  */ ( BxOpcodeGroup_ERR ),
  /* 4F  */ ( BxOpcodeGroup_ERR ),
  /* 50  */ ( BxOpcodeGroup_ERR ),
  /* 51  */ ( BxOpcodeGroup_ERR ),
  /* 52  */ ( BxOpcodeGroup_ERR ),
  /* 53  */ ( BxOpcodeGroup_ERR ),
  /* 54  */ ( BxOpcodeGroup_ERR ),
  /* 55  */ ( BxOpcodeGroup_ERR ),
  /* 56  */ ( BxOpcodeGroup_ERR ),
  /* 57  */ ( BxOpcodeGroup_ERR ),
  /* 58  */ ( BxOpcodeGroup_ERR ),
  /* 59  */ ( BxOpcodeGroup_ERR ),
  /* 5A  */ ( BxOpcodeGroup_ERR ),
  /* 5B  */ ( BxOpcodeGroup_ERR ),
  /* 5C  */ ( BxOpcodeGroup_ERR ),
  /* 5D  */ ( BxOpcodeGroup_ERR ),
  /* 5E  */ ( BxOpcodeGroup_ERR ),
  /* 5F  */ ( BxOpcodeGroup_ERR ),
  /* 60  */ ( BxOpcodeGroup_ERR ),
  /* 61  */ ( BxOpcodeGroup_ERR ),
  /* 62  */ ( BxOpcodeGroup_ERR ),
  /* 63  */ ( BxOpcodeGroup_ERR ),
  /* 64  */ ( BxOpcodeGroup_ERR ),
  /* 65  */ ( BxOpcodeGroup_ERR ),
  /* 66  */ ( BxOpcodeGroup_ERR ),
  /* 67  */ ( BxOpcodeGroup_ERR ),
  /* 68  */ ( BxOpcodeGroup_ERR ),
  /* 69  */ ( BxOpcodeGroup_ERR ),
  /* 6A  */ ( BxOpcodeGroup_ERR ),
  /* 6B  */ ( BxOpcodeGroup_ERR ),
  /* 6C  */ ( BxOpcodeGroup_ERR ),
  /* 6D  */ ( BxOpcodeGroup_ERR ),
  /* 6E  */ ( BxOpcodeGroup_ERR ),
  /* 6F  */ ( BxOpcodeGroup_ERR ),
  /* 70  */ ( BxOpcodeGroup_ERR ),
  /* 71  */ ( BxOpcodeGroup_ERR ),
  /* 72  */ ( BxOpcodeGroup_ERR ),
  /* 73  */ ( BxOpcodeGroup_ERR ),
  /* 74  */ ( BxOpcodeGroup_ERR ),
  /* 75  */ ( BxOpcodeGroup_ERR ),
  /* 76  */ ( BxOpcodeGroup_ERR ),
  /* 77  */ ( BxOpcodeGroup_ERR ),
  /* 78  */ ( BxOpcodeGroup_ERR ),
  /* 79  */ ( BxOpcodeGroup_ERR ),
  /* 7A  */ ( BxOpcodeGroup_ERR ),
  /* 7B  */ ( BxOpcodeGroup_ERR ),
  /* 7C  */ ( BxOpcodeGroup_ERR ),
  /* 7D  */ ( BxOpcodeGroup_ERR ),
  /* 7E  */ ( BxOpcodeGroup_ERR ),
  /* 7F  */ ( BxOpcodeGroup_ERR ),
  /* 80  */ ( BxOpcodeGroup_XOP_0x9_80 ),
  /* 81  */ ( BxOpcodeGroup_XOP_0x9_81 ),
  /* 82  */ ( BxOpcodeGroup_XOP_0x9_82 ),
  /* 83  */ ( BxOpcodeGroup_XOP_0x9_83 ),
  /* 84  */ ( BxOpcodeGroup_ERR ),
  /* 85  */ ( BxOpcodeGroup_ERR ),
  /* 86  */ ( BxOpcodeGroup_ERR ),
  /* 87  */ ( BxOpcodeGroup_ERR ),
  /* 88  */ ( BxOpcodeGroup_XOP_0x9_88 ),
  /* 89  */ ( BxOpcodeGroup_XOP_0x9_89 ),
  /* 8A  */ ( BxOpcodeGroup_XOP_0x9_8A ),
  /* 8B  */ ( BxOpcodeGroup_XOP_0x9_8B ),
  /* 8C  */ ( BxOpcodeGroup_ERR ),
  /* 8D  */ ( BxOpcodeGroup_ERR ),
  /* 8E  */ ( BxOpcodeGroup_ERR ),
  /* 8F  */ ( BxOpcodeGroup_ERR ),
  /* 90  */ ( BxOpcodeGroup_XOP_0x9_90 ),
  /* 91  */ ( BxOpcodeGroup_XOP_0x9_91 ),
  /* 92  */ ( BxOpcodeGroup_XOP_0x9_92 ),
  /* 93  */ ( BxOpcodeGroup_XOP_0x9_93 ),
  /* 94  */ ( BxOpcodeGroup_XOP_0x9_94 ),
  /* 95  */ ( BxOpcodeGroup_XOP_0x9_95 ),
  /* 96  */ ( BxOpcodeGroup_XOP_0x9_96 ),
  /* 97  */ ( BxOpcodeGroup_XOP_0x9_97 ),
  /* 98  */ ( BxOpcodeGroup_ERR ),
  /* 99  */ ( BxOpcodeGroup_ERR ),
  /* 9A  */ ( BxOpcodeGroup_ERR ),
  /* 9B  */ ( BxOpcodeGroup_ERR ),
  /* 9C  */ ( BxOpcodeGroup_ERR ),
  /* 9D  */ ( BxOpcodeGroup_ERR ),
  /* 9E  */ ( BxOpcodeGroup_ERR ),
  /* 9F  */ ( BxOpcodeGroup_ERR ),
  /* A0  */ ( BxOpcodeGroup_ERR ),
  /* A1  */ ( BxOpcodeGroup_ERR ),
  /* A2  */ ( BxOpcodeGroup_ERR ),
  /* A3  */ ( BxOpcodeGroup_ERR ),
  /* A4  */ ( BxOpcodeGroup_ERR ),
  /* A5  */ ( BxOpcodeGroup_ERR ),
  /* A6  */ ( BxOpcodeGroup_ERR ),
  /* A7  */ ( BxOpcodeGroup_ERR ),
  /* A8  */ ( BxOpcodeGroup_ERR ),
  /* A9  */ ( BxOpcodeGroup_ERR ),
  /* AA  */ ( BxOpcodeGroup_ERR ),
  /* AB  */ ( BxOpcodeGroup_ERR ),
  /* AC  */ ( BxOpcodeGroup_ERR ),
  /* AD  */ ( BxOpcodeGroup_ERR ),
  /* AE  */ ( BxOpcodeGroup_ERR ),
  /* AF  */ ( BxOpcodeGroup_ERR ),
  /* B0  */ ( BxOpcodeGroup_ERR ),
  /* B1  */ ( BxOpcodeGroup_ERR ),
  /* B2  */ ( BxOpcodeGroup_ERR ),
  /* B3  */ ( BxOpcodeGroup_ERR ),
  /* B4  */ ( BxOpcodeGroup_ERR ),
  /* B5  */ ( BxOpcodeGroup_ERR ),
  /* B6  */ ( BxOpcodeGroup_ERR ),
  /* B7  */ ( BxOpcodeGroup_ERR ),
  /* B8  */ ( BxOpcodeGroup_ERR ),
  /* B9  */ ( BxOpcodeGroup_ERR ),
  /* BA  */ ( BxOpcodeGroup_ERR ),
  /* BB  */ ( BxOpcodeGroup_ERR ),
  /* BC  */ ( BxOpcodeGroup_ERR ),
  /* BD  */ ( BxOpcodeGroup_ERR ),
  /* BE  */ ( BxOpcodeGroup_ERR ),
  /* BF  */ ( BxOpcodeGroup_ERR ),
  /* C0  */ ( BxOpcodeGroup_ERR ),
  /* C1  */ ( BxOpcodeGroup_XOP_0x9_C1 ),
  /* C2  */ ( BxOpcodeGroup_XOP_0x9_C2 ),
  /* C3  */ ( BxOpcodeGroup_XOP_0x9_C3 ),
  /* C4  */ ( BxOpcodeGroup_ERR ),
  /* C5  */ ( BxOpcodeGroup_ERR ),
  /* C6  */ ( BxOpcodeGroup_XOP_0x9_C6 ),
  /* C7  */ ( BxOpcodeGroup_XOP_0x9_C7 ),
  /* C8  */ ( BxOpcodeGroup_ERR ),
  /* C9  */ ( BxOpcodeGroup_ERR ),
  /* CA  */ ( BxOpcodeGroup_ERR ),
  /* CB  */ ( BxOpcodeGroup_XOP_0x9_CB ),
  /* CC  */ ( BxOpcodeGroup_ERR ),
  /* CD  */ ( BxOpcodeGroup_ERR ),
  /* CE  */ ( BxOpcodeGroup_ERR ),
  /* CF  */ ( BxOpcodeGroup_ERR ),
  /* D0  */ ( BxOpcodeGroup_ERR ),
  /* D1  */ ( BxOpcodeGroup_XOP_0x9_D1 ),
  /* D2  */ ( BxOpcodeGroup_XOP_0x9_D2 ),
  /* D3  */ ( BxOpcodeGroup_XOP_0x9_D3 ),
  /* D4  */ ( BxOpcodeGroup_ERR ),
  /* D5  */ ( BxOpcodeGroup_ERR ),
  /* D6  */ ( BxOpcodeGroup_XOP_0x9_D6 ),
  /* D7  */ ( BxOpcodeGroup_XOP_0x9_D7 ),
  /* D8  */ ( BxOpcodeGroup_ERR ),
  /* D9  */ ( BxOpcodeGroup_ERR ),
  /* DA  */ ( BxOpcodeGroup_ERR ),
  /* DB  */ ( BxOpcodeGroup_XOP_0x9_DB ),
  /* DC  */ ( BxOpcodeGroup_ERR ),
  /* DD  */ ( BxOpcodeGroup_ERR ),
  /* DF  */ ( BxOpcodeGroup_ERR ),
  /* DE  */ ( BxOpcodeGroup_ERR ),
  /* E0  */ ( BxOpcodeGroup_ERR ),
  /* E1  */ ( BxOpcodeGroup_XOP_0x9_E1 ),
  /* E2  */ ( BxOpcodeGroup_XOP_0x9_E2 ),
  /* E3  */ ( BxOpcodeGroup_XOP_0x9_E3 ),
  /* E4  */ ( BxOpcodeGroup_ERR ),
  /* E5  */ ( BxOpcodeGroup_ERR ),
  /* E6  */ ( BxOpcodeGroup_ERR ),
  /* E7  */ ( BxOpcodeGroup_ERR ),
  /* E8  */ ( BxOpcodeGroup_ERR ),
  /* E9  */ ( BxOpcodeGroup_ERR ),
  /* EA  */ ( BxOpcodeGroup_ERR ),
  /* EB  */ ( BxOpcodeGroup_ERR ),
  /* EC  */ ( BxOpcodeGroup_ERR ),
  /* ED  */ ( BxOpcodeGroup_ERR ),
  /* EE  */ ( BxOpcodeGroup_ERR ),
  /* EF  */ ( BxOpcodeGroup_ERR ),
  /* F0  */ ( BxOpcodeGroup_ERR ),
  /* F1  */ ( BxOpcodeGroup_ERR ),
  /* F2  */ ( BxOpcodeGroup_ERR ),
  /* F3  */ ( BxOpcodeGroup_ERR ),
  /* F4  */ ( BxOpcodeGroup_ERR ),
  /* F5  */ ( BxOpcodeGroup_ERR ),
  /* F6  */ ( BxOpcodeGroup_ERR ),
  /* F7  */ ( BxOpcodeGroup_ERR ),
  /* F8  */ ( BxOpcodeGroup_ERR ),
  /* F9  */ ( BxOpcodeGroup_ERR ),
  /* FA  */ ( BxOpcodeGroup_ERR ),
  /* FB  */ ( BxOpcodeGroup_ERR ),
  /* FC  */ ( BxOpcodeGroup_ERR ),
  /* FD  */ ( BxOpcodeGroup_ERR ),
  /* FE  */ ( BxOpcodeGroup_ERR ),
  /* FF  */ ( BxOpcodeGroup_ERR ),

  // 256 entries for XOP-encoded map 0xA opcodes
  /* 00  */ ( BxOpcodeGroup_ERR ),
  /* 01  */ ( BxOpcodeGroup_ERR ),
  /* 02  */ ( BxOpcodeGroup_ERR ),
  /* 03  */ ( BxOpcodeGroup_ERR ),
  /* 04  */ ( BxOpcodeGroup_ERR ),
  /* 05  */ ( BxOpcodeGroup_ERR ),
  /* 06  */ ( BxOpcodeGroup_ERR ),
  /* 07  */ ( BxOpcodeGroup_ERR ),
  /* 08  */ ( BxOpcodeGroup_ERR ),
  /* 09  */ ( BxOpcodeGroup_ERR ),
  /* 0A  */ ( BxOpcodeGroup_ERR ),
  /* 0B  */ ( BxOpcodeGroup_ERR ),
  /* 0C  */ ( BxOpcodeGroup_ERR ),
  /* 0D  */ ( BxOpcodeGroup_ERR ),
  /* 0E  */ ( BxOpcodeGroup_ERR ),
  /* 0F  */ ( BxOpcodeGroup_ERR ),
  /* 10  */ ( BxOpcodeGroup_XOP_0xA_10 ),
  /* 11  */ ( BxOpcodeGroup_ERR ),
  /* 12  */ ( BxOpcodeGroup_ERR ),
  /* 13  */ ( BxOpcodeGroup_ERR ),
  /* 14  */ ( BxOpcodeGroup_ERR ),
  /* 15  */ ( BxOpcodeGroup_ERR ),
  /* 16  */ ( BxOpcodeGroup_ERR ),
  /* 17  */ ( BxOpcodeGroup_ERR ),
  /* 18  */ ( BxOpcodeGroup_ERR ),
  /* 19  */ ( BxOpcodeGroup_ERR ),
  /* 1A  */ ( BxOpcodeGroup_ERR ),
  /* 1B  */ ( BxOpcodeGroup_ERR ),
  /* 1C  */ ( BxOpcodeGroup_ERR ),
  /* 1D  */ ( BxOpcodeGroup_ERR ),
  /* 1E  */ ( BxOpcodeGroup_ERR ),
  /* 1F  */ ( BxOpcodeGroup_ERR ),
  /* 20  */ ( BxOpcodeGroup_ERR ),
  /* 21  */ ( BxOpcodeGroup_ERR ),
  /* 22  */ ( BxOpcodeGroup_ERR ),
  /* 23  */ ( BxOpcodeGroup_ERR ),
  /* 24  */ ( BxOpcodeGroup_ERR ),
  /* 25  */ ( BxOpcodeGroup_ERR ),
  /* 26  */ ( BxOpcodeGroup_ERR ),
  /* 27  */ ( BxOpcodeGroup_ERR ),
  /* 28  */ ( BxOpcodeGroup_ERR ),
  /* 29  */ ( BxOpcodeGroup_ERR ),
  /* 2A  */ ( BxOpcodeGroup_ERR ),
  /* 2B  */ ( BxOpcodeGroup_ERR ),
  /* 2C  */ ( BxOpcodeGroup_ERR ),
  /* 2D  */ ( BxOpcodeGroup_ERR ),
  /* 2E  */ ( BxOpcodeGroup_ERR ),
  /* 2F  */ ( BxOpcodeGroup_ERR ),
  /* 30  */ ( BxOpcodeGroup_ERR ),
  /* 31  */ ( BxOpcodeGroup_ERR ),
  /* 32  */ ( BxOpcodeGroup_ERR ),
  /* 33  */ ( BxOpcodeGroup_ERR ),
  /* 34  */ ( BxOpcodeGroup_ERR ),
  /* 35  */ ( BxOpcodeGroup_ERR ),
  /* 36  */ ( BxOpcodeGroup_ERR ),
  /* 37  */ ( BxOpcodeGroup_ERR ),
  /* 38  */ ( BxOpcodeGroup_ERR ),
  /* 39  */ ( BxOpcodeGroup_ERR ),
  /* 3A  */ ( BxOpcodeGroup_ERR ),
  /* 3B  */ ( BxOpcodeGroup_ERR ),
  /* 3C  */ ( BxOpcodeGroup_ERR ),
  /* 3D  */ ( BxOpcodeGroup_ERR ),
  /* 3E  */ ( BxOpcodeGroup_ERR ),
  /* 3F  */ ( BxOpcodeGroup_ERR ),
  /* 40  */ ( BxOpcodeGroup_ERR ),
  /* 41  */ ( BxOpcodeGroup_ERR ),
  /* 42  */ ( BxOpcodeGroup_ERR ),
  /* 43  */ ( BxOpcodeGroup_ERR ),
  /* 44  */ ( BxOpcodeGroup_ERR ),
  /* 45  */ ( BxOpcodeGroup_ERR ),
  /* 46  */ ( BxOpcodeGroup_ERR ),
  /* 47  */ ( BxOpcodeGroup_ERR ),
  /* 48  */ ( BxOpcodeGroup_ERR ),
  /* 49  */ ( BxOpcodeGroup_ERR ),
  /* 4A  */ ( BxOpcodeGroup_ERR ),
  /* 4B  */ ( BxOpcodeGroup_ERR ),
  /* 4C  */ ( BxOpcodeGroup_ERR ),
  /* 4D  */ ( BxOpcodeGroup_ERR ),
  /* 4E  */ ( BxOpcodeGroup_ERR ),
  /* 4F  */ ( BxOpcodeGroup_ERR ),
  /* 50  */ ( BxOpcodeGroup_ERR ),
  /* 51  */ ( BxOpcodeGroup_ERR ),
  /* 52  */ ( BxOpcodeGroup_ERR ),
  /* 53  */ ( BxOpcodeGroup_ERR ),
  /* 54  */ ( BxOpcodeGroup_ERR ),
  /* 55  */ ( BxOpcodeGroup_ERR ),
  /* 56  */ ( BxOpcodeGroup_ERR ),
  /* 57  */ ( BxOpcodeGroup_ERR ),
  /* 58  */ ( BxOpcodeGroup_ERR ),
  /* 59  */ ( BxOpcodeGroup_ERR ),
  /* 5A  */ ( BxOpcodeGroup_ERR ),
  /* 5B  */ ( BxOpcodeGroup_ERR ),
  /* 5C  */ ( BxOpcodeGroup_ERR ),
  /* 5D  */ ( BxOpcodeGroup_ERR ),
  /* 5E  */ ( BxOpcodeGroup_ERR ),
  /* 5F  */ ( BxOpcodeGroup_ERR ),
  /* 60  */ ( BxOpcodeGroup_ERR ),
  /* 61  */ ( BxOpcodeGroup_ERR ),
  /* 62  */ ( BxOpcodeGroup_ERR ),
  /* 63  */ ( BxOpcodeGroup_ERR ),
  /* 64  */ ( BxOpcodeGroup_ERR ),
  /* 65  */ ( BxOpcodeGroup_ERR ),
  /* 66  */ ( BxOpcodeGroup_ERR ),
  /* 67  */ ( BxOpcodeGroup_ERR ),
  /* 68  */ ( BxOpcodeGroup_ERR ),
  /* 69  */ ( BxOpcodeGroup_ERR ),
  /* 6A  */ ( BxOpcodeGroup_ERR ),
  /* 6B  */ ( BxOpcodeGroup_ERR ),
  /* 6C  */ ( BxOpcodeGroup_ERR ),
  /* 6D  */ ( BxOpcodeGroup_ERR ),
  /* 6E  */ ( BxOpcodeGroup_ERR ),
  /* 6F  */ ( BxOpcodeGroup_ERR ),
  /* 70  */ ( BxOpcodeGroup_ERR ),
  /* 71  */ ( BxOpcodeGroup_ERR ),
  /* 72  */ ( BxOpcodeGroup_ERR ),
  /* 73  */ ( BxOpcodeGroup_ERR ),
  /* 74  */ ( BxOpcodeGroup_ERR ),
  /* 75  */ ( BxOpcodeGroup_ERR ),
  /* 76  */ ( BxOpcodeGroup_ERR ),
  /* 77  */ ( BxOpcodeGroup_ERR ),
  /* 78  */ ( BxOpcodeGroup_ERR ),
  /* 79  */ ( BxOpcodeGroup_ERR ),
  /* 7A  */ ( BxOpcodeGroup_ERR ),
  /* 7B  */ ( BxOpcodeGroup_ERR ),
  /* 7C  */ ( BxOpcodeGroup_ERR ),
  /* 7D  */ ( BxOpcodeGroup_ERR ),
  /* 7E  */ ( BxOpcodeGroup_ERR ),
  /* 7F  */ ( BxOpcodeGroup_ERR ),
  /* 80  */ ( BxOpcodeGroup_ERR ),
  /* 81  */ ( BxOpcodeGroup_ERR ),
  /* 82  */ ( BxOpcodeGroup_ERR ),
  /* 83  */ ( BxOpcodeGroup_ERR ),
  /* 84  */ ( BxOpcodeGroup_ERR ),
  /* 85  */ ( BxOpcodeGroup_ERR ),
  /* 86  */ ( BxOpcodeGroup_ERR ),
  /* 87  */ ( BxOpcodeGroup_ERR ),
  /* 88  */ ( BxOpcodeGroup_ERR ),
  /* 89  */ ( BxOpcodeGroup_ERR ),
  /* 8A  */ ( BxOpcodeGroup_ERR ),
  /* 8B  */ ( BxOpcodeGroup_ERR ),
  /* 8C  */ ( BxOpcodeGroup_ERR ),
  /* 8D  */ ( BxOpcodeGroup_ERR ),
  /* 8E  */ ( BxOpcodeGroup_ERR ),
  /* 8F  */ ( BxOpcodeGroup_ERR ),
  /* 90  */ ( BxOpcodeGroup_ERR ),
  /* 91  */ ( BxOpcodeGroup_ERR ),
  /* 92  */ ( BxOpcodeGroup_ERR ),
  /* 93  */ ( BxOpcodeGroup_ERR ),
  /* 94  */ ( BxOpcodeGroup_ERR ),
  /* 95  */ ( BxOpcodeGroup_ERR ),
  /* 96  */ ( BxOpcodeGroup_ERR ),
  /* 97  */ ( BxOpcodeGroup_ERR ),
  /* 98  */ ( BxOpcodeGroup_ERR ),
  /* 99  */ ( BxOpcodeGroup_ERR ),
  /* 9A  */ ( BxOpcodeGroup_ERR ),
  /* 9B  */ ( BxOpcodeGroup_ERR ),
  /* 9C  */ ( BxOpcodeGroup_ERR ),
  /* 9D  */ ( BxOpcodeGroup_ERR ),
  /* 9E  */ ( BxOpcodeGroup_ERR ),
  /* 9F  */ ( BxOpcodeGroup_ERR ),
  /* A0  */ ( BxOpcodeGroup_ERR ),
  /* A1  */ ( BxOpcodeGroup_ERR ),
  /* A2  */ ( BxOpcodeGroup_ERR ),
  /* A3  */ ( BxOpcodeGroup_ERR ),
  /* A4  */ ( BxOpcodeGroup_ERR ),
  /* A5  */ ( BxOpcodeGroup_ERR ),
  /* A6  */ ( BxOpcodeGroup_ERR ),
  /* A7  */ ( BxOpcodeGroup_ERR ),
  /* A8  */ ( BxOpcodeGroup_ERR ),
  /* A9  */ ( BxOpcodeGroup_ERR ),
  /* AA  */ ( BxOpcodeGroup_ERR ),
  /* AB  */ ( BxOpcodeGroup_ERR ),
  /* AC  */ ( BxOpcodeGroup_ERR ),
  /* AD  */ ( BxOpcodeGroup_ERR ),
  /* AE  */ ( BxOpcodeGroup_ERR ),
  /* AF  */ ( BxOpcodeGroup_ERR ),
  /* B0  */ ( BxOpcodeGroup_ERR ),
  /* B1  */ ( BxOpcodeGroup_ERR ),
  /* B2  */ ( BxOpcodeGroup_ERR ),
  /* B3  */ ( BxOpcodeGroup_ERR ),
  /* B4  */ ( BxOpcodeGroup_ERR ),
  /* B5  */ ( BxOpcodeGroup_ERR ),
  /* B6  */ ( BxOpcodeGroup_ERR ),
  /* B7  */ ( BxOpcodeGroup_ERR ),
  /* B8  */ ( BxOpcodeGroup_ERR ),
  /* B9  */ ( BxOpcodeGroup_ERR ),
  /* BA  */ ( BxOpcodeGroup_ERR ),
  /* BB  */ ( BxOpcodeGroup_ERR ),
  /* BC  */ ( BxOpcodeGroup_ERR ),
  /* BD  */ ( BxOpcodeGroup_ERR ),
  /* BE  */ ( BxOpcodeGroup_ERR ),
  /* BF  */ ( BxOpcodeGroup_ERR ),
  /* C0  */ ( BxOpcodeGroup_ERR ),
  /* C1  */ ( BxOpcodeGroup_ERR ),
  /* C2  */ ( BxOpcodeGroup_ERR ),
  /* C3  */ ( BxOpcodeGroup_ERR ),
  /* C4  */ ( BxOpcodeGroup_ERR ),
  /* C5  */ ( BxOpcodeGroup_ERR ),
  /* C6  */ ( BxOpcodeGroup_ERR ),
  /* C7  */ ( BxOpcodeGroup_ERR ),
  /* C8  */ ( BxOpcodeGroup_ERR ),
  /* C9  */ ( BxOpcodeGroup_ERR ),
  /* CA  */ ( BxOpcodeGroup_ERR ),
  /* CB  */ ( BxOpcodeGroup_ERR ),
  /* CC  */ ( BxOpcodeGroup_ERR ),
  /* CD  */ ( BxOpcodeGroup_ERR ),
  /* CE  */ ( BxOpcodeGroup_ERR ),
  /* CF  */ ( BxOpcodeGroup_ERR ),
  /* D0  */ ( BxOpcodeGroup_ERR ),
  /* D1  */ ( BxOpcodeGroup_ERR ),
  /* D2  */ ( BxOpcodeGroup_ERR ),
  /* D3  */ ( BxOpcodeGroup_ERR ),
  /* D4  */ ( BxOpcodeGroup_ERR ),
  /* D5  */ ( BxOpcodeGroup_ERR ),
  /* D6  */ ( BxOpcodeGroup_ERR ),
  /* D7  */ ( BxOpcodeGroup_ERR ),
  /* D8  */ ( BxOpcodeGroup_ERR ),
  /* D9  */ ( BxOpcodeGroup_ERR ),
  /* DA  */ ( BxOpcodeGroup_ERR ),
  /* DB  */ ( BxOpcodeGroup_ERR ),
  /* DC  */ ( BxOpcodeGroup_ERR ),
  /* DD  */ ( BxOpcodeGroup_ERR ),
  /* DE  */ ( BxOpcodeGroup_ERR ),
  /* DF  */ ( BxOpcodeGroup_ERR ),
  /* E0  */ ( BxOpcodeGroup_ERR ),
  /* E1  */ ( BxOpcodeGroup_ERR ),
  /* E2  */ ( BxOpcodeGroup_ERR ),
  /* E3  */ ( BxOpcodeGroup_ERR ),
  /* E4  */ ( BxOpcodeGroup_ERR ),
  /* E5  */ ( BxOpcodeGroup_ERR ),
  /* E6  */ ( BxOpcodeGroup_ERR ),
  /* E7  */ ( BxOpcodeGroup_ERR ),
  /* E8  */ ( BxOpcodeGroup_ERR ),
  /* E9  */ ( BxOpcodeGroup_ERR ),
  /* EA  */ ( BxOpcodeGroup_ERR ),
  /* EB  */ ( BxOpcodeGroup_ERR ),
  /* EC  */ ( BxOpcodeGroup_ERR ),
  /* ED  */ ( BxOpcodeGroup_ERR ),
  /* EE  */ ( BxOpcodeGroup_ERR ),
  /* EF  */ ( BxOpcodeGroup_ERR ),
  /* F0  */ ( BxOpcodeGroup_ERR ),
  /* F1  */ ( BxOpcodeGroup_ERR ),
  /* F2  */ ( BxOpcodeGroup_ERR ),
  /* F3  */ ( BxOpcodeGroup_ERR ),
  /* F4  */ ( BxOpcodeGroup_ERR ),
  /* F5  */ ( BxOpcodeGroup_ERR ),
  /* F6  */ ( BxOpcodeGroup_ERR ),
  /* F7  */ ( BxOpcodeGroup_ERR ),
  /* F8  */ ( BxOpcodeGroup_ERR ),
  /* F9  */ ( BxOpcodeGroup_ERR ),
  /* FA  */ ( BxOpcodeGroup_ERR ),
  /* FB  */ ( BxOpcodeGroup_ERR ),
  /* FC  */ ( BxOpcodeGroup_ERR ),
  /* FD  */ ( BxOpcodeGroup_ERR ),
  /* FE  */ ( BxOpcodeGroup_ERR ),
  /* FF  */ ( BxOpcodeGroup_ERR )
};

#endif // BX_SUPPORT_AVX
