diff options
Diffstat (limited to 'src/emu/cpu/rsp')
| -rw-r--r-- | src/emu/cpu/rsp/rsp.h | 2 | ||||
| -rw-r--r-- | src/emu/cpu/rsp/rspcp2.c | 30 | ||||
| -rw-r--r-- | src/emu/cpu/rsp/rspcp2.h | 38 | ||||
| -rw-r--r-- | src/emu/cpu/rsp/rspcp2d.c | 58 | ||||
| -rw-r--r-- | src/emu/cpu/rsp/rspcp2d.h | 4 | ||||
| -rw-r--r-- | src/emu/cpu/rsp/rspcp2s.c | 33 | ||||
| -rw-r--r-- | src/emu/cpu/rsp/rspcp2s.h | 66 | ||||
| -rw-r--r-- | src/emu/cpu/rsp/rspdrc.c | 10 |
8 files changed, 120 insertions, 121 deletions
diff --git a/src/emu/cpu/rsp/rsp.h b/src/emu/cpu/rsp/rsp.h index 1e8380cc968..c4bf16ccdf3 100644 --- a/src/emu/cpu/rsp/rsp.h +++ b/src/emu/cpu/rsp/rsp.h @@ -269,7 +269,7 @@ protected: direct_read_data *m_direct; private: - rsp_cop2 *m_cop2; + rsp_cop2 *m_cop2; UINT32 *m_dmem32; UINT16 *m_dmem16; diff --git a/src/emu/cpu/rsp/rspcp2.c b/src/emu/cpu/rsp/rspcp2.c index 7dca6014eb6..4f7ab80a51b 100644 --- a/src/emu/cpu/rsp/rspcp2.c +++ b/src/emu/cpu/rsp/rspcp2.c @@ -27,14 +27,14 @@ extern offs_t rsp_dasm_one(char *buffer, offs_t pc, UINT32 op); Helpful Defines ***************************************************************************/ -#define VDREG ((op >> 6) & 0x1f) -#define VS1REG ((op >> 11) & 0x1f) -#define VS2REG ((op >> 16) & 0x1f) -#define EL ((op >> 21) & 0xf) +#define VDREG ((op >> 6) & 0x1f) +#define VS1REG ((op >> 11) & 0x1f) +#define VS2REG ((op >> 16) & 0x1f) +#define EL ((op >> 21) & 0xf) -#define RSVAL (m_rsp.m_rsp_state->r[RSREG]) -#define RTVAL (m_rsp.m_rsp_state->r[RTREG]) -#define RDVAL (m_rsp.m_rsp_state->r[RDREG]) +#define RSVAL (m_rsp.m_rsp_state->r[RSREG]) +#define RTVAL (m_rsp.m_rsp_state->r[RTREG]) +#define RDVAL (m_rsp.m_rsp_state->r[RDREG]) #define VREG_B(reg, offset) m_v[(reg)].b[(offset)^1] #define VREG_S(reg, offset) m_v[(reg)].s[(offset)] @@ -56,11 +56,11 @@ extern offs_t rsp_dasm_one(char *buffer, offs_t pc, UINT32 op); #define ZERO 3 #define CLIP2 4 -#define ACCUM(x) m_accum[x].q -#define ACCUM_H(x) (UINT16)m_accum[x].w[3] -#define ACCUM_M(x) (UINT16)m_accum[x].w[2] -#define ACCUM_L(x) (UINT16)m_accum[x].w[1] -#define ACCUM_LL(x) (UINT16)m_accum[x].w[0] +#define ACCUM(x) m_accum[x].q +#define ACCUM_H(x) (UINT16)m_accum[x].w[3] +#define ACCUM_M(x) (UINT16)m_accum[x].w[2] +#define ACCUM_L(x) (UINT16)m_accum[x].w[1] +#define ACCUM_LL(x) (UINT16)m_accum[x].w[0] #define SET_ACCUM_H(v, x) m_accum[x].w[3] = v; #define SET_ACCUM_M(v, x) m_accum[x].w[2] = v; @@ -123,9 +123,9 @@ static const int vector_elements_2[16][8] = }; rsp_cop2::rsp_cop2(rsp_device &rsp, running_machine &machine) - : m_rsp(rsp) - , m_machine(machine) - , m_reciprocal_res(0) + : m_rsp(rsp) + , m_machine(machine) + , m_reciprocal_res(0) , m_reciprocal_high(0) , m_dp_allowed(0) { diff --git a/src/emu/cpu/rsp/rspcp2.h b/src/emu/cpu/rsp/rspcp2.h index df33c13baf6..9b00b5a57f5 100644 --- a/src/emu/cpu/rsp/rspcp2.h +++ b/src/emu/cpu/rsp/rspcp2.h @@ -126,36 +126,36 @@ public: virtual void mtc2(); virtual void ctc2(); - virtual void handle_cop2(UINT32 op); + virtual void handle_cop2(UINT32 op); - void log_instruction_execution(); - virtual void cfunc_unimplemented_opcode() { } + void log_instruction_execution(); + virtual void cfunc_unimplemented_opcode() { } protected: - virtual int generate_vector_opcode(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc) { return TRUE; } + virtual int generate_vector_opcode(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc) { return TRUE; } - UINT16 SATURATE_ACCUM(int accum, int slice, UINT16 negative, UINT16 positive); - UINT16 SATURATE_ACCUM1(int accum, UINT16 negative, UINT16 positive); + UINT16 SATURATE_ACCUM(int accum, int slice, UINT16 negative, UINT16 positive); + UINT16 SATURATE_ACCUM1(int accum, UINT16 negative, UINT16 positive); - UINT32 m_op; + UINT32 m_op; - rsp_device& m_rsp; + rsp_device& m_rsp; running_machine& m_machine; - UINT32 m_vres[8]; /* used for temporary vector results */ + UINT32 m_vres[8]; /* used for temporary vector results */ - VECTOR_REG m_v[32]; + VECTOR_REG m_v[32]; - ACCUMULATOR_REG m_accum[8]; - UINT16 m_vflag[6][8]; + ACCUMULATOR_REG m_accum[8]; + UINT16 m_vflag[6][8]; - INT32 m_reciprocal_res; - UINT32 m_reciprocal_high; - INT32 m_dp_allowed; + INT32 m_reciprocal_res; + UINT32 m_reciprocal_high; + INT32 m_dp_allowed; private: - void handle_lwc2(UINT32 op); - void handle_swc2(UINT32 op); - void handle_vector_ops(UINT32 op); + void handle_lwc2(UINT32 op); + void handle_swc2(UINT32 op); + void handle_vector_ops(UINT32 op); }; -#endif /* __RSPCP2_H__ */
\ No newline at end of file +#endif /* __RSPCP2_H__ */ diff --git a/src/emu/cpu/rsp/rspcp2d.c b/src/emu/cpu/rsp/rspcp2d.c index cc33779e5f4..0abc3e10f1f 100644 --- a/src/emu/cpu/rsp/rspcp2d.c +++ b/src/emu/cpu/rsp/rspcp2d.c @@ -28,14 +28,14 @@ extern offs_t rsp_dasm_one(char *buffer, offs_t pc, UINT32 op); Helpful Defines ***************************************************************************/ -#define VDREG ((op >> 6) & 0x1f) -#define VS1REG ((op >> 11) & 0x1f) -#define VS2REG ((op >> 16) & 0x1f) -#define EL ((op >> 21) & 0xf) +#define VDREG ((op >> 6) & 0x1f) +#define VS1REG ((op >> 11) & 0x1f) +#define VS2REG ((op >> 16) & 0x1f) +#define EL ((op >> 21) & 0xf) -#define RSVAL (m_rsp.m_rsp_state->r[RSREG]) -#define RTVAL (m_rsp.m_rsp_state->r[RTREG]) -#define RDVAL (m_rsp.m_rsp_state->r[RDREG]) +#define RSVAL (m_rsp.m_rsp_state->r[RSREG]) +#define RTVAL (m_rsp.m_rsp_state->r[RTREG]) +#define RDVAL (m_rsp.m_rsp_state->r[RDREG]) #define VREG_B(reg, offset) m_v[(reg)].b[(offset)^1] #define W_VREG_S(reg, offset) m_v[(reg)].s[(offset)] @@ -60,16 +60,16 @@ static void cfunc_ctc2(void *param); #define ACCUM_M(x) (UINT16)m_accum[x].w[2] #define ACCUM_L(x) (UINT16)m_accum[x].w[1] #define ACCUM_LL(x) (UINT16)m_accum[x].w[0] -#define ACCUM(x) m_accum[x].q +#define ACCUM(x) m_accum[x].q #define SET_ACCUM_H(v, x) m_accum[x].w[3] = v; #define SET_ACCUM_M(v, x) m_accum[x].w[2] = v; #define SET_ACCUM_L(v, x) m_accum[x].w[1] = v; #define SET_ACCUM_LL(v, x) m_accum[x].w[0] = v; -#define SET_ACCUM(v, x) m_accum[x].q = v; +#define SET_ACCUM(v, x) m_accum[x].q = v; -#define GET_VS1(out, i) out = VREG_S(vs1reg, i) -#define GET_VS2(out, i) out = VREG_S(vs2reg, VEC_EL_2(el, i)) +#define GET_VS1(out, i) out = VREG_S(vs1reg, i) +#define GET_VS2(out, i) out = VREG_S(vs2reg, VEC_EL_2(el, i)) #define CARRY_FLAG(x) (m_vflag[CARRY][x & 7] != 0 ? 0xffff : 0) #define COMPARE_FLAG(x) (m_vflag[COMPARE][x & 7] != 0 ? 0xffff : 0) @@ -96,10 +96,10 @@ static void cfunc_ctc2(void *param); #define CLEAR_CLIP2_FLAG(x) { m_vflag[CLIP2][x & 7] = 0; } #define CACHE_VALUES() \ - const int op = m_op; \ - const int vdreg = VDREG; \ - const int vs1reg = VS1REG; \ - const int vs2reg = VS2REG; \ + const int op = m_op; \ + const int vdreg = VDREG; \ + const int vs1reg = VS1REG; \ + const int vs2reg = VS2REG; \ const int el = EL; #define WRITEBACK_RESULT() { \ @@ -2105,7 +2105,7 @@ void rsp_cop2_drc::vsaw() W_VREG_S(vdreg, i) = ACCUM_L(i); } break; - default: // Unsupported + default: // Unsupported { for (int i = 0; i < 8; i++) { @@ -3465,8 +3465,8 @@ int rsp_cop2_drc::generate_vector_opcode(drcuml_block *block, rsp_device::compil UML_CALLC(block, cfunc_vmov, this); return TRUE; - case 0x34: /* VRSQ */ - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + case 0x34: /* VRSQ */ + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l UML_CALLC(block, cfunc_vrsq, this); return TRUE; @@ -3480,8 +3480,8 @@ int rsp_cop2_drc::generate_vector_opcode(drcuml_block *block, rsp_device::compil UML_CALLC(block, cfunc_vrsqh, this); return TRUE; - case 0x37: /* VNOP */ - case 0x3F: /* VNULL */ + case 0x37: /* VNOP */ + case 0x3F: /* VNULL */ return TRUE; default: @@ -3708,27 +3708,27 @@ int rsp_cop2_drc::generate_cop2(drcuml_block *block, rsp_device::compiler_state case 0x00: /* MFCz */ if (RTREG != 0) { - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_mfc2, this); // callc mfc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_mfc2, this); // callc mfc2 } return TRUE; case 0x02: /* CFCz */ if (RTREG != 0) { - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_cfc2, this); // callc cfc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_cfc2, this); // callc cfc2 } return TRUE; case 0x04: /* MTCz */ - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_mtc2, this); // callc mtc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_mtc2, this); // callc mtc2 return TRUE; case 0x06: /* CTCz */ - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_ctc2, this); // callc ctc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_ctc2, this); // callc ctc2 return TRUE; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: @@ -3736,4 +3736,4 @@ int rsp_cop2_drc::generate_cop2(drcuml_block *block, rsp_device::compiler_state return generate_vector_opcode(block, compiler, desc); } return FALSE; -}
\ No newline at end of file +} diff --git a/src/emu/cpu/rsp/rspcp2d.h b/src/emu/cpu/rsp/rspcp2d.h index 51c00dc53f3..96eb7a9a32b 100644 --- a/src/emu/cpu/rsp/rspcp2d.h +++ b/src/emu/cpu/rsp/rspcp2d.h @@ -104,7 +104,7 @@ public: virtual void ctc2(); private: - virtual int generate_vector_opcode(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc); + virtual int generate_vector_opcode(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc); }; -#endif /* __RSPCP2D_H__ */
\ No newline at end of file +#endif /* __RSPCP2D_H__ */ diff --git a/src/emu/cpu/rsp/rspcp2s.c b/src/emu/cpu/rsp/rspcp2s.c index 5f53bb927c6..4f59ecc555d 100644 --- a/src/emu/cpu/rsp/rspcp2s.c +++ b/src/emu/cpu/rsp/rspcp2s.c @@ -26,14 +26,14 @@ using namespace uml; Helpful Defines ***************************************************************************/ -#define VDREG ((op >> 6) & 0x1f) -#define VS1REG ((op >> 11) & 0x1f) -#define VS2REG ((op >> 16) & 0x1f) -#define EL ((op >> 21) & 0xf) +#define VDREG ((op >> 6) & 0x1f) +#define VS1REG ((op >> 11) & 0x1f) +#define VS2REG ((op >> 16) & 0x1f) +#define EL ((op >> 21) & 0xf) -#define RSVAL (m_rsp.m_rsp_state->r[RSREG]) -#define RTVAL (m_rsp.m_rsp_state->r[RTREG]) -#define RDVAL (m_rsp.m_rsp_state->r[RDREG]) +#define RSVAL (m_rsp.m_rsp_state->r[RSREG]) +#define RTVAL (m_rsp.m_rsp_state->r[RTREG]) +#define RDVAL (m_rsp.m_rsp_state->r[RDREG]) #define EXTRACT16(reg, value, element) \ switch((element) & 7) \ @@ -2322,9 +2322,8 @@ inline void rsp_cop2_simd::vsaw() m_xv[VDREG] = m_accum_l; break; } - default: // Unsupported, writes 0 to VD + default: // Unsupported, writes 0 to VD { - } } } @@ -3602,27 +3601,27 @@ int rsp_cop2_simd::generate_cop2(drcuml_block *block, rsp_device::compiler_state case 0x00: /* MFCz */ if (RTREG != 0) { - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_mfc2, this); // callc mfc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_mfc2, this); // callc mfc2 } return TRUE; case 0x02: /* CFCz */ if (RTREG != 0) { - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_cfc2, this); // callc cfc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_cfc2, this); // callc cfc2 } return TRUE; case 0x04: /* MTCz */ - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_mtc2, this); // callc mtc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_mtc2, this); // callc mtc2 return TRUE; case 0x06: /* CTCz */ - UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l - UML_CALLC(block, cfunc_ctc2, this); // callc ctc2 + UML_MOV(block, mem(&m_op), desc->opptr.l[0]); // mov [arg0],desc->opptr.l + UML_CALLC(block, cfunc_ctc2, this); // callc ctc2 return TRUE; case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x17: diff --git a/src/emu/cpu/rsp/rspcp2s.h b/src/emu/cpu/rsp/rspcp2s.h index 4c0e5d9a557..f040ca9c52a 100644 --- a/src/emu/cpu/rsp/rspcp2s.h +++ b/src/emu/cpu/rsp/rspcp2s.h @@ -111,48 +111,48 @@ public: #endif private: - virtual int generate_vector_opcode(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc); - - UINT16 ACCUM_H(int x); - UINT16 ACCUM_M(int x); - UINT16 ACCUM_L(int x); - UINT16 ACCUM_LL(int x); - UINT16 CARRY_FLAG(const int x); - UINT16 COMPARE_FLAG(const int x); - UINT16 CLIP1_FLAG(const int x); - UINT16 ZERO_FLAG(const int x); - UINT16 CLIP2_FLAG(const int x); - UINT16 SATURATE_ACCUM(int accum, int slice, UINT16 negative, UINT16 positive); - - __m128i m_accum_h; - __m128i m_accum_m; - __m128i m_accum_l; - __m128i m_accum_ll; + virtual int generate_vector_opcode(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc); + + UINT16 ACCUM_H(int x); + UINT16 ACCUM_M(int x); + UINT16 ACCUM_L(int x); + UINT16 ACCUM_LL(int x); + UINT16 CARRY_FLAG(const int x); + UINT16 COMPARE_FLAG(const int x); + UINT16 CLIP1_FLAG(const int x); + UINT16 ZERO_FLAG(const int x); + UINT16 CLIP2_FLAG(const int x); + UINT16 SATURATE_ACCUM(int accum, int slice, UINT16 negative, UINT16 positive); + + __m128i m_accum_h; + __m128i m_accum_m; + __m128i m_accum_l; + __m128i m_accum_ll; // Mirror of v[] for now, to be used in parallel as // more vector ops are transitioned over - __m128i m_xv[32]; - __m128i m_xvflag[6]; + __m128i m_xv[32]; + __m128i m_xvflag[6]; #if SIMUL_SIMD - UINT32 m_old_r[35]; - UINT8 m_old_dmem[4096]; + UINT32 m_old_r[35]; + UINT8 m_old_dmem[4096]; - UINT32 m_scalar_r[35]; - UINT8 m_scalar_dmem[4096]; + UINT32 m_scalar_r[35]; + UINT8 m_scalar_dmem[4096]; - INT32 m_old_reciprocal_res; - UINT32 m_old_reciprocal_high; - INT32 m_old_dp_allowed; + INT32 m_old_reciprocal_res; + UINT32 m_old_reciprocal_high; + INT32 m_old_dp_allowed; - INT32 m_scalar_reciprocal_res; - UINT32 m_scalar_reciprocal_high; - INT32 m_scalar_dp_allowed; + INT32 m_scalar_reciprocal_res; + UINT32 m_scalar_reciprocal_high; + INT32 m_scalar_dp_allowed; - INT32 m_simd_reciprocal_res; - UINT32 m_simd_reciprocal_high; - INT32 m_simd_dp_allowed; + INT32 m_simd_reciprocal_res; + UINT32 m_simd_reciprocal_high; + INT32 m_simd_dp_allowed; #endif }; -#endif /* __RSPCP2S_H__ */
\ No newline at end of file +#endif /* __RSPCP2S_H__ */ diff --git a/src/emu/cpu/rsp/rspdrc.c b/src/emu/cpu/rsp/rspdrc.c index dbc81187796..44a0a22542a 100644 --- a/src/emu/cpu/rsp/rspdrc.c +++ b/src/emu/cpu/rsp/rspdrc.c @@ -786,16 +786,16 @@ void rsp_device::generate_branch(drcuml_block *block, compiler_state *compiler, /* update the cycles and jump through the hash table to the target */ if (desc->targetpc != BRANCH_TARGET_DYNAMIC) { - generate_update_cycles(block, &compiler_temp, desc->targetpc, TRUE); // <subtract cycles> + generate_update_cycles(block, &compiler_temp, desc->targetpc, TRUE); // <subtract cycles> if (desc->flags & OPFLAG_INTRABLOCK_BRANCH) - UML_JMP(block, desc->targetpc | 0x80000000); // jmp desc->targetpc + UML_JMP(block, desc->targetpc | 0x80000000); // jmp desc->targetpc else - UML_HASHJMP(block, 0, desc->targetpc, *m_nocode); // hashjmp <mode>,desc->targetpc,nocode + UML_HASHJMP(block, 0, desc->targetpc, *m_nocode); // hashjmp <mode>,desc->targetpc,nocode } else { - generate_update_cycles(block, &compiler_temp, mem(&m_rsp_state->jmpdest), TRUE); // <subtract cycles> - UML_HASHJMP(block, 0, mem(&m_rsp_state->jmpdest), *m_nocode); // hashjmp <mode>,<rsreg>,nocode + generate_update_cycles(block, &compiler_temp, mem(&m_rsp_state->jmpdest), TRUE); // <subtract cycles> + UML_HASHJMP(block, 0, mem(&m_rsp_state->jmpdest), *m_nocode); // hashjmp <mode>,<rsreg>,nocode } } |
