📄 d30v-insns
字号:
# OBSOLETE _IALU2,11001,10,5.*,1.AA,6.RB,_IMM6:IALU2:short:iu:MULXS imm# OBSOLETE "mulxs a<AA>, r<RB>, <imm>"# OBSOLETE do_mulxs(_SD, Aa, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MVFACC# OBSOLETE # OBSOLETE void::function::do_mvfacc:unsigned32 *ra, unsigned64 ab, unsigned32 src# OBSOLETE while (src > 63) src -= 64;# OBSOLETE WRITE32_QUEUE (ra, ((signed64)ab) >> src);# OBSOLETE # OBSOLETE _IALU2,11111,00,6.RA,5.*,1.AB,6.RC:IALU2:short:iu:MVFACC# OBSOLETE "mvfacc r<RA>, a<AB>, r<RC>"# OBSOLETE do_mvfacc(_SD, Ra, *Ab, Rc); # OBSOLETE _IALU2,11111,10,6.RA,5.*,1.AB,_IMM6:IALU2:short:iu:MVFACC imm# OBSOLETE "mvfacc r<RA>, a<AB>, <imm>"# OBSOLETE do_mvfacc(_SD, Ra, *Ab, imm_6u);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MVFSYS# OBSOLETE # OBSOLETE _BRA,11110,00,6.RA,6.CR,6.ID:BRA:short:mu:MVFSYS# OBSOLETE "mvfsys r<RA>, cr<CR>"# OBSOLETE switch (ID) {# OBSOLETE case 0:# OBSOLETE if (CR >= NR_CONTROL_REGISTERS)# OBSOLETE sim_engine_abort (SD, CPU, cia, "FIXME - illegal CR");# OBSOLETE else# OBSOLETE WRITE32_QUEUE (Ra, (CPU)->regs.control[CR]);# OBSOLETE break;# OBSOLETE case 1:# OBSOLETE WRITE32_QUEUE (Ra, PSWL);# OBSOLETE break;# OBSOLETE case 2:# OBSOLETE WRITE32_QUEUE (Ra, EXTRACTED32(PSWH, 16, 31));# OBSOLETE break;# OBSOLETE case 3:# OBSOLETE WRITE32_QUEUE (Ra, PSW_FLAG_VAL(CR));# OBSOLETE break;# OBSOLETE default:# OBSOLETE sim_engine_abort (SD, CPU, cia, "FIXME - illegal ID");# OBSOLETE }# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MVTACC# OBSOLETE # OBSOLETE _IALU2,01111,00,5.*,1.AA,6.RB,6.RC:IALU2:short:iu:MVTACC# OBSOLETE "mvtacc a<AA>, r<RB>, r<RC>"# OBSOLETE WRITE64_QUEUE (Aa, INSERTED64(RbU, 0, 31) | (RcU));# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MVTSYS# OBSOLETE # OBSOLETE _BRA,01110,00,6.CR,6.RB,6.ID:BRA:short:mu:MVTSYS# OBSOLETE "mvtsys cr<CR>, r<RB>"# OBSOLETE switch (ID) {# OBSOLETE case 0: /* control register */# OBSOLETE if (CR >= NR_CONTROL_REGISTERS)# OBSOLETE sim_engine_abort (SD, CPU, cia, "FIXME - illegal CR");# OBSOLETE else# OBSOLETE {# OBSOLETE unsigned32 value = Rb;# OBSOLETE CPU->mvtsys_left_p = 1;# OBSOLETE if (CR == processor_status_word_cr)# OBSOLETE {# OBSOLETE unsigned32 ds = PSW & BIT32 (PSW_DS); /* preserve ds */# OBSOLETE value = ds | (value & PSW_VALID);# OBSOLETE }# OBSOLETE else if (CR == backup_processor_status_word_cr# OBSOLETE || CR == debug_backup_processor_status_word_cr)# OBSOLETE value &= DPSW_VALID;# OBSOLETE else if (CR == eit_vector_base_cr)# OBSOLETE value &= EIT_VALID;# OBSOLETE WRITE32_QUEUE (&(CPU)->regs.control[CR], value);# OBSOLETE }# OBSOLETE break;# OBSOLETE case 1: /* PSWL */# OBSOLETE WRITE32_QUEUE_MASK (&PSW, EXTRACTED32(Rb, 16, 31),# OBSOLETE PSW_VALID & 0x0000ffff);# OBSOLETE break;# OBSOLETE case 2: /* PSWH */# OBSOLETE {# OBSOLETE unsigned32 ds = PSW & BIT32 (PSW_DS); /* preserve ds */# OBSOLETE WRITE32_QUEUE_MASK (&PSW, (EXTRACTED32(Rb, 16, 31) << 16) | ds,# OBSOLETE (PSW_VALID | ds) & 0xffff0000);# OBSOLETE }# OBSOLETE break;# OBSOLETE case 3: /* FLAG */# OBSOLETE PSW_FLAG_SET_QUEUE(CR, Rb & 1);# OBSOLETE break;# OBSOLETE default:# OBSOLETE sim_engine_abort (SD, CPU, cia, "FIXME - illegal ID");# OBSOLETE }# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // NOP# OBSOLETE # OBSOLETE _BRA,01111,00,6.**,6.**,6.**:BRA:short:iu,mu:NOP# OBSOLETE "nop"# OBSOLETE /* NOP */;# OBSOLETE # OBSOLETE # OBSOLETE // NOT# OBSOLETE # OBSOLETE _LOGIC,11001,00,6.RA,6.RB,6.*:LOGIC:short:iu,mu:NOT# OBSOLETE "not r<RA>, r<RB>"# OBSOLETE WRITE32_QUEUE (Ra, ~Rb);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // NOTFG# OBSOLETE # OBSOLETE _LOGIC,01001,00,***,3.FA,***,3.FB,***,3.FC:LOGIC:short:iu,mu:NOTFG# OBSOLETE "notfg f<FA>, f<FB>"# OBSOLETE PSW_FLAG_SET_QUEUE(FA, !PSW_FLAG_VAL(FB));# OBSOLETE # OBSOLETE # OBSOLETE // OR# OBSOLETE # OBSOLETE _LOGIC,11010,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:OR# OBSOLETE "or r<RA>, r<RB>, r<RC>"# OBSOLETE WRITE32_QUEUE (Ra, Rb | Rc);# OBSOLETE _LOGIC,11010,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:OR imm# OBSOLETE "or r<RA>, r<RB>, <imm>"# OBSOLETE WRITE32_QUEUE (Ra, Rb | imm);# OBSOLETE _LOGIC,11010,10,6.RA,6.RB,_IMM32:LOGIC:long:iu,mu:OR imm long# OBSOLETE "or r<RA>, r<RB>, <imm>"# OBSOLETE WRITE32_QUEUE (Ra, Rb | imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ORFG# OBSOLETE # OBSOLETE _LOGIC,01010,00,***,3.FA,***,3.FB,***,3.FC:LOGIC:short:iu,mu:ORFG# OBSOLETE "orfg f<FA>, f<FB>, f<FC>"# OBSOLETE PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) | PSW_FLAG_VAL(FC));# OBSOLETE _LOGIC,01010,10,***,3.FA,***,3.FB,_IMM6:LOGIC:short:iu,mu:ORFG imm# OBSOLETE "orfg f<FA>, f<FB>, <imm>"# OBSOLETE PSW_FLAG_SET_QUEUE(FA, PSW_FLAG_VAL(FB) | (imm_6 & 1));# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // REIT# OBSOLETE # OBSOLETE _BRA,01000,00,6.**,6.**,6.**:BRA:short:mu:REIT# OBSOLETE "reit"# OBSOLETE WRITE32_QUEUE (&PSW, bPSW);# OBSOLETE nia = bPC;# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // REPEAT# OBSOLETE # OBSOLETE void::function::do_repeat:unsigned32 count, address_word pcaddr# OBSOLETE address_word rpt_s = cia + 8;# OBSOLETE address_word rpt_e = cia + pcaddr;# OBSOLETE # OBSOLETE if (count == 0)# OBSOLETE sim_engine_abort (SD, CPU, cia, "REPEAT with ra=0 and REPEATI with imm = 0 is forbidden.");# OBSOLETE if (count > 1)# OBSOLETE PSW_SET_QUEUE (PSW_RP, 1);# OBSOLETE if (rpt_e < rpt_s + 0x10)# OBSOLETE sim_io_eprintf (sd, "warning: 0x%lx: REPEAT or REPEATI loop is too small\n", (long) cia);# OBSOLETE WRITE32_QUEUE (&RPT_C, count - 1);# OBSOLETE WRITE32_QUEUE (&RPT_S, rpt_s);# OBSOLETE WRITE32_QUEUE (&RPT_E, rpt_e);# OBSOLETE # OBSOLETE _BRA,11000,00,6.RA,6.**,6.RC:BRA:short:mu:REPEAT# OBSOLETE "repeat r<RA>, r<RC>"# OBSOLETE do_repeat(_SD, val_Ra, pcaddr);# OBSOLETE _BRA,11000,10,6.RA,_IMM12:BRA:short:mu:REPEAT imm# OBSOLETE "repeat r<RA>, <pcaddr>"# OBSOLETE do_repeat(_SD, val_Ra, pcaddr);# OBSOLETE _BRA,11000,10,6.RA,6.**,_IMM32:BRA:long:mu:REPEAT imm long# OBSOLETE "repeat r<RA>, <pcaddr>"# OBSOLETE do_repeat(_SD, val_Ra, pcaddr);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // REPEATI# OBSOLETE # OBSOLETE _BRA,11010,00,6.IMM_6,6.**,6.RC:BRA:short:mu:REPEATI# OBSOLETE "repeati <IMM_6>, r<RC>"# OBSOLETE do_repeat(_SD, IMM_6, pcaddr);# OBSOLETE _BRA,11010,10,6.IMM_6,_IMM12:BRA:short:mu:REPEATI imm# OBSOLETE "repeati <IMM_6>, <pcaddr>"# OBSOLETE do_repeat(_SD, IMM_6, pcaddr);# OBSOLETE _BRA,11010,10,6.IMM_6,6.**,_IMM32:BRA:long:mu:REPEATI imm long# OBSOLETE "repeati <IMM_6>, <pcaddr>"# OBSOLETE do_repeat(_SD, IMM_6, pcaddr);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // RTD# OBSOLETE # OBSOLETE _BRA,01010,00,6.*,6.*,6.*:BRA:short:mu:RTD# OBSOLETE "rtd"# OBSOLETE WRITE32_QUEUE (&PSW, DPSW);# OBSOLETE nia = DPC;# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ROT# OBSOLETE # OBSOLETE _LOGIC,10100,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:ROT# OBSOLETE "rot r<RA>, r<RB>, r<RC>"# OBSOLETE WRITE32_QUEUE (Ra, ROT32(Rb, Rc & 0x1f));# OBSOLETE _LOGIC,10100,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:ROT imm# OBSOLETE "rot r<RA>, r<RB>, <imm>"# OBSOLETE WRITE32_QUEUE (Ra, ROT32(Rb, imm & 0x1f));# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // ROT2H# OBSOLETE # OBSOLETE void::function::do_rot2h:unsigned32 *ra, unsigned32 rb, signed32 src# OBSOLETE unsigned16 high = ROTR16(VH2_4(rb), VH2_4(src) & 0xf);# OBSOLETE unsigned16 low = ROTR16(VL2_4(rb), VL2_4(src) & 0xf);# OBSOLETE WRITE32_QUEUE (ra, (high << 16) | low);# OBSOLETE # OBSOLETE _LOGIC,10101,00,6.RA,6.RB,6.RC:LOGIC:short:iu,mu:ROT2H# OBSOLETE "rot2h r<RA>, r<RB>, r<RC>"# OBSOLETE do_rot2h(_SD, Ra, Rb, Rc);# OBSOLETE _LOGIC,10101,10,6.RA,6.RB,_IMM6:LOGIC:short:iu,mu:ROT2H imm# OBSOLETE "rot2h r<RA>, r<RB>, <imm>"# OBSOLETE do_rot2h(_SD, Ra, Rb, immHL);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // SAT# OBSOLETE # OBSOLETE void::function::do_sat:signed32 *ra, signed32 rb, signed32 src# OBSOLETE int bits = LSMASKED32(src, 4, 0); /* 5 */# OBSOLETE signed32 sat = LSMASK32(bits, 0) >> 2;# OBSOLETE signed32 nsat = ~sat;# OBSOLETE signed32 value;# OBSOLETE if (bits != src)# OBSOLETE sim_io_eprintf (sd, "warning: 0x%lx:SAT bit overflow\n", (long) cia);# OBSOLETE if (bits == 0)# OBSOLETE value = rb;# OBSOLETE else if (rb >= sat)# OBSOLETE value = sat;# OBSOLETE else if (rb <= nsat)# OBSOLETE value = nsat;# OBSOLETE else# OBSOLETE value = rb;# OBSOLETE WRITE32_QUEUE (ra, value);# OBSOLETE # OBSOLETE _IALU2,01000,00,6.RA,6.RB,6.RC:IALU2:short:iu:SAT# OBSOLETE "sat r<RA>, r<RB>, r<RC>"# OBSOLETE do_sat(_SD, Ra, Rb, Rc);# OBSOLETE _IALU2,01000,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SAT imm# OBSOLETE "sat r<RA>, r<RB>, <imm>"# OBSOLETE do_sat(_SD, Ra, Rb, imm_5);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // SAT2H# OBSOLETE # OBSOLETE void::function::do_sath:signed32 *ra, signed32 rb, signed32 src, int high, int updates_f4# OBSOLETE int bits = LSMASKED32(src, 4, 0); /* 5 */# OBSOLETE signed32 sat = LSMASK32(bits, 0) >> 2;# OBSOLETE signed32 nsat = ~sat;# OBSOLETE signed32 value;# OBSOLETE if (bits != src)# OBSOLETE sim_io_eprintf (sd, "warning: 0x%lx:SAT bit overflow\n", (long) cia);# OBSOLETE if (bits == 0)# OBSOLETE value = rb;# OBSOLETE else if (rb >= sat)# OBSOLETE value = sat;# OBSOLETE else if (rb <= nsat)# OBSOLETE value = nsat;# OBSOLETE else# OBSOLETE value = rb;# OBSOLETE if (high)# OBSOLETE WRITE32_QUEUE_MASK (ra, value << 16, 0xffff0000);# OBSOLETE else# OBSOLETE WRITE32_QUEUE_MASK (ra, value, 0x0000ffff);# OBSOLETE if (updates_f4)# OBSOLETE {# OBSOLETE /* if MU instruction was a MVTSYS (lkr), unqueue register writes now */# OBSOLETE if(STATE_CPU (sd, 0)->mvtsys_left_p)# OBSOLETE unqueue_writes (sd, STATE_CPU (sd, 0), cia);# OBSOLETE PSW_FLAG_SET_QUEUE(PSW_S_FLAG, PSW_FLAG_VAL(PSW_S_FLAG) ^ (value & 1));# OBSOLETE }# OBSOLETE # OBSOLETE _IALU2,01001,00,6.RA,6.RB,6.RC:IALU2:short:iu:SAT2H# OBSOLETE "sat2h r<RA>, r<RB>, r<RC>"# OBSOLETE do_sath(_SD, Ra, RbH, RcH, 1, 0);# OBSOLETE do_sath(_SD, Ra, RbL, RcL, 0, 0);# OBSOLETE _IALU2,01001,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SAT2H imm# OBSOLETE "sat2h r<RA>, r<RB>, <imm>"# OBSOLETE do_sath(_SD, Ra, RbH, imm_5, 1, 0);# OBSOLETE do_sath(_SD, Ra, RbL, imm_5, 0, 0);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // SATHp# OBSOLETE # OBSOLETE ::%s::p:int p# OBSOLETE switch (p)# OBSOLETE {# OBSOLETE case 0: return "l";# OBSOLETE case 1: return "h";# OBSOLETE default: return "?";# OBSOLETE }# OBSOLETE # OBSOLETE _IALU2,1110,p,00,6.RA,6.RB,6.RC:IALU2:short:iu:SATHP# OBSOLETE "sath%s<p> r<RA>, r<RB>, r<RC>"# OBSOLETE do_sath(_SD, Ra, Rb, Rc, p, 1);# OBSOLETE _IALU2,1110,p,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SATHP imm# OBSOLETE "sath%s<p> r<RA>, r<RB>, <imm>"# OBSOLETE do_sath(_SD, Ra, Rb, imm_5, p, 1);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // SATZ# OBSOLETE # OBSOLETE void::function::do_satz:signed32 *ra, signed32 rb, signed32 src# OBSOLETE if (rb < 0)# OBSOLETE WRITE32_QUEUE (ra, 0);# OBSOLETE else# OBSOLETE do_sat (_SD, ra, rb, src);# OBSOLETE # OBSOLETE _IALU2,01010,00,6.RA,6.RB,6.RC:IALU2:short:iu:SATZ# OBSOLETE "satz r<RA>, r<RB>, r<RC>"# OBSOLETE do_satz(_SD, Ra, Rb, Rc);# OBSOLETE _IALU2,01010,10,6.RA,6.RB,_IMM6:IALU2:short:iu:SATZ imm# OBSOLETE "satz r<RA>, r<RB>, <imm>"# OBSOLETE do_satz(_SD, Ra, Rb, imm_5);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // SATZ2H# OBSOLETE # OBSOLETE void::function::do_satzh:signed32 *ra, signed16 rb, signed32 src, int high# OBSOLETE int bits = LSMASKED32(src, 3, 0); /*4*/# OBSOLETE signed16 sat = LSMASK16(bits, 0) >> 2;# OBSOLETE signed16 nsat = 0;# OBSOLETE signed16 value;# OBSOLETE if (bits != src)# OBSOLETE sim_io_eprintf (sd, "warning: 0x%lx:SATZ2H bit overflow\n", (long) cia);# OBSOLETE if (bits == 0 && rb > sat)# OBSOLETE value = rb;# OBSOLETE else if (rb > sat)# OBSOLETE value = sat;# OBSOLETE else if (
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -