⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d30v-insns

📁 这个是LINUX下的GDB调度工具的源码
💻
📖 第 1 页 / 共 5 页
字号:
# OBSOLETE //  -*- C -*-# OBSOLETE //  Mitsubishi Electric Corp. D30V Simulator.# OBSOLETE //  Copyright (C) 1997, Free Software Foundation, Inc.# OBSOLETE //  Contributed by Cygnus Solutions Inc.# OBSOLETE //# OBSOLETE //  This file is part of GDB, the GNU debugger.# OBSOLETE //# OBSOLETE //  This program is free software; you can redistribute it and/or modify# OBSOLETE //  it under the terms of the GNU General Public License as published by# OBSOLETE //  the Free Software Foundation; either version 2 of the License, or# OBSOLETE //  (at your option) any later version.# OBSOLETE //# OBSOLETE //  This program is distributed in the hope that it will be useful,# OBSOLETE //  but WITHOUT ANY WARRANTY; without even the implied warranty of# OBSOLETE //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# OBSOLETE //  GNU General Public License for more details.# OBSOLETE //# OBSOLETE //  You should have received a copy of the GNU General Public License# OBSOLETE //  along with this program; if not, write to the Free Software# OBSOLETE //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.# OBSOLETE //# OBSOLETE # OBSOLETE # OBSOLETE define( _BRA,  `1.*,CCC,000')# OBSOLETE define( _LOGIC, `1.*,CCC,001')# OBSOLETE define( _IMEM, `1.*,CCC,010')# OBSOLETE define( _IALU1, `1.*,CCC,100')# OBSOLETE define(_IALU2, `1.*,CCC,101')# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE define(_IMM6, `6.IMM_6S')# OBSOLETE define(_IMM12, `12.IMM_12S')# OBSOLETE define(_IMM18, `18.IMM_18S')# OBSOLETE define(_IMM32, `6.IMM_6L,*,000,8.IMM_8L,00,18.IMM_18L')# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // The following is called when ever an illegal instruction is# OBSOLETE // encountered# OBSOLETE ::internal::illegal# OBSOLETE 	sim_io_eprintf (sd, "illegal instruction at 0x%lx\n", (long) cia);# OBSOLETE 	sim_engine_halt (SD, CPU, NULL, cia, sim_signalled, SIM_SIGILL);# OBSOLETE # OBSOLETE // The following is called when ever an instruction in the wrong# OBSOLETE // slot is encountered.# OBSOLETE ::internal::wrong_slot# OBSOLETE 	sim_io_eprintf (sd, "wrong slot at 0x%lx\n", (long) cia);# OBSOLETE 	sim_engine_halt (SD, CPU, NULL, cia, sim_signalled, SIM_SIGILL);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // Something illegal that can be used to contact the simulator emul# OBSOLETE // library.# OBSOLETE define(_EMUL, `1.*,CCC,111')# OBSOLETE # OBSOLETE void::function::do_emul:int imm# OBSOLETE 	/* temp hack - later replace with real interface */# OBSOLETE 	enum {# OBSOLETE 	  param1 = 2, param2, param3, param4# OBSOLETE 	};# OBSOLETE 	switch (imm) {# OBSOLETE 	case 0:# OBSOLETE 	  {# OBSOLETE 	    sim_engine_abort (SD, CPU, cia, "UNIX call emulation unsupported");# OBSOLETE 	    break;# OBSOLETE 	  }# OBSOLETE 	case 1:# OBSOLETE 	  /* Trap 1 - prints a string */# OBSOLETE 	  {# OBSOLETE 	    address_word str = GPR[param1];# OBSOLETE 	    char chr;# OBSOLETE 	    while (1) {# OBSOLETE 	      chr = MEM (unsigned, str, 1);# OBSOLETE 	    if (chr == '\0') break;# OBSOLETE 	      sim_io_write_stdout (sd, &chr, sizeof chr);# OBSOLETE 	      str++;# OBSOLETE 	    }# OBSOLETE 	    break;# OBSOLETE 	  }# OBSOLETE 	case 3:# OBSOLETE 	  /* Trap 3 - writes a character */# OBSOLETE 	  {# OBSOLETE 	    char chr = GPR[param1];# OBSOLETE 	    sim_io_write_stdout (sd, &chr, sizeof chr);# OBSOLETE 	    break;# OBSOLETE 	  }# OBSOLETE 	case 4:# OBSOLETE 	  /* Trap 4 exits with status in [param1] */# OBSOLETE 	  {# OBSOLETE 	    sim_engine_halt (SD, CPU, NULL, cia, sim_exited, GPR[param1]);# OBSOLETE 	    break;# OBSOLETE 	  }# OBSOLETE 	case 5:# OBSOLETE 	  /* Trap 5 breakpoints.  If the breakpoint system knows about this, it# OBSOLETE 	     won't return.  Otherwise, we fall through to treat this as an# OBSOLETE 	     unknown instruction.  */# OBSOLETE 	  {# OBSOLETE 	    sim_handle_breakpoint (SD, CPU, cia);# OBSOLETE 	  /* Fall through to default case.*/# OBSOLETE 	  }# OBSOLETE 	default:# OBSOLETE 	  sim_engine_abort (SD, CPU, cia, "Unknown monitor call %d", imm);# OBSOLETE 	}# OBSOLETE # OBSOLETE _EMUL,00000,00,6.*,6.*,IMM_6S:EMUL:short,emul:iu,mu:EMUL# OBSOLETE "syscall <imm>"# OBSOLETE 	do_emul (_SD, imm);# OBSOLETE _BRA,00000,00,6.**,6.**,_IMM32:BRA:long:iu,mu:EMUL long# OBSOLETE "syscall <imm>"# OBSOLETE 	do_emul (_SD, imm);# OBSOLETE # OBSOLETE // ABS# OBSOLETE # OBSOLETE _IALU1,01000,00,6.RA,6.RB,6.**:IALU1:short:iu,mu:ABS# OBSOLETE "abs r<RA>, r<RB>"# OBSOLETE 	WRITE32_QUEUE (Ra, abs(Rb));# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ADD# OBSOLETE # OBSOLETE void::function::do_add:unsigned32 *ra, unsigned32 rb, unsigned32 imm# OBSOLETE 	ALU_BEGIN(rb);# OBSOLETE 	ALU_ADDC(imm);# OBSOLETE 	ALU_END(ra);# OBSOLETE # OBSOLETE _IALU1,00000,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADD# OBSOLETE "add r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_add (_SD, Ra, Rb, Rc);# OBSOLETE _IALU1,00000,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADD imm# OBSOLETE "add r<RA>, r<RB>, <imm>"# OBSOLETE 	do_add (_SD, Ra, Rb, imm);# OBSOLETE _IALU1,00000,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADD imm long# OBSOLETE "add r<RA>, r<RB>, <imm>"# OBSOLETE 	do_add (_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ADD2H# OBSOLETE # OBSOLETE void::function::do_add2h:signed32 *ra, signed32 rb, signed32 imm# OBSOLETE 	unsigned16 ah2 = VH2_4(rb) + VH2_4(imm);# OBSOLETE 	unsigned16 al2 = VL2_4(rb) + VL2_4(imm);# OBSOLETE 	WRITE32_QUEUE (ra, (ah2 << 16) | al2);# OBSOLETE # OBSOLETE _IALU1,00001,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADD2H# OBSOLETE "add2h r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_add2h (_SD, Ra, Rb, Rc);# OBSOLETE _IALU1,00001,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADD2H imm# OBSOLETE "add2h r<RA>, r<RB>, <imm>"# OBSOLETE 	do_add2h (_SD, Ra, Rb, immHL);# OBSOLETE _IALU1,00001,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADD2H imm long# OBSOLETE "add2h r<RA>, r<RB>, <imm>"# OBSOLETE 	do_add2h (_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ADDC# OBSOLETE # OBSOLETE void::function::do_addc:unsigned32 *ra, unsigned32 rb, unsigned32 imm# OBSOLETE 	ALU_BEGIN(rb);# OBSOLETE 	ALU_ADDC_C(imm, ALU_CARRY);# OBSOLETE 	ALU_END(ra);# OBSOLETE # OBSOLETE _IALU1,00100,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDC# OBSOLETE "addc r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_addc (_SD, Ra, Rb, Rc);# OBSOLETE _IALU1,00100,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDC imm# OBSOLETE "addc r<RA>, r<RB>, <imm>"# OBSOLETE 	do_addc (_SD, Ra, Rb, imm);# OBSOLETE _IALU1,00100,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDC imm long# OBSOLETE "addc r<RA>, r<RB>, <imm>"# OBSOLETE 	do_addc (_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ADDHppp# OBSOLETE # OBSOLETE void::function::do_addh_ppp:int ppp, unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE 	switch (ppp) {# OBSOLETE 	case 0x0: /* LLL */# OBSOLETE 	  {# OBSOLETE 	  ALU16_BEGIN(VL2_4(rb));# OBSOLETE 	  ALU16_ADDC(VL2_4(src));# OBSOLETE 	  ALU16_END(ra, 0);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	case 0x1: /* LLH */# OBSOLETE 	  {# OBSOLETE 	  ALU16_BEGIN(VL2_4(rb));# OBSOLETE 	  ALU16_ADDC(VH2_4(src));# OBSOLETE 	  ALU16_END(ra, 0);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	case 0x2: /* LHL */# OBSOLETE 	  {# OBSOLETE 	  ALU16_BEGIN(VH2_4(rb));# OBSOLETE 	  ALU16_ADDC(VL2_4(src));# OBSOLETE 	  ALU16_END(ra, 0);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	case 0x3: /* LHH */# OBSOLETE 	  {# OBSOLETE 	  ALU16_BEGIN(VH2_4(rb));# OBSOLETE 	  ALU16_ADDC(VH2_4(src));# OBSOLETE 	  ALU16_END(ra, 0);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	case 0x4: /* HLL */# OBSOLETE 	  {# OBSOLETE 	  ALU16_BEGIN(VL2_4(rb));# OBSOLETE 	  ALU16_ADDC(VL2_4(src));# OBSOLETE 	  ALU16_END(ra, 1);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	case 0x5: /* HLH */# OBSOLETE 	  {# OBSOLETE 	  ALU16_BEGIN(VL2_4(rb));# OBSOLETE 	  ALU16_ADDC(VH2_4(src));# OBSOLETE 	  ALU16_END(ra, 1);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	case 0x6: /* HHL */# OBSOLETE 	  {# OBSOLETE 	  ALU16_BEGIN(VH2_4(rb));# OBSOLETE 	  ALU16_ADDC(VL2_4(src));# OBSOLETE 	  ALU16_END(ra, 1);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	case 0x7: /* HHH */# OBSOLETE 	  {	# OBSOLETE 	  ALU16_BEGIN(VH2_4(rb));# OBSOLETE 	  ALU16_ADDC(VH2_4(src));# OBSOLETE 	  ALU16_END(ra, 1);# OBSOLETE 	  }# OBSOLETE 	  break;# OBSOLETE 	default:# OBSOLETE 	  sim_engine_abort (SD, CPU, cia, "do_addh_ppp - internal error - bad switch");# OBSOLETE 	}# OBSOLETE ::%s::ppp:int ppp# OBSOLETE 	switch (ppp)# OBSOLETE 	  {# OBSOLETE 	  case 0x0: return "lll";# OBSOLETE 	  case 0x1: return "llh";# OBSOLETE 	  case 0x2: return "lhl";# OBSOLETE 	  case 0x3: return "lhh";# OBSOLETE 	  case 0x4: return "hll";# OBSOLETE 	  case 0x5: return "hlh";# OBSOLETE 	  case 0x6: return "hhl";# OBSOLETE 	  case 0x7: return "hhh";# OBSOLETE 	  default: return "?";# OBSOLETE 	  }# OBSOLETE # OBSOLETE _IALU1,10,ppp,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDHppp# OBSOLETE "addh%s<ppp> r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_addh_ppp(_SD, ppp, Ra, Rb, Rc);# OBSOLETE _IALU1,10,ppp,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDHppp imm# OBSOLETE "addh%s<ppp> r<RA>, r<RB>, <imm>"# OBSOLETE 	do_addh_ppp(_SD, ppp, Ra, Rb, immHL);# OBSOLETE _IALU1,10,ppp,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDHppp imm long# OBSOLETE "addh%s<ppp> r<RA>, r<RB>, <imm>"# OBSOLETE 	do_addh_ppp(_SD, ppp, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ADDS# OBSOLETE # OBSOLETE void::function::do_adds:unsigned32 *ra, unsigned32 rb, unsigned32 imm# OBSOLETE 	ALU_BEGIN(rb);# OBSOLETE 	ALU_ADDC(EXTRACTED32(imm, 0, 0));# OBSOLETE 	ALU_END(ra);# OBSOLETE # OBSOLETE _IALU1,00110,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDS# OBSOLETE "adds r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_adds (_SD, Ra, Rb, Rc);# OBSOLETE _IALU1,00110,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDS imm# OBSOLETE "adds r<RA>, r<RB>, <imm>"# OBSOLETE 	do_adds (_SD, Ra, Rb, imm);# OBSOLETE _IALU1,00110,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDS imm long# OBSOLETE "adds r<RA>, r<RB>, <imm>"# OBSOLETE 	do_adds (_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ADDS2H# OBSOLETE # OBSOLETE void::function::do_adds2h:unsigned32 *ra, unsigned32 rb, unsigned32 immHL# OBSOLETE 	unsigned16 high = VH2_4(rb) + EXTRACTED32(immHL, 0, 0);# OBSOLETE 	unsigned16 low = VL2_4(rb) + EXTRACTED32(immHL, 16, 16);# OBSOLETE 	WRITE32_QUEUE (ra, (high << 16) | low);# OBSOLETE # OBSOLETE _IALU1,00111,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:ADDS2H# OBSOLETE "adds2h r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_adds2h (_SD, Ra, Rb, Rc);# OBSOLETE _IALU1,00111,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:ADDS2H imm# OBSOLETE "adds2h r<RA>, r<RB>, <imm>"# OBSOLETE 	do_adds2h (_SD, Ra, Rb, immHL);# OBSOLETE _IALU1,00111,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:ADDS2H imm long# OBSOLETE "adds2h r<RA>, r<RB>, <imm>"# OBSOLETE 	do_adds2h (_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // AND# OBSOLETE # OBSOLETE _LOGIC,11000,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:AND# OBSOLETE "and r<RA>, r<RB>, r<RC>"# OBSOLETE 	WRITE32_QUEUE (Ra, Rb & Rc);# OBSOLETE _LOGIC,11000,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:AND imm# OBSOLETE "and r<RA>, r<RB>, <imm>"# OBSOLETE 	WRITE32_QUEUE (Ra, Rb & imm);# OBSOLETE _LOGIC,11000,10,6.RA,6.RB,_IMM32:LOGIC:long:iu,mu:AND imm long# OBSOLETE "and r<RA>, r<RB>, <imm>"# OBSOLETE 	WRITE32_QUEUE (Ra, Rb & imm);# OBSOLETE # OBSOLETE # OBSOLETE // ANDFG# OBSOLETE # OBSOLETE _LOGIC,01000,00,***,3.FA,***,3.FB,***,3.FC:LOGIC:short:iu,mu:Logical AND Flags# OBSOLETE "andfg f<FA>, f<FB>, f<FC>"# OBSOLETE 	PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) & PSW_FLAG_VAL(FC));# OBSOLETE _LOGIC,01000,10,***,3.FA,***,3.FB,_IMM6:LOGIC:short:iu,mu:Logical AND Flags imm# OBSOLETE "andfg f<FA>, f<FB>, <imm_6>"# OBSOLETE 	PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) & (imm_6 & 1));# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // AVG# OBSOLETE # OBSOLETE void::function::do_avg:unsigned32 *ra, unsigned32 rb, unsigned32 imm# OBSOLETE 	WRITE32_QUEUE (ra, ((signed64)(signed32)rb + (signed64)(signed32)imm + 1) >> 1);# OBSOLETE # OBSOLETE _IALU1,01010,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:AVG# OBSOLETE "avg r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_avg (_SD, Ra, Rb, Rc);# OBSOLETE _IALU1,01010,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:AVG imm# OBSOLETE "avg r<RA>, r<RB>, <imm>"# OBSOLETE 	do_avg (_SD, Ra, Rb, imm);# OBSOLETE _IALU1,01010,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:AVG imm long# OBSOLETE "avg r<RA>, r<RB>, <imm>"# OBSOLETE 	do_avg (_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // AVG2H# OBSOLETE # OBSOLETE void::function::do_avg2h:unsigned32 *ra, unsigned32 rb, unsigned32 imm# OBSOLETE 	unsigned16 high = ((signed32)(signed16)VH2_4(rb) + (signed32)(signed16)VH2_4(imm) + 1) >> 1;# OBSOLETE 	unsigned16 low  = ((signed32)(signed16)VL2_4(rb) + (signed32)(signed16)VL2_4(imm) + 1) >> 1;# OBSOLETE 	WRITE32_QUEUE (ra, (high << 16) | low);# OBSOLETE # OBSOLETE _IALU1,01011,00,6.RA,6.RB,6.RC:IALU1:short:iu,mu:AVG2H# OBSOLETE "avg2h r<RA>, r<RB>, r<RC>"# OBSOLETE 	do_avg2h (_SD, Ra, Rb, Rc);# OBSOLETE _IALU1,01011,10,6.RA,6.RB,_IMM6:IALU1:short:iu,mu:AVG2H imm# OBSOLETE "avg2h r<RA>, r<RB>, <imm>"# OBSOLETE 	do_avg2h (_SD, Ra, Rb, immHL);# OBSOLETE _IALU1,01011,10,6.RA,6.RB,_IMM32:IALU1:long:iu,mu:AVG2H imm long# OBSOLETE "avg2h r<RA>, r<RB>, <imm>"# OBSOLETE 	do_avg2h (_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE 

⌨️ 快捷键说明

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