diff options
Diffstat (limited to 'src/emu/cpu/rsp/rspcp2.h')
-rw-r--r-- | src/emu/cpu/rsp/rspcp2.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/src/emu/cpu/rsp/rspcp2.h b/src/emu/cpu/rsp/rspcp2.h new file mode 100644 index 00000000000..4dc83f62268 --- /dev/null +++ b/src/emu/cpu/rsp/rspcp2.h @@ -0,0 +1,159 @@ +/*************************************************************************** + + rspcp2.h + + Interface file for Reality Signal Processor (RSP) vector extensions. + + Copyright the MESS team + Released for general non-commercial use under the MAME license + Visit http://mamedev.org for licensing and usage restrictions. + +***************************************************************************/ + +#pragma once + +#ifndef __RSPCP2_H__ +#define __RSPCP2_H__ + +#include "cpu/drcuml.h" +#include "rsp.h" + +#define USE_SIMD (0) +#define SIMUL_SIMD (0) + +union VECTOR_REG +{ + UINT64 d[2]; + UINT32 l[4]; + INT16 s[8]; + UINT8 b[16]; +}; + +union ACCUMULATOR_REG +{ + UINT64 q; + UINT32 l[2]; + UINT16 w[4]; +}; + +struct compiler_state; + +class rsp_cop2 +{ + friend class rsp_device; + +protected: + rsp_cop2(rsp_device &rsp, running_machine &machine); + + virtual void init(); + virtual void start(); + + virtual int generate_cop2(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc) { return TRUE; } + virtual int generate_lwc2(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc) { return TRUE; } + virtual int generate_swc2(drcuml_block *block, rsp_device::compiler_state *compiler, const opcode_desc *desc) { return TRUE; } + + virtual void state_string_export(const int index, astring &string); + +public: + virtual void lbv() { } + virtual void lsv() { } + virtual void llv() { } + virtual void ldv() { } + virtual void lqv() { } + virtual void lrv() { } + virtual void lpv() { } + virtual void luv() { } + virtual void lhv() { } + virtual void lfv() { } + virtual void lwv() { } + virtual void ltv() { } + virtual void sbv() { } + virtual void ssv() { } + virtual void slv() { } + virtual void sdv() { } + virtual void sqv() { } + virtual void srv() { } + virtual void spv() { } + virtual void suv() { } + virtual void shv() { } + virtual void sfv() { } + virtual void swv() { } + virtual void stv() { } + virtual void vmulf() { } + virtual void vmulu() { } + virtual void vmudl() { } + virtual void vmudm() { } + virtual void vmudn() { } + virtual void vmudh() { } + virtual void vmacf() { } + virtual void vmacu() { } + virtual void vmadl() { } + virtual void vmadm() { } + virtual void vmadn() { } + virtual void vmadh() { } + virtual void vadd() { } + virtual void vsub() { } + virtual void vabs() { } + virtual void vaddc() { } + virtual void vsubc() { } + virtual void vaddb() { } + virtual void vsaw() { } + virtual void vlt() { } + virtual void veq() { } + virtual void vne() { } + virtual void vge() { } + virtual void vcl() { } + virtual void vch() { } + virtual void vcr() { } + virtual void vmrg() { } + virtual void vand() { } + virtual void vnand() { } + virtual void vor() { } + virtual void vnor() { } + virtual void vxor() { } + virtual void vnxor() { } + virtual void vrcp() { } + virtual void vrcpl() { } + virtual void vrcph() { } + virtual void vmov() { } + virtual void vrsql() { } + virtual void vrsqh() { } + virtual void vrsq() { } + virtual void mfc2(); + virtual void cfc2(); + virtual void mtc2(); + virtual void ctc2(); + + virtual void handle_cop2(UINT32 op); + + 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; } + + UINT16 SATURATE_ACCUM(int accum, int slice, UINT16 negative, UINT16 positive); + UINT16 SATURATE_ACCUM1(int accum, UINT16 negative, UINT16 positive); + + UINT32 m_op; + + rsp_device& m_rsp; + running_machine& m_machine; + UINT32 m_vres[8]; /* used for temporary vector results */ + + VECTOR_REG m_v[32]; + + ACCUMULATOR_REG m_accum[8]; + UINT16 m_vflag[6][8]; + + 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); +}; + +#endif /* __RSPCP2_H__ */
\ No newline at end of file |