diff options
author | 2015-12-03 11:40:45 +0100 | |
---|---|---|
committer | 2015-12-03 11:40:45 +0100 | |
commit | 92f81361d64c720addf5d7e2528b3d1c675f65a4 (patch) | |
tree | 6640e797a7dd924e20f10ab0f009257e1d751fc8 /src/devices/cpu | |
parent | 39afa0533a1349566aa7f144e042b24227285e9f (diff) |
Initial conversion of core to C++14. Note that compilers are now limited to GCC 4.9.0 and up, Clang 3.4.0 and up, and VS2013 and up [Miodrag Milanovic]
Diffstat (limited to 'src/devices/cpu')
-rw-r--r-- | src/devices/cpu/dsp56k/inst.cpp | 276 | ||||
-rw-r--r-- | src/devices/cpu/dsp56k/inst.h | 2 | ||||
-rw-r--r-- | src/devices/cpu/dsp56k/opcode.cpp | 4 | ||||
-rw-r--r-- | src/devices/cpu/dsp56k/opcode.h | 4 | ||||
-rw-r--r-- | src/devices/cpu/dsp56k/pmove.cpp | 18 | ||||
-rw-r--r-- | src/devices/cpu/dsp56k/pmove.h | 2 |
6 files changed, 153 insertions, 153 deletions
diff --git a/src/devices/cpu/dsp56k/inst.cpp b/src/devices/cpu/dsp56k/inst.cpp index d01bbdbcf04..b9c3b4b313c 100644 --- a/src/devices/cpu/dsp56k/inst.cpp +++ b/src/devices/cpu/dsp56k/inst.cpp @@ -6,7 +6,7 @@ namespace DSP56K { // Factory -Instruction* Instruction::decodeInstruction(const Opcode* opc, +std::unique_ptr<Instruction> Instruction::decodeInstruction(const Opcode* opc, const UINT16 word0, const UINT16 word1, bool shifted) @@ -28,7 +28,7 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc, // Avoid "05-- 05--" recursion if (shifted) return NULL; - auto_pointer<Instruction> op(decodeInstruction(opc, w0, w1, true)); + std::unique_ptr<Instruction> op = decodeInstruction(opc, w0, w1, true); if (op) { // This parallel move only works for certain trailing instructions. @@ -45,7 +45,7 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc, /* TODO: More? */) { op->m_sizeIncrement = 1; - return op; + return std::move(op); } } } @@ -58,38 +58,38 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc, /* TFR : 011m mKKK 0rr1 F0DD : A-212 */ if ((w0 & 0xe094) == 0x6010) { - return global_alloc(Tfr_2(opc, w0, w1)); + return std::make_unique<Tfr_2>(opc, w0, w1); } /* MOVE : 011m mKKK 0rr1 0000 : A-128 */ if ((w0 & 0xe097) == 0x6017) { - return global_alloc(Move_2(opc, w0, w1)); + return std::make_unique<Move_2>(opc, w0, w1); } /* MAC : 011m mKKK 1xx0 F1QQ : A-122 */ else if ((w0 & 0xe094) == 0x6084) { - return global_alloc(Mac_3(opc, w0, w1)); + return std::make_unique<Mac_3>(opc, w0, w1); } /* MACR: 011m mKKK 1--1 F1QQ : A-124 */ else if ((w0 & 0xe094) == 0x6094) { - return global_alloc(Macr_2(opc, w0, w1)); + return std::make_unique<Macr_2>(opc, w0, w1); } /* MPY : 011m mKKK 1xx0 F0QQ : A-160 */ else if ((w0 & 0xe094) == 0x6080) { - return global_alloc(Mpy_2(opc, w0, w1)); + return std::make_unique<Mpy_2>(opc, w0, w1); } /* MPYR : 011m mKKK 1--1 F0QQ : A-162 */ else if ((w0 & 0xe094) == 0x6090) { - return global_alloc(Mpyr_2(opc, w0, w1)); + return std::make_unique<Mpyr_2>(opc, w0, w1); } /* ADD : 011m mKKK 0rru Fuuu : A-22 */ /* SUB : 011m mKKK 0rru Fuuu : A-202 */ else if ((w0 & 0xe080) == 0x6000) { - return global_alloc(Add_2(opc, w0, w1)); + return std::make_unique<Add_2>(opc, w0, w1); } /****************************************************************************/ @@ -99,12 +99,12 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc, /* MPY : 0001 0110 RRDD FQQQ : A-160 */ else if ((w0 & 0xff00) == 0x1600) { - return global_alloc(Mpy_3(opc, w0, w1)); + return std::make_unique<Mpy_3>(opc, w0, w1); } /* MAC : 0001 0111 RRDD FQQQ : A-122 */ else if ((w0 & 0xff00) == 0x1700) { - return global_alloc(Mac_3(opc, w0, w1)); + return std::make_unique<Mac_3>(opc, w0, w1); } /****************************************************************/ @@ -126,171 +126,171 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc, /* CLR : .... .... 0000 F001 : A-60 */ if ((w0 & 0x00f7) == 0x0001) { - return global_alloc(Clr(opc, w0, w1)); + return std::make_unique<Clr>(opc, w0, w1); } /* ADD : .... .... 0000 FJJJ : A-22 */ else if ((w0 & 0x00f0) == 0x0000) { - return global_alloc(Add(opc, w0, w1)); + return std::make_unique<Add>(opc, w0, w1); } /* MOVE : .... .... 0001 0001 : A-128 */ else if ((w0 & 0x00ff) == 0x0011 || (w0 & 0x00ff) == 0x0019) // NEW // else if ((w0 & 0x00ff) == 0x0011) { - return global_alloc(Move(opc, w0, w1)); + return std::make_unique<Move>(opc, w0, w1); } /* TFR : .... .... 0001 FJJJ : A-212 */ else if ((w0 & 0x00f0) == 0x0010) { - return global_alloc(Tfr(opc, w0, w1)); + return std::make_unique<Tfr>(opc, w0, w1); } /* RND : .... .... 0010 F000 : A-188 */ else if ((w0 & 0x00f7) == 0x0020) { - return global_alloc(Rnd(opc, w0, w1)); + return std::make_unique<Rnd>(opc, w0, w1); } /* TST : .... .... 0010 F001 : A-218 */ else if ((w0 & 0x00f7) == 0x0021) { - return global_alloc(Tst(opc, w0, w1)); + return std::make_unique<Tst>(opc, w0, w1); } /* INC : .... .... 0010 F010 : A-104 */ else if ((w0 & 0x00f7) == 0x0022) { - return global_alloc(Inc(opc, w0, w1)); + return std::make_unique<Inc>(opc, w0, w1); } /* INC24 : .... .... 0010 F011 : A-106 */ else if ((w0 & 0x00f7) == 0x0023) { - return global_alloc(Inc24(opc, w0, w1)); + return std::make_unique<Inc24>(opc, w0, w1); } /* OR : .... .... 0010 F1JJ : A-176 */ else if ((w0 & 0x00f4) == 0x0024) { - return global_alloc(Or(opc, w0, w1)); + return std::make_unique<Or>(opc, w0, w1); } /* ASR : .... .... 0011 F000 : A-32 */ else if ((w0 & 0x00f7) == 0x0030) { - return global_alloc(Asr(opc, w0, w1)); + return std::make_unique<Asr>(opc, w0, w1); } /* ASL : .... .... 0011 F001 : A-28 */ else if ((w0 & 0x00f7) == 0x0031) { - return global_alloc(Asl(opc, w0, w1)); + return std::make_unique<Asl>(opc, w0, w1); } /* LSR : .... .... 0011 F010 : A-120 */ else if ((w0 & 0x00f7) == 0x0032) { - return global_alloc(Lsr(opc, w0, w1)); + return std::make_unique<Lsr>(opc, w0, w1); } /* LSL : .... .... 0011 F011 : A-118 */ else if ((w0 & 0x00f7) == 0x0033) { - return global_alloc(Lsl(opc, w0, w1)); + return std::make_unique<Lsl>(opc, w0, w1); } /* EOR : .... .... 0011 F1JJ : A-94 */ else if ((w0 & 0x00f4) == 0x0034) { - return global_alloc(Eor(opc, w0, w1)); + return std::make_unique<Eor>(opc, w0, w1); } /* SUBL : .... .... 0100 F001 : A-204 */ else if ((w0 & 0x00f7) == 0x0041) { - return global_alloc(Subl(opc, w0, w1)); + return std::make_unique<Subl>(opc, w0, w1); } /* SUB : .... .... 0100 FJJJ : A-202 */ else if ((w0 & 0x00f0) == 0x0040) { - return global_alloc(Sub(opc, w0, w1)); + return std::make_unique<Sub>(opc, w0, w1); } /* CLR24 : .... .... 0101 F001 : A-62 */ else if ((w0 & 0x00f7) == 0x0051) { - return global_alloc(Clr24(opc, w0, w1)); + return std::make_unique<Clr24>(opc, w0, w1); } /* SBC : .... .... 0101 F01J : A-198 */ else if ((w0 & 0x00f6) == 0x0052) { - return global_alloc(Sbc(opc, w0, w1)); + return std::make_unique<Sbc>(opc, w0, w1); } /* CMP : .... .... 0101 FJJJ : A-64 */ else if ((w0 & 0x00f0) == 0x0050) { - return global_alloc(Cmp(opc, w0, w1)); + return std::make_unique<Cmp>(opc, w0, w1); } /* NEG : .... .... 0110 F000 : A-166 */ else if ((w0 & 0x00f7) == 0x0060) { - return global_alloc(Neg(opc, w0, w1)); + return std::make_unique<Neg>(opc, w0, w1); } /* NOT : .... .... 0110 F001 : A-174 */ else if ((w0 & 0x00f7) == 0x0061) { - return global_alloc(Not(opc, w0, w1)); + return std::make_unique<Not>(opc, w0, w1); } /* DEC : .... .... 0110 F010 : A-72 */ else if ((w0 & 0x00f7) == 0x0062) { - return global_alloc(Dec(opc, w0, w1)); + return std::make_unique<Dec>(opc, w0, w1); } /* DEC24 : .... .... 0110 F011 : A-74 */ else if ((w0 & 0x00f7) == 0x0063) { - return global_alloc(Dec24(opc, w0, w1)); + return std::make_unique<Dec24>(opc, w0, w1); } /* AND : .... .... 0110 F1JJ : A-24 */ else if ((w0 & 0x00f4) == 0x0064) { - return global_alloc(And(opc, w0, w1)); + return std::make_unique<And>(opc, w0, w1); } /* ABS : .... .... 0111 F001 : A-18 */ if ((w0 & 0x00f7) == 0x0071) { - return global_alloc(Abs(opc, w0, w1)); + return std::make_unique<Abs>(opc, w0, w1); } /* ROR : .... .... 0111 F010 : A-192 */ else if ((w0 & 0x00f7) == 0x0072) { - return global_alloc(Ror(opc, w0, w1)); + return std::make_unique<Ror>(opc, w0, w1); } /* ROL : .... .... 0111 F011 : A-190 */ else if ((w0 & 0x00f7) == 0x0073) { - return global_alloc(Rol(opc, w0, w1)); + return std::make_unique<Rol>(opc, w0, w1); } /* CMPM : .... .... 0111 FJJJ : A-66 */ else if ((w0 & 0x00f0) == 0x0070) { - return global_alloc(Cmpm(opc, w0, w1)); + return std::make_unique<Cmpm>(opc, w0, w1); } /* MPY : .... .... 1k00 FQQQ : A-160 */ else if ((w0 & 0x00b0) == 0x0080) { - return global_alloc(Mpy(opc, w0, w1)); + return std::make_unique<Mpy>(opc, w0, w1); } /* MPYR : .... .... 1k01 FQQQ : A-162 */ else if ((w0 & 0x00b0) == 0x0090) { - return global_alloc(Mpyr(opc, w0, w1)); + return std::make_unique<Mpyr>(opc, w0, w1); } /* MAC : .... .... 1k10 FQQQ : A-122 */ else if ((w0 & 0x00b0) == 0x00a0) { - return global_alloc(Mac(opc, w0, w1)); + return std::make_unique<Mac>(opc, w0, w1); } /* MACR : .... .... 1k11 FQQQ : A-124 */ else if ((w0 & 0x00b0) == 0x00b0) { - return global_alloc(Macr(opc, w0, w1)); + return std::make_unique<Macr>(opc, w0, w1); } } @@ -300,249 +300,249 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc, /* ADC : 0001 0101 0000 F01J : A-20 */ else if ((w0 & 0xfff6) == 0x1502) { - return global_alloc(Adc(opc, w0, w1)); + return std::make_unique<Adc>(opc, w0, w1); } /* ANDI : 0001 1EE0 iiii iiii : A-26 */ /* Note: MoveP sneaks in here if you don't check 0x0600 */ else if (((w0 & 0xf900) == 0x1800) & ((w0 & 0x0600) != 0x0000)) { - return global_alloc(Andi(opc, w0, w1)); + return std::make_unique<Andi>(opc, w0, w1); } /* ASL4 : 0001 0101 0011 F001 : A-30 */ else if ((w0 & 0xfff7) == 0x1531) { - return global_alloc(Asl4(opc, w0, w1)); + return std::make_unique<Asl4>(opc, w0, w1); } /* ASR4 : 0001 0101 0011 F000 : A-34 */ else if ((w0 & 0xfff7) == 0x1530) { - return global_alloc(Asr4(opc, w0, w1)); + return std::make_unique<Asr4>(opc, w0, w1); } /* ASR16 : 0001 0101 0111 F000 : A-36 */ else if ((w0 & 0xfff7) == 0x1570) { - return global_alloc(Asr16(opc, w0, w1)); + return std::make_unique<Asr16>(opc, w0, w1); } /* BFCHG : 0001 0100 11Pp pppp BBB1 0010 iiii iiii : A-38 */ else if (((w0 & 0xffc0) == 0x14c0) && ((w1 & 0x1f00) == 0x1200)) { - return global_alloc(BfInstruction(opc, w0, w1)); + return std::make_unique<BfInstruction>(opc, w0, w1); } /* BFCHG : 0001 0100 101- --RR BBB1 0010 iiii iiii : A-38 */ else if (((w0 & 0xfff0) == 0x14b0) && ((w1 & 0x1f00) == 0x1200)) // NEW // else if (((w0 & 0xffe0) == 0x14a0) && ((w1 & 0x1f00) == 0x1200)) { - return global_alloc(BfInstruction_2(opc, w0, w1)); + return std::make_unique<BfInstruction_2>(opc, w0, w1); } /* BFCHG : 0001 0100 100D DDDD BBB1 0010 iiii iiii : A-38 */ else if (((w0 & 0xffe0) == 0x1480) && ((w1 & 0x1f00) == 0x1200)) { - return global_alloc(BfInstruction_3(opc, w0, w1)); + return std::make_unique<BfInstruction_3>(opc, w0, w1); } /* BFCLR : 0001 0100 11Pp pppp BBB0 0100 iiii iiii : A-40 */ else if (((w0 & 0xffc0) == 0x14c0) && ((w1 & 0x1f00) == 0x0400)) { - return global_alloc(BfInstruction(opc, w0, w1)); + return std::make_unique<BfInstruction>(opc, w0, w1); } /* BFCLR : 0001 0100 101- --RR BBB0 0100 iiii iiii : A-40 */ else if (((w0 & 0xfff0) == 0x14b0) && ((w1 & 0x1f00) == 0x0400)) // NEW // else if (((w0 & 0xffe0) == 0x14a0) && ((w1 & 0x1f00) == 0x0400)) { - return global_alloc(BfInstruction_2(opc, w0, w1)); + return std::make_unique<BfInstruction_2>(opc, w0, w1); } /* BFCLR : 0001 0100 100D DDDD BBB0 0100 iiii iiii : A-40 */ else if (((w0 & 0xffe0) == 0x1480) && ((w1 & 0x1f00) == 0x0400)) { - return global_alloc(BfInstruction_3(opc, w0, w1)); + return std::make_unique<BfInstruction_3>(opc, w0, w1); } /* BFSET : 0001 0100 11Pp pppp BBB1 1000 iiii iiii : A-42 */ else if (((w0 & 0xffc0) == 0x14c0) && ((w1 & 0x1f00) == 0x1800)) { - return global_alloc(BfInstruction(opc, w0, w1)); + return std::make_unique<BfInstruction>(opc, w0, w1); } /* BFSET : 0001 0100 101- --RR BBB1 1000 iiii iiii : A-42 */ else if (((w0 & 0xfff0) == 0x14b0) && ((w1 & 0x1f00) == 0x1800)) // NEW // else if (((w0 & 0xffe0) == 0x14a0) && ((w1 & 0x1f00) == 0x1800)) { - return global_alloc(BfInstruction_2(opc, w0, w1)); + return std::make_unique<BfInstruction_2>(opc, w0, w1); } /* BFSET : 0001 0100 100D DDDD BBB1 1000 iiii iiii : A-42 */ else if (((w0 & 0xffe0) == 0x1480) && ((w1 & 0x1f00) == 0x1800)) { - return global_alloc(BfInstruction_3(opc, w0, w1)); + return std::make_unique<BfInstruction_3>(opc, w0, w1); } /* BFTSTH : 0001 0100 01Pp pppp BBB1 0000 iiii iiii : A-44 */ else if (((w0 & 0xffc0) == 0x1440) && ((w1 & 0x1f00) == 0x1000)) { - return global_alloc(BfInstruction(opc, w0, w1)); + return std::make_unique<BfInstruction>(opc, w0, w1); } /* BFTSTH : 0001 0100 001- --RR BBB1 0000 iiii iiii : A-44 */ else if (((w0 & 0xfff0) == 0x1430) && ((w1 & 0x1f00) == 0x1000)) // NEW // else if (((w0 & 0xffe0) == 0x1420) && ((w1 & 0x1f00) == 0x1000)) { - return global_alloc(BfInstruction_2(opc, w0, w1)); + return std::make_unique<BfInstruction_2>(opc, w0, w1); } /* BFTSTH : 0001 0100 000D DDDD BBB1 0000 iiii iiii : A-44 */ else if (((w0 & 0xffe0) == 0x1400) && ((w1 & 0x1f00) == 0x1000)) { - return global_alloc(BfInstruction_3(opc, w0, w1)); + return std::make_unique<BfInstruction_3>(opc, w0, w1); } /* BFTSTL : 0001 0100 01Pp pppp BBB0 0000 iiii iiii : A-46 */ else if (((w0 & 0xffc0) == 0x1440) && ((w1 & 0x1f00) == 0x0000)) { - return global_alloc(BfInstruction(opc, w0, w1)); + return std::make_unique<BfInstruction>(opc, w0, w1); } /* BFTSTL : 0001 0100 001- --RR BBB0 0000 iiii iiii : A-46 */ else if (((w0 & 0xfff0) == 0x1430) && ((w1 & 0x1f00) == 0x0000)) // NEW // else if (((w0 & 0xffe0) == 0x1420) && ((w1 & 0x1f00) == 0x0000)) { - return global_alloc(BfInstruction_2(opc, w0, w1)); + return std::make_unique<BfInstruction_2>(opc, w0, w1); } /* BFTSTL : 0001 0100 000D DDDD BBB0 0000 iiii iiii : A-46 */ else if (((w0 & 0xffe0) == 0x1400) && ((w1 & 0x1f00) == 0x0000)) { - return global_alloc(BfInstruction_3(opc, w0, w1)); + return std::make_unique<BfInstruction_3>(opc, w0, w1); } /* Bcc : 0000 0111 --11 cccc xxxx xxxx xxxx xxxx : A-48 */ else if (((w0 & 0xff30) == 0x0730) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Bcc(opc, w0, w1)); + return std::make_unique<Bcc>(opc, w0, w1); } /* Bcc : 0010 11cc ccee eeee : A-48 */ else if ((w0 & 0xfc00) == 0x2c00) { - return global_alloc(Bcc_2(opc, w0, w1)); + return std::make_unique<Bcc_2>(opc, w0, w1); } /* Bcc : 0000 0111 RR10 cccc : A-48 */ else if ((w0 & 0xff30) == 0x0720) { - return global_alloc(Bcc_3(opc, w0, w1)); + return std::make_unique<Bcc_3>(opc, w0, w1); } /* BRA : 0000 0001 0011 11-- xxxx xxxx xxxx xxxx : A-50 */ else if (((w0 & 0xfffc) == 0x013c) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Bra(opc, w0, w1)); + return std::make_unique<Bra>(opc, w0, w1); } /* BRA : 0000 1011 aaaa aaaa : A-50 */ else if ((w0 & 0xff00) == 0x0b00) { - return global_alloc(Bra_2(opc, w0, w1)); + return std::make_unique<Bra_2>(opc, w0, w1); } /* BRA : 0000 0001 0010 11RR : A-50 */ else if ((w0 & 0xfffc) == 0x012c) { - return global_alloc(Bra_3(opc, w0, w1)); + return std::make_unique<Bra_3>(opc, w0, w1); } /* BRKc : 0000 0001 0001 cccc : A-52 */ else if ((w0 & 0xfff0) == 0x0110) { - return global_alloc(Brkcc(opc, w0, w1)); + return std::make_unique<Brkcc>(opc, w0, w1); } /* BScc : 0000 0111 --01 cccc xxxx xxxx xxxx xxxx : A-54 */ else if (((w0 & 0xff30) == 0x0710) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Bscc(opc, w0, w1)); + return std::make_unique<Bscc>(opc, w0, w1); } /* BScc : 0000 0111 RR00 cccc : A-54 */ else if ((w0 & 0xff30) == 0x0700) { - return global_alloc(Bscc_2(opc, w0, w1)); + return std::make_unique<Bscc_2>(opc, w0, w1); } /* BSR : 0000 0001 0011 10-- xxxx xxxx xxxx xxxx : A-56 */ else if (((w0 & 0xfffc) == 0x0138) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Bsr(opc, w0, w1)); + return std::make_unique<Bsr>(opc, w0, w1); } /* BSR : 0000 0001 0010 10RR : A-56 */ else if ((w0 & 0xfffc) == 0x0128) { - return global_alloc(Bsr_2(opc, w0, w1)); + return std::make_unique<Bsr_2>(opc, w0, w1); } /* CHKAAU : 0000 0000 0000 0100 : A-58 */ else if ((w0 & 0xffff) == 0x0004) { - return global_alloc(Chkaau(opc, w0, w1)); + return std::make_unique<Chkaau>(opc, w0, w1); } /* DEBUG : 0000 0000 0000 0001 : A-68 */ else if ((w0 & 0xffff) == 0x0001) { - return global_alloc(Debug(opc, w0, w1)); + return std::make_unique<Debug>(opc, w0, w1); } /* DEBUGcc : 0000 0000 0101 cccc : A-70 */ else if ((w0 & 0xfff0) == 0x0050) { - return global_alloc(Debugcc(opc, w0, w1)); + return std::make_unique<Debugcc>(opc, w0, w1); } /* DIV : 0001 0101 0--0 F1DD : A-76 */ else if ((w0 & 0xfff4) == 0x1504) // NEW // else if ((w0 & 0xff94) == 0x1504) { - return global_alloc(Div(opc, w0, w1)); + return std::make_unique<Div>(opc, w0, w1); } /* DMAC : 0001 0101 10s1 FsQQ : A-80 */ else if ((w0 & 0xffd0) == 0x1590) { - return global_alloc(Dmac(opc, w0, w1)); + return std::make_unique<Dmac>(opc, w0, w1); } /* DO : 0000 0000 110- --RR xxxx xxxx xxxx xxxx : A-82 */ else if (((w0 & 0xffe0) == 0x00c0) && ((w1 & 0x0000) == 0x0000)) // Wait. Huh? { - return global_alloc(Do(opc, w0, w1)); + return std::make_unique<Do>(opc, w0, w1); } /* DO : 0000 1110 iiii iiii xxxx xxxx xxxx xxxx : A-82 */ else if (((w0 & 0xff00) == 0x0e00) && ((w1 & 0x0000) == 0x0000)) // Wait. Huh? { - return global_alloc(Do_2(opc, w0, w1)); + return std::make_unique<Do_2>(opc, w0, w1); } /* DO : 0000 0100 000D DDDD xxxx xxxx xxxx xxxx : A-82 */ else if (((w0 & 0xffe0) == 0x0400) && ((w1 & 0x0000) == 0x0000)) // Wait. Huh? { - return global_alloc(Do_3(opc, w0, w1)); + return std::make_unique<Do_3>(opc, w0, w1); } /* DO FOREVER : 0000 0000 0000 0010 xxxx xxxx xxxx xxxx : A-88 */ else if (((w0 & 0xffff) == 0x0002) && ((w1 & 0x0000) == 0x0000)) // Wait. Huh? { - return global_alloc(DoForever(opc, w0, w1)); + return std::make_unique<DoForever>(opc, w0, w1); } /* ENDDO : 0000 0000 0000 1001 : A-92 */ else if ((w0 & 0xffff) == 0x0009) { - return global_alloc(Enddo(opc, w0, w1)); + return std::make_unique<Enddo>(opc, w0, w1); } /* EXT : 0001 0101 0101 F010 : A-96 */ else if ((w0 & 0xfff7) == 0x1552) { - return global_alloc(Ext(opc, w0, w1)); + return std::make_unique<Ext>(opc, w0, w1); } /* ILLEGAL : 0000 0000 0000 1111 : A-98 */ else if ((w0 & 0xffff) == 0x000f) { - return global_alloc(Illegal(opc, w0, w1)); + return std::make_unique<Illegal>(opc, w0, w1); } /* IMAC : 0001 0101 1010 FQQQ : A-100 */ else if ((w0 & 0xfff0) == 0x15a0) { - return global_alloc(Imac(opc, w0, w1)); + return std::make_unique<Imac>(opc, w0, w1); } /* IMPY : 0001 0101 1000 FQQQ : A-102 */ else if ((w0 & 0xfff0) == 0x1580) { - return global_alloc(Impy(opc, w0, w1)); + return std::make_unique<Impy>(opc, w0, w1); } /* Jcc : 0000 0110 --11 cccc xxxx xxxx xxxx xxxx : A-108 */ else if (((w0 & 0xff30) == 0x0630) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Jcc(opc, w0, w1)); + return std::make_unique<Jcc>(opc, w0, w1); } /* Jcc : 0000 0110 RR10 cccc : A-108 */ else if ((w0 & 0xff30) == 0x0620 ) { - return global_alloc(Jcc_2(opc, w0, w1)); + return std::make_unique<Jcc_2>(opc, w0, w1); } /* JMP : 0000 0001 0011 01-- xxxx xxxx xxxx xxxx : A-110 */ else if (((w0 & 0xfffc) == 0x0134) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Jmp(opc, w0, w1)); + return std::make_unique<Jmp>(opc, w0, w1); } /* JMP : 0000 0001 0010 01RR : A-110 */ else if ((w0 & 0xfffc) == 0x0124) @@ -550,233 +550,233 @@ Instruction* Instruction::decodeInstruction(const Opcode* opc, //JMP2->m_oco = opc; //JMP2->decode(w0, w1); //return JMP2; - return global_alloc(Jmp_2(opc, w0, w1)); + return std::make_unique<Jmp_2>(opc, w0, w1); } /* JScc : 0000 0110 --01 cccc xxxx xxxx xxxx xxxx : A-112 */ else if (((w0 & 0xff30) == 0x0610) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Jscc(opc, w0, w1)); + return std::make_unique<Jscc>(opc, w0, w1); } /* JScc : 0000 0110 RR00 cccc : A-112 */ else if ((w0 & 0xff30) == 0x0600) { - return global_alloc(Jscc_2(opc, w0, w1)); + return std::make_unique<Jscc_2>(opc, w0, w1); } /* JSR : 0000 0001 0011 00-- xxxx xxxx xxxx xxxx : A-114 */ else if (((w0 & 0xfffc) == 0x0130) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Jsr(opc, w0, w1)); + return std::make_unique<Jsr>(opc, w0, w1); } /* JSR : 0000 1010 AAAA AAAA : A-114 */ else if ((w0 & 0xff00) == 0x0a00) { - return global_alloc(Jsr_2(opc, w0, w1)); + return std::make_unique<Jsr_2>(opc, w0, w1); } /* JSR : 0000 0001 0010 00RR : A-114 */ else if ((w0 & 0xfffc) == 0x0120) { - return global_alloc(Jsr_3(opc, w0, w1)); + return std::make_unique<Jsr_3>(opc, w0, w1); } /* LEA : 0000 0001 11TT MMRR : A-116 */ else if ((w0 & 0xffc0) == 0x01c0) { - return global_alloc(Lea(opc, w0, w1)); + return std::make_unique<Lea>(opc, w0, w1); } /* LEA : 0000 0001 10NN MMRR : A-116 */ else if ((w0 & 0xffc0) == 0x0180) { - return global_alloc(Lea_2(opc, w0, w1)); + return std::make_unique<Lea_2>(opc, w0, w1); } /* MAC(su,uu) : 0001 0101 1110 FsQQ : A-126 */ else if ((w0 & 0xfff0) == 0x15e0) { - return global_alloc(Macsuuu(opc, w0, w1)); + return std::make_unique<Macsuuu>(opc, w0, w1); } /* MOVE : 0000 0101 BBBB BBBB ---- HHHW 0001 0001 : A-128 */ // NEW // else if (((w0 & 0xff00) == 0x0500) && ((w1 & 0x00ff) == 0x0011)) // NEW // { -// NEW // return global_alloc(Move_3(opc, w0, w1)); +// NEW // return std::make_unique<Move_3>(opc, w0, w1); // NEW // } /* MOVE(C) : 0011 1WDD DDD0 MMRR : A-144 */ else if ((w0 & 0xf810) == 0x3800) { - return global_alloc(Movec(opc, w0, w1)); + return std::make_unique<Movec>(opc, w0, w1); } /* MOVE(C) : 0011 1WDD DDD1 q0RR : A-144 */ else if ((w0 & 0xf814) == 0x3810) { - return global_alloc(Movec_2(opc, w0, w1)); + return std::make_unique<Movec_2>(opc, w0, w1); } /* MOVE(C) : 0011 1WDD DDD1 Z11- : A-144 */ else if ((w0 & 0xf816) == 0x3816) { - return global_alloc(Movec_3(opc, w0, w1)); + return std::make_unique<Movec_3>(opc, w0, w1); } /* MOVE(C) : 0011 1WDD DDD1 t10- xxxx xxxx xxxx xxxx : A-144 */ else if (((w0 & 0xf816) == 0x3814) && ((w1 & 0x0000) == 0x0000)) { - return global_alloc(Movec_4(opc, w0, w1)); + return std::make_unique<Movec_4>(opc, w0, w1); } /* MOVE(C) : 0010 10dd dddD DDDD : A-144 */ else if ((w0 & 0xfc00) == 0x2800) { - return global_alloc(Movec_5(opc, w0, w1)); + return std::make_unique<Movec_5>(opc, w0, w1); } /* MOVE(C) : 0000 0101 BBBB BBBB 0011 1WDD DDD0 ---- : A-144 */ else if (((w0 & 0xff00) == 0x0500) && ((w1 & 0xf810) == 0x3800)) { - return global_alloc(Movec_6(opc, w0, w1)); + return std::make_unique<Movec_6>(opc, w0, w1); } /* MOVE(I) : 0010 00DD BBBB BBBB : A-150 */ else if ((w0 & 0xfc00) == 0x2000) { - return global_alloc(Movei(opc, w0, w1)); + return std::make_unique<Movei>(opc, w0, w1); } /* MOVE(M) : 0000 001W RR0M MHHH : A-152 */ else if ((w0 & 0xfe20) == 0x0200) { - return global_alloc(Movem(opc, w0, w1)); + return std::make_unique<Movem>(opc, w0, w1); } /* MOVE(M) : 0000 001W RR11 mmRR : A-152 */ else if ((w0 & 0xfe30) == 0x0230) { - return global_alloc(Movem_2(opc, w0, w1)); + return std::make_unique<Movem_2>(opc, w0, w1); } /* MOVE(M) : 0000 0101 BBBB BBBB 0000 001W --0- -HHH : A-152 */ else if (((w0 & 0xff00) == 0x0500) && ((w1 & 0xfe20) == 0x0200)) { - return global_alloc(Movem_3(opc, w0, w1)); + return std::make_unique<Movem_3>(opc, w0, w1); } /* MOVE(P) : 0001 100W HH1p pppp : A-156 */ else if ((w0 & 0xfe20) == 0x1820) { - return global_alloc(Movep(opc, w0, w1)); + return std::make_unique<Movep>(opc, w0, w1); } /* MOVE(P) : 0000 110W RRmp pppp : A-156 */ else if ((w0 & 0xfe00) == 0x0c00) { - return global_alloc(Movep_2(opc, w0, w1)); + return std::make_unique<Movep_2>(opc, w0, w1); } /* MOVE(S) : 0001 100W HH0a aaaa : A-158 */ else if ((w0 & 0xfe20) == 0x1800) { - return global_alloc(Moves(opc, w0, w1)); + return std::make_unique<Moves>(opc, w0, w1); } /* MPY(su,uu) : 0001 0101 1100 FsQQ : A-164 */ else if ((w0 & 0xfff0) == 0x15c0) { - return global_alloc(Mpysuuu(opc, w0, w1)); + return std::make_unique<Mpysuuu>(opc, w0, w1); } /* NEGC : 0001 0101 0110 F000 : A-168 */ else if ((w0 & 0xfff7) == 0x1560) { - return global_alloc(Negc(opc, w0, w1)); + return std::make_unique<Negc>(opc, w0, w1); } /* NOP : 0000 0000 0000 0000 : A-170 */ else if ((w0 & 0xffff) == 0x0000) { - return global_alloc(Nop(opc, w0, w1)); + return std::make_unique<Nop>(opc, w0, w1); } /* NORM : 0001 0101 0010 F0RR : A-172 */ else if ((w0 & 0xfff4) == 0x1520) { - return global_alloc(Norm(opc, w0, w1)); + return std::make_unique<Norm>(opc, w0, w1); } /* ORI : 0001 1EE1 iiii iiii : A-178 */ else if ((w0 & 0xf900) == 0x1900) { - return global_alloc(Ori(opc, w0, w1)); + return std::make_unique<Ori>(opc, w0, w1); } /* REP : 0000 0000 111- --RR : A-180 */ else if ((w0 & 0xffe0) == 0x00e0) { - return global_alloc(Rep(opc, w0, w1)); + return std::make_unique<Rep>(opc, w0, w1); } /* REP : 0000 1111 iiii iiii : A-180 */ else if ((w0 & 0xff00) == 0x0f00) { - return global_alloc(Rep_2(opc, w0, w1)); + return std::make_unique<Rep_2>(opc, w0, w1); } /* REP : 0000 0100 001D DDDD : A-180 */ else if ((w0 & 0xffe0) == 0x0420) { - return global_alloc(Rep_3(opc, w0, w1)); + return std::make_unique<Rep_3>(opc, w0, w1); } /* REPcc : 0000 0001 0101 cccc : A-184 */ else if ((w0 & 0xfff0) == 0x0150) { - return global_alloc(Repcc(opc, w0, w1)); + return std::make_unique<Repcc>(opc, w0, w1); } /* RESET : 0000 0000 0000 1000 : A-186 */ else if ((w0 & 0xffff) == 0x0008) { - return global_alloc(Reset(opc, w0, w1)); + return std::make_unique<Reset>(opc, w0, w1); } /* RTI : 0000 0000 0000 0111 : A-194 */ else if ((w0 & 0xffff) == 0x0007) { - return global_alloc(Rti(opc, w0, w1)); + return std::make_unique<Rti>(opc, w0, w1); } /* RTS : 0000 0000 0000 0110 : A-196 */ else if ((w0 & 0xffff) == 0x0006) { - return global_alloc(Rts(opc, w0, w1)); + return std::make_unique<Rts>(opc, w0, w1); } /* STOP : 0000 0000 0000 1010 : A-200 */ else if ((w0 & 0xffff) == 0x000a) { - return global_alloc(Stop(opc, w0, w1)); + return std::make_unique<Stop>(opc, w0, w1); } /* SWAP : 0001 0101 0111 F001 : A-206 */ else if ((w0 & 0xfff7) == 0x1571) { - return global_alloc(Swap(opc, w0, w1)); + return std::make_unique<Swap>(opc, w0, w1); } /* SWI : 0000 0000 0000 0101 : A-208 */ else if ((w0 & 0xffff) == 0x0005) { - return global_alloc(Swi(opc, w0, w1)); + return std::make_unique<Swi>(opc, w0, w1); } /* Tcc : 0001 00cc ccTT Fh0h : A-210 */ else if ((w0 & 0xfc02) == 0x1000) { - return global_alloc(Tcc(opc, w0, w1)); + return std::make_unique<Tcc>(opc, w0, w1); } /* TFR(2) : 0001 0101 0000 F00J : A-214 */ else if ((w0 & 0xfff6) == 0x1500) { - return global_alloc(Tfr2(opc, w0, w1)); + return std::make_unique<Tfr2>(opc, w0, w1); } /* TFR(3) : 0010 01mW RRDD FHHH : A-216 */ else if ((w0 & 0xfc00) == 0x2400) { - return global_alloc(Tfr3(opc, w0, w1)); + return std::make_unique<Tfr3>(opc, w0, w1); } /* TST(2) : 0001 0101 0001 -1DD : A-220 */ else if ((w0 & 0xfffc) == 0x1514) // NEW // else if ((w0 & 0xfff4) == 0x1514) { - return global_alloc(Tst2(opc, w0, w1)); + return std::make_unique<Tst2>(opc, w0, w1); } /* WAIT : 0000 0000 0000 1011 : A-222 */ else if ((w0 & 0xffff) == 0x000b) { - return global_alloc(Wait(opc, w0, w1)); + return std::make_unique<Wait>(opc, w0, w1); } /* ZERO : 0001 0101 0101 F000 : A-224 */ else if ((w0 & 0xfff7) == 0x1550) { - return global_alloc(Zero(opc, w0, w1)); + return std::make_unique<Zero>(opc, w0, w1); } /* SHFL : 0001 0101 1101 FQQQ : !!UNDOCUMENTED!! */ else if ((w0 & 0xfff0) == 0x15d0) { - return global_alloc(Shfl(opc, w0, w1)); + return std::make_unique<Shfl>(opc, w0, w1); } /* SHFR : 0001 0101 1111 FQQQ : !!UNDOCUMENTED!! */ else if ((w0 & 0xfff0) == 0x15f0) { - return global_alloc(Shfr(opc, w0, w1)); + return std::make_unique<Shfr>(opc, w0, w1); } return NULL; diff --git a/src/devices/cpu/dsp56k/inst.h b/src/devices/cpu/dsp56k/inst.h index be9ab550b8f..c7144451e0b 100644 --- a/src/devices/cpu/dsp56k/inst.h +++ b/src/devices/cpu/dsp56k/inst.h @@ -39,7 +39,7 @@ public: virtual size_t accumulatorBitsModified() const = 0; // Potentially make this always return ALL (like flags) virtual size_t flags() const { return 0; } - static Instruction* decodeInstruction(const Opcode* opc, + static std::unique_ptr<Instruction> decodeInstruction(const Opcode* opc, const UINT16 word0, const UINT16 word1, bool shifted=false); diff --git a/src/devices/cpu/dsp56k/opcode.cpp b/src/devices/cpu/dsp56k/opcode.cpp index dd71d852650..a1b31fc02a6 100644 --- a/src/devices/cpu/dsp56k/opcode.cpp +++ b/src/devices/cpu/dsp56k/opcode.cpp @@ -8,8 +8,8 @@ namespace DSP56K { Opcode::Opcode(UINT16 w0, UINT16 w1) : m_word0(w0)/*, m_word1(w1)*/ { - m_instruction.reset(Instruction::decodeInstruction(this, w0, w1)); - m_parallelMove.reset(ParallelMove::decodeParallelMove(this, w0, w1)); + m_instruction = std::move(Instruction::decodeInstruction(this, w0, w1)); + m_parallelMove = std::move(ParallelMove::decodeParallelMove(this, w0, w1)); } diff --git a/src/devices/cpu/dsp56k/opcode.h b/src/devices/cpu/dsp56k/opcode.h index 66423716ffb..ba8c9f2b97c 100644 --- a/src/devices/cpu/dsp56k/opcode.h +++ b/src/devices/cpu/dsp56k/opcode.h @@ -34,8 +34,8 @@ public: size_t instAccumulatorBitsModified() const; private: - auto_pointer<Instruction> m_instruction; - auto_pointer<ParallelMove> m_parallelMove; + std::unique_ptr<Instruction> m_instruction; + std::unique_ptr<ParallelMove> m_parallelMove; UINT16 m_word0; //UINT16 m_word1; diff --git a/src/devices/cpu/dsp56k/pmove.cpp b/src/devices/cpu/dsp56k/pmove.cpp index dce702d094b..cb7562d2973 100644 --- a/src/devices/cpu/dsp56k/pmove.cpp +++ b/src/devices/cpu/dsp56k/pmove.cpp @@ -9,7 +9,7 @@ const reg_id& ParallelMove::opDestination() const { return m_oco->instDestinatio size_t ParallelMove::opAccumulatorBitsModified() const { return m_oco->instAccumulatorBitsModified(); } -ParallelMove* ParallelMove::decodeParallelMove(const Opcode* opc, const UINT16 word0, const UINT16 word1) +std::unique_ptr<ParallelMove> ParallelMove::decodeParallelMove(const Opcode* opc, const UINT16 word0, const UINT16 word1) { const UINT16 w0 = word0; const UINT16 w1 = word1; @@ -17,12 +17,12 @@ ParallelMove* ParallelMove::decodeParallelMove(const Opcode* opc, const UINT16 w /* Dual X Memory Data Read : 011m mKKK .rr. .... : A-142*/ if ((w0 & 0xe000) == 0x6000) { - return global_alloc(DualXMemoryDataRead(opc, w0, w1)); + return std::make_unique<DualXMemoryDataRead>(opc, w0, w1); } /* X Memory Data Write and Register Data Move : 0001 011k RRDD .... : A-140 */ else if ((w0 & 0xfe00) == 0x1600) { - return global_alloc(XMemoryDataWriteAndRegisterDataMove(opc, w0, w1)); + return std::make_unique<XMemoryDataWriteAndRegisterDataMove>(opc, w0, w1); } else { @@ -37,22 +37,22 @@ ParallelMove* ParallelMove::decodeParallelMove(const Opcode* opc, const UINT16 w /* Register to Register Data Move : 0100 IIII .... .... : A-133 */ else if ((w0 & 0xf000) == 0x4000) { - return global_alloc(RegisterToRegisterDataMove(opc, w0, w1)); + return std::make_unique<RegisterToRegisterDataMove>(opc, w0, w1); } /* Address Register Update : 0011 0zRR .... .... : A-135 */ else if ((w0 & 0xf800) == 0x3000) { - return global_alloc(AddressRegisterUpdate(opc, w0, w1)); + return std::make_unique<AddressRegisterUpdate>(opc, w0, w1); } /* X Memory Data Move : 1mRR HHHW .... .... : A-137 */ else if ((w0 & 0x8000) == 0x8000) { - return global_alloc(XMemoryDataMove(opc, w0, w1)); + return std::make_unique<XMemoryDataMove>(opc, w0, w1); } /* X Memory Data Move : 0101 HHHW .... .... : A-137 */ else if ((w0 & 0xf000) == 0x5000) { - return global_alloc(XMemoryDataMove_2(opc, w0, w1)); + return std::make_unique<XMemoryDataMove_2>(opc, w0, w1); } /* X Memory Data Move with short displacement : 0000 0101 BBBB BBBB ---- HHHW .... .... : A-139 */ else if ((w0 & 0xff00) == 0x0500) @@ -68,12 +68,12 @@ ParallelMove* ParallelMove::decodeParallelMove(const Opcode* opc, const UINT16 w ((w1 & 0xf810) != 0x3800) && ((w1 & 0x00ff) != 0x0011)) { - return global_alloc(XMemoryDataMoveWithShortDisplacement(opc, w0, w1)); + return std::make_unique<XMemoryDataMoveWithShortDisplacement>(opc, w0, w1); } } } - return NULL; + return nullptr; } } diff --git a/src/devices/cpu/dsp56k/pmove.h b/src/devices/cpu/dsp56k/pmove.h index cb1bbe0f6f5..3cc8ae886d2 100644 --- a/src/devices/cpu/dsp56k/pmove.h +++ b/src/devices/cpu/dsp56k/pmove.h @@ -24,7 +24,7 @@ public: virtual void disassemble(std::string& retString) const = 0; virtual void evaluate() = 0; - static ParallelMove* decodeParallelMove(const Opcode* opc, const UINT16 word0, const UINT16 word1); + static std::unique_ptr<ParallelMove> decodeParallelMove(const Opcode* opc, const UINT16 word0, const UINT16 word1); bool valid() const { return m_valid; } |