binutils-gdb/include/opcode/metag.h

2088 lines
85 KiB
C
Raw Normal View History

* common.h: Fix case of "Meta". * metag.h: New file. * dis-asm.h (print_insn_metag): New declaration. * metag.h: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure: Regenerate. * configure.in: Add Meta. * disassemble.c: Add Meta support. * metag-dis.c: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * archures.c (bfd_mach_metag): New. * bfd-in2.h: Regenerate. * config.bfd: Add Meta. * configure: Regenerate. * configure.in: Add Meta. * cpu-metag.c: New file. * elf-bfd.h: Add Meta. * elf32-metag.c: New file. * elf32-metag.h: New file. * libbfd.h: Regenerate. * reloc.c: Add Meta relocations. * targets.c: Add Meta. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * config/tc-metag.c: New file. * config/tc-metag.h: New file. * configure.tgt: Add Meta. * doc/Makefile.am: Add Meta. * doc/Makefile.in: Regenerate. * doc/all.texi: Add Meta. * doc/as.texiinfo: Document Meta options. * doc/c-metag.texi: New file. * gas/metag/labelarithmetic.d: New file. * gas/metag/labelarithmetic.s: New file. * gas/metag/metacore12.d: New file. * gas/metag/metacore12.s: New file. * gas/metag/metacore21-invalid.l: New file. * gas/metag/metacore21-invalid.s: New file. * gas/metag/metacore21.d: New file. * gas/metag/metacore21.s: New file. * gas/metag/metacore21ext.d: New file. * gas/metag/metacore21ext.s: New file. * gas/metag/metadsp21-invalid.l: New file. * gas/metag/metadsp21-invalid.s: New file. * gas/metag/metadsp21.d: New file. * gas/metag/metadsp21.s: New file. * gas/metag/metadsp21ext.d: New file. * gas/metag/metadsp21ext.s: New file. * gas/metag/metafpu21.d: New file. * gas/metag/metafpu21.s: New file. * gas/metag/metafpu21ext.d: New file. * gas/metag/metafpu21ext.s: New file. * gas/metag/metag.exp: New file. * gas/metag/tls.d: New file. * gas/metag/tls.s: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure.tgt: Add Meta. * emulparams/elf32metag.sh: New file. * emultempl/metagelf.em: New file. * ld-elf/merge.d: Mark Meta as xfail. * ld-gc/start.d: Skip this test on Meta. * ld-gc/personality.d: Skip this test on Meta. * ld-metag/external.s: New file. * ld-metag/metag.exp: New file. * ld-metag/pcrel.d: New file. * ld-metag/pcrel.s: New file. * ld-metag/shared.d: New file. * ld-metag/shared.r: New file. * ld-metag/shared.s: New file. * ld-metag/stub.d: New file. * ld-metag/stub.s: New file. * ld-metag/stub_pic_app.d: New file. * ld-metag/stub_pic_app.r: New file. * ld-metag/stub_pic_app.s: New file. * ld-metag/stub_pic_shared.d: New file. * ld-metag/stub_pic_shared.s: New file. * ld-metag/stub_shared.d: New file. * ld-metag/stub_shared.r: New file. * ld-metag/stub_shared.s: New file. * binutils/readelf.c: (guess_is_rela): Add EM_METAG. (dump_relocations): Add EM_METAG. (get_machine_name): Correct case for Meta. (is_32bit_abs_reloc): Add support for Meta ADDR32 reloc. (is_none_reloc): Add support for Meta NONE reloc.
2013-01-10 10:49:22 +01:00
/* Imagination Technologies Meta opcode table.
Copyright (C) 2013-2019 Free Software Foundation, Inc.
* common.h: Fix case of "Meta". * metag.h: New file. * dis-asm.h (print_insn_metag): New declaration. * metag.h: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure: Regenerate. * configure.in: Add Meta. * disassemble.c: Add Meta support. * metag-dis.c: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * archures.c (bfd_mach_metag): New. * bfd-in2.h: Regenerate. * config.bfd: Add Meta. * configure: Regenerate. * configure.in: Add Meta. * cpu-metag.c: New file. * elf-bfd.h: Add Meta. * elf32-metag.c: New file. * elf32-metag.h: New file. * libbfd.h: Regenerate. * reloc.c: Add Meta relocations. * targets.c: Add Meta. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * config/tc-metag.c: New file. * config/tc-metag.h: New file. * configure.tgt: Add Meta. * doc/Makefile.am: Add Meta. * doc/Makefile.in: Regenerate. * doc/all.texi: Add Meta. * doc/as.texiinfo: Document Meta options. * doc/c-metag.texi: New file. * gas/metag/labelarithmetic.d: New file. * gas/metag/labelarithmetic.s: New file. * gas/metag/metacore12.d: New file. * gas/metag/metacore12.s: New file. * gas/metag/metacore21-invalid.l: New file. * gas/metag/metacore21-invalid.s: New file. * gas/metag/metacore21.d: New file. * gas/metag/metacore21.s: New file. * gas/metag/metacore21ext.d: New file. * gas/metag/metacore21ext.s: New file. * gas/metag/metadsp21-invalid.l: New file. * gas/metag/metadsp21-invalid.s: New file. * gas/metag/metadsp21.d: New file. * gas/metag/metadsp21.s: New file. * gas/metag/metadsp21ext.d: New file. * gas/metag/metadsp21ext.s: New file. * gas/metag/metafpu21.d: New file. * gas/metag/metafpu21.s: New file. * gas/metag/metafpu21ext.d: New file. * gas/metag/metafpu21ext.s: New file. * gas/metag/metag.exp: New file. * gas/metag/tls.d: New file. * gas/metag/tls.s: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure.tgt: Add Meta. * emulparams/elf32metag.sh: New file. * emultempl/metagelf.em: New file. * ld-elf/merge.d: Mark Meta as xfail. * ld-gc/start.d: Skip this test on Meta. * ld-gc/personality.d: Skip this test on Meta. * ld-metag/external.s: New file. * ld-metag/metag.exp: New file. * ld-metag/pcrel.d: New file. * ld-metag/pcrel.s: New file. * ld-metag/shared.d: New file. * ld-metag/shared.r: New file. * ld-metag/shared.s: New file. * ld-metag/stub.d: New file. * ld-metag/stub.s: New file. * ld-metag/stub_pic_app.d: New file. * ld-metag/stub_pic_app.r: New file. * ld-metag/stub_pic_app.s: New file. * ld-metag/stub_pic_shared.d: New file. * ld-metag/stub_pic_shared.s: New file. * ld-metag/stub_shared.d: New file. * ld-metag/stub_shared.r: New file. * ld-metag/stub_shared.s: New file. * binutils/readelf.c: (guess_is_rela): Add EM_METAG. (dump_relocations): Add EM_METAG. (get_machine_name): Correct case for Meta. (is_32bit_abs_reloc): Add support for Meta ADDR32 reloc. (is_none_reloc): Add support for Meta NONE reloc.
2013-01-10 10:49:22 +01:00
Contributed by Imagination Technologies Ltd.
This file is part of GDB and GAS.
GDB and GAS are 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.
GDB and GAS are 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 GDB or GAS; see the file COPYING3. If not, write to the
Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
MA 02110-1301, USA. */
#ifdef __cplusplus
extern "C" {
#endif
* common.h: Fix case of "Meta". * metag.h: New file. * dis-asm.h (print_insn_metag): New declaration. * metag.h: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure: Regenerate. * configure.in: Add Meta. * disassemble.c: Add Meta support. * metag-dis.c: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * archures.c (bfd_mach_metag): New. * bfd-in2.h: Regenerate. * config.bfd: Add Meta. * configure: Regenerate. * configure.in: Add Meta. * cpu-metag.c: New file. * elf-bfd.h: Add Meta. * elf32-metag.c: New file. * elf32-metag.h: New file. * libbfd.h: Regenerate. * reloc.c: Add Meta relocations. * targets.c: Add Meta. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * config/tc-metag.c: New file. * config/tc-metag.h: New file. * configure.tgt: Add Meta. * doc/Makefile.am: Add Meta. * doc/Makefile.in: Regenerate. * doc/all.texi: Add Meta. * doc/as.texiinfo: Document Meta options. * doc/c-metag.texi: New file. * gas/metag/labelarithmetic.d: New file. * gas/metag/labelarithmetic.s: New file. * gas/metag/metacore12.d: New file. * gas/metag/metacore12.s: New file. * gas/metag/metacore21-invalid.l: New file. * gas/metag/metacore21-invalid.s: New file. * gas/metag/metacore21.d: New file. * gas/metag/metacore21.s: New file. * gas/metag/metacore21ext.d: New file. * gas/metag/metacore21ext.s: New file. * gas/metag/metadsp21-invalid.l: New file. * gas/metag/metadsp21-invalid.s: New file. * gas/metag/metadsp21.d: New file. * gas/metag/metadsp21.s: New file. * gas/metag/metadsp21ext.d: New file. * gas/metag/metadsp21ext.s: New file. * gas/metag/metafpu21.d: New file. * gas/metag/metafpu21.s: New file. * gas/metag/metafpu21ext.d: New file. * gas/metag/metafpu21ext.s: New file. * gas/metag/metag.exp: New file. * gas/metag/tls.d: New file. * gas/metag/tls.s: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure.tgt: Add Meta. * emulparams/elf32metag.sh: New file. * emultempl/metagelf.em: New file. * ld-elf/merge.d: Mark Meta as xfail. * ld-gc/start.d: Skip this test on Meta. * ld-gc/personality.d: Skip this test on Meta. * ld-metag/external.s: New file. * ld-metag/metag.exp: New file. * ld-metag/pcrel.d: New file. * ld-metag/pcrel.s: New file. * ld-metag/shared.d: New file. * ld-metag/shared.r: New file. * ld-metag/shared.s: New file. * ld-metag/stub.d: New file. * ld-metag/stub.s: New file. * ld-metag/stub_pic_app.d: New file. * ld-metag/stub_pic_app.r: New file. * ld-metag/stub_pic_app.s: New file. * ld-metag/stub_pic_shared.d: New file. * ld-metag/stub_pic_shared.s: New file. * ld-metag/stub_shared.d: New file. * ld-metag/stub_shared.r: New file. * ld-metag/stub_shared.s: New file. * binutils/readelf.c: (guess_is_rela): Add EM_METAG. (dump_relocations): Add EM_METAG. (get_machine_name): Correct case for Meta. (is_32bit_abs_reloc): Add support for Meta ADDR32 reloc. (is_none_reloc): Add support for Meta NONE reloc.
2013-01-10 10:49:22 +01:00
enum metag_unit
{
UNIT_CT,
UNIT_D0,
UNIT_D1,
UNIT_A0,
UNIT_A1,
UNIT_PC,
UNIT_RD,
UNIT_TR,
UNIT_TT,
UNIT_FX,
UNIT_DT, /* DSP Template Table */
UNIT_ACC_D0,
UNIT_ACC_D1,
UNIT_RAM_D0,
UNIT_RAM_D1,
};
typedef struct
{
const char * name;
enum metag_unit unit;
unsigned int no;
} metag_reg;
static const metag_reg metag_regtab[] =
{
{ "TXENABLE", UNIT_CT, 0 },
{ "CT.0", UNIT_CT, 0 },
{ "TXMODE", UNIT_CT, 1 },
{ "CT.1", UNIT_CT, 1 },
{ "TXSTATUS", UNIT_CT, 2 },
{ "CT.2", UNIT_CT, 2 },
{ "TXRPT", UNIT_CT, 3 },
{ "CT.3", UNIT_CT, 3 },
{ "TXTIMER", UNIT_CT, 4 },
{ "CT.4", UNIT_CT, 4 },
{ "TXL1START", UNIT_CT, 5 },
{ "CT.5", UNIT_CT, 5 },
{ "TXL1END", UNIT_CT, 6 },
{ "CT.6", UNIT_CT, 6 },
{ "TXL1COUNT", UNIT_CT, 7 },
{ "CT.7", UNIT_CT, 7 },
{ "TXL2START", UNIT_CT, 8 },
{ "CT.8", UNIT_CT, 8 },
{ "TXL2END", UNIT_CT, 9 },
{ "CT.9", UNIT_CT, 9 },
{ "TXL2COUNT", UNIT_CT, 10 },
{ "CT.10", UNIT_CT, 10 },
{ "TXBPOBITS", UNIT_CT, 11 },
{ "CT.11", UNIT_CT, 11 },
{ "TXMRSIZE", UNIT_CT, 12 },
{ "CT.12", UNIT_CT, 12 },
{ "TXTIMERI", UNIT_CT, 13 },
{ "CT.13", UNIT_CT, 13 },
{ "TXDRCTRL", UNIT_CT, 14 },
{ "CT.14", UNIT_CT, 14 },
{ "TXDRSIZE", UNIT_CT, 15 },
{ "CT.15", UNIT_CT, 15 },
{ "TXCATCH0", UNIT_CT, 16 },
{ "CT.16", UNIT_CT, 16 },
{ "TXCATCH1", UNIT_CT, 17 },
{ "CT.17", UNIT_CT, 17 },
{ "TXCATCH2", UNIT_CT, 18 },
{ "CT.18", UNIT_CT, 18 },
{ "TXCATCH3", UNIT_CT, 19 },
{ "CT.19", UNIT_CT, 19 },
{ "TXDEFR", UNIT_CT, 20 },
{ "CT.20", UNIT_CT, 20 },
{ "TXCPRS", UNIT_CT, 21 },
{ "CT.21", UNIT_CT, 21 },
{ "TXCLKCTRL", UNIT_CT, 22 },
{ "CT.22", UNIT_CT, 22 },
{ "TXINTERN0", UNIT_CT, 23 },
{ "TXSTATE", UNIT_CT, 23 },
{ "CT.23", UNIT_CT, 23 },
{ "TXAMAREG0", UNIT_CT, 24 },
{ "CT.24", UNIT_CT, 24 },
{ "TXAMAREG1", UNIT_CT, 25 },
{ "CT.25", UNIT_CT, 25 },
{ "TXAMAREG2", UNIT_CT, 26 },
{ "CT.26", UNIT_CT, 26 },
{ "TXAMAREG3", UNIT_CT, 27 },
{ "CT.27", UNIT_CT, 27 },
{ "TXDIVTIME", UNIT_CT, 28 },
{ "CT.28", UNIT_CT, 28 },
{ "TXPRIVEXT", UNIT_CT, 29 },
{ "CT.29", UNIT_CT, 29 },
{ "TXTACTCYC", UNIT_CT, 30 },
{ "TXACTCYC", UNIT_CT, 30 },
{ "CT.30", UNIT_CT, 30 },
{ "TXIDLECYC", UNIT_CT, 31 },
{ "CT.31", UNIT_CT, 31 },
{ "D0Re0", UNIT_D0, 0 },
{ "D0.0", UNIT_D0, 0 },
{ "D0Ar6", UNIT_D0, 1 },
{ "D0.1", UNIT_D0, 1 },
{ "D0Ar4", UNIT_D0, 2 },
{ "D0.2", UNIT_D0, 2 },
{ "D0Ar2", UNIT_D0, 3 },
{ "D0.3", UNIT_D0, 3 },
{ "D0FrT", UNIT_D0, 4 },
{ "D0.4", UNIT_D0, 4 },
{ "D0.5", UNIT_D0, 5 },
{ "D0.6", UNIT_D0, 6 },
{ "D0.7", UNIT_D0, 7 },
{ "D0.8", UNIT_D0, 8 },
{ "D0.9", UNIT_D0, 9 },
{ "D0.10", UNIT_D0, 10 },
{ "D0.11", UNIT_D0, 11 },
{ "D0.12", UNIT_D0, 12 },
{ "D0.13", UNIT_D0, 13 },
{ "D0.14", UNIT_D0, 14 },
{ "D0.15", UNIT_D0, 15 },
{ "D0.16", UNIT_D0, 16 },
{ "D0.17", UNIT_D0, 17 },
{ "D0.18", UNIT_D0, 18 },
{ "D0.19", UNIT_D0, 19 },
{ "D0.20", UNIT_D0, 20 },
{ "D0.21", UNIT_D0, 21 },
{ "D0.22", UNIT_D0, 22 },
{ "D0.23", UNIT_D0, 23 },
{ "D0.24", UNIT_D0, 24 },
{ "D0.25", UNIT_D0, 25 },
{ "D0.26", UNIT_D0, 26 },
{ "D0.27", UNIT_D0, 27 },
{ "D0.28", UNIT_D0, 28 },
{ "D0.29", UNIT_D0, 29 },
{ "D0.30", UNIT_D0, 30 },
{ "D0.31", UNIT_D0, 31 },
{ "D1Re0", UNIT_D1, 0 },
{ "D1.0", UNIT_D1, 0 },
{ "D1Ar5", UNIT_D1, 1 },
{ "D1.1", UNIT_D1, 1 },
{ "D1Ar3", UNIT_D1, 2 },
{ "D1.2", UNIT_D1, 2 },
{ "D1Ar1", UNIT_D1, 3 },
{ "D1.3", UNIT_D1, 3 },
{ "D1RtP", UNIT_D1, 4 },
{ "D1.4", UNIT_D1, 4 },
{ "D1.5", UNIT_D1, 5 },
{ "D1.6", UNIT_D1, 6 },
{ "D1.7", UNIT_D1, 7 },
{ "D1.8", UNIT_D1, 8 },
{ "D1.9", UNIT_D1, 9 },
{ "D1.10", UNIT_D1, 10 },
{ "D1.11", UNIT_D1, 11 },
{ "D1.12", UNIT_D1, 12 },
{ "D1.13", UNIT_D1, 13 },
{ "D1.14", UNIT_D1, 14 },
{ "D1.15", UNIT_D1, 15 },
{ "D1.16", UNIT_D1, 16 },
{ "D1.17", UNIT_D1, 17 },
{ "D1.18", UNIT_D1, 18 },
{ "D1.19", UNIT_D1, 19 },
{ "D1.20", UNIT_D1, 20 },
{ "D1.21", UNIT_D1, 21 },
{ "D1.22", UNIT_D1, 22 },
{ "D1.23", UNIT_D1, 23 },
{ "D1.24", UNIT_D1, 24 },
{ "D1.25", UNIT_D1, 25 },
{ "D1.26", UNIT_D1, 26 },
{ "D1.27", UNIT_D1, 27 },
{ "D1.28", UNIT_D1, 28 },
{ "D1.29", UNIT_D1, 29 },
{ "D1.30", UNIT_D1, 30 },
{ "D1.31", UNIT_D1, 31 },
{ "A0StP", UNIT_A0, 0 },
{ "A0.0", UNIT_A0, 0 },
{ "A0FrP", UNIT_A0, 1 },
{ "A0.1", UNIT_A0, 1 },
{ "A0.2", UNIT_A0, 2 },
{ "A0.3", UNIT_A0, 3 },
{ "A0.4", UNIT_A0, 4 },
{ "A0.5", UNIT_A0, 5 },
{ "A0.6", UNIT_A0, 6 },
{ "A0.7", UNIT_A0, 7 },
{ "A0.8", UNIT_A0, 8 },
{ "A0.9", UNIT_A0, 9 },
{ "A0.10", UNIT_A0, 10 },
{ "A0.11", UNIT_A0, 11 },
{ "A0.12", UNIT_A0, 12 },
{ "A0.13", UNIT_A0, 13 },
{ "A0.14", UNIT_A0, 14 },
{ "A0.15", UNIT_A0, 15 },
{ "CPC0", UNIT_A0, 16 },
{ "A1GbP", UNIT_A1, 0 },
{ "A1.0", UNIT_A1, 0 },
{ "A1LbP", UNIT_A1, 1 },
{ "A1.1", UNIT_A1, 1 },
{ "A1.2", UNIT_A1, 2 },
{ "A1.3", UNIT_A1, 3 },
{ "A1.4", UNIT_A1, 4 },
{ "A1.5", UNIT_A1, 5 },
{ "A1.6", UNIT_A1, 6 },
{ "A1.7", UNIT_A1, 7 },
{ "A1.8", UNIT_A1, 8 },
{ "A1.9", UNIT_A1, 9 },
{ "A1.10", UNIT_A1, 10 },
{ "A1.11", UNIT_A1, 11 },
{ "A1.12", UNIT_A1, 12 },
{ "A1.13", UNIT_A1, 13 },
{ "A1.14", UNIT_A1, 14 },
{ "A1.15", UNIT_A1, 15 },
{ "CPC1", UNIT_A1, 16 },
{ "PC", UNIT_PC, 0 },
{ "PCX", UNIT_PC, 1 },
{ "RD", UNIT_RD, 0 },
{ "RA", UNIT_RD, 16 },
{ "RD", UNIT_RD, 16 },
{ "RAPF", UNIT_RD, 17 },
{ "RAM8X32", UNIT_RD, 22 },
{ "RAM8X", UNIT_RD, 23 },
{ "RABZ", UNIT_RD, 24 },
{ "RAWZ", UNIT_RD, 25 },
{ "RADZ", UNIT_RD, 26 },
{ "RABX", UNIT_RD, 28 },
{ "RAWX", UNIT_RD, 29 },
{ "RADX", UNIT_RD, 30 },
{ "RAMX", UNIT_RD, 31 },
{ "RAM16X", UNIT_RD, 31 },
{ "TXSTAT", UNIT_TR, 0 },
{ "TR.0", UNIT_TR, 0 },
{ "TXMASK", UNIT_TR, 1 },
{ "TR.1", UNIT_TR, 1 },
{ "TXSTATI", UNIT_TR, 2 },
{ "TR.2", UNIT_TR, 2 },
{ "TXMASKI", UNIT_TR, 3 },
{ "TR.3", UNIT_TR, 3 },
{ "TXPOLL", UNIT_TR, 4 },
{ "TR.4", UNIT_TR, 4 },
{ "TXGPIOI", UNIT_TR, 5 },
{ "TR.5", UNIT_TR, 5 },
{ "TXPOLLI", UNIT_TR, 6 },
{ "TR.6", UNIT_TR, 6 },
{ "TXGPIOO", UNIT_TR, 7 },
{ "TR.7", UNIT_TR, 7 },
{ "TTEXEC", UNIT_TT, 0 },
{ "TT.0", UNIT_TT, 0 },
{ "TTCTRL", UNIT_TT, 1 },
{ "TT.1", UNIT_TT, 1 },
{ "TTMARK", UNIT_TT, 2 },
{ "TT.2", UNIT_TT, 2 },
{ "TTREC", UNIT_TT, 3 },
{ "TT.3", UNIT_TT, 3 },
{ "GTEXEC", UNIT_TT, 4 },
{ "TT.4", UNIT_TT, 4 },
{ "FX.0", UNIT_FX, 0 },
{ "FX.1", UNIT_FX, 1 },
{ "FX.2", UNIT_FX, 2 },
{ "FX.3", UNIT_FX, 3 },
{ "FX.4", UNIT_FX, 4 },
{ "FX.5", UNIT_FX, 5 },
{ "FX.6", UNIT_FX, 6 },
{ "FX.7", UNIT_FX, 7 },
{ "FX.8", UNIT_FX, 8 },
{ "FX.9", UNIT_FX, 9 },
{ "FX.10", UNIT_FX, 10 },
{ "FX.11", UNIT_FX, 11 },
{ "FX.12", UNIT_FX, 12 },
{ "FX.13", UNIT_FX, 13 },
{ "FX.14", UNIT_FX, 14 },
{ "FX.15", UNIT_FX, 15 },
};
static const metag_reg metag_dsp_regtab[] =
{
{ "D0AR.0", UNIT_RAM_D0, 0 },
{ "D0AR.1", UNIT_RAM_D0, 1 },
{ "D0AW.0", UNIT_RAM_D0, 2 },
{ "D0AW.1", UNIT_RAM_D0, 3 },
{ "D0BR.0", UNIT_RAM_D0, 4 },
{ "D0BR.1", UNIT_RAM_D0, 5 },
{ "D0BW.0", UNIT_RAM_D0, 6 },
{ "D0BW.1", UNIT_RAM_D0, 7 },
{ "D0ARI.0", UNIT_RAM_D0, 8 },
{ "D0ARI.1", UNIT_RAM_D0, 9 },
{ "D0AWI.0", UNIT_RAM_D0, 10 },
{ "D0AWI.1", UNIT_RAM_D0, 11 },
{ "D0BRI.0", UNIT_RAM_D0, 12 },
{ "D0BRI.1", UNIT_RAM_D0, 13 },
{ "D0BWI.0", UNIT_RAM_D0, 14 },
{ "D0BWI.1", UNIT_RAM_D0, 15 },
{ "AC0.0", UNIT_ACC_D0, 16 },
{ "AC0.1", UNIT_ACC_D0, 17 },
{ "AC0.2", UNIT_ACC_D0, 18 },
{ "AC0.3", UNIT_ACC_D0, 19 },
{ "D1AR.0", UNIT_RAM_D1, 0 },
{ "D1AR.1", UNIT_RAM_D1, 1 },
{ "D1AW.0", UNIT_RAM_D1, 2 },
{ "D1AW.1", UNIT_RAM_D1, 3 },
{ "D1BR.0", UNIT_RAM_D1, 4 },
{ "D1BR.1", UNIT_RAM_D1, 5 },
{ "D1BW.0", UNIT_RAM_D1, 6 },
{ "D1BW.1", UNIT_RAM_D1, 7 },
{ "D1ARI.0", UNIT_RAM_D1, 8 },
{ "D1ARI.1", UNIT_RAM_D1, 9 },
{ "D1AWI.0", UNIT_RAM_D1, 10 },
{ "D1AWI.1", UNIT_RAM_D1, 11 },
{ "D1BRI.0", UNIT_RAM_D1, 12 },
{ "D1BRI.1", UNIT_RAM_D1, 13 },
{ "D1BWI.0", UNIT_RAM_D1, 14 },
{ "D1BWI.1", UNIT_RAM_D1, 15 },
{ "AC1.0", UNIT_ACC_D1, 16 },
{ "AC1.1", UNIT_ACC_D1, 17 },
{ "AC1.2", UNIT_ACC_D1, 18 },
{ "AC1.3", UNIT_ACC_D1, 19 },
{ "T0", UNIT_DT, 0 },
{ "T1", UNIT_DT, 1 },
{ "T2", UNIT_DT, 2 },
{ "T3", UNIT_DT, 3 },
{ "T4", UNIT_DT, 4 },
{ "T5", UNIT_DT, 5 },
{ "T6", UNIT_DT, 6 },
{ "T7", UNIT_DT, 7 },
{ "T8", UNIT_DT, 8 },
{ "T9", UNIT_DT, 9 },
{ "TA", UNIT_DT, 10 },
{ "TB", UNIT_DT, 11 },
{ "TC", UNIT_DT, 12 },
{ "TD", UNIT_DT, 13 },
{ "TE", UNIT_DT, 14 },
{ "TF", UNIT_DT, 15 },
};
/* This table differs from 'metag_dsp_regtab' in that the number
fields in this table are suitable for insertion into DSPRAM
template definition instruction encodings.
The table is indexed by "load". The main benefit of this is that we
can implicitly check that the correct DSPRAM register has been used
when parsing, e.g. the read pointer only appears in the load table
and the write pointer only exists in the store table.
The ordering of the table entries might look a bit weird but it is
based on matching the longest register string. */
static const metag_reg metag_dsp_tmpl_regtab[2][56] =
{
{
{ "D0AW.0+D0AWI.0++", UNIT_RAM_D0, 18 },
{ "D0AW.0+D0AWI.0", UNIT_RAM_D0, 18 },
{ "D0AW.0+D0AWI.1++", UNIT_RAM_D0, 19 },
{ "D0AW.0+D0AWI.1", UNIT_RAM_D0, 19 },
{ "D0AW.0++", UNIT_RAM_D0, 17 },
{ "D0AW.0", UNIT_RAM_D0, 16 },
{ "D0AWI.0", UNIT_RAM_D0, 18 },
{ "D0AWI.1", UNIT_RAM_D0, 19 },
{ "D0AW.1+D0AWI.0++", UNIT_RAM_D0, 22 },
{ "D0AW.1+D0AWI.0", UNIT_RAM_D0, 22 },
{ "D0AW.1+D0AWI.1++", UNIT_RAM_D0, 23 },
{ "D0AW.1+D0AWI.1", UNIT_RAM_D0, 23 },
{ "D0AW.1++", UNIT_RAM_D0, 21 },
{ "D0AW.1", UNIT_RAM_D0, 20 },
{ "D0BW.0+D0BWI.0++", UNIT_RAM_D0, 26 },
{ "D0BW.0+D0BWI.0", UNIT_RAM_D0, 26 },
{ "D0BW.0+D0BWI.1++", UNIT_RAM_D0, 27 },
{ "D0BW.0+D0BWI.1", UNIT_RAM_D0, 27 },
{ "D0BW.0++", UNIT_RAM_D0, 25 },
{ "D0BW.0", UNIT_RAM_D0, 24 },
{ "D0BWI.0", UNIT_RAM_D0, 18 },
{ "D0BWI.1", UNIT_RAM_D0, 19 },
{ "D0BW.1+D0BWI.0++", UNIT_RAM_D0, 30 },
{ "D0BW.1+D0BWI.0", UNIT_RAM_D0, 30 },
{ "D0BW.1+D0BWI.1++", UNIT_RAM_D0, 31 },
{ "D0BW.1+D0BWI.1", UNIT_RAM_D0, 31 },
{ "D0BW.1++", UNIT_RAM_D0, 29 },
{ "D0BW.1", UNIT_RAM_D0, 28 },
{ "D1AW.0+D1AWI.0++", UNIT_RAM_D1, 18 },
{ "D1AW.0+D1AWI.0", UNIT_RAM_D1, 18 },
{ "D1AW.0+D1AWI.1++", UNIT_RAM_D1, 19 },
{ "D1AW.0+D1AWI.1", UNIT_RAM_D1, 19 },
{ "D1AW.0++", UNIT_RAM_D1, 17 },
{ "D1AW.0", UNIT_RAM_D1, 16 },
{ "D1AWI.0", UNIT_RAM_D1, 18 },
{ "D1AWI.1", UNIT_RAM_D1, 19 },
{ "D1AW.1+D1AWI.0++", UNIT_RAM_D1, 22 },
{ "D1AW.1+D1AWI.0", UNIT_RAM_D1, 22 },
{ "D1AW.1+D1AWI.1++", UNIT_RAM_D1, 23 },
{ "D1AW.1+D1AWI.1", UNIT_RAM_D1, 23 },
{ "D1AW.1++", UNIT_RAM_D1, 21 },
{ "D1AW.1", UNIT_RAM_D1, 20 },
{ "D1BW.0+D1BWI.0++", UNIT_RAM_D1, 26 },
{ "D1BW.0+D1BWI.0", UNIT_RAM_D1, 26 },
{ "D1BW.0+D1BWI.1++", UNIT_RAM_D1, 27 },
{ "D1BW.0+D1BWI.1", UNIT_RAM_D1, 27 },
{ "D1BW.0++", UNIT_RAM_D1, 25 },
{ "D1BW.0", UNIT_RAM_D1, 24 },
{ "D1BWI.0", UNIT_RAM_D1, 18 },
{ "D1BWI.1", UNIT_RAM_D1, 19 },
{ "D1BW.1+D1BWI.0++", UNIT_RAM_D1, 30 },
{ "D1BW.1+D1BWI.0", UNIT_RAM_D1, 30 },
{ "D1BW.1+D1BWI.1++", UNIT_RAM_D1, 31 },
{ "D1BW.1+D1BWI.1", UNIT_RAM_D1, 31 },
{ "D1BW.1++", UNIT_RAM_D1, 29 },
{ "D1BW.1", UNIT_RAM_D1, 28 },
},
{
{ "D0AR.0+D0ARI.0++", UNIT_RAM_D0, 18 },
{ "D0AR.0+D0ARI.0", UNIT_RAM_D0, 18 },
{ "D0AR.0+D0ARI.1++", UNIT_RAM_D0, 19 },
{ "D0AR.0+D0ARI.1", UNIT_RAM_D0, 19 },
{ "D0AR.0++", UNIT_RAM_D0, 17 },
{ "D0AR.0", UNIT_RAM_D0, 16 },
{ "D0ARI.0", UNIT_RAM_D0, 18 },
{ "D0ARI.1", UNIT_RAM_D0, 19 },
{ "D0AR.1+D0ARI.0++", UNIT_RAM_D0, 22 },
{ "D0AR.1+D0ARI.0", UNIT_RAM_D0, 22 },
{ "D0AR.1+D0ARI.1++", UNIT_RAM_D0, 23 },
{ "D0AR.1+D0ARI.1", UNIT_RAM_D0, 23 },
{ "D0AR.1++", UNIT_RAM_D0, 21 },
{ "D0AR.1", UNIT_RAM_D0, 20 },
{ "D0BR.0+D0BRI.0++", UNIT_RAM_D0, 26 },
{ "D0BR.0+D0BRI.0", UNIT_RAM_D0, 26 },
{ "D0BR.0+D0BRI.1++", UNIT_RAM_D0, 27 },
{ "D0BR.0+D0BRI.1", UNIT_RAM_D0, 27 },
{ "D0BR.0++", UNIT_RAM_D0, 25 },
{ "D0BR.0", UNIT_RAM_D0, 24 },
{ "D0BRI.0", UNIT_RAM_D0, 18 },
{ "D0BRI.1", UNIT_RAM_D0, 19 },
{ "D0BR.1+D0BRI.0++", UNIT_RAM_D0, 30 },
{ "D0BR.1+D0BRI.0", UNIT_RAM_D0, 30 },
{ "D0BR.1+D0BRI.1++", UNIT_RAM_D0, 31 },
{ "D0BR.1+D0BRI.1", UNIT_RAM_D0, 31 },
{ "D0BR.1++", UNIT_RAM_D0, 29 },
{ "D0BR.1", UNIT_RAM_D0, 28 },
{ "D1AR.0+D1ARI.0++", UNIT_RAM_D1, 18 },
{ "D1AR.0+D1ARI.0", UNIT_RAM_D1, 18 },
{ "D1AR.0+D1ARI.1++", UNIT_RAM_D1, 19 },
{ "D1AR.0+D1ARI.1", UNIT_RAM_D1, 19 },
{ "D1AR.0++", UNIT_RAM_D1, 17 },
{ "D1AR.0", UNIT_RAM_D1, 16 },
{ "D1ARI.0", UNIT_RAM_D1, 18 },
{ "D1ARI.1", UNIT_RAM_D1, 19 },
{ "D1AR.1+D1ARI.0++", UNIT_RAM_D1, 22 },
{ "D1AR.1+D1ARI.0", UNIT_RAM_D1, 22 },
{ "D1AR.1+D1ARI.1++", UNIT_RAM_D1, 23 },
{ "D1AR.1+D1ARI.1", UNIT_RAM_D1, 23 },
{ "D1AR.1++", UNIT_RAM_D1, 21 },
{ "D1AR.1", UNIT_RAM_D1, 20 },
{ "D1BR.0+D1BRI.0++", UNIT_RAM_D1, 26 },
{ "D1BR.0+D1BRI.0", UNIT_RAM_D1, 26 },
{ "D1BR.0+D1BRI.1++", UNIT_RAM_D1, 27 },
{ "D1BR.0+D1BRI.1", UNIT_RAM_D1, 27 },
{ "D1BR.0++", UNIT_RAM_D1, 25 },
{ "D1BR.0", UNIT_RAM_D1, 24 },
{ "D1BR.1+D1BRI.0++", UNIT_RAM_D1, 30 },
{ "D1BR.1+D1BRI.0", UNIT_RAM_D1, 30 },
{ "D1BR.1+D1BRI.1++", UNIT_RAM_D1, 31 },
{ "D1BR.1+D1BRI.1", UNIT_RAM_D1, 31 },
{ "D1BR.1++", UNIT_RAM_D1, 29 },
{ "D1BR.1", UNIT_RAM_D1, 28 },
{ "D1BRI.0", UNIT_RAM_D1, 18 },
{ "D1BRI.1", UNIT_RAM_D1, 19 },
},
};
typedef struct
{
const char * name;
unsigned int part;
} metag_acf;
static const metag_acf metag_acftab[] =
{
{ "ACF.0", 0},
{ "ACF.1", 1},
{ "ACF.2", 2},
{ "ACF.3", 3},
};
enum insn_encoding
{
ENC_NONE,
ENC_MOV_U2U,
ENC_MOV_PORT,
ENC_MMOV,
ENC_MDRD,
ENC_MOVL_TTREC,
ENC_GET_SET,
ENC_GET_SET_EXT,
ENC_MGET_MSET,
ENC_COND_SET,
ENC_XFR,
ENC_MOV_CT,
ENC_SWAP,
ENC_JUMP,
ENC_CALLR,
ENC_ALU,
ENC_SHIFT,
ENC_MIN_MAX,
ENC_BITOP,
ENC_CMP,
ENC_BRANCH,
ENC_KICK,
ENC_SWITCH,
ENC_CACHER,
ENC_CACHEW,
ENC_ICACHE,
ENC_LNKGET,
ENC_FMOV,
ENC_FMMOV,
ENC_FMOV_DATA,
ENC_FMOV_I,
ENC_FPACK,
ENC_FSWAP,
ENC_FCMP,
ENC_FMINMAX,
ENC_FCONV,
ENC_FCONVX,
ENC_FBARITH,
ENC_FEARITH,
ENC_FREC,
ENC_FSIMD,
ENC_FGET_SET_ACF,
ENC_DGET_SET,
ENC_DTEMPLATE,
ENC_DALU,
ENC_MAX,
};
enum insn_type
{
INSN_GP,
INSN_FPU,
INSN_DSP,
INSN_DSP_FPU,
};
typedef struct
{
const char *name;
unsigned int core_flags;
#define CoreMeta11 0x1 /* The earliest Meta core we support */
#define CoreMeta12 0x2
#define CoreMeta21 0x4
#define FpuMeta21 0x21
#define DspMeta21 0x100
unsigned int meta_opcode;
unsigned int meta_mask;
enum insn_type insn_type;
enum insn_encoding encoding;
#define DSP_ARGS_1 0x0000001 /* De.r,Dx.r,De.r (3 register operands) */
#define DSP_ARGS_ACC2 0x0000002 /* Accumulator source operand 2 */
#define DSP_ARGS_QR 0x0000004 /* QUICKRoT */
#define DSP_ARGS_XACC 0x0000008 /* Cross-unit accumulator op */
#define DSP_ARGS_DACC 0x0000010 /* Target accumulator as destination */
#define DSP_ARGS_SRD 0x0000020 /* Source the RD port */
#define DSP_ARGS_2 0x0000040 /* De.r,Dx.r (2 register operands) */
#define DSP_ARGS_DSP_SRC1 0x0000080 /* Source a DSP register */
#define DSP_ARGS_DSP_SRC2 0x0000100 /* Source a DSP register */
#define DSP_ARGS_IMM 0x0000200 /* Immediate value for src 2 */
#define DSP_ARGS_SPLIT8 0x0000400 /* Data unit split 8 operations */
#define DSP_ARGS_12 0x0000800 /* De.r,Dx.r */
#define DSP_ARGS_13 0x0001000 /* Dx.r,Rx.r */
#define DSP_ARGS_14 0x0002000 /* DSPe.r,Dx.r */
#define DSP_ARGS_15 0x0004000 /* DSPx.r,#I16 */
#define DSP_ARGS_16 0x0008000 /* De.r,DSPx.r */
#define DSP_ARGS_17 0x0010000 /* De.r|ACe.r,Dx.r,Rx.r|RD */
#define DSP_ARGS_18 0x0020000 /* De.r,Dx.r|ACx.r */
#define DSP_ARGS_20 0x0080000 /* De.r,Dx.r|ACx.r,De.r */
#define DSP_ARGS_21 0x0100000 /* De.r,Dx.r|ACx.r,#I5 */
#define DSP_ARGS_22 0x0200000 /* De.r,Dx.r|ACx.r,De.r|#I5 */
#define DSP_ARGS_23 0x0400000 /* Ux.r,Dx.r|ACx.r,De.r|#I5 */
#define GP_ARGS_QR 0x0000001 /* QUICKRoT */
unsigned int arg_type;
} insn_template;
enum major_opcode
{
OPC_ADD,
OPC_SUB,
OPC_AND,
OPC_OR,
OPC_XOR,
OPC_SHIFT,
OPC_MUL,
OPC_CMP,
OPC_ADDR,
OPC_9,
OPC_MISC,
OPC_SET,
OPC_GET,
OPC_XFR,
OPC_CPR,
OPC_FPU,
};
#define GET_EXT_MINOR 0x7
#define MOV_EXT_MINOR 0x6
#define MOVL_MINOR 0x2
#define MAJOR_OPCODE(opcode) (((opcode) >> 28) & 0xf)
#define MINOR_OPCODE(opcode) (((opcode) >> 24) & 0xf)
enum cond_code
{
COND_A,
COND_EQ,
COND_NE,
COND_CS,
COND_CC,
COND_MI,
COND_PL,
COND_VS,
COND_VC,
COND_HI,
COND_LS,
COND_GE,
COND_LT,
COND_GT,
COND_LE,
COND_NV,
};
enum scond_code
{
SCOND_A,
SCOND_LEQ,
SCOND_LNE,
SCOND_LLO,
SCOND_LHS,
SCOND_HEQ,
SCOND_HNE,
SCOND_HLO,
SCOND_HHS,
SCOND_LGR,
SCOND_LLE,
SCOND_HGR,
SCOND_HLE,
SCOND_EEQ,
SCOND_ELO,
SCOND_NV,
};
typedef struct
{
const char *name;
enum scond_code code;
} split_condition;
static const split_condition metag_scondtab[] ATTRIBUTE_UNUSED =
* common.h: Fix case of "Meta". * metag.h: New file. * dis-asm.h (print_insn_metag): New declaration. * metag.h: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure: Regenerate. * configure.in: Add Meta. * disassemble.c: Add Meta support. * metag-dis.c: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * archures.c (bfd_mach_metag): New. * bfd-in2.h: Regenerate. * config.bfd: Add Meta. * configure: Regenerate. * configure.in: Add Meta. * cpu-metag.c: New file. * elf-bfd.h: Add Meta. * elf32-metag.c: New file. * elf32-metag.h: New file. * libbfd.h: Regenerate. * reloc.c: Add Meta relocations. * targets.c: Add Meta. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * config/tc-metag.c: New file. * config/tc-metag.h: New file. * configure.tgt: Add Meta. * doc/Makefile.am: Add Meta. * doc/Makefile.in: Regenerate. * doc/all.texi: Add Meta. * doc/as.texiinfo: Document Meta options. * doc/c-metag.texi: New file. * gas/metag/labelarithmetic.d: New file. * gas/metag/labelarithmetic.s: New file. * gas/metag/metacore12.d: New file. * gas/metag/metacore12.s: New file. * gas/metag/metacore21-invalid.l: New file. * gas/metag/metacore21-invalid.s: New file. * gas/metag/metacore21.d: New file. * gas/metag/metacore21.s: New file. * gas/metag/metacore21ext.d: New file. * gas/metag/metacore21ext.s: New file. * gas/metag/metadsp21-invalid.l: New file. * gas/metag/metadsp21-invalid.s: New file. * gas/metag/metadsp21.d: New file. * gas/metag/metadsp21.s: New file. * gas/metag/metadsp21ext.d: New file. * gas/metag/metadsp21ext.s: New file. * gas/metag/metafpu21.d: New file. * gas/metag/metafpu21.s: New file. * gas/metag/metafpu21ext.d: New file. * gas/metag/metafpu21ext.s: New file. * gas/metag/metag.exp: New file. * gas/metag/tls.d: New file. * gas/metag/tls.s: New file. * Makefile.am: Add Meta. * Makefile.in: Regenerate. * configure.tgt: Add Meta. * emulparams/elf32metag.sh: New file. * emultempl/metagelf.em: New file. * ld-elf/merge.d: Mark Meta as xfail. * ld-gc/start.d: Skip this test on Meta. * ld-gc/personality.d: Skip this test on Meta. * ld-metag/external.s: New file. * ld-metag/metag.exp: New file. * ld-metag/pcrel.d: New file. * ld-metag/pcrel.s: New file. * ld-metag/shared.d: New file. * ld-metag/shared.r: New file. * ld-metag/shared.s: New file. * ld-metag/stub.d: New file. * ld-metag/stub.s: New file. * ld-metag/stub_pic_app.d: New file. * ld-metag/stub_pic_app.r: New file. * ld-metag/stub_pic_app.s: New file. * ld-metag/stub_pic_shared.d: New file. * ld-metag/stub_pic_shared.s: New file. * ld-metag/stub_shared.d: New file. * ld-metag/stub_shared.r: New file. * ld-metag/stub_shared.s: New file. * binutils/readelf.c: (guess_is_rela): Add EM_METAG. (dump_relocations): Add EM_METAG. (get_machine_name): Correct case for Meta. (is_32bit_abs_reloc): Add support for Meta ADDR32 reloc. (is_none_reloc): Add support for Meta NONE reloc.
2013-01-10 10:49:22 +01:00
{
{ "LEQ", SCOND_LEQ },
{ "LEZ", SCOND_LEQ },
{ "LNE", SCOND_LNE },
{ "LNZ", SCOND_LNE },
{ "LLO", SCOND_LLO },
{ "LCS", SCOND_LLO },
{ "LHS", SCOND_LHS },
{ "LCC", SCOND_LHS },
{ "HEQ", SCOND_HEQ },
{ "HEZ", SCOND_HEQ },
{ "HNE", SCOND_HNE },
{ "HNZ", SCOND_HNE },
{ "HLO", SCOND_HLO },
{ "HCS", SCOND_HLO },
{ "HHS", SCOND_HHS },
{ "HCC", SCOND_HHS },
{ "LGR", SCOND_LGR },
{ "LHI", SCOND_LGR },
{ "LLE", SCOND_LLE },
{ "LLS", SCOND_LLE },
{ "HGR", SCOND_HGR },
{ "HHI", SCOND_HGR },
{ "HLE", SCOND_HLE },
{ "HLS", SCOND_HLE },
{ "EEQ", SCOND_EEQ },
{ "EEZ", SCOND_EEQ },
{ "ELO", SCOND_ELO },
{ "ECS", SCOND_ELO },
};
static const split_condition metag_dsp_scondtab[] =
{
{ "LEQ", SCOND_LEQ },
{ "LEZ", SCOND_LEQ },
{ "LNE", SCOND_LNE },
{ "LNZ", SCOND_LNE },
{ "LCS", SCOND_LLO },
{ "LLO", SCOND_LLO },
{ "LCC", SCOND_LHS },
{ "LHS", SCOND_LHS },
{ "HEQ", SCOND_HEQ },
{ "HEZ", SCOND_HEQ },
{ "HNE", SCOND_HNE },
{ "HNZ", SCOND_HNE },
{ "HCS", SCOND_HLO },
{ "HLO", SCOND_HLO },
{ "HCC", SCOND_HHS },
{ "HHS", SCOND_HHS },
{ "LHI", SCOND_LGR },
{ "LGR", SCOND_LGR },
{ "LLS", SCOND_LLE },
{ "LLE", SCOND_LLE },
{ "HHI", SCOND_HGR },
{ "HGR", SCOND_HGR },
{ "HLS", SCOND_HLE },
{ "HLE", SCOND_HLE },
{ "EEQ", SCOND_EEQ },
{ "EEZ", SCOND_EEQ },
{ "ECS", SCOND_ELO },
{ "ELO", SCOND_ELO },
};
static const split_condition metag_fpu_scondtab[] =
{
{ "LEQ", SCOND_LEQ },
{ "LEZ", SCOND_LEQ },
{ "LNE", SCOND_LNE },
{ "LNZ", SCOND_LNE },
{ "LLO", SCOND_LLO },
{ "LCS", SCOND_LLO },
{ "LHS", SCOND_LHS },
{ "LCC", SCOND_LHS },
{ "HEQ", SCOND_HEQ },
{ "HEZ", SCOND_HEQ },
{ "HNE", SCOND_HNE },
{ "HNZ", SCOND_HNE },
{ "HLO", SCOND_HLO },
{ "HCS", SCOND_HLO },
{ "HHS", SCOND_HHS },
{ "HCC", SCOND_HHS },
{ "LGR", SCOND_LGR },
{ "LHI", SCOND_LGR },
{ "LLE", SCOND_LLE },
{ "LLS", SCOND_LLE },
{ "HGR", SCOND_HGR },
{ "HHI", SCOND_HGR },
{ "HLE", SCOND_HLE },
{ "HLS", SCOND_HLE },
{ "EEQ", SCOND_EEQ },
{ "EEZ", SCOND_EEQ },
{ "ELO", SCOND_ELO },
{ "ECS", SCOND_ELO },
};
enum fcond_code
{
FCOND_A,
FCOND_FEQ,
FCOND_UNE,
FCOND_FLT,
FCOND_UGE,
FCOND_UVS = 7,
FCOND_FVC,
FCOND_UGT,
FCOND_FLE,
FCOND_FGE,
FCOND_ULT,
FCOND_FGT,
FCOND_ULE,
FCOND_NV,
};
#define COND_INSN(mnemonic, suffix, field_shift, flags, meta_opcode, \
meta_mask, insn_type, encoding, args) \
{ mnemonic suffix, flags, meta_opcode, meta_mask, \
insn_type, encoding, args }, \
{ mnemonic "A" suffix, flags, meta_opcode, meta_mask, \
insn_type, encoding, args }, \
{ mnemonic "EQ" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "Z" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NE" suffix, flags, meta_opcode | (COND_NE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NZ" suffix, flags, meta_opcode | (COND_NE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "CS" suffix, flags, meta_opcode | (COND_CS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LO" suffix, flags, meta_opcode | (COND_CS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "CC" suffix, flags, meta_opcode | (COND_CC << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "HS" suffix, flags, meta_opcode | (COND_CC << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "MI" suffix, flags, meta_opcode | (COND_MI << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "N" suffix, flags, meta_opcode | (COND_MI << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "PL" suffix, flags, meta_opcode | (COND_PL << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NC" suffix, flags, meta_opcode | (COND_PL << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "VS" suffix, flags, meta_opcode | (COND_VS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "VC" suffix, flags, meta_opcode | (COND_VC << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "HI" suffix, flags, meta_opcode | (COND_HI << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LS" suffix, flags, meta_opcode | (COND_LS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "GE" suffix, flags, meta_opcode | (COND_GE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LT" suffix, flags, meta_opcode | (COND_LT << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "GT" suffix, flags, meta_opcode | (COND_GT << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LE" suffix, flags, meta_opcode | (COND_LE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NV" suffix, flags, meta_opcode | (COND_NV << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "FEQ" suffix, flags, meta_opcode | \
(FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FZ" suffix, flags, meta_opcode | \
(FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UNE" suffix, flags, meta_opcode | \
(FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UNZ" suffix, flags, meta_opcode | \
(FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FLT" suffix, flags, meta_opcode | \
(FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FLO" suffix, flags, meta_opcode | \
(FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UGE" suffix, flags, meta_opcode | \
(FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UHS" suffix, flags, meta_opcode | \
(FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UVS" suffix, flags, meta_opcode | \
(FCOND_UVS << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FVC" suffix, flags, meta_opcode | \
(FCOND_FVC << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UGT" suffix, flags, meta_opcode | \
(FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UHI" suffix, flags, meta_opcode | \
(FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FLE" suffix, flags, meta_opcode | \
(FCOND_FLE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FGE" suffix, flags, meta_opcode | \
(FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FHS" suffix, flags, meta_opcode | \
(FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "ULT" suffix, flags, meta_opcode | \
(FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "ULO" suffix, flags, meta_opcode | \
(FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FGT" suffix, flags, meta_opcode | \
(FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FHI" suffix, flags, meta_opcode | \
(FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "ULE" suffix, flags, meta_opcode | \
(FCOND_ULE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "NV" suffix, flags, meta_opcode | \
(FCOND_NV << field_shift), meta_mask, INSN_FPU, encoding, args }
#define FCOND_INSN(mnemonic, suffix, field_shift, flags, meta_opcode, \
meta_mask, insn_type, encoding, args) \
{ mnemonic suffix, flags, meta_opcode, meta_mask, \
insn_type, encoding, args }, \
{ mnemonic "A" suffix, flags, meta_opcode, meta_mask, \
insn_type, encoding, args }, \
{ mnemonic "FEQ" suffix, flags, meta_opcode | \
(FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FZ" suffix, flags, meta_opcode | \
(FCOND_FEQ << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UNE" suffix, flags, meta_opcode | \
(FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UNZ" suffix, flags, meta_opcode | \
(FCOND_UNE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FLO" suffix, flags, meta_opcode | \
(FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FLT" suffix, flags, meta_opcode | \
(FCOND_FLT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UHS" suffix, flags, meta_opcode | \
(FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UGE" suffix, flags, meta_opcode | \
(FCOND_UGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UVS" suffix, flags, meta_opcode | \
(FCOND_UVS << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FVC" suffix, flags, meta_opcode | \
(FCOND_FVC << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UHI" suffix, flags, meta_opcode | \
(FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "UGT" suffix, flags, meta_opcode | \
(FCOND_UGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FLE" suffix, flags, meta_opcode | \
(FCOND_FLE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FGE" suffix, flags, meta_opcode | \
(FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FHS" suffix, flags, meta_opcode | \
(FCOND_FGE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "ULT" suffix, flags, meta_opcode | \
(FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "ULO" suffix, flags, meta_opcode | \
(FCOND_ULT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FGT" suffix, flags, meta_opcode | \
(FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "FHI" suffix, flags, meta_opcode | \
(FCOND_FGT << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "ULE" suffix, flags, meta_opcode | \
(FCOND_ULE << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "NV" suffix, flags, meta_opcode | \
(FCOND_NV << field_shift), meta_mask, INSN_FPU, encoding, args }, \
{ mnemonic "EQ" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "Z" suffix, flags, meta_opcode | (COND_EQ << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NE" suffix, flags, meta_opcode | (COND_NE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NZ" suffix, flags, meta_opcode | (COND_NE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "CS" suffix, flags, meta_opcode | (COND_CS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LO" suffix, flags, meta_opcode | (COND_CS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "CC" suffix, flags, meta_opcode | (COND_CC << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "HS" suffix, flags, meta_opcode | (COND_CC << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "MI" suffix, flags, meta_opcode | (COND_MI << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "N" suffix, flags, meta_opcode | (COND_MI << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "PL" suffix, flags, meta_opcode | (COND_PL << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NC" suffix, flags, meta_opcode | (COND_PL << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "VS" suffix, flags, meta_opcode | (COND_VS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "VC" suffix, flags, meta_opcode | (COND_VC << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "HI" suffix, flags, meta_opcode | (COND_HI << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LS" suffix, flags, meta_opcode | (COND_LS << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "GE" suffix, flags, meta_opcode | (COND_GE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LT" suffix, flags, meta_opcode | (COND_LT << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "GT" suffix, flags, meta_opcode | (COND_GT << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "LE" suffix, flags, meta_opcode | (COND_LE << field_shift), \
meta_mask, insn_type, encoding, args }, \
{ mnemonic "NV" suffix, flags, meta_opcode | (COND_NV << field_shift), \
meta_mask, insn_type, encoding, args }
#define TEMPLATE_INSN(flags, meta_opcode, meta_mask, insn_type) \
{ "T0", flags, meta_opcode | 0x0, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T1", flags, meta_opcode | 0x1, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T2", flags, meta_opcode | 0x2, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T3", flags, meta_opcode | 0x3, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T4", flags, meta_opcode | 0x4, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T5", flags, meta_opcode | 0x5, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T6", flags, meta_opcode | 0x6, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T7", flags, meta_opcode | 0x7, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T8", flags, meta_opcode | 0x8, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "T9", flags, meta_opcode | 0x9, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "TA", flags, meta_opcode | 0xa, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "TB", flags, meta_opcode | 0xb, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "TC", flags, meta_opcode | 0xc, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "TD", flags, meta_opcode | 0xd, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "TE", flags, meta_opcode | 0xe, meta_mask, insn_type, ENC_DTEMPLATE, 0 }, \
{ "TF", flags, meta_opcode | 0xf, meta_mask, insn_type, ENC_DTEMPLATE, 0 }
/* Unimplemented GP instructions:
CPR - coprocessor read
CPW - coprocessor write
MORT - morton order operation
VPACK, VADD, VSUB - vector instructions
The order of the entries in this table is extremely important. DO
NOT modify it unless you know what you're doing. If you do modify
it, be sure to run the entire testsuite to make sure you haven't
caused a regression. */
static const insn_template metag_optab[] =
{
/* Port-to-unit MOV */
COND_INSN ("MOVB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa1800000, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
COND_INSN ("MOVW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa1800001, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
COND_INSN ("MOVD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa1800200, 0xfff83e1f, INSN_GP, ENC_MOV_PORT, 0),
COND_INSN ("MOVL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa2800000, 0xfff8019f, INSN_GP, ENC_MOV_PORT, 0),
/* Read pipeline prime/drain */
{ "MMOVD", CoreMeta11|CoreMeta12|CoreMeta21,
0xca000000, 0xff00001f, INSN_GP, ENC_MMOV, 0 },
{ "MMOVL", CoreMeta11|CoreMeta12|CoreMeta21,
0xcb000000, 0xff00001f, INSN_GP, ENC_MMOV, 0 },
{ "MMOVD", CoreMeta11|CoreMeta12|CoreMeta21,
0xcc000000, 0xff07c067, INSN_GP, ENC_MMOV, 0 },
{ "MMOVL", CoreMeta11|CoreMeta12|CoreMeta21,
0xcd000000, 0xff07c067, INSN_GP, ENC_MMOV, 0 },
/* Read pipeline flush */
{ "MDRD", CoreMeta11|CoreMeta12|CoreMeta21,
0xcc000002, 0xffffc07f, INSN_GP, ENC_MDRD, 0 },
/* Unit-to-TTREC MOVL */
COND_INSN ("MOVL", "", 1, CoreMeta12|CoreMeta21,
0xa2002001, 0xff003e7f, INSN_GP, ENC_MOVL_TTREC, 0),
/* MOV to RA (extended) */
{ "MOVB", CoreMeta11|CoreMeta12|CoreMeta21,
0xa6000000, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "MOVW", CoreMeta11|CoreMeta12|CoreMeta21,
0xa6000002, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "MOVD", CoreMeta11|CoreMeta12|CoreMeta21,
0xa6000004, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "MOVL", CoreMeta11|CoreMeta12|CoreMeta21,
0xa6000006, 0xff00001e, INSN_GP, ENC_GET_SET_EXT, 0 },
/* Extended GET */
{ "GETB", CoreMeta11|CoreMeta12|CoreMeta21,
0xa7000000, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "GETW", CoreMeta11|CoreMeta12|CoreMeta21,
0xa7000002, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "GETD", CoreMeta11|CoreMeta12|CoreMeta21,
0xa7000004, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "GETL", CoreMeta11|CoreMeta12|CoreMeta21,
0xa7000006, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
/* Extended SET */
{ "SETB", CoreMeta11|CoreMeta12|CoreMeta21,
0xa5000000, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "SETW", CoreMeta11|CoreMeta12|CoreMeta21,
0xa5000002, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "SETD", CoreMeta11|CoreMeta12|CoreMeta21,
0xa5000004, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
{ "SETL", CoreMeta11|CoreMeta12|CoreMeta21,
0xa5000006, 0xff000006, INSN_GP, ENC_GET_SET_EXT, 0 },
/* MOV to RA */
{ "MOVB", CoreMeta11|CoreMeta12|CoreMeta21,
0xc000000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
{ "MOVW", CoreMeta11|CoreMeta12|CoreMeta21,
0xc100000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
{ "MOVD", CoreMeta11|CoreMeta12|CoreMeta21,
0xc400000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
{ "MOVL", CoreMeta11|CoreMeta12|CoreMeta21,
0xc500000c, 0xfd00001e, INSN_GP, ENC_GET_SET, 0 },
/* Standard GET */
{ "GETB", CoreMeta11|CoreMeta12|CoreMeta21,
0xc0000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
{ "GETW", CoreMeta11|CoreMeta12|CoreMeta21,
0xc1000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
{ "GETD", CoreMeta11|CoreMeta12|CoreMeta21,
0xc4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
/* GET is a synonym for GETD. */
{ "GET", CoreMeta11|CoreMeta12|CoreMeta21,
0xc4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
{ "GETL", CoreMeta11|CoreMeta12|CoreMeta21,
0xc5000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
/* Standard SET */
{ "SETB", CoreMeta11|CoreMeta12|CoreMeta21,
0xb0000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
{ "SETW", CoreMeta11|CoreMeta12|CoreMeta21,
0xb1000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
{ "SETD", CoreMeta11|CoreMeta12|CoreMeta21,
0xb4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
/* SET is a synonym for SETD. */
{ "SET", CoreMeta11|CoreMeta12|CoreMeta21,
0xb4000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
{ "SETL", CoreMeta11|CoreMeta12|CoreMeta21,
0xb5000000, 0xfd000000, INSN_GP, ENC_GET_SET, 0 },
/* Multiple GET */
{ "MGETD", CoreMeta11|CoreMeta12|CoreMeta21,
0xc8000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
{ "MGETL", CoreMeta11|CoreMeta12|CoreMeta21,
0xc9000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
/* Multiple SET */
{ "MSETD", CoreMeta11|CoreMeta12|CoreMeta21,
0xb8000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
{ "MSETL", CoreMeta11|CoreMeta12|CoreMeta21,
0xb9000000, 0xff000007, INSN_GP, ENC_MGET_MSET, 0 },
/* Conditional SET */
COND_INSN ("SETB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa4000000, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
COND_INSN ("SETW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa4000001, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
COND_INSN ("SETD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa4000200, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
COND_INSN ("SETL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa4000201, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
{ "XFRD", CoreMeta11|CoreMeta12|CoreMeta21,
0xd0000000, 0xf2000000, INSN_GP, ENC_XFR, 0 },
{ "XFRL", CoreMeta11|CoreMeta12|CoreMeta21,
0xd2000000, 0xf2000000, INSN_GP, ENC_XFR, 0 },
/* Fast control register setup */
{ "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
0xa9000000, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
{ "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
0xa9000001, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
{ "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
0xa9000004, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
{ "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
0xa9000005, 0xff000005, INSN_GP, ENC_MOV_CT, 0 },
/* Internal transfer operations */
{ "JUMP", CoreMeta11|CoreMeta12|CoreMeta21,
0xac000000, 0xff000004, INSN_GP, ENC_JUMP, 0 },
{ "CALL", CoreMeta11|CoreMeta12|CoreMeta21,
0xac000004, 0xff000004, INSN_GP, ENC_JUMP, 0 },
{ "CALLR", CoreMeta11|CoreMeta12|CoreMeta21,
0xab000000, 0xff000000, INSN_GP, ENC_CALLR, 0 },
/* Address unit ALU operations */
{ "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
0x80000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
0x82000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
0x82000005, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
0x80000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
0x82000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ADDT", CoreMeta11|CoreMeta12|CoreMeta21,
0x82000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
0x86000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x84000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x86000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
{ "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
0x88000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
0x8a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "NEGT", CoreMeta11|CoreMeta12|CoreMeta21,
0x8a000005, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
0x88000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
0x8a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "SUBT", CoreMeta11|CoreMeta12|CoreMeta21,
0x8a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
0x8e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x8c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x8e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
/* Data unit ALU operations */
{ "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
0x00000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "MOVS", CoreMeta11|CoreMeta12|CoreMeta21,
0x08000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "MOV", CoreMeta11|CoreMeta12|CoreMeta21,
0x02000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "MOVS", CoreMeta11|CoreMeta12|CoreMeta21,
0x0a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "MOVT", CoreMeta11|CoreMeta12|CoreMeta21,
0x02000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "MOVST", CoreMeta11|CoreMeta12|CoreMeta21,
0x0a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "ADD", DspMeta21,
0x00000100, 0xfe000104, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_ACC2|DSP_ARGS_XACC|DSP_ARGS_IMM },
{ "ADD", DspMeta21,
0x02000003, 0xfe000003, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_IMM },
COND_INSN ("ADD", "", 1, DspMeta21,
0x040001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
{ "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
0x00000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "ADDS", DspMeta21,
0x08000100, 0xfe000104, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_ACC2 },
{ "ADDS", DspMeta21,
0x0a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
0x08000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
0x02000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
0x0a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ADDT", CoreMeta11|CoreMeta12|CoreMeta21,
0x02000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ADDST", CoreMeta11|CoreMeta12|CoreMeta21,
0x0a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ADD", CoreMeta11|CoreMeta12|CoreMeta21,
0x06000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
COND_INSN ("ADDS", "", 1, DspMeta21,
0x0c0001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
{ "ADDS", CoreMeta11|CoreMeta12|CoreMeta21,
0x0e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x04000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("ADDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x0c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("ADD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x06000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("ADDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x0e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
{ "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
0x10000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "NEGS", CoreMeta11|CoreMeta12|CoreMeta21,
0x18000004, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "NEG", CoreMeta11|CoreMeta12|CoreMeta21,
0x12000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "NEGS", CoreMeta11|CoreMeta12|CoreMeta21,
0x1a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "NEGT", CoreMeta11|CoreMeta12|CoreMeta21,
0x12000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "NEGST", CoreMeta11|CoreMeta12|CoreMeta21,
0x1a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "SUB", DspMeta21,
0x10000100, 0xfe000104, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_ACC2|DSP_ARGS_XACC },
{ "SUB", DspMeta21,
0x12000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
0x10000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
0x18000000, 0xfe0001fc, INSN_GP, ENC_ALU, 0 },
{ "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
0x12000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
0x1a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "SUBT", CoreMeta11|CoreMeta12|CoreMeta21,
0x12000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "SUBS", DspMeta21,
0x18000100, 0xfe000104, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_ACC2 },
{ "SUBS", DspMeta21,
0x1a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "SUBST", CoreMeta11|CoreMeta12|CoreMeta21,
0x1a000001, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "SUB", CoreMeta11|CoreMeta12|CoreMeta21,
0x16000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "SUBS", CoreMeta11|CoreMeta12|CoreMeta21,
0x1e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
COND_INSN ("SUBS", "", 1, DspMeta21,
0x1c0001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
COND_INSN ("SUB", "", 1, DspMeta21,
0x140001e0, 0xfe0001fe, INSN_DSP, ENC_DALU, DSP_ARGS_1),
COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x14000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("SUBS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x1c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("SUB", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x16000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("SUBS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x1e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
{ "AND", CoreMeta11|CoreMeta12|CoreMeta21,
0x20000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
0x28000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "ANDQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x20000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "ANDSQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x28000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "AND", CoreMeta11|CoreMeta12|CoreMeta21,
0x22000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ANDMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x22000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
0x2a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ANDSMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x2a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ANDT", CoreMeta11|CoreMeta12|CoreMeta21,
0x22000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "ANDMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x22000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "ANDST", CoreMeta11|CoreMeta12|CoreMeta21,
0x2a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "ANDSMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x2a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "AND", DspMeta21,
0x20000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "AND", CoreMeta11|CoreMeta12|CoreMeta21,
0x26000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "ANDS", CoreMeta11|CoreMeta12|CoreMeta21,
0x2e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "ANDQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x26000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "ANDSQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x2e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "ANDQ", DspMeta21,
0x20000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
COND_INSN ("ANDQ", "", 1, DspMeta21,
0x240001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_QR),
COND_INSN ("AND", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x24000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
{ "ANDSQ", DspMeta21,
0x28000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
COND_INSN ("ANDSQ", "", 1, DspMeta21,
0x2c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_QR),
COND_INSN ("ANDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x2c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("AND", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x26000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("ANDS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x2e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("ANDQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x26000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
COND_INSN ("ANDSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x2e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
{ "OR", CoreMeta11|CoreMeta12|CoreMeta21,
0x30000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
0x38000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "ORQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x30000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "ORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x38000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "OR", CoreMeta11|CoreMeta12|CoreMeta21,
0x32000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ORMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x32000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
0x3a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ORSMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x3a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "ORT", CoreMeta11|CoreMeta12|CoreMeta21,
0x32000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "ORMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x32000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "ORST", CoreMeta11|CoreMeta12|CoreMeta21,
0x3a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "ORSMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x3a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "OR", CoreMeta11|CoreMeta12|CoreMeta21,
0x36000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "ORS", CoreMeta11|CoreMeta12|CoreMeta21,
0x3e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "ORQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x36000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "ORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x3e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "ORQ", DspMeta21,
0x30000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
COND_INSN ("ORQ", "", 1, DspMeta21,
0x340001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_QR),
COND_INSN ("OR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x34000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
{ "ORSQ", DspMeta21,
0x38000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
COND_INSN ("ORSQ", "", 1, DspMeta21,
0x3c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_QR),
COND_INSN ("ORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x3c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("OR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x36000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("ORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x3e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("ORQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x36000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
COND_INSN ("ORSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x3e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
{ "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
0x40000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
0x48000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "XORQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x40000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "XORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x48000040, 0xfe00017e, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
0x42000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "XORMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x42000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
0x4a000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "XORSMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x4a000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "XORT", CoreMeta11|CoreMeta12|CoreMeta21,
0x42000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "XORMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x42000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "XORST", CoreMeta11|CoreMeta12|CoreMeta21,
0x4a000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "XORSMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x4a000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "XOR", CoreMeta11|CoreMeta12|CoreMeta21,
0x46000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "XORS", CoreMeta11|CoreMeta12|CoreMeta21,
0x4e000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "XORQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x46000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "XORSQ", CoreMeta11|CoreMeta12|CoreMeta21,
0x4e000021, 0xfe000021, INSN_GP, ENC_ALU, GP_ARGS_QR },
{ "XORQ", DspMeta21,
0x40000140, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
COND_INSN ("XORQ", "", 1, DspMeta21,
0x440001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_QR),
COND_INSN ("XOR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x44000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
{ "XORSQ", DspMeta21,
0x48000140, 0xfe000140, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_QR },
COND_INSN ("XORSQ", "", 1, DspMeta21,
0x4c0001c0, 0xfe0001de, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_QR),
COND_INSN ("XORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x4c000000, 0xfe00001e, INSN_GP, ENC_ALU, 0),
COND_INSN ("XOR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x46000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("XORS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x4e000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("XORQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x46000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
COND_INSN ("XORSQ", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x4e000001, 0xfe00003f, INSN_GP, ENC_ALU, GP_ARGS_QR),
{ "LSL", CoreMeta11|CoreMeta12|CoreMeta21,
0x50000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "LSL", CoreMeta11|CoreMeta12|CoreMeta21,
0x54000020, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("LSL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x54000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "LSLS", CoreMeta11|CoreMeta12|CoreMeta21,
0x58000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "LSLS", CoreMeta11|CoreMeta12|CoreMeta21,
0x5c000020, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("LSLS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x5c000000, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "LSR", CoreMeta11|CoreMeta12|CoreMeta21,
0x50000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "LSR", CoreMeta11|CoreMeta12|CoreMeta21,
0x54000060, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("LSR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x54000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "LSRS", CoreMeta11|CoreMeta12|CoreMeta21,
0x58000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "LSRS", CoreMeta11|CoreMeta12|CoreMeta21,
0x5c000060, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("LSRS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x5c000040, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "ASL", CoreMeta11|CoreMeta12|CoreMeta21,
0x50000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "ASL", CoreMeta11|CoreMeta12|CoreMeta21,
0x540000a0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("ASL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x54000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "ASLS", CoreMeta11|CoreMeta12|CoreMeta21,
0x58000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "ASLS", CoreMeta11|CoreMeta12|CoreMeta21,
0x5c0000a0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("ASLS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x5c000080, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "ASR", CoreMeta11|CoreMeta12|CoreMeta21,
0x500000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "ASR", CoreMeta11|CoreMeta12|CoreMeta21,
0x540000e0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("ASR", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x540000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "ASRS", CoreMeta11|CoreMeta12|CoreMeta21,
0x580000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0 },
{ "ASRS", CoreMeta11|CoreMeta12|CoreMeta21,
0x5c0000e0, 0xfc0001e0, INSN_GP, ENC_SHIFT, 0 },
COND_INSN ("ASRS", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x5c0000c0, 0xfc0001ff, INSN_GP, ENC_SHIFT, 0),
{ "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
0x60000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
0x60000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
/* MUL is a synonym from MULD. */
{ "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
0x60000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0 },
{ "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
0x62000000, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
0x62000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
0x62000004, 0xfe000005, INSN_GP, ENC_ALU, 0 },
{ "MULWT", CoreMeta11|CoreMeta12|CoreMeta21,
0x62000001, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "MULDT", CoreMeta11|CoreMeta12|CoreMeta21,
0x62000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "MULT", CoreMeta11|CoreMeta12|CoreMeta21,
0x62000005, 0xfe000007, INSN_GP, ENC_ALU, 0 },
{ "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
0x64000020, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
{ "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
0x64000060, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
{ "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
0x64000060, 0xfe0001e0, INSN_GP, ENC_ALU, 0 },
{ "MULW", CoreMeta11|CoreMeta12|CoreMeta21,
0x66000020, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "MULD", CoreMeta11|CoreMeta12|CoreMeta21,
0x66000021, 0xfe000021, INSN_GP, ENC_ALU, 0 },
{ "MUL", CoreMeta11|CoreMeta12|CoreMeta21,
0x66000021, 0xfe000021, INSN_GP, ENC_ALU, 0 },
COND_INSN ("MULW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x64000000, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
COND_INSN ("MULD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x64000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
COND_INSN ("MUL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x64000040, 0xfe0001fe, INSN_GP, ENC_ALU, 0),
COND_INSN ("MULW", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x66000000, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("MULD", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x66000001, 0xfe00003f, INSN_GP, ENC_ALU, 0),
COND_INSN ("MUL", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x66000001, 0xfe00003f, INSN_GP, ENC_ALU, 0),
{ "MIN", CoreMeta11|CoreMeta12|CoreMeta21,
0x70000020, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
{ "MAX", CoreMeta11|CoreMeta12|CoreMeta21,
0x70000024, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
{ "FFB", CoreMeta11|CoreMeta12|CoreMeta21,
0x70000004, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
{ "NORM", CoreMeta11|CoreMeta12|CoreMeta21,
0x70000008, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
{ "ABS", CoreMeta11|CoreMeta12|CoreMeta21,
0x70000028, 0xfe003fff, INSN_GP, ENC_BITOP, 0 },
{ "XSDB", CoreMeta11|CoreMeta12|CoreMeta21,
0xaa000000, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "XSDSB", CoreMeta11|CoreMeta12|CoreMeta21,
0xaa000008, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "XSDW", CoreMeta11|CoreMeta12|CoreMeta21,
0xaa000002, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "XSDSW", CoreMeta11|CoreMeta12|CoreMeta21,
0xaa00000a, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "RTDW", CoreMeta11|CoreMeta12|CoreMeta21,
0xaa000006, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "RTDSW", CoreMeta11|CoreMeta12|CoreMeta21,
0xaa00000e, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "NMIN", CoreMeta11|CoreMeta12|CoreMeta21,
0x7000002c, 0xfe0001ff, INSN_GP, ENC_MIN_MAX, 0 },
/* Condition setting operations */
{ "CMP", CoreMeta11|CoreMeta12|CoreMeta21,
0x70000000, 0xfef801fe, INSN_GP, ENC_CMP, 0 },
{ "TST", CoreMeta11|CoreMeta12|CoreMeta21,
0x78000000, 0xfef801fe, INSN_GP, ENC_CMP, 0 },
{ "CMP", CoreMeta11|CoreMeta12|CoreMeta21,
0x72000000, 0xfe000005, INSN_GP, ENC_CMP, 0 },
{ "CMPMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x72000004, 0xfe000005, INSN_GP, ENC_CMP, 0 },
{ "TST", CoreMeta11|CoreMeta12|CoreMeta21,
0x7a000000, 0xfe000005, INSN_GP, ENC_CMP, 0 },
{ "TSTMB", CoreMeta11|CoreMeta12|CoreMeta21,
0x7a000004, 0xfe000005, INSN_GP, ENC_CMP, 0 },
{ "CMPT", CoreMeta11|CoreMeta12|CoreMeta21,
0x72000001, 0xfe000007, INSN_GP, ENC_CMP, 0 },
{ "CMPMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x72000005, 0xfe000007, INSN_GP, ENC_CMP, 0 },
{ "TSTT", CoreMeta11|CoreMeta12|CoreMeta21,
0x7a000001, 0xfe000007, INSN_GP, ENC_CMP, 0 },
{ "TSTMT", CoreMeta11|CoreMeta12|CoreMeta21,
0x7a000005, 0xfe000007, INSN_GP, ENC_CMP, 0 },
COND_INSN ("CMP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x74000000, 0xfef801fe, INSN_GP, ENC_CMP, 0),
COND_INSN ("TST", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x7c000000, 0xfef801fe, INSN_GP, ENC_CMP, 0),
COND_INSN ("CMP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x76000000, 0xfef8003e, INSN_GP, ENC_CMP, 0),
COND_INSN ("TST", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0x7e000000, 0xfef8003e, INSN_GP, ENC_CMP, 0),
/* No-op (BNV) */
{ "NOP", CoreMeta11|CoreMeta12|CoreMeta21,
0xa0fffffe, 0xffffffff, INSN_GP, ENC_NONE, 0 },
/* Branch */
COND_INSN ("B", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa0000000, 0xff00001f, INSN_GP, ENC_BRANCH, 0),
COND_INSN ("B", "R", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa0000001, 0xff00001f, INSN_GP, ENC_BRANCH, 0),
/* System operations */
{ "LOCK0", CoreMeta11|CoreMeta12|CoreMeta21,
0xa8000000, 0xffffffff, INSN_GP, ENC_NONE, 0 },
{ "LOCK1", CoreMeta11|CoreMeta12|CoreMeta21,
0xa8000001, 0xffffffff, INSN_GP, ENC_NONE, 0 },
{ "LOCK2", CoreMeta11|CoreMeta12|CoreMeta21,
0xa8000003, 0xffffffff, INSN_GP, ENC_NONE, 0 },
{ "RTI", CoreMeta11|CoreMeta12|CoreMeta21,
0xa3ffffff, 0xffffffff, INSN_GP, ENC_NONE, 0 },
{ "RTH", CoreMeta11|CoreMeta12|CoreMeta21,
0xa37fffff, 0xffffffff, INSN_GP, ENC_NONE, 0 },
COND_INSN ("KICK", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa3000001, 0xff003e1f, INSN_GP, ENC_KICK, 0),
{ "SWITCH", CoreMeta11|CoreMeta12|CoreMeta21,
0xaf000000, 0xff000000, INSN_GP, ENC_SWITCH, 0 },
{ "DCACHE", CoreMeta11|CoreMeta12|CoreMeta21,
0xad000000, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
{ "ICACHEEXIT", CoreMeta12|CoreMeta21,
0xae000000, 0xffffffff, INSN_GP, ENC_NONE, 0 },
{ "ICACHEEXITR", CoreMeta12|CoreMeta21,
0xae000001, 0xffffffff, INSN_GP, ENC_NONE, 0 },
{ "ICACHE", CoreMeta12|CoreMeta21,
0xae000000, 0xff0001e1, INSN_GP, ENC_ICACHE, 0 },
{ "ICACHER", CoreMeta12|CoreMeta21,
0xae000001, 0xff0001e1, INSN_GP, ENC_ICACHE, 0 },
/* Meta 2 instructions */
{ "CACHERD", CoreMeta21,
0xad000081, 0xff000087, INSN_GP, ENC_CACHER, 0 },
{ "CACHERL", CoreMeta21,
0xad000083, 0xff000087, INSN_GP, ENC_CACHER, 0 },
{ "CACHEWD", CoreMeta21,
0xad000001, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
{ "CACHEWL", CoreMeta21,
0xad000003, 0xff000087, INSN_GP, ENC_CACHEW, 0 },
COND_INSN ("DEFR", "", 1, CoreMeta21,
0xa3002001, 0xff003e1f, INSN_GP, ENC_KICK, 0),
{ "BEXD", CoreMeta21,
0xaa000004, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "BEXSD", CoreMeta21,
0xaa00000c, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "BEXL", CoreMeta21,
0xaa000014, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "BEXSL", CoreMeta21,
0xaa00001c, 0xff003ffe, INSN_GP, ENC_BITOP, 0 },
{ "LNKGETB", CoreMeta21,
0xad000080, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
{ "LNKGETW", CoreMeta21,
0xad000082, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
{ "LNKGETD", CoreMeta21,
0xad000084, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
{ "LNKGETL", CoreMeta21,
0xad000086, 0xff000087, INSN_GP, ENC_LNKGET, 0 },
COND_INSN ("LNKSETB", "", 1, CoreMeta21,
0xa4000080, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
COND_INSN ("LNKSETW", "", 1, CoreMeta21,
0xa4000081, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
COND_INSN ("LNKSETD", "", 1, CoreMeta21,
0xa4000280, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
COND_INSN ("LNKSETL", "", 1, CoreMeta21,
0xa4000281, 0xff00039f, INSN_GP, ENC_COND_SET, 0),
/* Meta 2 FPU instructions */
/* Port-to-unit MOV */
COND_INSN ("MOVL", "", 1, FpuMeta21,
0xa1800201, 0xfff83e1f, INSN_FPU, ENC_MOV_PORT, 0),
/* Read pipeline drain */
{ "MMOVD", FpuMeta21,
0xce000006, 0xfffc007f, INSN_FPU, ENC_MMOV, 0 },
{ "MMOVL", FpuMeta21,
0xcf000006, 0xfffc007f, INSN_FPU, ENC_MMOV, 0 },
/* FP data movement instructions */
FCOND_INSN ("ABS", "", 1, FpuMeta21,
0xf0000080, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
{ "MMOVD", FpuMeta21,
0xbe000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
{ "MMOVL", FpuMeta21,
0xbf000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
{ "MMOVD", FpuMeta21,
0xce000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
{ "MMOVL", FpuMeta21,
0xcf000002, 0xff84007e, INSN_FPU, ENC_FMMOV, 0 },
{ "MOVD", FpuMeta21,
0x08000144, 0xfe03e1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
{ "MOVD", FpuMeta21,
0x080001c4, 0xfe83c1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
{ "MOVL", FpuMeta21,
0x08000154, 0xfe03e1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
{ "MOVL", FpuMeta21,
0x080001d4, 0xfe83c1ff, INSN_FPU, ENC_FMOV_DATA, 0 },
FCOND_INSN ("MOV", "", 1, FpuMeta21,
0xf0000000, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
{ "MOV", FpuMeta21,
0xf0000001, 0xff800001, INSN_FPU, ENC_FMOV_I, 0 },
FCOND_INSN ("NEG", "", 1, FpuMeta21,
0xf0000100, 0xff843f9f, INSN_FPU, ENC_FMOV, 0),
{ "PACK", FpuMeta21,
0xf0000180, 0xff8c21ff, INSN_FPU, ENC_FPACK, 0 },
{ "SWAP", FpuMeta21,
0xf00001c0, 0xff8c7fff, INSN_FPU, ENC_FSWAP, 0 },
/* FP comparison instructions */
FCOND_INSN ("CMP", "", 1, FpuMeta21,
0xf3000000, 0xfff4201f, INSN_FPU, ENC_FCMP, 0),
FCOND_INSN ("MAX", "", 1, FpuMeta21,
0xf3000081, 0xff84219f, INSN_FPU, ENC_FMINMAX, 0),
FCOND_INSN ("MIN", "", 1, FpuMeta21,
0xf3000001, 0xff84219f, INSN_FPU, ENC_FMINMAX, 0),
/* FP data conversion instructions */
FCOND_INSN ("DTOF", "", 1, FpuMeta21,
0xf2000121, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("FTOD", "", 1, FpuMeta21,
0xf2000101, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("DTOH", "", 1, FpuMeta21,
0xf2000320, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("FTOH", "", 1, FpuMeta21,
0xf2000300, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("DTOI", "", 1, FpuMeta21,
0xf2002120, 0xff842fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("FTOI", "", 1, FpuMeta21,
0xf2002100, 0xff842fbf, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("DTOL", "", 1, FpuMeta21,
0xf2002320, 0xff8c6fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("DTOX", "", 1, FpuMeta21,
0xf2000020, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
FCOND_INSN ("FTOX", "", 1, FpuMeta21,
0xf2000000, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
FCOND_INSN ("DTOXL", "", 1, FpuMeta21,
0xf20000a0, 0xff8c40ff, INSN_FPU, ENC_FCONVX, 0),
FCOND_INSN ("HTOD", "", 1, FpuMeta21,
0xf2000321, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("HTOF", "", 1, FpuMeta21,
0xf2000301, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("ITOD", "", 1, FpuMeta21,
0xf2002121, 0xff843fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("ITOF", "", 1, FpuMeta21,
0xf2002101, 0xff843fbf, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("LTOD", "", 1, FpuMeta21,
0xf2002321, 0xff8c7fff, INSN_FPU, ENC_FCONV, 0),
FCOND_INSN ("XTOD", "", 1, FpuMeta21,
0xf2000021, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
FCOND_INSN ("XTOF", "", 1, FpuMeta21,
0xf2000001, 0xff8401bf, INSN_FPU, ENC_FCONVX, 0),
FCOND_INSN ("XLTOD", "", 1, FpuMeta21,
0xf20000a1, 0xff8c40ff, INSN_FPU, ENC_FCONVX, 0),
/* FP basic arithmetic instructions */
FCOND_INSN ("ADD", "", 1, FpuMeta21,
0xf1000001, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
FCOND_INSN ("MUL", "", 1, FpuMeta21,
0xf1000100, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
FCOND_INSN ("SUB", "", 1, FpuMeta21,
0xf1000101, 0xff84211f, INSN_FPU, ENC_FBARITH, 0),
/* FP extended arithmetic instructions */
{ "MAC", FpuMeta21,
0xf6000000, 0xfffc219f, INSN_FPU, ENC_FEARITH, 0 },
{ "MACS", FpuMeta21,
0xf6000100, 0xfffc219f, INSN_FPU, ENC_FEARITH, 0 },
{ "MAR", FpuMeta21,
0xf6000004, 0xff84211f, INSN_FPU, ENC_FEARITH, 0 },
{ "MARS", FpuMeta21,
0xf6000104, 0xff84211f, INSN_FPU, ENC_FEARITH, 0 },
{ "MAW", FpuMeta21,
0xf6000008, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
{ "MAWS", FpuMeta21,
0xf6000108, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
{ "MAW1", FpuMeta21,
0xf6000009, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
{ "MAWS1", FpuMeta21,
0xf6000109, 0xff84219f, INSN_FPU, ENC_FEARITH, 0 },
FCOND_INSN ("MXA", "", 1, FpuMeta21,
0xf5000000, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
FCOND_INSN ("MXAS", "", 1, FpuMeta21,
0xf5000100, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
FCOND_INSN ("MXA1", "", 1, FpuMeta21,
0xf5000001, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
FCOND_INSN ("MXAS1", "", 1, FpuMeta21,
0xf5000101, 0xff84211f, INSN_FPU, ENC_FEARITH, 0),
{ "MUZ", FpuMeta21,
0xf6000010, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
{ "MUZS", FpuMeta21,
0xf6000110, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
{ "MUZ1", FpuMeta21,
0xf6000011, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
{ "MUZS1", FpuMeta21,
0xf6000111, 0xff84211d, INSN_FPU, ENC_FEARITH, 0 },
{ "RCP", FpuMeta21,
0xf7000000, 0xff84391f, INSN_FPU, ENC_FREC, 0 },
{ "RSQ", FpuMeta21,
0xf7000100, 0xff84391f, INSN_FPU, ENC_FREC, 0 },
/* FP SIMD arithmetic instructions */
{ "ADDRE", FpuMeta21,
0xf4000000, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
{ "MULRE", FpuMeta21,
0xf4000001, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
{ "SUBRE", FpuMeta21,
0xf4000100, 0xff8c637f, INSN_FPU, ENC_FSIMD, 0 },
/* FP memory instructions */
{ "MGETD", FpuMeta21,
0xce000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
{ "MGET", FpuMeta21,
0xce000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
{ "MGETL", FpuMeta21,
0xcf000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
{ "MSETD", FpuMeta21,
0xbe000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
{ "MSET", FpuMeta21,
0xbe000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
{ "MSETL", FpuMeta21,
0xbf000000, 0xff00001f, INSN_FPU, ENC_MGET_MSET, 0 },
/* FP accumulator memory instructions */
{ "GETL", FpuMeta21,
0xcf000004, 0xffe03f9f, INSN_FPU, ENC_FGET_SET_ACF, 0 },
{ "SETL", FpuMeta21,
0xbf000004, 0xffe03f9f, INSN_FPU, ENC_FGET_SET_ACF, 0 },
/* DSP FPU data movement */
{ "MOV", DspMeta21|FpuMeta21,
0x08000146, 0xfe0001ee, INSN_DSP_FPU, ENC_DALU,
DSP_ARGS_2|DSP_ARGS_DSP_SRC1 },
{ "MOV", DspMeta21|FpuMeta21,
0x080001c6, 0xfe0001ee, INSN_DSP_FPU, ENC_DALU,
DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
/* Unit-to-unit MOV */
COND_INSN ("MOV", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa3000000, 0xff00021f, INSN_GP, ENC_MOV_U2U, 0),
COND_INSN ("TTMOV", "", 1, CoreMeta12|CoreMeta21,
0xa3000201, 0xff00021f, INSN_GP, ENC_MOV_U2U, 0),
COND_INSN ("SWAP", "", 1, CoreMeta11|CoreMeta12|CoreMeta21,
0xa3000200, 0xff00021f, INSN_GP, ENC_SWAP, 0),
/* DSP memory instructions */
{ "GETD", DspMeta21,
0x94000100, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
{ "SETD", DspMeta21,
0x94000000, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
{ "GETL", DspMeta21,
0x94000104, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
{ "SETL", DspMeta21,
0x94000004, 0xff0001fc, INSN_DSP, ENC_DGET_SET, 0 },
/* DSP read pipeline prime/drain */
{ "MMOVD", DspMeta21,
0xca000001, 0xff00001f, INSN_DSP, ENC_MMOV, 0 },
{ "MMOVL", DspMeta21,
0xcb000001, 0xff00001f, INSN_DSP, ENC_MMOV, 0 },
{ "MMOVD", DspMeta21,
0xcc000001, 0xff07c067, INSN_DSP, ENC_MMOV, 0 },
{ "MMOVL", DspMeta21,
0xcd000001, 0xff07c067, INSN_DSP, ENC_MMOV, 0 },
/* DSP Template instantiation */
TEMPLATE_INSN (DspMeta21, 0x90000000, 0xff00000f, INSN_DSP),
TEMPLATE_INSN (DspMeta21, 0x93000000, 0xff0001ff, INSN_DSP),
TEMPLATE_INSN (DspMeta21, 0x95000000, 0xff00000f, INSN_DSP),
{ "AND", DspMeta21,
0x22000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "ANDS", DspMeta21,
0x28000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "ANDS", DspMeta21,
0x2a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "MAX", DspMeta21,
0x70000124, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "MIN", DspMeta21,
0x70000120, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "NMIN", DspMeta21,
0x7000012c, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "OR", DspMeta21,
0x30000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "OR", DspMeta21,
0x32000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "ORS", DspMeta21,
0x38000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "ORS", DspMeta21,
0x3a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "XOR", DspMeta21,
0x40000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "XOR", DspMeta21,
0x42000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "XORS", DspMeta21,
0x48000100, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1 },
{ "XORS", DspMeta21,
0x4a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "ADDB8", DspMeta21,
0x20000108, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "ADDT8", DspMeta21,
0x2000010c, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "ADDSB8", DspMeta21,
0x28000108, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "ADDST8", DspMeta21,
0x2800010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "MULB8", DspMeta21,
0x40000108, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "MULT8", DspMeta21,
0x4000010c, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "MULSB8", DspMeta21,
0x48000108, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "MULST8", DspMeta21,
0x4800010c, 0xfe00012c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "SUBB8", DspMeta21,
0x30000108, 0xfe00010c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "SUBT8", DspMeta21,
0x3000010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "SUBSB8", DspMeta21,
0x38000108, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "SUBST8", DspMeta21,
0x3800010c, 0xfe00014c, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_SPLIT8 },
{ "MUL", DspMeta21,
0x60000100, 0xfe000100, INSN_DSP, ENC_DALU,
DSP_ARGS_1|DSP_ARGS_DACC },
{ "MUL", DspMeta21,
0x62000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_1|DSP_ARGS_IMM },
{ "ABS", DspMeta21,
0x70000128, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "FFB", DspMeta21,
0x70000104, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "NORM", DspMeta21,
0x70000108, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "CMP", DspMeta21,
0x70000000, 0xfe0000ec, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
{ "CMP", DspMeta21,
0x72000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
{ "TST", DspMeta21,
0x78000100, 0xfe0001ec, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
{ "TST", DspMeta21,
0x7a000003, 0xfe000003, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_IMM },
{ "MOV", DspMeta21,
0x00000104, 0xfe078146, INSN_DSP, ENC_DALU,
DSP_ARGS_2|DSP_ARGS_DSP_SRC1|DSP_ARGS_DSP_SRC2|DSP_ARGS_IMM },
{ "MOVS", DspMeta21,
0x08000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
{ "MOV", DspMeta21,
0x91000000, 0xff000000, INSN_DSP, ENC_DALU,
DSP_ARGS_2|DSP_ARGS_DSP_SRC1|DSP_ARGS_IMM },
{ "MOV", DspMeta21,
0x92000000, 0xff000000, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
{ "NEG", DspMeta21,
0x10000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
{ "NEGS", DspMeta21,
0x18000104, 0xfe000146, INSN_DSP, ENC_DALU, DSP_ARGS_2|DSP_ARGS_DSP_SRC2 },
{ "XSDB", DspMeta21,
0xaa000100, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "XSD", DspMeta21,
0xaa000100, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "XSDW", DspMeta21,
0xaa000102, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "XSDSB", DspMeta21,
0xaa000108, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "XSDS", DspMeta21,
0xaa000108, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "XSDSW", DspMeta21,
0xaa00010a, 0xff0001ee, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "LSL", DspMeta21,
0x50000100, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
{ "LSR", DspMeta21,
0x50000140, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
{ "ASL", DspMeta21,
0x50000180, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
{ "ASR", DspMeta21,
0x500001c0, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
{ "LSL", DspMeta21,
0x54000120, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
{ "LSR", DspMeta21,
0x54000160, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
{ "ASL", DspMeta21,
0x540001a0, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
{ "ASR", DspMeta21,
0x540001e0, 0xfc0001e0, INSN_DSP, ENC_DALU, DSP_ARGS_IMM },
COND_INSN ("LSL", "", 1, DspMeta21,
0x54000100, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
COND_INSN ("LSR", "", 1, DspMeta21,
0x54000140, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
COND_INSN ("ASL", "", 1, DspMeta21,
0x54000180, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
COND_INSN ("ASR", "", 1, DspMeta21,
0x540001c0, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
{ "LSLS", DspMeta21,
0x58000100, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
{ "LSRS", DspMeta21,
0x58000140, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
{ "ASLS", DspMeta21,
0x58000180, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
{ "ASRS", DspMeta21,
0x580001c0, 0xfc0001c0, INSN_DSP, ENC_DALU, 0 },
COND_INSN ("LSLS", "", 1, DspMeta21,
0x5c000100, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
COND_INSN ("LSRS", "", 1, DspMeta21,
0x5c000140, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
COND_INSN ("ASLS", "", 1, DspMeta21,
0x5c000180, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
COND_INSN ("ASRS", "", 1, DspMeta21,
0x5c0001c0, 0xfc0001fe, INSN_DSP, ENC_DALU, 0),
{ "LSLS", DspMeta21,
0x5c000120, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
{ "LSRS", DspMeta21,
0x5c000160, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
{ "ASLS", DspMeta21,
0x5c0001a0, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
{ "ASRS", DspMeta21,
0x5c0001e0, 0xfc0001e0, INSN_DSP, ENC_DALU, 0 },
{ "RTDW", DspMeta21,
0xaa000106, 0xff00010e, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
{ "RTDSW", DspMeta21,
0xaa00010e, 0xff00010e, INSN_DSP, ENC_DALU, DSP_ARGS_2 },
};
#define UNIT_MASK 0xf
#define SHORT_UNIT_MASK 0x3
#define EXT_BASE_REG_MASK 0x1
#define REG_MASK 0x1f
#define CC_MASK 0xf
#define RMASK_MASK 0x7f
#define GET_SET_IMM_MASK 0x3f
#define GET_SET_IMM_BITS 6
#define GET_SET_EXT_IMM_MASK 0xfff
#define GET_SET_EXT_IMM_BITS 12
#define DGET_SET_IMM_MASK 0x3
#define DGET_SET_IMM_BITS 2
#define MGET_MSET_MAX_REGS 8
#define MMOV_MAX_REGS 8
#define IMM16_MASK 0xffff
#define IMM16_BITS 16
#define IMM19_MASK 0x7ffff
#define IMM19_BITS 19
#define IMM8_MASK 0xff
#define IMM8_BITS 8
#define IMM24_MASK 0xffffff
#define IMM24_BITS 24
#define IMM5_MASK 0x1f
#define IMM5_BITS 5
#define IMM6_MASK 0x3f
#define IMM6_BITS 6
#define IMM15_MASK 0x7fff
#define IMM15_BITS 15
#define IMM4_MASK 0x1f
#define IMM4_BITS 4
#define CALLR_REG_MASK 0x7
#define CPC_REG_MASK 0xf
#define O2R_REG_MASK 0x7
#define ACF_PART_MASK 0x3
#define DSP_REG_MASK 0xf
#define DSP_PART_MASK 0x17
#define TEMPLATE_NUM_REGS 4
#define TEMPLATE_REGS_MASK 0xf
#define IS_TEMPLATE_DEF(insn) (insn->dsp_daoppame_flags & DSP_DAOPPAME_TEMP)
unsigned int metag_get_set_size_bytes (unsigned int opcode);
unsigned int metag_get_set_ext_size_bytes (unsigned int opcode);
unsigned int metag_cond_set_size_bytes (unsigned int opcode);
#ifdef __cplusplus
}
#endif