X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fm32r-opc.c;h=fdc9f50ed863614a2f7fd3ee6792b7611c0ef10a;hb=e2e1fcde622f2f6cedfd7fb6615aa6e136f21dec;hp=36ce392c83ffc7661ab50bfca8ed73e5fdb460a6;hpb=23cf992f4ac3a325ebf015b22955a359a986a488;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/m32r-opc.c b/opcodes/m32r-opc.c index 36ce392c83..fdc9f50ed8 100644 --- a/opcodes/m32r-opc.c +++ b/opcodes/m32r-opc.c @@ -1,1581 +1,1808 @@ -/* CGEN opcode support for m32r. +/* Instruction opcode table for m32r. -This file is machine generated. +THIS FILE IS MACHINE GENERATED WITH CGEN. -Copyright (C) 1996, 1997 Free Software Foundation, Inc. +Copyright 1996-2010 Free Software Foundation, Inc. This file is part of the GNU Binutils and/or GDB, the GNU debugger. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. + This file is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + It is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ - #include "sysdep.h" -#include #include "ansidecl.h" -#include "libiberty.h" #include "bfd.h" +#include "symcat.h" +#include "m32r-desc.h" #include "m32r-opc.h" +#include "libiberty.h" -/* Attributes. */ - -static const CGEN_ATTR_ENTRY MACH_attr[] = { - { "m32r", MACH_M32R }, - { "m32rx", MACH_M32RX }, - { 0, 0 } -}; - -static const CGEN_ATTR_ENTRY PIPE_attr[] = { - { "NONE", PIPE_NONE }, - { "O", PIPE_O }, - { "S", PIPE_S }, - { "OS", PIPE_OS }, - { 0, 0 } -}; - -const CGEN_ATTR_TABLE m32r_cgen_operand_attr_table[] = { - { "ABS-ADDR", NULL }, - { "FAKE", NULL }, - { "NEGATIVE", NULL }, - { "PC", NULL }, - { "PCREL-ADDR", NULL }, - { "RELAX", NULL }, - { "RELOC", NULL }, - { "SIGN-OPT", NULL }, - { "UNSIGNED", NULL }, - { 0, 0 } -}; - -const CGEN_ATTR_TABLE m32r_cgen_insn_attr_table[] = { - { "MACH", & MACH_attr[0] }, - { "PIPE", & PIPE_attr[0] }, - { "ALIAS", NULL }, - { "COND-CTI", NULL }, - { "FILL-SLOT", NULL }, - { "PARALLEL", NULL }, - { "RELAX", NULL }, - { "RELAX-BC", NULL }, - { "RELAX-BCL", NULL }, - { "RELAX-BL", NULL }, - { "RELAX-BNC", NULL }, - { "RELAX-BNCL", NULL }, - { "RELAX-BRA", NULL }, - { "RELAXABLE", NULL }, - { "UNCOND-CTI", NULL }, - { 0, 0 } -}; - -CGEN_KEYWORD_ENTRY m32r_cgen_opval_mach_entries[] = { - { "m32r", MACH_M32R }, - { "m32rx", MACH_M32RX } -}; - -CGEN_KEYWORD m32r_cgen_opval_mach = { - & m32r_cgen_opval_mach_entries[0], - 2 -}; - -CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_gr_entries[] = { - { "fp", 13 }, - { "lr", 14 }, - { "sp", 15 }, - { "r0", 0 }, - { "r1", 1 }, - { "r2", 2 }, - { "r3", 3 }, - { "r4", 4 }, - { "r5", 5 }, - { "r6", 6 }, - { "r7", 7 }, - { "r8", 8 }, - { "r9", 9 }, - { "r10", 10 }, - { "r11", 11 }, - { "r12", 12 }, - { "r13", 13 }, - { "r14", 14 }, - { "r15", 15 } -}; - -CGEN_KEYWORD m32r_cgen_opval_h_gr = { - & m32r_cgen_opval_h_gr_entries[0], - 19 -}; - -CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_cr_entries[] = { - { "psw", 0 }, - { "cbr", 1 }, - { "spi", 2 }, - { "spu", 3 }, - { "bpc", 6 }, - { "cr0", 0 }, - { "cr1", 1 }, - { "cr2", 2 }, - { "cr3", 3 }, - { "cr4", 4 }, - { "cr5", 5 }, - { "cr6", 6 } -}; - -CGEN_KEYWORD m32r_cgen_opval_h_cr = { - & m32r_cgen_opval_h_cr_entries[0], - 12 -}; - -CGEN_KEYWORD_ENTRY m32r_cgen_opval_h_accums_entries[] = { - { "a0", 0 }, - { "a1", 1 } -}; - -CGEN_KEYWORD m32r_cgen_opval_h_accums = { - & m32r_cgen_opval_h_accums_entries[0], - 2 -}; - - -static CGEN_HW_ENTRY m32r_cgen_hw_entries[] = { - { & m32r_cgen_hw_entries[1], "h-pc", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[2], "h-memory", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[3], "h-sint", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[4], "h-uint", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[5], "h-addr", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[6], "h-iaddr", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[7], "h-hi16", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[8], "h-slo16", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[9], "h-ulo16", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[10], "h-gr", CGEN_ASM_KEYWORD /*FIXME*/, & m32r_cgen_opval_h_gr }, - { & m32r_cgen_hw_entries[11], "h-cr", CGEN_ASM_KEYWORD /*FIXME*/, & m32r_cgen_opval_h_cr }, - { & m32r_cgen_hw_entries[12], "h-accum", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[13], "h-accums", CGEN_ASM_KEYWORD /*FIXME*/, & m32r_cgen_opval_h_accums }, - { & m32r_cgen_hw_entries[14], "h-abort", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[15], "h-cond", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[16], "h-sm", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[17], "h-bsm", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[18], "h-ie", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[19], "h-bie", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { & m32r_cgen_hw_entries[20], "h-bcond", CGEN_ASM_KEYWORD /*FIXME*/, 0 }, - { NULL, "h-bpc", CGEN_ASM_KEYWORD /*FIXME*/, 0 } -}; - - -const CGEN_OPERAND m32r_cgen_operand_table[CGEN_NUM_OPERANDS] = +/* -- opc.c */ +unsigned int +m32r_cgen_dis_hash (const char * buf ATTRIBUTE_UNUSED, CGEN_INSN_INT value) { -/* pc: program counter */ - { "pc", 0, 0, { 0, 0|(1< $dr,$sr */ -/* 0 */ { OP, ' ', 130, ',', 129, 0 }, -/* $dr,$sr,$slo16 */ -/* 1 */ { OP, ' ', 130, ',', 129, ',', 143, 0 }, -/* $dr,$sr,$uimm16 */ -/* 2 */ { OP, ' ', 130, ',', 129, ',', 139, 0 }, -/* $dr,$sr,$ulo16 */ -/* 3 */ { OP, ' ', 130, ',', 129, ',', 144, 0 }, -/* $dr,$simm8 */ -/* 4 */ { OP, ' ', 130, ',', 135, 0 }, -/* $dr,$sr,$simm16 */ -/* 5 */ { OP, ' ', 130, ',', 129, ',', 136, 0 }, -/* $disp8 */ -/* 6 */ { OP, ' ', 146, 0 }, -/* $disp24 */ -/* 7 */ { OP, ' ', 148, 0 }, -/* $src1,$src2,$disp16 */ -/* 8 */ { OP, ' ', 131, ',', 132, ',', 147, 0 }, -/* $src2,$disp16 */ -/* 9 */ { OP, ' ', 132, ',', 147, 0 }, -/* $src1,$src2 */ -/* 10 */ { OP, ' ', 131, ',', 132, 0 }, -/* $src2,$simm16 */ -/* 11 */ { OP, ' ', 132, ',', 136, 0 }, -/* $src2,$uimm16 */ -/* 12 */ { OP, ' ', 132, ',', 139, 0 }, -/* $src2 */ -/* 13 */ { OP, ' ', 132, 0 }, -/* $sr */ -/* 14 */ { OP, ' ', 129, 0 }, -/* $dr,@$sr */ -/* 15 */ { OP, ' ', 130, ',', '@', 129, 0 }, -/* $dr,@($sr) */ -/* 16 */ { OP, ' ', 130, ',', '@', '(', 129, ')', 0 }, -/* $dr,@($slo16,$sr) */ -/* 17 */ { OP, ' ', 130, ',', '@', '(', 143, ',', 129, ')', 0 }, -/* $dr,@($sr,$slo16) */ -/* 18 */ { OP, ' ', 130, ',', '@', '(', 129, ',', 143, ')', 0 }, -/* $dr,@$sr+ */ -/* 19 */ { OP, ' ', 130, ',', '@', 129, '+', 0 }, -/* $dr,$uimm24 */ -/* 20 */ { OP, ' ', 130, ',', 145, 0 }, -/* $dr,$slo16 */ -/* 21 */ { OP, ' ', 130, ',', 143, 0 }, -/* $src1,$src2,$acc */ -/* 22 */ { OP, ' ', 131, ',', 132, ',', 141, 0 }, -/* $dr */ -/* 23 */ { OP, ' ', 130, 0 }, -/* $dr,$accs */ -/* 24 */ { OP, ' ', 130, ',', 141, 0 }, -/* $dr,$scr */ -/* 25 */ { OP, ' ', 130, ',', 133, 0 }, -/* $src1 */ -/* 26 */ { OP, ' ', 131, 0 }, -/* $src1,$accs */ -/* 27 */ { OP, ' ', 131, ',', 141, 0 }, -/* $sr,$dcr */ -/* 28 */ { OP, ' ', 129, ',', 134, 0 }, -/* */ -/* 29 */ { OP, 0 }, -/* $acc-s */ -/* 30 */ { OP, ' ', 141, 0 }, -/* $dr,$hi16 */ -/* 31 */ { OP, ' ', 130, ',', 142, 0 }, -/* $dr,$uimm5 */ -/* 32 */ { OP, ' ', 130, ',', 138, 0 }, -/* $src1,@$src2 */ -/* 33 */ { OP, ' ', 131, ',', '@', 132, 0 }, -/* $src1,@($src2) */ -/* 34 */ { OP, ' ', 131, ',', '@', '(', 132, ')', 0 }, -/* $src1,@($slo16,$src2) */ -/* 35 */ { OP, ' ', 131, ',', '@', '(', 143, ',', 132, ')', 0 }, -/* $src1,@($src2,$slo16) */ -/* 36 */ { OP, ' ', 131, ',', '@', '(', 132, ',', 143, ')', 0 }, -/* $src1,@+$src2 */ -/* 37 */ { OP, ' ', 131, ',', '@', '+', 132, 0 }, -/* $src1,@-$src2 */ -/* 38 */ { OP, ' ', 131, ',', '@', '-', 132, 0 }, -/* $uimm4 */ -/* 39 */ { OP, ' ', 137, 0 }, -/* $dr,$src2 */ -/* 40 */ { OP, ' ', 130, ',', 132, 0 }, + unsigned int x; + + if (value & 0xffff0000) /* 32bit instructions. */ + value = (value >> 16) & 0xffff; + + x = (value >> 8) & 0xf0; + if (x == 0x40 || x == 0xe0 || x == 0x60 || x == 0x50) + return x; + + if (x == 0x70 || x == 0xf0) + return x | ((value >> 8) & 0x0f); + + if (x == 0x30) + return x | ((value & 0x70) >> 4); + else + return x | ((value & 0xf0) >> 4); +} + +/* -- */ +/* The hash functions are recorded here to help keep assembler code out of + the disassembler and vice versa. */ + +static int asm_hash_insn_p (const CGEN_INSN *); +static unsigned int asm_hash_insn (const char *); +static int dis_hash_insn_p (const CGEN_INSN *); +static unsigned int dis_hash_insn (const char *, CGEN_INSN_INT); + +/* Instruction formats. */ + +#define F(f) & m32r_cgen_ifld_table[M32R_##f] +static const CGEN_IFMT ifmt_empty ATTRIBUTE_UNUSED = { + 0, 0, 0x0, { { 0 } } }; -#undef OP +static const CGEN_IFMT ifmt_add ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_add3 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_and3 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_or3 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_addi ATTRIBUTE_UNUSED = { + 16, 16, 0xf000, { { F (F_OP1) }, { F (F_R1) }, { F (F_SIMM8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_addv3 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_bc8 ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_bc24 ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_beq ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_DISP16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_beqz ATTRIBUTE_UNUSED = { + 32, 32, 0xfff00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_DISP16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_cmp ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_cmpi ATTRIBUTE_UNUSED = { + 32, 32, 0xfff00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_cmpz ATTRIBUTE_UNUSED = { + 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_div ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f0ffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_jc ATTRIBUTE_UNUSED = { + 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ld24 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_UIMM24) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldi16 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_machi_a ATTRIBUTE_UNUSED = { + 16, 16, 0xf070, { { F (F_OP1) }, { F (F_R1) }, { F (F_ACC) }, { F (F_OP23) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_mvfachi ATTRIBUTE_UNUSED = { + 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_mvfachi_a ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f3, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_OP3) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_mvfc ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_mvtachi ATTRIBUTE_UNUSED = { + 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_mvtachi_a ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f3, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_OP3) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_mvtc ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_nop ATTRIBUTE_UNUSED = { + 16, 16, 0xffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_rac_dsi ATTRIBUTE_UNUSED = { + 16, 16, 0xf3f2, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_seth ATTRIBUTE_UNUSED = { + 32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_HI16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_slli ATTRIBUTE_UNUSED = { + 16, 16, 0xf0e0, { { F (F_OP1) }, { F (F_R1) }, { F (F_SHIFT_OP2) }, { F (F_UIMM5) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_st_d ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_trap ATTRIBUTE_UNUSED = { + 16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_UIMM4) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_satb ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f0ffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_clrpsw ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_UIMM8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_bset ATTRIBUTE_UNUSED = { + 32, 32, 0xf8f00000, { { F (F_OP1) }, { F (F_BIT4) }, { F (F_UIMM3) }, { F (F_OP2) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_btst ATTRIBUTE_UNUSED = { + 16, 16, 0xf8f0, { { F (F_OP1) }, { F (F_BIT4) }, { F (F_UIMM3) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +#undef F -static const CGEN_FORMAT format_table[] = { -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr. */ -/* 0 */ { 16, 16, 0xf0f0 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-simm16.slo16. */ -/* 1 */ { 32, 32, 0xf0f00000 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-uimm16.uimm16. */ -/* 2 */ { 32, 32, 0xf0f00000 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-uimm16.ulo16. */ -/* 3 */ { 32, 32, 0xf0f00000 }, -/* f-op1.number.f-r1.dr.f-simm8.simm8. */ -/* 4 */ { 16, 16, 0xf000 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-simm16.simm16. */ -/* 5 */ { 32, 32, 0xf0f00000 }, -/* f-op1.number.f-r1.number.f-disp8.disp8. */ -/* 6 */ { 16, 16, 0xff00 }, -/* f-op1.number.f-r1.number.f-disp24.disp24. */ -/* 7 */ { 32, 32, 0xff000000 }, -/* f-op1.number.f-r1.src1.f-op2.number.f-r2.src2.f-disp16.disp16. */ -/* 8 */ { 32, 32, 0xf0f00000 }, -/* f-op1.number.f-r1.number.f-op2.number.f-r2.src2.f-disp16.disp16. */ -/* 9 */ { 32, 32, 0xfff00000 }, -/* f-op1.number.f-r1.src1.f-op2.number.f-r2.src2. */ -/* 10 */ { 16, 16, 0xf0f0 }, -/* f-op1.number.f-r1.number.f-op2.number.f-r2.src2.f-simm16.simm16. */ -/* 11 */ { 32, 32, 0xfff00000 }, -/* f-op1.number.f-r1.number.f-op2.number.f-r2.src2.f-uimm16.uimm16. */ -/* 12 */ { 32, 32, 0xfff00000 }, -/* f-op1.number.f-r1.number.f-op2.number.f-r2.src2. */ -/* 13 */ { 16, 16, 0xfff0 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.sr.f-simm16.number. */ -/* 14 */ { 32, 32, 0xf0f0ffff }, -/* f-op1.number.f-r1.number.f-op2.number.f-r2.sr. */ -/* 15 */ { 16, 16, 0xfff0 }, -/* f-op1.number.f-r1.dr.f-uimm24.uimm24. */ -/* 16 */ { 32, 32, 0xf0000000 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.number.f-simm16.slo16. */ -/* 17 */ { 32, 32, 0xf0ff0000 }, -/* f-op1.number.f-r1.src1.f-acc.acc.f-op23.number.f-r2.src2. */ -/* 18 */ { 16, 16, 0xf070 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.number. */ -/* 19 */ { 16, 16, 0xf0ff }, -/* f-op1.number.f-r1.dr.f-op2.number.f-acc-s.acc-s.f-op3.number. */ -/* 20 */ { 16, 16, 0xf0f3 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.scr. */ -/* 21 */ { 16, 16, 0xf0f0 }, -/* f-op1.number.f-r1.src1.f-op2.number.f-r2.number. */ -/* 22 */ { 16, 16, 0xf0ff }, -/* f-op1.number.f-r1.src1.f-op2.number.f-acc-s.acc-s.f-op3.number. */ -/* 23 */ { 16, 16, 0xf0f3 }, -/* f-op1.number.f-r1.dcr.f-op2.number.f-r2.sr. */ -/* 24 */ { 16, 16, 0xf0f0 }, -/* f-op1.number.f-r1.number.f-op2.number.f-r2.number. */ -/* 25 */ { 16, 16, 0xffff }, -/* f-op1.number.f-r1.number.f-op2.number.f-acc-s.acc-s.f-op3.number. */ -/* 26 */ { 16, 16, 0xfff3 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.number.f-hi16.hi16. */ -/* 27 */ { 32, 32, 0xf0ff0000 }, -/* f-op1.number.f-r1.dr.f-shift-op2.number.f-uimm5.uimm5. */ -/* 28 */ { 16, 16, 0xf0e0 }, -/* f-op1.number.f-r1.src1.f-op2.number.f-r2.src2.f-simm16.slo16. */ -/* 29 */ { 32, 32, 0xf0f00000 }, -/* f-op1.number.f-r1.number.f-op2.number.f-uimm4.uimm4. */ -/* 30 */ { 16, 16, 0xfff0 }, -/* f-op1.number.f-r1.dr.f-op2.number.f-r2.src2.f-uimm16.number. */ -/* 31 */ { 32, 32, 0xf0f0ffff }, -}; - -#define A(a) (1 << CGEN_CAT3 (CGEN_INSN,_,a)) -#define SYN(n) (& syntax_table[n]) -#define FMT(n) (& format_table[n]) - -const CGEN_INSN m32r_cgen_insn_table_entries[CGEN_NUM_INSNS] = { -/* null first entry, end of all hash chains */ - { { 0 }, 0 }, +#define A(a) (1 << CGEN_INSN_##a) +#define OPERAND(op) M32R_OPERAND_##op +#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ +#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) + +/* The instruction table. */ + +static const CGEN_OPCODE m32r_cgen_insn_opcode_table[MAX_INSNS] = +{ + /* Special null first entry. + A `num' value of zero is thus invalid. + Also, the special `invalid' insn resides here. */ + { { 0, 0, 0, 0 }, {{0}}, 0, {0}}, /* add $dr,$sr */ { - { 1, 1, 1, 1 }, - "add", "add", SYN (0), FMT (0), 0xa0, - { 2, 0|A(PARALLEL), { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0xa0 } }, -/* add3 $dr,$sr,$slo16 */ +/* add3 $dr,$sr,$hash$slo16 */ { - { 1, 1, 1, 1 }, - "add3", "add3", SYN (1), FMT (1), 0x80a00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (SLO16), 0 } }, + & ifmt_add3, { 0x80a00000 } }, /* and $dr,$sr */ { - { 1, 1, 1, 1 }, - "and", "and", SYN (0), FMT (0), 0xc0, - { 2, 0|A(PARALLEL), { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0xc0 } }, /* and3 $dr,$sr,$uimm16 */ { - { 1, 1, 1, 1 }, - "and3", "and3", SYN (2), FMT (2), 0x80c00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } }, + & ifmt_and3, { 0x80c00000 } }, /* or $dr,$sr */ { - { 1, 1, 1, 1 }, - "or", "or", SYN (0), FMT (0), 0xe0, - { 2, 0|A(PARALLEL), { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0xe0 } }, -/* or3 $dr,$sr,$ulo16 */ +/* or3 $dr,$sr,$hash$ulo16 */ { - { 1, 1, 1, 1 }, - "or3", "or3", SYN (3), FMT (3), 0x80e00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (ULO16), 0 } }, + & ifmt_or3, { 0x80e00000 } }, /* xor $dr,$sr */ { - { 1, 1, 1, 1 }, - "xor", "xor", SYN (0), FMT (0), 0xd0, - { 2, 0|A(PARALLEL), { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0xd0 } }, /* xor3 $dr,$sr,$uimm16 */ { - { 1, 1, 1, 1 }, - "xor3", "xor3", SYN (2), FMT (2), 0x80d00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } }, + & ifmt_and3, { 0x80d00000 } }, /* addi $dr,$simm8 */ { - { 1, 1, 1, 1 }, - "addi", "addi", SYN (4), FMT (4), 0x4000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } }, + & ifmt_addi, { 0x4000 } }, /* addv $dr,$sr */ { - { 1, 1, 1, 1 }, - "addv", "addv", SYN (0), FMT (0), 0x80, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x80 } }, /* addv3 $dr,$sr,$simm16 */ { - { 1, 1, 1, 1 }, - "addv3", "addv3", SYN (5), FMT (5), 0x80800000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } }, + & ifmt_addv3, { 0x80800000 } }, /* addx $dr,$sr */ { - { 1, 1, 1, 1 }, - "addx", "addx", SYN (0), FMT (0), 0x90, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } - }, -/* bc $disp8 */ - { - { 1, 1, 1, 1 }, - "bc8", "bc", SYN (6), FMT (6), 0x7c00, - { 2, 0|A(RELAX_BC)|A(RELAXABLE)|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x90 } }, /* bc.s $disp8 */ { - { 1, 1, 1, 1 }, - "bc8.s", "bc.s", SYN (6), FMT (6), 0x7c00, - { 2, 0|A(ALIAS)|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } - }, -/* bc $disp24 */ - { - { 1, 1, 1, 1 }, - "bc24", "bc", SYN (7), FMT (7), 0xfc000000, - { 2, 0|A(RELAX_BC)|A(RELAX)|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP8), 0 } }, + & ifmt_bc8, { 0x7c00 } }, /* bc.l $disp24 */ { - { 1, 1, 1, 1 }, - "bc24.l", "bc.l", SYN (7), FMT (7), 0xfc000000, - { 2, 0|A(ALIAS)|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP24), 0 } }, + & ifmt_bc24, { 0xfc000000 } }, /* beq $src1,$src2,$disp16 */ { - { 1, 1, 1, 1 }, - "beq", "beq", SYN (8), FMT (8), 0xb0000000, - { 2, 0|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beq, { 0xb0000000 } }, /* beqz $src2,$disp16 */ { - { 1, 1, 1, 1 }, - "beqz", "beqz", SYN (9), FMT (9), 0xb0800000, - { 2, 0|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beqz, { 0xb0800000 } }, /* bgez $src2,$disp16 */ { - { 1, 1, 1, 1 }, - "bgez", "bgez", SYN (9), FMT (9), 0xb0b00000, - { 2, 0|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beqz, { 0xb0b00000 } }, /* bgtz $src2,$disp16 */ { - { 1, 1, 1, 1 }, - "bgtz", "bgtz", SYN (9), FMT (9), 0xb0d00000, - { 2, 0|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beqz, { 0xb0d00000 } }, /* blez $src2,$disp16 */ { - { 1, 1, 1, 1 }, - "blez", "blez", SYN (9), FMT (9), 0xb0c00000, - { 2, 0|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beqz, { 0xb0c00000 } }, /* bltz $src2,$disp16 */ { - { 1, 1, 1, 1 }, - "bltz", "bltz", SYN (9), FMT (9), 0xb0a00000, - { 2, 0|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beqz, { 0xb0a00000 } }, /* bnez $src2,$disp16 */ { - { 1, 1, 1, 1 }, - "bnez", "bnez", SYN (9), FMT (9), 0xb0900000, - { 2, 0|A(COND_CTI), { 0 } } - }, -/* bl $disp8 */ - { - { 1, 1, 1, 1 }, - "bl8", "bl", SYN (6), FMT (6), 0x7e00, - { 2, 0|A(FILL_SLOT)|A(RELAX_BL)|A(RELAXABLE)|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beqz, { 0xb0900000 } }, /* bl.s $disp8 */ { - { 1, 1, 1, 1 }, - "bl8.s", "bl.s", SYN (6), FMT (6), 0x7e00, - { 2, 0|A(FILL_SLOT)|A(ALIAS)|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } - }, -/* bl $disp24 */ - { - { 1, 1, 1, 1 }, - "bl24", "bl", SYN (7), FMT (7), 0xfe000000, - { 2, 0|A(RELAX_BL)|A(RELAX)|A(UNCOND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP8), 0 } }, + & ifmt_bc8, { 0x7e00 } }, /* bl.l $disp24 */ { - { 1, 1, 1, 1 }, - "bl24.l", "bl.l", SYN (7), FMT (7), 0xfe000000, - { 2, 0|A(ALIAS)|A(UNCOND_CTI), { 0 } } - }, -/* bcl $disp8 */ - { - { 1, 1, 1, 1 }, - "bcl8", "bcl", SYN (6), FMT (6), 0x7800, - { 2, 0|A(RELAX_BCL)|A(RELAXABLE)|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP24), 0 } }, + & ifmt_bc24, { 0xfe000000 } }, /* bcl.s $disp8 */ { - { 1, 1, 1, 1 }, - "bcl8.s", "bcl.s", SYN (6), FMT (6), 0x7800, - { 2, 0|A(ALIAS)|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } - }, -/* bcl $disp24 */ - { - { 1, 1, 1, 1 }, - "bcl24", "bcl", SYN (7), FMT (7), 0xf8000000, - { 2, 0|A(RELAX_BCL)|A(RELAX)|A(COND_CTI), { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP8), 0 } }, + & ifmt_bc8, { 0x7800 } }, /* bcl.l $disp24 */ { - { 1, 1, 1, 1 }, - "bcl24.l", "bcl.l", SYN (7), FMT (7), 0xf8000000, - { 2, 0|A(ALIAS)|A(COND_CTI), { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } - }, -/* bnc $disp8 */ - { - { 1, 1, 1, 1 }, - "bnc8", "bnc", SYN (6), FMT (6), 0x7d00, - { 2, 0|A(RELAX_BNC)|A(RELAXABLE)|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP24), 0 } }, + & ifmt_bc24, { 0xf8000000 } }, /* bnc.s $disp8 */ { - { 1, 1, 1, 1 }, - "bnc8.s", "bnc.s", SYN (6), FMT (6), 0x7d00, - { 2, 0|A(ALIAS)|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } - }, -/* bnc $disp24 */ - { - { 1, 1, 1, 1 }, - "bnc24", "bnc", SYN (7), FMT (7), 0xfd000000, - { 2, 0|A(RELAX_BNC)|A(RELAX)|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP8), 0 } }, + & ifmt_bc8, { 0x7d00 } }, /* bnc.l $disp24 */ { - { 1, 1, 1, 1 }, - "bnc24.l", "bnc.l", SYN (7), FMT (7), 0xfd000000, - { 2, 0|A(ALIAS)|A(COND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP24), 0 } }, + & ifmt_bc24, { 0xfd000000 } }, /* bne $src1,$src2,$disp16 */ { - { 1, 1, 1, 1 }, - "bne", "bne", SYN (8), FMT (8), 0xb0100000, - { 2, 0|A(COND_CTI), { 0 } } - }, -/* bra $disp8 */ - { - { 1, 1, 1, 1 }, - "bra8", "bra", SYN (6), FMT (6), 0x7f00, - { 2, 0|A(FILL_SLOT)|A(RELAX_BRA)|A(RELAXABLE)|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } }, + & ifmt_beq, { 0xb0100000 } }, /* bra.s $disp8 */ { - { 1, 1, 1, 1 }, - "bra8.s", "bra.s", SYN (6), FMT (6), 0x7f00, - { 2, 0|A(ALIAS)|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } - }, -/* bra $disp24 */ - { - { 1, 1, 1, 1 }, - "bra24", "bra", SYN (7), FMT (7), 0xff000000, - { 2, 0|A(RELAX_BRA)|A(RELAX)|A(UNCOND_CTI), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP8), 0 } }, + & ifmt_bc8, { 0x7f00 } }, /* bra.l $disp24 */ { - { 1, 1, 1, 1 }, - "bra24.l", "bra.l", SYN (7), FMT (7), 0xff000000, - { 2, 0|A(ALIAS)|A(UNCOND_CTI), { 0 } } - }, -/* bncl $disp8 */ - { - { 1, 1, 1, 1 }, - "bncl8", "bncl", SYN (6), FMT (6), 0x7900, - { 2, 0|A(RELAX_BNCL)|A(RELAXABLE)|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP24), 0 } }, + & ifmt_bc24, { 0xff000000 } }, /* bncl.s $disp8 */ { - { 1, 1, 1, 1 }, - "bncl8.s", "bncl.s", SYN (6), FMT (6), 0x7900, - { 2, 0|A(ALIAS)|A(COND_CTI), { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } - }, -/* bncl $disp24 */ - { - { 1, 1, 1, 1 }, - "bncl24", "bncl", SYN (7), FMT (7), 0xf9000000, - { 2, 0|A(RELAX_BNC)|A(RELAX)|A(COND_CTI), { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP8), 0 } }, + & ifmt_bc8, { 0x7900 } }, /* bncl.l $disp24 */ { - { 1, 1, 1, 1 }, - "bncl24.l", "bncl.l", SYN (7), FMT (7), 0xf9000000, - { 2, 0|A(ALIAS)|A(COND_CTI), { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DISP24), 0 } }, + & ifmt_bc24, { 0xf9000000 } }, /* cmp $src1,$src2 */ { - { 1, 1, 1, 1 }, - "cmp", "cmp", SYN (10), FMT (10), 0x40, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x40 } }, /* cmpi $src2,$simm16 */ { - { 1, 1, 1, 1 }, - "cmpi", "cmpi", SYN (11), FMT (11), 0x80400000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } }, + & ifmt_cmpi, { 0x80400000 } }, /* cmpu $src1,$src2 */ { - { 1, 1, 1, 1 }, - "cmpu", "cmpu", SYN (10), FMT (10), 0x50, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x50 } }, -/* cmpui $src2,$uimm16 */ +/* cmpui $src2,$simm16 */ { - { 1, 1, 1, 1 }, - "cmpui", "cmpui", SYN (12), FMT (12), 0x80500000, - { 2, 0, { [CGEN_INSN_MACH] = (1 << MACH_M32R) | (1 << MACH_M32RX) } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } }, + & ifmt_cmpi, { 0x80500000 } }, /* cmpeq $src1,$src2 */ { - { 1, 1, 1, 1 }, - "cmpeq", "cmpeq", SYN (10), FMT (10), 0x60, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x60 } }, /* cmpz $src2 */ { - { 1, 1, 1, 1 }, - "cmpz", "cmpz", SYN (13), FMT (13), 0x70, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), 0 } }, + & ifmt_cmpz, { 0x70 } }, /* div $dr,$sr */ { - { 1, 1, 1, 1 }, - "div", "div", SYN (0), FMT (14), 0x90000000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90000000 } }, /* divu $dr,$sr */ { - { 1, 1, 1, 1 }, - "divu", "divu", SYN (0), FMT (14), 0x90100000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90100000 } }, /* rem $dr,$sr */ { - { 1, 1, 1, 1 }, - "rem", "rem", SYN (0), FMT (14), 0x90200000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90200000 } }, /* remu $dr,$sr */ { - { 1, 1, 1, 1 }, - "remu", "remu", SYN (0), FMT (14), 0x90300000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90300000 } }, -/* jc $sr */ +/* remh $dr,$sr */ { - { 1, 1, 1, 1 }, - "jc", "jc", SYN (14), FMT (15), 0x1cc0, - { 2, 0|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90200010 } }, -/* jnc $sr */ +/* remuh $dr,$sr */ { - { 1, 1, 1, 1 }, - "jnc", "jnc", SYN (14), FMT (15), 0x1cc0, - { 2, 0|A(COND_CTI), { [CGEN_INSN_PIPE] = PIPE_O, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90300010 } }, -/* jl $sr */ +/* remb $dr,$sr */ { - { 1, 1, 1, 1 }, - "jl", "jl", SYN (14), FMT (15), 0x1ec0, - { 2, 0|A(FILL_SLOT)|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90200018 } }, -/* jmp $sr */ +/* remub $dr,$sr */ { - { 1, 1, 1, 1 }, - "jmp", "jmp", SYN (14), FMT (15), 0x1fc0, - { 2, 0|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90300018 } }, -/* ld $dr,@$sr */ +/* divuh $dr,$sr */ { - { 1, 1, 1, 1 }, - "ld", "ld", SYN (15), FMT (0), 0x20c0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90100010 } }, -/* ld $dr,@($sr) */ +/* divb $dr,$sr */ { - { 1, 1, 1, 1 }, - "ld-2", "ld", SYN (16), FMT (0), 0x20c0, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90000018 } }, -/* ld $dr,@($slo16,$sr) */ +/* divub $dr,$sr */ { - { 1, 1, 1, 1 }, - "ld-d", "ld", SYN (17), FMT (1), 0xa0c00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90100018 } }, -/* ld $dr,@($sr,$slo16) */ +/* divh $dr,$sr */ { - { 1, 1, 1, 1 }, - "ld-d2", "ld", SYN (18), FMT (1), 0xa0c00000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_div, { 0x90000010 } }, -/* ldb $dr,@$sr */ +/* jc $sr */ { - { 1, 1, 1, 1 }, - "ldb", "ldb", SYN (15), FMT (0), 0x2080, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SR), 0 } }, + & ifmt_jc, { 0x1cc0 } }, -/* ldb $dr,@($sr) */ +/* jnc $sr */ { - { 1, 1, 1, 1 }, - "ldb-2", "ldb", SYN (16), FMT (0), 0x2080, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SR), 0 } }, + & ifmt_jc, { 0x1dc0 } }, -/* ldb $dr,@($slo16,$sr) */ +/* jl $sr */ { - { 1, 1, 1, 1 }, - "ldb-d", "ldb", SYN (17), FMT (1), 0xa0800000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SR), 0 } }, + & ifmt_jc, { 0x1ec0 } }, -/* ldb $dr,@($sr,$slo16) */ +/* jmp $sr */ { - { 1, 1, 1, 1 }, - "ldb-d2", "ldb", SYN (18), FMT (1), 0xa0800000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SR), 0 } }, + & ifmt_jc, { 0x1fc0 } }, -/* ldh $dr,@$sr */ +/* ld $dr,@$sr */ { - { 1, 1, 1, 1 }, - "ldh", "ldh", SYN (15), FMT (0), 0x20a0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } }, + & ifmt_add, { 0x20c0 } }, -/* ldh $dr,@($sr) */ +/* ld $dr,@($slo16,$sr) */ { - { 1, 1, 1, 1 }, - "ldh-2", "ldh", SYN (16), FMT (0), 0x20a0, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } }, + & ifmt_add3, { 0xa0c00000 } }, -/* ldh $dr,@($slo16,$sr) */ +/* ldb $dr,@$sr */ { - { 1, 1, 1, 1 }, - "ldh-d", "ldh", SYN (17), FMT (1), 0xa0a00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } }, + & ifmt_add, { 0x2080 } }, -/* ldh $dr,@($sr,$slo16) */ +/* ldb $dr,@($slo16,$sr) */ { - { 1, 1, 1, 1 }, - "ldh-d2", "ldh", SYN (18), FMT (1), 0xa0a00000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } }, + & ifmt_add3, { 0xa0800000 } }, -/* ldub $dr,@$sr */ +/* ldh $dr,@$sr */ { - { 1, 1, 1, 1 }, - "ldub", "ldub", SYN (15), FMT (0), 0x2090, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } }, + & ifmt_add, { 0x20a0 } }, -/* ldub $dr,@($sr) */ +/* ldh $dr,@($slo16,$sr) */ { - { 1, 1, 1, 1 }, - "ldub-2", "ldub", SYN (16), FMT (0), 0x2090, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } }, + & ifmt_add3, { 0xa0a00000 } }, -/* ldub $dr,@($slo16,$sr) */ +/* ldub $dr,@$sr */ { - { 1, 1, 1, 1 }, - "ldub-d", "ldub", SYN (17), FMT (1), 0xa0900000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } }, + & ifmt_add, { 0x2090 } }, -/* ldub $dr,@($sr,$slo16) */ +/* ldub $dr,@($slo16,$sr) */ { - { 1, 1, 1, 1 }, - "ldub-d2", "ldub", SYN (18), FMT (1), 0xa0900000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } }, + & ifmt_add3, { 0xa0900000 } }, /* lduh $dr,@$sr */ { - { 1, 1, 1, 1 }, - "lduh", "lduh", SYN (15), FMT (0), 0x20b0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } - }, -/* lduh $dr,@($sr) */ - { - { 1, 1, 1, 1 }, - "lduh-2", "lduh", SYN (16), FMT (0), 0x20b0, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } }, + & ifmt_add, { 0x20b0 } }, /* lduh $dr,@($slo16,$sr) */ { - { 1, 1, 1, 1 }, - "lduh-d", "lduh", SYN (17), FMT (1), 0xa0b00000, - { 2, 0, { 0 } } - }, -/* lduh $dr,@($sr,$slo16) */ - { - { 1, 1, 1, 1 }, - "lduh-d2", "lduh", SYN (18), FMT (1), 0xa0b00000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } }, + & ifmt_add3, { 0xa0b00000 } }, /* ld $dr,@$sr+ */ { - { 1, 1, 1, 1 }, - "ld-plus", "ld", SYN (19), FMT (0), 0x20e0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', OP (SR), '+', 0 } }, + & ifmt_add, { 0x20e0 } }, /* ld24 $dr,$uimm24 */ { - { 1, 1, 1, 1 }, - "ld24", "ld24", SYN (20), FMT (16), 0xe0000000, - { 2, 0, { 0 } } - }, -/* ldi $dr,$simm8 */ - { - { 1, 1, 1, 1 }, - "ldi8", "ldi", SYN (4), FMT (4), 0x6000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (UIMM24), 0 } }, + & ifmt_ld24, { 0xe0000000 } }, /* ldi8 $dr,$simm8 */ { - { 1, 1, 1, 1 }, - "ldi8a", "ldi8", SYN (4), FMT (4), 0x6000, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } }, + & ifmt_addi, { 0x6000 } }, -/* ldi $dr,$slo16 */ +/* ldi16 $dr,$hash$slo16 */ { - { 1, 1, 1, 1 }, - "ldi16", "ldi", SYN (21), FMT (17), 0x90f00000, - { 2, 0, { 0 } } - }, -/* ldi16 $dr,$slo16 */ - { - { 1, 1, 1, 1 }, - "ldi16a", "ldi16", SYN (21), FMT (17), 0x90f00000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } }, + & ifmt_ldi16, { 0x90f00000 } }, /* lock $dr,@$sr */ { - { 1, 1, 1, 1 }, - "lock", "lock", SYN (15), FMT (0), 0x20d0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } }, + & ifmt_add, { 0x20d0 } }, /* machi $src1,$src2 */ { - { 1, 1, 1, 1 }, - "machi", "machi", SYN (10), FMT (10), 0x3040, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3040 } }, /* machi $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "machi-a", "machi", SYN (22), FMT (18), 0x3040, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3040 } }, /* maclo $src1,$src2 */ { - { 1, 1, 1, 1 }, - "maclo", "maclo", SYN (10), FMT (10), 0x3050, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3050 } }, /* maclo $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "maclo-a", "maclo", SYN (22), FMT (18), 0x3050, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3050 } }, /* macwhi $src1,$src2 */ { - { 1, 1, 1, 1 }, - "macwhi", "macwhi", SYN (10), FMT (10), 0x3060, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3060 } }, /* macwhi $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "macwhi-a", "macwhi", SYN (22), FMT (18), 0x3060, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3060 } }, /* macwlo $src1,$src2 */ { - { 1, 1, 1, 1 }, - "macwlo", "macwlo", SYN (10), FMT (10), 0x3070, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3070 } }, /* macwlo $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "macwlo-a", "macwlo", SYN (22), FMT (18), 0x3070, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3070 } }, /* mul $dr,$sr */ { - { 1, 1, 1, 1 }, - "mul", "mul", SYN (0), FMT (0), 0x1060, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x1060 } }, /* mulhi $src1,$src2 */ { - { 1, 1, 1, 1 }, - "mulhi", "mulhi", SYN (10), FMT (10), 0x3000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3000 } }, /* mulhi $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "mulhi-a", "mulhi", SYN (22), FMT (18), 0x3000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3000 } }, /* mullo $src1,$src2 */ { - { 1, 1, 1, 1 }, - "mullo", "mullo", SYN (10), FMT (10), 0x3010, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3010 } }, /* mullo $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "mullo-a", "mullo", SYN (22), FMT (18), 0x3010, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3010 } }, /* mulwhi $src1,$src2 */ { - { 1, 1, 1, 1 }, - "mulwhi", "mulwhi", SYN (10), FMT (10), 0x3020, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3020 } }, /* mulwhi $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "mulwhi-a", "mulwhi", SYN (22), FMT (18), 0x3020, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3020 } }, /* mulwlo $src1,$src2 */ { - { 1, 1, 1, 1 }, - "mulwlo", "mulwlo", SYN (10), FMT (10), 0x3030, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x3030 } }, /* mulwlo $src1,$src2,$acc */ { - { 1, 1, 1, 1 }, - "mulwlo-a", "mulwlo", SYN (22), FMT (18), 0x3030, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (ACC), 0 } }, + & ifmt_machi_a, { 0x3030 } }, /* mv $dr,$sr */ { - { 1, 1, 1, 1 }, - "mv", "mv", SYN (0), FMT (0), 0x1080, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x1080 } }, /* mvfachi $dr */ { - { 1, 1, 1, 1 }, - "mvfachi", "mvfachi", SYN (23), FMT (19), 0x50f0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), 0 } }, + & ifmt_mvfachi, { 0x50f0 } }, /* mvfachi $dr,$accs */ { - { 1, 1, 1, 1 }, - "mvfachi-a", "mvfachi", SYN (24), FMT (20), 0x50f0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } }, + & ifmt_mvfachi_a, { 0x50f0 } }, /* mvfaclo $dr */ { - { 1, 1, 1, 1 }, - "mvfaclo", "mvfaclo", SYN (23), FMT (19), 0x50f1, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), 0 } }, + & ifmt_mvfachi, { 0x50f1 } }, -/* mvfaclo $dr,$acc-s */ +/* mvfaclo $dr,$accs */ { - { 1, 1, 1, 1 }, - "mvfaclo-a", "mvfaclo", SYN (24), FMT (20), 0x50f1, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } }, + & ifmt_mvfachi_a, { 0x50f1 } }, /* mvfacmi $dr */ { - { 1, 1, 1, 1 }, - "mvfacmi", "mvfacmi", SYN (23), FMT (19), 0x50f2, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), 0 } }, + & ifmt_mvfachi, { 0x50f2 } }, -/* mvfacmi $dr,$acc-s */ +/* mvfacmi $dr,$accs */ { - { 1, 1, 1, 1 }, - "mvfacmi-a", "mvfacmi", SYN (24), FMT (20), 0x50f2, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (ACCS), 0 } }, + & ifmt_mvfachi_a, { 0x50f2 } }, /* mvfc $dr,$scr */ { - { 1, 1, 1, 1 }, - "mvfc", "mvfc", SYN (25), FMT (21), 0x1090, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SCR), 0 } }, + & ifmt_mvfc, { 0x1090 } }, /* mvtachi $src1 */ { - { 1, 1, 1, 1 }, - "mvtachi", "mvtachi", SYN (26), FMT (22), 0x5070, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), 0 } }, + & ifmt_mvtachi, { 0x5070 } }, -/* mvtachi $src1,$acc-s */ +/* mvtachi $src1,$accs */ { - { 1, 1, 1, 1 }, - "mvtachi-a", "mvtachi", SYN (27), FMT (23), 0x5070, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } }, + & ifmt_mvtachi_a, { 0x5070 } }, /* mvtaclo $src1 */ { - { 1, 1, 1, 1 }, - "mvtaclo", "mvtaclo", SYN (26), FMT (22), 0x5071, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), 0 } }, + & ifmt_mvtachi, { 0x5071 } }, -/* mvtaclo $src1,$acc-s */ +/* mvtaclo $src1,$accs */ { - { 1, 1, 1, 1 }, - "mvtaclo-a", "mvtaclo", SYN (27), FMT (23), 0x5071, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (ACCS), 0 } }, + & ifmt_mvtachi_a, { 0x5071 } }, /* mvtc $sr,$dcr */ { - { 1, 1, 1, 1 }, - "mvtc", "mvtc", SYN (28), FMT (24), 0x10a0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SR), ',', OP (DCR), 0 } }, + & ifmt_mvtc, { 0x10a0 } }, /* neg $dr,$sr */ { - { 1, 1, 1, 1 }, - "neg", "neg", SYN (0), FMT (0), 0x30, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x30 } }, /* nop */ { - { 1, 1, 1, 1 }, - "nop", "nop", SYN (29), FMT (25), 0x7000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_nop, { 0x7000 } }, /* not $dr,$sr */ { - { 1, 1, 1, 1 }, - "not", "not", SYN (0), FMT (0), 0xb0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0xb0 } }, /* rac */ { - { 1, 1, 1, 1 }, - "rac", "rac", SYN (29), FMT (25), 0x5090, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_nop, { 0x5090 } }, -/* rac $acc-s */ +/* rac $accd,$accs,$imm1 */ { - { 1, 1, 1, 1 }, - "rac-a", "rac", SYN (30), FMT (26), 0x5090, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } }, + & ifmt_rac_dsi, { 0x5090 } }, /* rach */ { - { 1, 1, 1, 1 }, - "rach", "rach", SYN (29), FMT (25), 0x5080, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S } } + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_nop, { 0x5080 } }, -/* rach $acc-s */ +/* rach $accd,$accs,$imm1 */ { - { 1, 1, 1, 1 }, - "rach-a", "rach", SYN (30), FMT (26), 0x5080, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (ACCD), ',', OP (ACCS), ',', OP (IMM1), 0 } }, + & ifmt_rac_dsi, { 0x5080 } }, /* rte */ { - { 1, 1, 1, 1 }, - "rte", "rte", SYN (29), FMT (25), 0x10d6, - { 2, 0|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_nop, { 0x10d6 } }, -/* seth $dr,$hi16 */ +/* seth $dr,$hash$hi16 */ { - { 1, 1, 1, 1 }, - "seth", "seth", SYN (31), FMT (27), 0xd0c00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (HI16), 0 } }, + & ifmt_seth, { 0xd0c00000 } }, /* sll $dr,$sr */ { - { 1, 1, 1, 1 }, - "sll", "sll", SYN (0), FMT (0), 0x1040, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x1040 } }, /* sll3 $dr,$sr,$simm16 */ { - { 1, 1, 1, 1 }, - "sll3", "sll3", SYN (5), FMT (5), 0x90c00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } }, + & ifmt_addv3, { 0x90c00000 } }, /* slli $dr,$uimm5 */ { - { 1, 1, 1, 1 }, - "slli", "slli", SYN (32), FMT (28), 0x5040, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } }, + & ifmt_slli, { 0x5040 } }, /* sra $dr,$sr */ { - { 1, 1, 1, 1 }, - "sra", "sra", SYN (0), FMT (0), 0x1020, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x1020 } }, /* sra3 $dr,$sr,$simm16 */ { - { 1, 1, 1, 1 }, - "sra3", "sra3", SYN (5), FMT (5), 0x90a00000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } }, + & ifmt_addv3, { 0x90a00000 } }, /* srai $dr,$uimm5 */ { - { 1, 1, 1, 1 }, - "srai", "srai", SYN (32), FMT (28), 0x5020, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } }, + & ifmt_slli, { 0x5020 } }, /* srl $dr,$sr */ { - { 1, 1, 1, 1 }, - "srl", "srl", SYN (0), FMT (0), 0x1000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x1000 } }, /* srl3 $dr,$sr,$simm16 */ { - { 1, 1, 1, 1 }, - "srl3", "srl3", SYN (5), FMT (5), 0x90800000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } }, + & ifmt_addv3, { 0x90800000 } }, /* srli $dr,$uimm5 */ { - { 1, 1, 1, 1 }, - "srli", "srli", SYN (32), FMT (28), 0x5000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (UIMM5), 0 } }, + & ifmt_slli, { 0x5000 } }, /* st $src1,@$src2 */ { - { 1, 1, 1, 1 }, - "st", "st", SYN (33), FMT (10), 0x2040, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } - }, -/* st $src1,@($src2) */ - { - { 1, 1, 1, 1 }, - "st-2", "st", SYN (34), FMT (10), 0x2040, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x2040 } }, /* st $src1,@($slo16,$src2) */ { - { 1, 1, 1, 1 }, - "st-d", "st", SYN (35), FMT (29), 0xa0400000, - { 2, 0, { 0 } } - }, -/* st $src1,@($src2,$slo16) */ - { - { 1, 1, 1, 1 }, - "st-d2", "st", SYN (36), FMT (29), 0xa0400000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } }, + & ifmt_st_d, { 0xa0400000 } }, /* stb $src1,@$src2 */ { - { 1, 1, 1, 1 }, - "stb", "stb", SYN (33), FMT (10), 0x2000, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } - }, -/* stb $src1,@($src2) */ - { - { 1, 1, 1, 1 }, - "stb-2", "stb", SYN (34), FMT (10), 0x2000, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x2000 } }, /* stb $src1,@($slo16,$src2) */ { - { 1, 1, 1, 1 }, - "stb-d", "stb", SYN (35), FMT (29), 0xa0000000, - { 2, 0, { 0 } } - }, -/* stb $src1,@($src2,$slo16) */ - { - { 1, 1, 1, 1 }, - "stb-d2", "stb", SYN (36), FMT (29), 0xa0000000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } }, + & ifmt_st_d, { 0xa0000000 } }, /* sth $src1,@$src2 */ { - { 1, 1, 1, 1 }, - "sth", "sth", SYN (33), FMT (10), 0x2020, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x2020 } }, -/* sth $src1,@($src2) */ +/* sth $src1,@($slo16,$src2) */ { - { 1, 1, 1, 1 }, - "sth-2", "sth", SYN (34), FMT (10), 0x2020, - { 2, 0|A(ALIAS), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', '(', OP (SLO16), ',', OP (SRC2), ')', 0 } }, + & ifmt_st_d, { 0xa0200000 } }, -/* sth $src1,@($slo16,$src2) */ +/* st $src1,@+$src2 */ { - { 1, 1, 1, 1 }, - "sth-d", "sth", SYN (35), FMT (29), 0xa0200000, - { 2, 0, { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', '+', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x2060 } }, -/* sth $src1,@($src2,$slo16) */ +/* sth $src1,@$src2+ */ { - { 1, 1, 1, 1 }, - "sth-d2", "sth", SYN (36), FMT (29), 0xa0200000, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), '+', 0 } }, + & ifmt_cmp, { 0x2030 } }, -/* st $src1,@+$src2 */ +/* stb $src1,@$src2+ */ { - { 1, 1, 1, 1 }, - "st-plus", "st", SYN (37), FMT (10), 0x2060, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), '+', 0 } }, + & ifmt_cmp, { 0x2010 } }, /* st $src1,@-$src2 */ { - { 1, 1, 1, 1 }, - "st-minus", "st", SYN (38), FMT (10), 0x2070, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', '-', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x2070 } }, /* sub $dr,$sr */ { - { 1, 1, 1, 1 }, - "sub", "sub", SYN (0), FMT (0), 0x20, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x20 } }, /* subv $dr,$sr */ { - { 1, 1, 1, 1 }, - "subv", "subv", SYN (0), FMT (0), 0x0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x0 } }, /* subx $dr,$sr */ { - { 1, 1, 1, 1 }, - "subx", "subx", SYN (0), FMT (0), 0x10, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_add, { 0x10 } }, /* trap $uimm4 */ { - { 1, 1, 1, 1 }, - "trap", "trap", SYN (39), FMT (30), 0x10f0, - { 2, 0|A(FILL_SLOT)|A(UNCOND_CTI), { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (UIMM4), 0 } }, + & ifmt_trap, { 0x10f0 } }, /* unlock $src1,@$src2 */ { - { 1, 1, 1, 1 }, - "unlock", "unlock", SYN (33), FMT (10), 0x2050, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', '@', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x2050 } }, -/* push $src1 */ - { - { 1, 1, 1, 1 }, - "push", "push", SYN (26), FMT (22), 0x207f, - { 2, 0|A(ALIAS), { 0 } } - }, -/* pop $dr */ +/* satb $dr,$sr */ { - { 1, 1, 1, 1 }, - "pop", "pop", SYN (23), FMT (19), 0x20ef, - { 2, 0|A(ALIAS), { 0 } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_satb, { 0x80600300 } }, -/* satb $dr,$src2 */ +/* sath $dr,$sr */ { - { 1, 1, 1, 1 }, - "satb", "satb", SYN (40), FMT (31), 0x80000100, - { 2, 0, { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_satb, { 0x80600200 } }, -/* sath $dr,$src2 */ +/* sat $dr,$sr */ { - { 1, 1, 1, 1 }, - "sath", "sath", SYN (40), FMT (31), 0x80000200, - { 2, 0, { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } - }, -/* sat $dr,$src2 */ - { - { 1, 1, 1, 1 }, - "sat", "sat", SYN (40), FMT (31), 0x80000000, - { 2, 0, { [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } }, + & ifmt_satb, { 0x80600000 } }, /* pcmpbz $src2 */ { - { 1, 1, 1, 1 }, - "pcmpbz", "pcmpbz", SYN (13), FMT (13), 0x370, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_OS, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC2), 0 } }, + & ifmt_cmpz, { 0x370 } }, /* sadd */ { - { 1, 1, 1, 1 }, - "sadd", "sadd", SYN (29), FMT (25), 0x50e4, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_nop, { 0x50e4 } }, /* macwu1 $src1,$src2 */ { - { 1, 1, 1, 1 }, - "macwu1", "macwu1", SYN (10), FMT (10), 0x50b0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x50b0 } }, /* msblo $src1,$src2 */ { - { 1, 1, 1, 1 }, - "msblo", "msblo", SYN (10), FMT (10), 0x50d0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x50d0 } }, /* mulwu1 $src1,$src2 */ { - { 1, 1, 1, 1 }, - "mulwu1", "mulwu1", SYN (10), FMT (10), 0x50a0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x50a0 } }, -/* machl1 $src1,$src2 */ +/* maclh1 $src1,$src2 */ { - { 1, 1, 1, 1 }, - "machl1", "machl1", SYN (10), FMT (10), 0x50c0, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_S, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } }, + & ifmt_cmp, { 0x50c0 } }, /* sc */ { - { 1, 1, 1, 1 }, - "sc", "sc", SYN (29), FMT (25), 0x7401, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_nop, { 0x7401 } }, /* snc */ { - { 1, 1, 1, 1 }, - "snc", "snc", SYN (29), FMT (25), 0x7501, - { 2, 0, { [CGEN_INSN_PIPE] = PIPE_O, [CGEN_INSN_MACH] = 1 << MACH_M32RX } } + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_nop, { 0x7501 } + }, +/* clrpsw $uimm8 */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (UIMM8), 0 } }, + & ifmt_clrpsw, { 0x7200 } + }, +/* setpsw $uimm8 */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (UIMM8), 0 } }, + & ifmt_clrpsw, { 0x7100 } + }, +/* bset $uimm3,@($slo16,$sr) */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (UIMM3), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } }, + & ifmt_bset, { 0xa0600000 } + }, +/* bclr $uimm3,@($slo16,$sr) */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (UIMM3), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } }, + & ifmt_bset, { 0xa0700000 } + }, +/* btst $uimm3,$sr */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (UIMM3), ',', OP (SR), 0 } }, + & ifmt_btst, { 0xf0 } }, }; #undef A -#undef SYN -#undef FMT +#undef OPERAND +#undef MNEM +#undef OP + +/* Formats for ALIAS macro-insns. */ -CGEN_INSN_TABLE m32r_cgen_insn_table = { - & m32r_cgen_insn_table_entries[0], - sizeof (CGEN_INSN), - CGEN_NUM_INSNS, - NULL, - m32r_cgen_asm_hash_insn, CGEN_ASM_HASH_SIZE, - m32r_cgen_dis_hash_insn, CGEN_DIS_HASH_SIZE +#define F(f) & m32r_cgen_ifld_table[M32R_##f] +static const CGEN_IFMT ifmt_bc8r ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } } }; -/* The hash functions are recorded here to help keep assembler code out of - the disassembler and vice versa. */ +static const CGEN_IFMT ifmt_bc24r ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } } +}; -unsigned int -m32r_cgen_asm_hash_insn (insn) - const char *insn; -{ - return CGEN_ASM_HASH (insn); -} +static const CGEN_IFMT ifmt_bl8r ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } } +}; -unsigned int -m32r_cgen_dis_hash_insn (buf, value) - const char *buf; - unsigned long value; -{ - return CGEN_DIS_HASH (buf, value); -} +static const CGEN_IFMT ifmt_bl24r ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } } +}; -CGEN_OPCODE_DATA m32r_cgen_opcode_data = { - & m32r_cgen_hw_entries[0], - & m32r_cgen_insn_table, +static const CGEN_IFMT ifmt_bcl8r ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } } }; -void -m32r_cgen_init_tables (mach) - int mach; -{ -} +static const CGEN_IFMT ifmt_bcl24r ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } } +}; -/* Main entry point for stuffing values in cgen_fields. */ +static const CGEN_IFMT ifmt_bnc8r ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } } +}; -CGEN_INLINE void -m32r_cgen_set_operand (opindex, valuep, fields) - int opindex; - const long *valuep; - CGEN_FIELDS *fields; -{ - switch (opindex) - { - case M32R_OPERAND_SR : - fields->f_r2 = *valuep; - break; - case M32R_OPERAND_DR : - fields->f_r1 = *valuep; - break; - case M32R_OPERAND_SRC1 : - fields->f_r1 = *valuep; - break; - case M32R_OPERAND_SRC2 : - fields->f_r2 = *valuep; - break; - case M32R_OPERAND_SCR : - fields->f_r2 = *valuep; - break; - case M32R_OPERAND_DCR : - fields->f_r1 = *valuep; - break; - case M32R_OPERAND_SIMM8 : - fields->f_simm8 = *valuep; - break; - case M32R_OPERAND_SIMM16 : - fields->f_simm16 = *valuep; - break; - case M32R_OPERAND_UIMM4 : - fields->f_uimm4 = *valuep; - break; - case M32R_OPERAND_UIMM5 : - fields->f_uimm5 = *valuep; - break; - case M32R_OPERAND_UIMM16 : - fields->f_uimm16 = *valuep; - break; - case M32R_OPERAND_ACC_S : - fields->f_acc_s = *valuep; - break; - case M32R_OPERAND_ACC : - fields->f_acc = *valuep; - break; - case M32R_OPERAND_HI16 : - fields->f_hi16 = *valuep; - break; - case M32R_OPERAND_SLO16 : - fields->f_simm16 = *valuep; - break; - case M32R_OPERAND_ULO16 : - fields->f_uimm16 = *valuep; - break; - case M32R_OPERAND_UIMM24 : - fields->f_uimm24 = *valuep; - break; - case M32R_OPERAND_DISP8 : - fields->f_disp8 = *valuep; - break; - case M32R_OPERAND_DISP16 : - fields->f_disp16 = *valuep; - break; - case M32R_OPERAND_DISP24 : - fields->f_disp24 = *valuep; - break; - - default : - fprintf (stderr, "Unrecognized field %d while setting operand.\n", - opindex); - abort (); - } -} +static const CGEN_IFMT ifmt_bnc24r ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_bra8r ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } } +}; -/* Main entry point for getting values from cgen_fields. */ +static const CGEN_IFMT ifmt_bra24r ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } } +}; -CGEN_INLINE long -m32r_cgen_get_operand (opindex, fields) - int opindex; - const CGEN_FIELDS *fields; -{ - long value; +static const CGEN_IFMT ifmt_bncl8r ATTRIBUTE_UNUSED = { + 16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } } +}; - switch (opindex) - { - case M32R_OPERAND_SR : - value = fields->f_r2; - break; - case M32R_OPERAND_DR : - value = fields->f_r1; - break; - case M32R_OPERAND_SRC1 : - value = fields->f_r1; - break; - case M32R_OPERAND_SRC2 : - value = fields->f_r2; - break; - case M32R_OPERAND_SCR : - value = fields->f_r2; - break; - case M32R_OPERAND_DCR : - value = fields->f_r1; - break; - case M32R_OPERAND_SIMM8 : - value = fields->f_simm8; - break; - case M32R_OPERAND_SIMM16 : - value = fields->f_simm16; - break; - case M32R_OPERAND_UIMM4 : - value = fields->f_uimm4; - break; - case M32R_OPERAND_UIMM5 : - value = fields->f_uimm5; - break; - case M32R_OPERAND_UIMM16 : - value = fields->f_uimm16; - break; - case M32R_OPERAND_ACC_S : - value = fields->f_acc_s; - break; - case M32R_OPERAND_ACC : - value = fields->f_acc; - break; - case M32R_OPERAND_HI16 : - value = fields->f_hi16; - break; - case M32R_OPERAND_SLO16 : - value = fields->f_simm16; - break; - case M32R_OPERAND_ULO16 : - value = fields->f_uimm16; - break; - case M32R_OPERAND_UIMM24 : - value = fields->f_uimm24; - break; - case M32R_OPERAND_DISP8 : - value = fields->f_disp8; - break; - case M32R_OPERAND_DISP16 : - value = fields->f_disp16; - break; - case M32R_OPERAND_DISP24 : - value = fields->f_disp24; - break; - - default : - fprintf (stderr, "Unrecognized field %d while getting operand.\n", - opindex); - abort (); - } - - return value; -} +static const CGEN_IFMT ifmt_bncl24r ATTRIBUTE_UNUSED = { + 32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ld_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ld_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldb_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldb_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldh_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldh_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldub_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldub_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_lduh_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_lduh_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_pop ATTRIBUTE_UNUSED = { + 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_ldi8a ATTRIBUTE_UNUSED = { + 16, 16, 0xf000, { { F (F_OP1) }, { F (F_R1) }, { F (F_SIMM8) }, { 0 } } +}; +static const CGEN_IFMT ifmt_ldi16a ATTRIBUTE_UNUSED = { + 32, 32, 0xf0ff0000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_R1) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_rac_d ATTRIBUTE_UNUSED = { + 16, 16, 0xf3ff, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_rac_ds ATTRIBUTE_UNUSED = { + 16, 16, 0xf3f3, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_rach_d ATTRIBUTE_UNUSED = { + 16, 16, 0xf3ff, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_rach_ds ATTRIBUTE_UNUSED = { + 16, 16, 0xf3f3, { { F (F_OP1) }, { F (F_ACCD) }, { F (F_BITS67) }, { F (F_OP2) }, { F (F_ACCS) }, { F (F_BIT14) }, { F (F_IMM1) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_st_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_st_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_stb_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_stb_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_sth_2 ATTRIBUTE_UNUSED = { + 16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_sth_d2 ATTRIBUTE_UNUSED = { + 32, 32, 0xf0f00000, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { F (F_SIMM16) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_push ATTRIBUTE_UNUSED = { + 16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_OP2) }, { F (F_R1) }, { F (F_R2) }, { 0 } } +}; + +#undef F + +/* Each non-simple macro entry points to an array of expansion possibilities. */ + +#define A(a) (1 << CGEN_INSN_##a) +#define OPERAND(op) M32R_OPERAND_##op +#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */ +#define OP(field) CGEN_SYNTAX_MAKE_FIELD (OPERAND (field)) + +/* The macro instruction table. */ + +static const CGEN_IBASE m32r_cgen_macro_insn_table[] = +{ +/* bc $disp8 */ + { + -1, "bc8r", "bc", 16, + { 0|A(RELAXABLE)|A(COND_CTI)|A(ALIAS), { { { (1<= 1) + memset (insns, 0, num_macros * sizeof (CGEN_INSN)); + for (i = 0; i < num_macros; ++i) + { + insns[i].base = &ib[i]; + insns[i].opcode = &oc[i]; + m32r_cgen_build_insn_regex (& insns[i]); + } + cd->macro_insn_table.init_entries = insns; + cd->macro_insn_table.entry_size = sizeof (CGEN_IBASE); + cd->macro_insn_table.num_init_entries = num_macros; + + oc = & m32r_cgen_insn_opcode_table[0]; + insns = (CGEN_INSN *) cd->insn_table.init_entries; + for (i = 0; i < MAX_INSNS; ++i) + { + insns[i].opcode = &oc[i]; + m32r_cgen_build_insn_regex (& insns[i]); + } + + cd->sizeof_fields = sizeof (CGEN_FIELDS); + cd->set_fields_bitsize = set_fields_bitsize; + + cd->asm_hash_p = asm_hash_insn_p; + cd->asm_hash = asm_hash_insn; + cd->asm_hash_size = CGEN_ASM_HASH_SIZE; + + cd->dis_hash_p = dis_hash_insn_p; + cd->dis_hash = dis_hash_insn; + cd->dis_hash_size = CGEN_DIS_HASH_SIZE; +}