📄 d30v-insns
字号:
# 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 + -