fr30-desc.c
来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,660 行 · 第 1/4 页
C
1,660 行
/* CPU data for fr30.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 <ctype.h>#include <stdio.h>#include <stdarg.h>#include "ansidecl.h"#include "bfd.h"#include "symcat.h"#include "fr30-desc.h"#include "fr30-opc.h"#include "opintl.h"#include "libiberty.h"/* Attributes. */static const CGEN_ATTR_ENTRY bool_attr[] ={ { "#f", 0 }, { "#t", 1 }, { 0, 0 }};static const CGEN_ATTR_ENTRY MACH_attr[] ={ { "base", MACH_BASE }, { "fr30", MACH_FR30 }, { "max", MACH_MAX }, { 0, 0 }};static const CGEN_ATTR_ENTRY ISA_attr[] ={ { "fr30", ISA_FR30 }, { "max", ISA_MAX }, { 0, 0 }};const CGEN_ATTR_TABLE fr30_cgen_ifield_attr_table[] ={ { "MACH", & MACH_attr[0], & MACH_attr[0] }, { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] }, { "ABS-ADDR", &bool_attr[0], &bool_attr[0] }, { "RESERVED", &bool_attr[0], &bool_attr[0] }, { "SIGN-OPT", &bool_attr[0], &bool_attr[0] }, { "SIGNED", &bool_attr[0], &bool_attr[0] }, { 0, 0, 0 }};const CGEN_ATTR_TABLE fr30_cgen_hardware_attr_table[] ={ { "MACH", & MACH_attr[0], & MACH_attr[0] }, { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, { "CACHE-ADDR", &bool_attr[0], &bool_attr[0] }, { "PC", &bool_attr[0], &bool_attr[0] }, { "PROFILE", &bool_attr[0], &bool_attr[0] }, { 0, 0, 0 }};const CGEN_ATTR_TABLE fr30_cgen_operand_attr_table[] ={ { "MACH", & MACH_attr[0], & MACH_attr[0] }, { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, { "PCREL-ADDR", &bool_attr[0], &bool_attr[0] }, { "ABS-ADDR", &bool_attr[0], &bool_attr[0] }, { "SIGN-OPT", &bool_attr[0], &bool_attr[0] }, { "SIGNED", &bool_attr[0], &bool_attr[0] }, { "NEGATIVE", &bool_attr[0], &bool_attr[0] }, { "RELAX", &bool_attr[0], &bool_attr[0] }, { "SEM-ONLY", &bool_attr[0], &bool_attr[0] }, { "HASH-PREFIX", &bool_attr[0], &bool_attr[0] }, { 0, 0, 0 }};const CGEN_ATTR_TABLE fr30_cgen_insn_attr_table[] ={ { "MACH", & MACH_attr[0], & MACH_attr[0] }, { "ALIAS", &bool_attr[0], &bool_attr[0] }, { "VIRTUAL", &bool_attr[0], &bool_attr[0] }, { "UNCOND-CTI", &bool_attr[0], &bool_attr[0] }, { "COND-CTI", &bool_attr[0], &bool_attr[0] }, { "SKIP-CTI", &bool_attr[0], &bool_attr[0] }, { "DELAY-SLOT", &bool_attr[0], &bool_attr[0] }, { "RELAXABLE", &bool_attr[0], &bool_attr[0] }, { "RELAX", &bool_attr[0], &bool_attr[0] }, { "NO-DIS", &bool_attr[0], &bool_attr[0] }, { "PBB", &bool_attr[0], &bool_attr[0] }, { "NOT-IN-DELAY-SLOT", &bool_attr[0], &bool_attr[0] }, { 0, 0, 0 }};/* Instruction set variants. */static const CGEN_ISA fr30_cgen_isa_table[] = { { "fr30", 16, 16, 16, 48 }, { 0, 0, 0, 0, 0 }};/* Machine variants. */static const CGEN_MACH fr30_cgen_mach_table[] = { { "fr30", "fr30", MACH_FR30 }, { 0, 0, 0 }};static CGEN_KEYWORD_ENTRY fr30_cgen_opval_gr_names_entries[] ={ { "r0", 0, {0, {0}}, 0, 0 }, { "r1", 1, {0, {0}}, 0, 0 }, { "r2", 2, {0, {0}}, 0, 0 }, { "r3", 3, {0, {0}}, 0, 0 }, { "r4", 4, {0, {0}}, 0, 0 }, { "r5", 5, {0, {0}}, 0, 0 }, { "r6", 6, {0, {0}}, 0, 0 }, { "r7", 7, {0, {0}}, 0, 0 }, { "r8", 8, {0, {0}}, 0, 0 }, { "r9", 9, {0, {0}}, 0, 0 }, { "r10", 10, {0, {0}}, 0, 0 }, { "r11", 11, {0, {0}}, 0, 0 }, { "r12", 12, {0, {0}}, 0, 0 }, { "r13", 13, {0, {0}}, 0, 0 }, { "r14", 14, {0, {0}}, 0, 0 }, { "r15", 15, {0, {0}}, 0, 0 }, { "ac", 13, {0, {0}}, 0, 0 }, { "fp", 14, {0, {0}}, 0, 0 }, { "sp", 15, {0, {0}}, 0, 0 }};CGEN_KEYWORD fr30_cgen_opval_gr_names ={ & fr30_cgen_opval_gr_names_entries[0], 19, 0, 0, 0, 0};static CGEN_KEYWORD_ENTRY fr30_cgen_opval_cr_names_entries[] ={ { "cr0", 0, {0, {0}}, 0, 0 }, { "cr1", 1, {0, {0}}, 0, 0 }, { "cr2", 2, {0, {0}}, 0, 0 }, { "cr3", 3, {0, {0}}, 0, 0 }, { "cr4", 4, {0, {0}}, 0, 0 }, { "cr5", 5, {0, {0}}, 0, 0 }, { "cr6", 6, {0, {0}}, 0, 0 }, { "cr7", 7, {0, {0}}, 0, 0 }, { "cr8", 8, {0, {0}}, 0, 0 }, { "cr9", 9, {0, {0}}, 0, 0 }, { "cr10", 10, {0, {0}}, 0, 0 }, { "cr11", 11, {0, {0}}, 0, 0 }, { "cr12", 12, {0, {0}}, 0, 0 }, { "cr13", 13, {0, {0}}, 0, 0 }, { "cr14", 14, {0, {0}}, 0, 0 }, { "cr15", 15, {0, {0}}, 0, 0 }};CGEN_KEYWORD fr30_cgen_opval_cr_names ={ & fr30_cgen_opval_cr_names_entries[0], 16, 0, 0, 0, 0};static CGEN_KEYWORD_ENTRY fr30_cgen_opval_dr_names_entries[] ={ { "tbr", 0, {0, {0}}, 0, 0 }, { "rp", 1, {0, {0}}, 0, 0 }, { "ssp", 2, {0, {0}}, 0, 0 }, { "usp", 3, {0, {0}}, 0, 0 }, { "mdh", 4, {0, {0}}, 0, 0 }, { "mdl", 5, {0, {0}}, 0, 0 }};CGEN_KEYWORD fr30_cgen_opval_dr_names ={ & fr30_cgen_opval_dr_names_entries[0], 6, 0, 0, 0, 0};static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_ps_entries[] ={ { "ps", 0, {0, {0}}, 0, 0 }};CGEN_KEYWORD fr30_cgen_opval_h_ps ={ & fr30_cgen_opval_h_ps_entries[0], 1, 0, 0, 0, 0};static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r13_entries[] ={ { "r13", 0, {0, {0}}, 0, 0 }};CGEN_KEYWORD fr30_cgen_opval_h_r13 ={ & fr30_cgen_opval_h_r13_entries[0], 1, 0, 0, 0, 0};static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r14_entries[] ={ { "r14", 0, {0, {0}}, 0, 0 }};CGEN_KEYWORD fr30_cgen_opval_h_r14 ={ & fr30_cgen_opval_h_r14_entries[0], 1, 0, 0, 0, 0};static CGEN_KEYWORD_ENTRY fr30_cgen_opval_h_r15_entries[] ={ { "r15", 0, {0, {0}}, 0, 0 }};CGEN_KEYWORD fr30_cgen_opval_h_r15 ={ & fr30_cgen_opval_h_r15_entries[0], 1, 0, 0, 0, 0};/* The hardware table. */#define A(a) (1 << CONCAT2 (CGEN_HW_,a))const CGEN_HW_ENTRY fr30_cgen_hw_table[] ={ { "h-memory", HW_H_MEMORY, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-sint", HW_H_SINT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-uint", HW_H_UINT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-iaddr", HW_H_IADDR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-pc", HW_H_PC, CGEN_ASM_NONE, 0, { 0|A(PROFILE)|A(PC), { (1<<MACH_BASE) } } }, { "h-gr", HW_H_GR, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_gr_names, { 0|A(CACHE_ADDR)|A(PROFILE), { (1<<MACH_BASE) } } }, { "h-cr", HW_H_CR, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_cr_names, { 0, { (1<<MACH_BASE) } } }, { "h-dr", HW_H_DR, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_dr_names, { 0, { (1<<MACH_BASE) } } }, { "h-ps", HW_H_PS, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_ps, { 0, { (1<<MACH_BASE) } } }, { "h-r13", HW_H_R13, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r13, { 0, { (1<<MACH_BASE) } } }, { "h-r14", HW_H_R14, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r14, { 0, { (1<<MACH_BASE) } } }, { "h-r15", HW_H_R15, CGEN_ASM_KEYWORD, (PTR) & fr30_cgen_opval_h_r15, { 0, { (1<<MACH_BASE) } } }, { "h-nbit", HW_H_NBIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-zbit", HW_H_ZBIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-vbit", HW_H_VBIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-cbit", HW_H_CBIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-ibit", HW_H_IBIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-sbit", HW_H_SBIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-tbit", HW_H_TBIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-d0bit", HW_H_D0BIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-d1bit", HW_H_D1BIT, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-ccr", HW_H_CCR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-scr", HW_H_SCR, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { "h-ilm", HW_H_ILM, CGEN_ASM_NONE, 0, { 0, { (1<<MACH_BASE) } } }, { 0, 0, CGEN_ASM_NONE, 0, {0, {0}} }};#undef A/* The instruction field table. */#define A(a) (1 << CONCAT2 (CGEN_IFLD_,a))const CGEN_IFLD fr30_cgen_ifld_table[] ={ { FR30_F_NIL, "f-nil", 0, 0, 0, 0, { 0, { (1<<MACH_BASE) } } }, { FR30_F_ANYOF, "f-anyof", 0, 0, 0, 0, { 0, { (1<<MACH_BASE) } } }, { FR30_F_OP1, "f-op1", 0, 16, 0, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_OP2, "f-op2", 0, 16, 4, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_OP3, "f-op3", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_OP4, "f-op4", 0, 16, 12, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_OP5, "f-op5", 0, 16, 4, 1, { 0, { (1<<MACH_BASE) } } }, { FR30_F_CC, "f-cc", 0, 16, 4, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_CCC, "f-ccc", 16, 16, 0, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_RJ, "f-Rj", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_RI, "f-Ri", 0, 16, 12, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_RS1, "f-Rs1", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_RS2, "f-Rs2", 0, 16, 12, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_RJC, "f-Rjc", 16, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_RIC, "f-Ric", 16, 16, 12, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_CRJ, "f-CRj", 16, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_CRI, "f-CRi", 16, 16, 12, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_U4, "f-u4", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_U4C, "f-u4c", 0, 16, 12, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_I4, "f-i4", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_M4, "f-m4", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_U8, "f-u8", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_I8, "f-i8", 0, 16, 4, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_I20_4, "f-i20-4", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_I20_16, "f-i20-16", 16, 16, 0, 16, { 0, { (1<<MACH_BASE) } } }, { FR30_F_I32, "f-i32", 16, 32, 0, 32, { 0|A(SIGN_OPT), { (1<<MACH_BASE) } } }, { FR30_F_UDISP6, "f-udisp6", 0, 16, 8, 4, { 0, { (1<<MACH_BASE) } } }, { FR30_F_DISP8, "f-disp8", 0, 16, 4, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_DISP9, "f-disp9", 0, 16, 4, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_DISP10, "f-disp10", 0, 16, 4, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_S10, "f-s10", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_U10, "f-u10", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_REL9, "f-rel9", 0, 16, 8, 8, { 0|A(PCREL_ADDR), { (1<<MACH_BASE) } } }, { FR30_F_DIR8, "f-dir8", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_DIR9, "f-dir9", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_DIR10, "f-dir10", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_REL12, "f-rel12", 0, 16, 5, 11, { 0|A(PCREL_ADDR), { (1<<MACH_BASE) } } }, { FR30_F_REGLIST_HI_ST, "f-reglist_hi_st", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_REGLIST_LOW_ST, "f-reglist_low_st", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_REGLIST_HI_LD, "f-reglist_hi_ld", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { FR30_F_REGLIST_LOW_LD, "f-reglist_low_ld", 0, 16, 8, 8, { 0, { (1<<MACH_BASE) } } }, { 0, 0, 0, 0, 0, 0, {0, {0}} }};#undef A/* The operand table. */#define A(a) (1 << CONCAT2 (CGEN_OPERAND_,a))#define OPERAND(op) CONCAT2 (FR30_OPERAND_,op)const CGEN_OPERAND fr30_cgen_operand_table[] ={/* pc: program counter */ { "pc", FR30_OPERAND_PC, HW_H_PC, 0, 0, { 0|A(SEM_ONLY), { (1<<MACH_BASE) } } },/* Ri: destination register */ { "Ri", FR30_OPERAND_RI, HW_H_GR, 12, 4, { 0, { (1<<MACH_BASE) } } },/* Rj: source register */ { "Rj", FR30_OPERAND_RJ, HW_H_GR, 8, 4, { 0, { (1<<MACH_BASE) } } },/* Ric: target register coproc insn */ { "Ric", FR30_OPERAND_RIC, HW_H_GR, 12, 4, { 0, { (1<<MACH_BASE) } } },/* Rjc: source register coproc insn */ { "Rjc", FR30_OPERAND_RJC, HW_H_GR, 8, 4, { 0, { (1<<MACH_BASE) } } },/* CRi: coprocessor register */ { "CRi", FR30_OPERAND_CRI, HW_H_CR, 12, 4, { 0, { (1<<MACH_BASE) } } },/* CRj: coprocessor register */ { "CRj", FR30_OPERAND_CRJ, HW_H_CR, 8, 4, { 0, { (1<<MACH_BASE) } } },/* Rs1: dedicated register */ { "Rs1", FR30_OPERAND_RS1, HW_H_DR, 8, 4, { 0, { (1<<MACH_BASE) } } },/* Rs2: dedicated register */ { "Rs2", FR30_OPERAND_RS2, HW_H_DR, 12, 4, { 0, { (1<<MACH_BASE) } } },/* R13: General Register 13 */ { "R13", FR30_OPERAND_R13, HW_H_R13, 0, 0, { 0, { (1<<MACH_BASE) } } },/* R14: General Register 14 */ { "R14", FR30_OPERAND_R14, HW_H_R14, 0, 0, { 0, { (1<<MACH_BASE) } } },/* R15: General Register 15 */ { "R15", FR30_OPERAND_R15, HW_H_R15, 0, 0, { 0, { (1<<MACH_BASE) } } },/* ps: Program Status register */ { "ps", FR30_OPERAND_PS, HW_H_PS, 0, 0, { 0, { (1<<MACH_BASE) } } },/* u4: 4 bit unsigned immediate */ { "u4", FR30_OPERAND_U4, HW_H_UINT, 8, 4, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* u4c: 4 bit unsigned immediate */ { "u4c", FR30_OPERAND_U4C, HW_H_UINT, 12, 4, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* u8: 8 bit unsigned immediate */ { "u8", FR30_OPERAND_U8, HW_H_UINT, 8, 8, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* i8: 8 bit unsigned immediate */ { "i8", FR30_OPERAND_I8, HW_H_UINT, 4, 8, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* udisp6: 6 bit unsigned immediate */ { "udisp6", FR30_OPERAND_UDISP6, HW_H_UINT, 8, 4, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* disp8: 8 bit signed immediate */ { "disp8", FR30_OPERAND_DISP8, HW_H_SINT, 4, 8, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* disp9: 9 bit signed immediate */ { "disp9", FR30_OPERAND_DISP9, HW_H_SINT, 4, 8, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* disp10: 10 bit signed immediate */ { "disp10", FR30_OPERAND_DISP10, HW_H_SINT, 4, 8, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* s10: 10 bit signed immediate */ { "s10", FR30_OPERAND_S10, HW_H_SINT, 8, 8, { 0|A(HASH_PREFIX), { (1<<MACH_BASE) } } },/* u10: 10 bit unsigned immediate */ { "u10", FR30_OPERAND_U10, HW_H_UINT, 8, 8,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?