📄 d30v-insns
字号:
# OBSOLETE do_ld2h(_SD, RA, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LD2W# OBSOLETE # OBSOLETE void::function::do_ld2w:int ra, unsigned32 rb, unsigned32 src# OBSOLETE unsigned64 mem;# OBSOLETE ra = make_even_reg(_SD, ra, "LD2W");# OBSOLETE mem = MEM(unsigned, rb + src, 8);# OBSOLETE if (ra != 0)# OBSOLETE {# OBSOLETE WRITE32_QUEUE (&GPR[ra + 0], EXTRACTED64 (mem, 0, 31));# OBSOLETE WRITE32_QUEUE (&GPR[ra + 1], EXTRACTED64 (mem, 32, 63));# OBSOLETE }# OBSOLETE # OBSOLETE _IMEM,00110,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:L2W# OBSOLETE "ld2w r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ld2w r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ld2w(_SD, RA, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 8);# OBSOLETE _IMEM,00110,10,6.RA,6.RB,_IMM32:IMEM:long:mu:L2W long# OBSOLETE "ld2w r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ld2w(_SD, RA, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LD4BH# OBSOLETE # OBSOLETE void::function::do_ld4bh:unsigned32 ra, unsigned32 rb, unsigned32 src# OBSOLETE unsigned16 l1, l2, h1, h2;# OBSOLETE unsigned32 mem;# OBSOLETE ra = make_even_reg(_SD, ra, "LD4BH");# OBSOLETE mem = MEM(unsigned, rb + src, 4);# OBSOLETE h1 = SEXT16(EXTRACTED32(mem, 0, 7), 8);# OBSOLETE l1 = SEXT16(EXTRACTED32(mem, 8, 15), 8);# OBSOLETE h2 = SEXT16(EXTRACTED32(mem, 16, 23), 8);# OBSOLETE l2 = SEXT16(EXTRACTED32(mem, 24, 31), 8);# OBSOLETE if (ra != 0)# OBSOLETE {# OBSOLETE WRITE32_QUEUE (&GPR[ra + 0], (h1 << 16) | l1);# OBSOLETE WRITE32_QUEUE (&GPR[ra + 1], (h2 << 16) | l2);# OBSOLETE }# OBSOLETE # OBSOLETE _IMEM,00101,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LD4BH# OBSOLETE "ld4bh r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ld4bh r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ld4bh(_SD, RA, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 4);# OBSOLETE _IMEM,00101,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LD4BH long# OBSOLETE "ld4bh r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ld4bh(_SD, RA, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LD4BHU# OBSOLETE # OBSOLETE void::function::do_ld4bhu:unsigned32 ra, unsigned32 rb, unsigned32 src# OBSOLETE unsigned16 l1, l2, h1, h2;# OBSOLETE unsigned32 mem;# OBSOLETE ra = make_even_reg(_SD, ra, "LD4BH");# OBSOLETE mem = MEM(signed, rb + src, 4);# OBSOLETE h1 = EXTRACTED32(mem, 0, 7);# OBSOLETE l1 = EXTRACTED32(mem, 8, 15);# OBSOLETE h2 = EXTRACTED32(mem, 16, 23);# OBSOLETE l2 = EXTRACTED32(mem, 24, 31);# OBSOLETE if (ra != 0)# OBSOLETE {# OBSOLETE WRITE32_QUEUE (&GPR[ra + 0], (h1 << 16) | l1);# OBSOLETE WRITE32_QUEUE (&GPR[ra + 1], (h2 << 16) | l2);# OBSOLETE }# OBSOLETE # OBSOLETE _IMEM,01101,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LD4BHU# OBSOLETE "ld4hbu r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ld4hbu r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ld4bhu(_SD, RA, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 4);# OBSOLETE _IMEM,01101,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LD4BHU long# OBSOLETE "ld4hbu r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ld4bhu(_SD, RA, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LDB# OBSOLETE # OBSOLETE void::function::do_ldb:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE WRITE32_QUEUE (ra, MEM(signed, rb + src, 1));# OBSOLETE # OBSOLETE _IMEM,00000,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDB# OBSOLETE "ldb r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ldb r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ldb(_SD, Ra, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 1);# OBSOLETE _IMEM,00000,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDB long# OBSOLETE "ldb r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ldb(_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LDBU# OBSOLETE # OBSOLETE void::function::do_ldbu:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE WRITE32_QUEUE (ra, MEM(unsigned, rb + src, 1));# OBSOLETE # OBSOLETE _IMEM,01001,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDBU# OBSOLETE "ldbu r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ldbu r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ldbu(_SD, Ra, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 1);# OBSOLETE _IMEM,01001,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDBU long# OBSOLETE "ldbu r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ldbu(_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LDH# OBSOLETE # OBSOLETE void::function::do_ldh:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE WRITE32_QUEUE (ra, MEM(signed, rb + src, 2));# OBSOLETE # OBSOLETE _IMEM,00010,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDH# OBSOLETE "ldh r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ldh r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ldh(_SD, Ra, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 2);# OBSOLETE _IMEM,00010,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDH long# OBSOLETE "ldh r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ldh(_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LDHH# OBSOLETE # OBSOLETE void::function::do_ldhh:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE WRITE32_QUEUE (ra, MEM(signed, rb + src, 2) << 16);# OBSOLETE # OBSOLETE _IMEM,00001,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDHH# OBSOLETE "ldhh r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ldhh r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ldhh(_SD, Ra, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 2);# OBSOLETE _IMEM,00001,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDHH long# OBSOLETE "ldhh r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ldhh(_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LDHU# OBSOLETE # OBSOLETE void::function::do_ldhu:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE WRITE32_QUEUE (ra, MEM(unsigned, rb + src, 2));# OBSOLETE # OBSOLETE _IMEM,01010,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDHU# OBSOLETE "ldhu r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ldhu r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ldhu(_SD, Ra, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 2);# OBSOLETE _IMEM,01010,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDHU long# OBSOLETE "ldhu r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ldhu(_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // LDW# OBSOLETE # OBSOLETE void::function::do_ldw:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE WRITE32_QUEUE (ra, MEM(signed, rb + src, 4));# OBSOLETE # OBSOLETE _IMEM,00100,XX,6.RA,6.RB,6.SRC_6:IMEM:short:mu:LDW# OBSOLETE "ldw r<RA>, @(r<RB>, <SRC_6>)":XX == 0# OBSOLETE "ldw r<RA>, @(r<RB>%s<XX>, r<SRC_6>)"# OBSOLETE do_ldw(_SD, Ra, Rb, src);# OBSOLETE do_incr(_SD, XX, &GPR[RB], 4);# OBSOLETE _IMEM,00100,10,6.RA,6.RB,_IMM32:IMEM:long:mu:LDW long# OBSOLETE "ldw r<RA>, @(r<RB>, <imm>)"# OBSOLETE do_ldw(_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MACa# OBSOLETE # OBSOLETE void::function::do_mac:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src# OBSOLETE unsigned64 accum = *aa;# OBSOLETE accum += (signed64) (rb) * (signed64) (src);# OBSOLETE WRITE64_QUEUE (aa, accum);# OBSOLETE WRITE32_QUEUE (ra, EXTRACTED64(accum, 32, 63));# OBSOLETE # OBSOLETE _IALU2,10100,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MACa# OBSOLETE "mac<AA> r<RA>, r<RB>, r<RC>"# OBSOLETE do_mac(_SD, Aa, Ra, Rb, Rc); # OBSOLETE _IALU2,10100,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MACa imm# OBSOLETE "mac<AA> r<RA>, r<RB>, <imm>"# OBSOLETE do_mac(_SD, Aa, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MACSa# OBSOLETE # OBSOLETE void::function::do_macs:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src# OBSOLETE unsigned64 accum = *aa;# OBSOLETE accum += ((signed64) (rb) * (signed64) (src)) << 1;# OBSOLETE WRITE64_QUEUE (aa, accum);# OBSOLETE WRITE32_QUEUE (ra, EXTRACTED64(accum, 0, 31));# OBSOLETE # OBSOLETE _IALU2,10101,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MACSa# OBSOLETE "macs<AA> r<RA>, r<RB>, r<RC>"# OBSOLETE do_macs(_SD, Aa, Ra, Rb, Rc); # OBSOLETE _IALU2,10101,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MACSa imm# OBSOLETE "macs<AA> r<RA>, r<RB>, <imm>"# OBSOLETE do_macs(_SD, Aa, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MODDEC | MODINC# OBSOLETE # OBSOLETE _IMEM,00111,11,6.**,6.RB,_IMM6:IMEM:short:mu:MODDEC# OBSOLETE "moddec r<RB>, <imm>"# OBSOLETE do_incr(_SD, 3/*0b11*/, &GPR[RB], imm_5); # OBSOLETE _IMEM,00111,01,6.**,6.RB,_IMM6:IMEM:short:mu:MODINC# OBSOLETE "modinc r<RB>, <imm>"# OBSOLETE do_incr(_SD, 1/*0b01*/, &GPR[RB], imm_5); # OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MSUBa# OBSOLETE # OBSOLETE void::function::do_msub:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src# OBSOLETE unsigned64 accum = *aa;# OBSOLETE accum -= (signed64) (rb) * (signed64) (src);# OBSOLETE WRITE64_QUEUE (aa, accum);# OBSOLETE WRITE32_QUEUE (ra, EXTRACTED64(accum, 32, 63));# OBSOLETE # OBSOLETE _IALU2,10110,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MSUBa# OBSOLETE "msub<AA> r<RA>, r<RB>, r<RC>"# OBSOLETE do_msub(_SD, Aa, Ra, Rb, Rc); # OBSOLETE _IALU2,10110,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MSUBa imm# OBSOLETE "msub<AA> r<RA>, r<RB>, <imm>"# OBSOLETE do_msub(_SD, Aa, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MSUBSa# OBSOLETE # OBSOLETE void::function::do_msubs:unsigned64 *aa, unsigned32 *ra, signed32 rb, signed32 src# OBSOLETE unsigned64 accum = *aa;# OBSOLETE accum -= ((signed64) (rb) * (signed64) (src)) << 1;# OBSOLETE WRITE64_QUEUE (aa, accum);# OBSOLETE WRITE32_QUEUE (ra, EXTRACTED64(accum, 0, 31));# OBSOLETE # OBSOLETE _IALU2,10111,0,1.AA,6.RA,6.RB,6.RC:IALU2:short:iu:MSUBSa# OBSOLETE "msubs<AA> r<RA>, r<RB>, r<RC>"# OBSOLETE do_msubs(_SD, Aa, Ra, Rb, Rc); # OBSOLETE _IALU2,10111,1,1.AA,6.RA,6.RB,_IMM6:IALU2:short:iu:MSUBSa imm# OBSOLETE "msubs<AA> r<RA>, r<RB>, <imm>"# OBSOLETE do_msubs(_SD, Aa, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MUL# OBSOLETE # OBSOLETE void::function::do_mul:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE WRITE32_QUEUE (ra, rb * src);# OBSOLETE # OBSOLETE _IALU2,10000,00,6.RA,6.RB,6.RC:IALU2:short:iu:MUL# OBSOLETE "mul r<RA>, r<RB>, r<RC>"# OBSOLETE do_mul(_SD, Ra, Rb, Rc); # OBSOLETE _IALU2,10000,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MUL imm# OBSOLETE "mul r<RA>, r<RB>, <imm>"# OBSOLETE do_mul(_SD, Ra, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MUL2H# OBSOLETE # OBSOLETE void::function::do_mul2h:unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE unsigned16 high = VH2_4(rb) * VH2_4(src);# OBSOLETE unsigned16 low = VL2_4(rb) * VL2_4(src);# OBSOLETE WRITE32_QUEUE (ra, (high << 16) | low);# OBSOLETE # OBSOLETE _IALU2,00000,00,6.RA,6.RB,6.RC:IALU2:short:iu:MUL2H# OBSOLETE "mul2h r<RA>, r<RB>, r<RC>"# OBSOLETE do_mul2h(_SD, Ra, Rb, Rc); # OBSOLETE _IALU2,00000,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MUL2H imm# OBSOLETE "mul2h r<RA>, r<RB>, <imm>"# OBSOLETE do_mul2h(_SD, Ra, Rb, immHL);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MULX# OBSOLETE # OBSOLETE void::function::do_mulx:unsigned64 *aa, signed32 rb, signed32 src# OBSOLETE WRITE64_QUEUE (aa, (signed64) (rb) * (signed64) (src));# OBSOLETE # OBSOLETE _IALU2,11000,00,5.*,1.AA,6.RB,6.RC:IALU2:short:iu:MULX# OBSOLETE "mulx a<AA>, r<RB>, r<RC>"# OBSOLETE do_mulx(_SD, Aa, Rb, Rc); # OBSOLETE _IALU2,11000,10,5.*,1.AA,6.RB,_IMM6:IALU2:short:iu:MULX imm# OBSOLETE "mulx a<AA>, r<RB>, <imm>"# OBSOLETE do_mulx(_SD, Aa, Rb, imm);# OBSOLETE # OBSOLETE # OBSOLETE // MULX2H# OBSOLETE # OBSOLETE void::function::do_mulx2h:int ra, signed32 rb, signed32 src, int high# OBSOLETE signed32 result = rb * src;# OBSOLETE if (!high)# OBSOLETE {# OBSOLETE ra = make_even_reg(_SD, ra, "MULX2H");# OBSOLETE if (ra != 0)# OBSOLETE WRITE32_QUEUE (&GPR[ra+1], result);# OBSOLETE }# OBSOLETE else if (ra != 0)# OBSOLETE {# OBSOLETE WRITE32_QUEUE (&GPR[ra+0], result);# OBSOLETE }# OBSOLETE # OBSOLETE _IALU2,00001,00,6.RA,6.RB,6.RC:IALU2:short:iu:MULX2H# OBSOLETE "mul2h r<RA>, r<RB>, r<RC>"# OBSOLETE do_mulx2h(_SD, RA, RbH, RcH, 1);# OBSOLETE do_mulx2h(_SD, RA, RbL, RcL, 0);# OBSOLETE _IALU2,00001,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MULX2H imm# OBSOLETE "mul2h r<RA>, r<RB>, <imm>"# OBSOLETE do_mulx2h(_SD, RA, RbH, imm, 1);# OBSOLETE do_mulx2h(_SD, RA, RbL, imm, 0);# OBSOLETE # OBSOLETE // MULHXpp# OBSOLETE # OBSOLETE void::function::do_mulhx:int pp, unsigned32 *ra, unsigned32 rb, unsigned32 src# OBSOLETE signed32 value = 0;# OBSOLETE switch (pp) {# OBSOLETE case 0: /* LL */# OBSOLETE value = SEXT32(VL2_4(rb), 16) * SEXT32(VL2_4(src), 16);# OBSOLETE break;# OBSOLETE case 1: /* LH */# OBSOLETE value = SEXT32(VL2_4(rb), 16) * SEXT32(VH2_4(src), 16);# OBSOLETE break;# OBSOLETE case 2: /* HL */# OBSOLETE value = SEXT32(VH2_4(rb), 16) * SEXT32(VL2_4(src), 16);# OBSOLETE break;# OBSOLETE case 3: /* HH */# OBSOLETE value = SEXT32(VH2_4(rb), 16) * SEXT32(VH2_4(src), 16);# OBSOLETE break;# OBSOLETE default:# OBSOLETE sim_engine_abort (SD, CPU, cia, "do_mulhx - internal error - bad switch");# OBSOLETE }# OBSOLETE WRITE32_QUEUE (ra, value);# OBSOLETE # OBSOLETE _IALU2,001,pp,00,6.RA,6.RB,6.RC:IALU2:short:iu:MULHXpp# OBSOLETE "mulhx%s<pp> r<RA>, r<RB>, r<RC>"# OBSOLETE do_mulhx(_SD, pp, Ra, Rb, Rc); # OBSOLETE _IALU2,001,pp,10,6.RA,6.RB,_IMM6:IALU2:short:iu:MULHXpp imm# OBSOLETE "mulhx%s<pp> r<RA>, r<RB>, <imm>"# OBSOLETE do_mulhx(_SD, pp, Ra, Rb, immHL);# OBSOLETE # OBSOLETE # OBSOLETE # OBSOLETE // MULXS# OBSOLETE # OBSOLETE void::function::do_mulxs:unsigned64 *aa, signed32 rb, signed32 src# OBSOLETE WRITE64_QUEUE (aa, ((signed64) (rb) * (signed64) (src)) << 1);# OBSOLETE # OBSOLETE _IALU2,11001,00,5.*,1.AA,6.RB,6.RC:IALU2:short:iu:MULXS# OBSOLETE "mulxs a<AA>, r<RB>, r<RC>"# OBSOLETE do_mulxs(_SD, Aa, Rb, Rc);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -