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 + -
显示快捷键?