mirror of
https://github.com/jpd002/Play-.git
synced 2025-04-29 06:07:56 +03:00
119 lines
5.5 KiB
C++
119 lines
5.5 KiB
C++
#ifndef _VUSHARED_H_
|
|
#define _VUSHARED_H_
|
|
|
|
#include "MIPSReflection.h"
|
|
#include "CodeGen.h"
|
|
#include "uint128.h"
|
|
#include <string.h>
|
|
|
|
namespace VUShared
|
|
{
|
|
enum VECTOR_COMP
|
|
{
|
|
VECTOR_COMPX = 0,
|
|
VECTOR_COMPY = 1,
|
|
VECTOR_COMPZ = 2,
|
|
VECTOR_COMPW = 3,
|
|
};
|
|
|
|
struct PIPEINFO
|
|
{
|
|
size_t value;
|
|
size_t heldValue;
|
|
size_t target;
|
|
};
|
|
|
|
int32 GetImm11Offset(uint16);
|
|
int32 GetBranch(uint16);
|
|
|
|
bool DestinationHasElement(uint8, unsigned int);
|
|
uint32* GetVectorElement(CMIPS*, unsigned int, unsigned int);
|
|
size_t GetVectorElement(unsigned int, unsigned int);
|
|
uint32* GetAccumulatorElement(CMIPS*, unsigned int);
|
|
size_t GetAccumulatorElement(unsigned int);
|
|
|
|
void PullVector(CCodeGen*, uint8, size_t);
|
|
|
|
void ADDA_base(CCodeGen*, uint8, size_t, size_t, bool);
|
|
void MADD_base(CCodeGen*, uint8, size_t, size_t, size_t, bool);
|
|
void MSUB_base(CCodeGen*, uint8, size_t, size_t, size_t, bool);
|
|
|
|
//Shared instructions
|
|
void ABS(CCodeGen*, uint8, uint8, uint8);
|
|
void ADD(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void ADDbc(CCodeGen*, uint8, uint8, uint8, uint8, uint8);
|
|
void ADDi(CCodeGen*, uint8, uint8, uint8);
|
|
void ADDq(CCodeGen*, uint8, uint8, uint8, uint32);
|
|
void ADDA(CCodeGen*, uint8, uint8, uint8);
|
|
void ADDAbc(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void CLIP(CCodeGen*, uint8, uint8);
|
|
void DIV(CCodeGen*, uint8, uint8, uint8, uint8, uint32, unsigned int);
|
|
void FTOI0(CCodeGen*, uint8, uint8, uint8);
|
|
void FTOI4(CCodeGen*, uint8, uint8, uint8);
|
|
void FTOI12(CCodeGen*, uint8, uint8, uint8);
|
|
void ITOF0(CCodeGen*, uint8, uint8, uint8);
|
|
void ITOF4(CCodeGen*, uint8, uint8, uint8);
|
|
void ITOF12(CCodeGen*, uint8, uint8, uint8);
|
|
void ITOF15(CCodeGen*, uint8, uint8, uint8);
|
|
void MADD(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void MADDbc(CCodeGen*, uint8, uint8, uint8, uint8, uint8);
|
|
void MADDq(CCodeGen*, uint8, uint8, uint8, uint32);
|
|
void MADDA(CCodeGen*, uint8, uint8, uint8);
|
|
void MADDAbc(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void MADDAi(CCodeGen*, uint8, uint8);
|
|
void MAX(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void MAXbc(CCodeGen*, uint8, uint8, uint8, uint8, uint8);
|
|
void MINI(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void MINIbc(CCodeGen*, uint8, uint8, uint8, uint8, uint8);
|
|
void MINIi(CCodeGen*, uint8, uint8, uint8);
|
|
void MOVE(CCodeGen*, uint8, uint8, uint8);
|
|
void MR32(CCodeGen*, uint8, uint8, uint8);
|
|
void MSUBbc(CCodeGen*, uint8, uint8, uint8, uint8, uint8);
|
|
void MSUBi(CCodeGen*, uint8, uint8, uint8);
|
|
void MSUBAbc(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void MSUBAi(CCodeGen*, uint8, uint8);
|
|
void MUL(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void MULbc(CCodeGen*, uint8, uint8, uint8, uint8, uint8);
|
|
void MULi(CCodeGen*, uint8, uint8, uint8);
|
|
void MULq(CCodeGen*, uint8, uint8, uint8, uint32);
|
|
void MULA(CCodeGen*, uint8, uint8, uint8);
|
|
void MULAbc(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void MULAi(CCodeGen*, uint8, uint8);
|
|
void OPMSUB(CCodeGen*, uint8, uint8, uint8);
|
|
void OPMULA(CCodeGen*, uint8, uint8);
|
|
void RINIT(CCodeGen*, uint8, uint8);
|
|
void RGET(CCodeGen*, uint8, uint8);
|
|
void RNEXT(CCodeGen*, uint8, uint8);
|
|
void RSQRT(CCodeGen*, uint8, uint8, uint8, uint8, uint32, unsigned int);
|
|
void RXOR(CCodeGen*, uint8, uint8);
|
|
void SQRT(CCodeGen*, uint8, uint8, uint32, unsigned int);
|
|
void SUB(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void SUBbc(CCodeGen*, uint8, uint8, uint8, uint8, uint8);
|
|
void SUBi(CCodeGen*, uint8, uint8, uint8);
|
|
void SUBAbc(CCodeGen*, uint8, uint8, uint8, uint8);
|
|
void WAITQ(CCodeGen*);
|
|
|
|
void FlushPipeline(const PIPEINFO&, CCodeGen*);
|
|
void QueueInPipeline(const PIPEINFO&, CCodeGen*, uint32);
|
|
void VerifyPipeline(const PIPEINFO&, CCodeGen*, uint32);
|
|
|
|
//Shared addressing modes
|
|
void ReflOpFdFsI(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpFdFsQ(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpFdFsFt(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpFdFsFtBc(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpFtFs(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpClip(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpAccFsI(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpAccFsFt(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpAccFsFtBc(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpRFsf(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpFtR(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpQFtf(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
void ReflOpQFsfFtf(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
extern const char* m_sBroadcast[4];
|
|
extern const char* m_sDestination[16];
|
|
}
|
|
|
|
#endif
|