📄 d10v-opc.c
字号:
/* d10v-opc.c -- D10V opcode list Copyright 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. Written by Martin Hunt, Cygnus SupportThis file is part of GDB, GAS, and the GNU binutils.GDB, GAS, and the GNU binutils are free software; you can redistributethem and/or modify them under the terms of the GNU General PublicLicense as published by the Free Software Foundation; either version2, or (at your option) any later version.GDB, GAS, and the GNU binutils are distributed in the hope that theywill be useful, but WITHOUT ANY WARRANTY; without even the impliedwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Seethe GNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this file; see the file COPYING. If not, write to the FreeSoftware Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#include <stdio.h>#include "sysdep.h"#include "opcode/d10v.h"/* The table is sorted. Suitable for searching by a binary search. */const struct pd_reg d10v_predefined_registers[] ={ { "a0", NULL, OPERAND_ACC0+0 }, { "a1", NULL, OPERAND_ACC1+1 }, { "bpc", NULL, OPERAND_CONTROL+3 }, { "bpsw", NULL, OPERAND_CONTROL+1 }, { "c", NULL, OPERAND_CFLAG+3 }, { "cr0", "psw", OPERAND_CONTROL }, { "cr1", "bpsw", OPERAND_CONTROL+1 }, { "cr10", "mod_s", OPERAND_CONTROL+10 }, { "cr11", "mod_e", OPERAND_CONTROL+11 }, { "cr12", NULL, OPERAND_CONTROL+12 }, { "cr13", NULL, OPERAND_CONTROL+13 }, { "cr14", "iba", OPERAND_CONTROL+14 }, { "cr15", NULL, OPERAND_CONTROL+15 }, { "cr2", "pc", OPERAND_CONTROL+2 }, { "cr3", "bpc", OPERAND_CONTROL+3 }, { "cr4", "dpsw", OPERAND_CONTROL+4 }, { "cr5", "dpc", OPERAND_CONTROL+5 }, { "cr6", NULL, OPERAND_CONTROL+6 }, { "cr7", "rpt_c", OPERAND_CONTROL+7 }, { "cr8", "rpt_s", OPERAND_CONTROL+8 }, { "cr9", "rpt_e", OPERAND_CONTROL+9 }, { "dpc", NULL, OPERAND_CONTROL+5 }, { "dpsw", NULL, OPERAND_CONTROL+4 }, { "f0", NULL, OPERAND_FFLAG+0 }, { "f1", NULL, OPERAND_FFLAG+1 }, { "iba", NULL, OPERAND_CONTROL+14 }, { "link", "r13", OPERAND_GPR+13 }, { "mod_e", NULL, OPERAND_CONTROL+11 }, { "mod_s", NULL, OPERAND_CONTROL+10 }, { "pc", NULL, OPERAND_CONTROL+2 }, { "psw", NULL, OPERAND_CONTROL+0 }, { "r0", NULL, OPERAND_GPR+0 }, { "r0-r1", NULL, OPERAND_GPR+0}, { "r1", NULL, OPERAND_GPR+1 }, { "r1", NULL, OPERAND_GPR+1 }, { "r10", NULL, OPERAND_GPR+10 }, { "r10-r11", NULL, OPERAND_GPR+10 }, { "r11", NULL, OPERAND_GPR+11 }, { "r12", NULL, OPERAND_GPR+12 }, { "r12-r13", NULL, OPERAND_GPR+12 }, { "r13", NULL, OPERAND_GPR+13 }, { "r14", NULL, OPERAND_GPR+14 }, { "r14-r15", NULL, OPERAND_GPR+14 }, { "r15", "sp", OPERAND_GPR+15 }, { "r2", NULL, OPERAND_GPR+2 }, { "r2-r3", NULL, OPERAND_GPR+2 }, { "r3", NULL, OPERAND_GPR+3 }, { "r4", NULL, OPERAND_GPR+4 }, { "r4-r5", NULL, OPERAND_GPR+4 }, { "r5", NULL, OPERAND_GPR+5 }, { "r6", NULL, OPERAND_GPR+6 }, { "r6-r7", NULL, OPERAND_GPR+6 }, { "r7", NULL, OPERAND_GPR+7 }, { "r8", NULL, OPERAND_GPR+8 }, { "r8-r9", NULL, OPERAND_GPR+8 }, { "r9", NULL, OPERAND_GPR+9 }, { "rpt_c", NULL, OPERAND_CONTROL+7 }, { "rpt_e", NULL, OPERAND_CONTROL+9 }, { "rpt_s", NULL, OPERAND_CONTROL+8 }, { "sp", NULL, OPERAND_GPR+15 },};int d10v_reg_name_cnt(){ return (sizeof(d10v_predefined_registers) / sizeof(struct pd_reg));}const struct d10v_operand d10v_operands[] ={#define UNUSED (0) { 0, 0, 0 },#define RSRC (UNUSED + 1) { 4, 1, OPERAND_GPR|OPERAND_REG },#define RDST (RSRC + 1) { 4, 5, OPERAND_DEST|OPERAND_GPR|OPERAND_REG },#define ASRC (RDST + 1) { 1, 4, OPERAND_ACC0|OPERAND_ACC1|OPERAND_REG },#define ASRC0ONLY (ASRC + 1) { 1, 4, OPERAND_ACC0|OPERAND_REG },#define ADST (ASRC0ONLY + 1) { 1, 8, OPERAND_DEST|OPERAND_ACC0|OPERAND_ACC1|OPERAND_REG },#define RSRCE (ADST + 1) { 4, 1, OPERAND_EVEN|OPERAND_GPR|OPERAND_REG },#define RDSTE (RSRCE + 1) { 4, 5, OPERAND_EVEN|OPERAND_DEST|OPERAND_GPR|OPERAND_REG },#define NUM16 (RDSTE + 1) { 16, 0, OPERAND_NUM|OPERAND_SIGNED },#define NUM3 (NUM16 + 1) /* rac, rachi */ { 3, 1, OPERAND_NUM|OPERAND_SIGNED|RESTRICTED_NUM3 },#define NUM4 (NUM3 + 1) { 4, 1, OPERAND_NUM|OPERAND_SIGNED },#define UNUM4 (NUM4 + 1) { 4, 1, OPERAND_NUM },#define UNUM4S (UNUM4 + 1) /* addi, slli, srai, srli, subi */ { 4, 1, OPERAND_NUM|OPERAND_SHIFT },#define UNUM8 (UNUM4S + 1) /* repi */ { 8, 16, OPERAND_NUM },#define UNUM16 (UNUM8 + 1) /* cmpui */ { 16, 0, OPERAND_NUM },#define ANUM16 (UNUM16 + 1) { 16, 0, OPERAND_ADDR|OPERAND_SIGNED },#define ANUM8 (ANUM16 + 1) { 8, 0, OPERAND_ADDR|OPERAND_SIGNED },#define ASRC2 (ANUM8 + 1) { 1, 8, OPERAND_ACC0|OPERAND_ACC1|OPERAND_REG },#define RSRC2 (ASRC2 + 1) { 4, 5, OPERAND_GPR|OPERAND_REG },#define RSRC2E (RSRC2 + 1) { 4, 5, OPERAND_GPR|OPERAND_REG|OPERAND_EVEN },#define ASRC0 (RSRC2E + 1) { 1, 0, OPERAND_ACC0|OPERAND_ACC1|OPERAND_REG },#define ADST0 (ASRC0 + 1) { 1, 0, OPERAND_ACC0|OPERAND_ACC1|OPERAND_REG|OPERAND_DEST },#define FFSRC (ADST0 + 1) { 2, 1, OPERAND_REG | OPERAND_FFLAG },#define CFSRC (FFSRC + 1) { 2, 1, OPERAND_REG | OPERAND_CFLAG },#define FDST (CFSRC + 1) { 1, 5, OPERAND_REG | OPERAND_FFLAG | OPERAND_DEST},#define ATSIGN (FDST + 1) { 0, 0, OPERAND_ATSIGN},#define ATPAR (ATSIGN + 1) /* "@(" */ { 0, 0, OPERAND_ATPAR},#define PLUS (ATPAR + 1) /* postincrement */ { 0, 0, OPERAND_PLUS},#define MINUS (PLUS + 1) /* postdecrement */ { 0, 0, OPERAND_MINUS},#define ATMINUS (MINUS + 1) /* predecrement */ { 0, 0, OPERAND_ATMINUS},#define CSRC (ATMINUS + 1) /* control register */ { 4, 1, OPERAND_REG|OPERAND_CONTROL},#define CDST (CSRC + 1) /* control register */ { 4, 5, OPERAND_REG|OPERAND_CONTROL|OPERAND_DEST},};const struct d10v_opcode d10v_opcodes[] = { { "abs", SHORT_2, 1, EITHER, PAR|WF0, 0x4607, 0x7e1f, { RDST } }, { "abs", SHORT_2, 1, IU, PAR|WF0, 0x5607, 0x7eff, { ADST } }, { "add", SHORT_2, 1, EITHER, PAR|WCAR, 0x0200, 0x7e01, { RDST, RSRC } }, { "add", SHORT_2, 1, IU, PAR, 0x1201, 0x7ee3, { ADST, RSRCE } }, { "add", SHORT_2, 1, IU, PAR, 0x1203, 0x7eef, { ADST, ASRC } }, { "add2w", SHORT_2, 2, IU, PAR|WCAR, 0x1200, 0x7e23, { RDSTE, RSRCE } }, { "add3", LONG_L, 1, MU, SEQ|WCAR, 0x1000000, 0x3f000000, { RDST, RSRC, NUM16 } }, { "addac3", LONG_R, 1, IU, SEQ, 0x17000200, 0x3ffffe22, { RDSTE, RSRCE, ASRC0 } },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -