m32r-opc.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,687 行 · 第 1/3 页

C
1,687
字号
/* Instruction opcode table for m32r.THIS FILE IS MACHINE GENERATED WITH CGEN.Copyright 1996, 1997, 1998, 1999, 2000, 2001 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 modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2, 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public License alongwith this program; if not, write to the Free Software Foundation, Inc.,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.*/#include "sysdep.h"#include "ansidecl.h"#include "bfd.h"#include "symcat.h"#include "m32r-desc.h"#include "m32r-opc.h"#include "libiberty.h"/* The hash functions are recorded here to help keep assembler code out of   the disassembler and vice versa.  */static int asm_hash_insn_p PARAMS ((const CGEN_INSN *));static unsigned int asm_hash_insn PARAMS ((const char *));static int dis_hash_insn_p PARAMS ((const CGEN_INSN *));static unsigned int dis_hash_insn PARAMS ((const char *, CGEN_INSN_INT));/* Instruction formats.  */#define F(f) & m32r_cgen_ifld_table[CONCAT2 (M32R_,f)]static const CGEN_IFMT ifmt_empty = {  0, 0, 0x0, { { 0 } }};static const CGEN_IFMT ifmt_add = {  16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_add3 = {  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 = {  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 = {  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 = {  16, 16, 0xf000, { { F (F_OP1) }, { F (F_R1) }, { F (F_SIMM8) }, { 0 } }};static const CGEN_IFMT ifmt_addv3 = {  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 = {  16, 16, 0xff00, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP8) }, { 0 } }};static const CGEN_IFMT ifmt_bc24 = {  32, 32, 0xff000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_DISP24) }, { 0 } }};static const CGEN_IFMT ifmt_beq = {  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 = {  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 = {  16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_cmpi = {  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 = {  16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_div = {  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 = {  16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_ld24 = {  32, 32, 0xf0000000, { { F (F_OP1) }, { F (F_R1) }, { F (F_UIMM24) }, { 0 } }};static const CGEN_IFMT ifmt_ldi16 = {  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 = {  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 = {  16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_mvfachi_a = {  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 = {  16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_mvtachi = {  16, 16, 0xf0ff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_mvtachi_a = {  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 = {  16, 16, 0xf0f0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_nop = {  16, 16, 0xffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { 0 } }};static const CGEN_IFMT ifmt_rac_dsi = {  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 = {  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 = {  16, 16, 0xf0e0, { { F (F_OP1) }, { F (F_R1) }, { F (F_SHIFT_OP2) }, { F (F_UIMM5) }, { 0 } }};static const CGEN_IFMT ifmt_st_d = {  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 = {  16, 16, 0xfff0, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_UIMM4) }, { 0 } }};static const CGEN_IFMT ifmt_satb = {  32, 32, 0xf0f0ffff, { { F (F_OP1) }, { F (F_R1) }, { F (F_OP2) }, { F (F_R2) }, { F (F_UIMM16) }, { 0 } }};#undef F#define A(a) (1 << CONCAT2 (CGEN_INSN_,a))#define MNEM CGEN_SYNTAX_MNEMONIC /* syntax value for mnemonic */#define OPERAND(op) CONCAT2 (M32R_OPERAND_,op)#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 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_add, { 0xa0 }  },/* add3 $dr,$sr,$hash$slo16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (SLO16), 0 } },    & ifmt_add3, { 0x80a00000 }  },/* and $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_add, { 0xc0 }  },/* and3 $dr,$sr,$uimm16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },    & ifmt_and3, { 0x80c00000 }  },/* or $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_add, { 0xe0 }  },/* or3 $dr,$sr,$hash$ulo16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (HASH), OP (ULO16), 0 } },    & ifmt_or3, { 0x80e00000 }  },/* xor $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_add, { 0xd0 }  },/* xor3 $dr,$sr,$uimm16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (UIMM16), 0 } },    & ifmt_and3, { 0x80d00000 }  },/* addi $dr,$simm8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },    & ifmt_addi, { 0x4000 }  },/* addv $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_add, { 0x80 }  },/* addv3 $dr,$sr,$simm16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), ',', OP (SIMM16), 0 } },    & ifmt_addv3, { 0x80800000 }  },/* addx $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_add, { 0x90 }  },/* bc.s $disp8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP8), 0 } },    & ifmt_bc8, { 0x7c00 }  },/* bc.l $disp24 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP24), 0 } },    & ifmt_bc24, { 0xfc000000 }  },/* beq $src1,$src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beq, { 0xb0000000 }  },/* beqz $src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beqz, { 0xb0800000 }  },/* bgez $src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beqz, { 0xb0b00000 }  },/* bgtz $src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beqz, { 0xb0d00000 }  },/* blez $src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beqz, { 0xb0c00000 }  },/* bltz $src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beqz, { 0xb0a00000 }  },/* bnez $src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beqz, { 0xb0900000 }  },/* bl.s $disp8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP8), 0 } },    & ifmt_bc8, { 0x7e00 }  },/* bl.l $disp24 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP24), 0 } },    & ifmt_bc24, { 0xfe000000 }  },/* bcl.s $disp8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP8), 0 } },    & ifmt_bc8, { 0x7800 }  },/* bcl.l $disp24 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP24), 0 } },    & ifmt_bc24, { 0xf8000000 }  },/* bnc.s $disp8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP8), 0 } },    & ifmt_bc8, { 0x7d00 }  },/* bnc.l $disp24 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP24), 0 } },    & ifmt_bc24, { 0xfd000000 }  },/* bne $src1,$src2,$disp16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), ',', OP (DISP16), 0 } },    & ifmt_beq, { 0xb0100000 }  },/* bra.s $disp8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP8), 0 } },    & ifmt_bc8, { 0x7f00 }  },/* bra.l $disp24 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP24), 0 } },    & ifmt_bc24, { 0xff000000 }  },/* bncl.s $disp8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP8), 0 } },    & ifmt_bc8, { 0x7900 }  },/* bncl.l $disp24 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DISP24), 0 } },    & ifmt_bc24, { 0xf9000000 }  },/* cmp $src1,$src2 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },    & ifmt_cmp, { 0x40 }  },/* cmpi $src2,$simm16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },    & ifmt_cmpi, { 0x80400000 }  },/* cmpu $src1,$src2 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },    & ifmt_cmp, { 0x50 }  },/* cmpui $src2,$simm16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), ',', OP (SIMM16), 0 } },    & ifmt_cmpi, { 0x80500000 }  },/* cmpeq $src1,$src2 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },    & ifmt_cmp, { 0x60 }  },/* cmpz $src2 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC2), 0 } },    & ifmt_cmpz, { 0x70 }  },/* div $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_div, { 0x90000000 }  },/* divu $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_div, { 0x90100000 }  },/* rem $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_div, { 0x90200000 }  },/* remu $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_div, { 0x90300000 }  },/* divh $dr,$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SR), 0 } },    & ifmt_div, { 0x90000010 }  },/* jc $sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SR), 0 } },    & ifmt_jc, { 0x1cc0 }  },/* jnc $sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SR), 0 } },    & ifmt_jc, { 0x1dc0 }  },/* jl $sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SR), 0 } },    & ifmt_jc, { 0x1ec0 }  },/* jmp $sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SR), 0 } },    & ifmt_jc, { 0x1fc0 }  },/* ld $dr,@$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },    & ifmt_add, { 0x20c0 }  },/* ld $dr,@($slo16,$sr) */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },    & ifmt_add3, { 0xa0c00000 }  },/* ldb $dr,@$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },    & ifmt_add, { 0x2080 }  },/* ldb $dr,@($slo16,$sr) */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },    & ifmt_add3, { 0xa0800000 }  },/* ldh $dr,@$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },    & ifmt_add, { 0x20a0 }  },/* ldh $dr,@($slo16,$sr) */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },    & ifmt_add3, { 0xa0a00000 }  },/* ldub $dr,@$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },    & ifmt_add, { 0x2090 }  },/* ldub $dr,@($slo16,$sr) */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },    & ifmt_add3, { 0xa0900000 }  },/* lduh $dr,@$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },    & ifmt_add, { 0x20b0 }  },/* lduh $dr,@($slo16,$sr) */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', '(', OP (SLO16), ',', OP (SR), ')', 0 } },    & ifmt_add3, { 0xa0b00000 }  },/* ld $dr,@$sr+ */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', OP (SR), '+', 0 } },    & ifmt_add, { 0x20e0 }  },/* ld24 $dr,$uimm24 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (UIMM24), 0 } },    & ifmt_ld24, { 0xe0000000 }  },/* ldi8 $dr,$simm8 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (SIMM8), 0 } },    & ifmt_addi, { 0x6000 }  },/* ldi16 $dr,$hash$slo16 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', OP (HASH), OP (SLO16), 0 } },    & ifmt_ldi16, { 0x90f00000 }  },/* lock $dr,@$sr */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (DR), ',', '@', OP (SR), 0 } },    & ifmt_add, { 0x20d0 }  },/* machi $src1,$src2 */  {    { 0, 0, 0, 0 },    { { MNEM, ' ', OP (SRC1), ',', OP (SRC2), 0 } },

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?