2015-05-06 00:54:15 -04:00
|
|
|
#ifndef _VUSHARED_H_
|
|
|
|
#define _VUSHARED_H_
|
|
|
|
|
|
|
|
#include "../MIPSReflection.h"
|
|
|
|
#include "../MipsJitter.h"
|
|
|
|
#include "../uint128.h"
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
#undef ABS
|
|
|
|
#undef MAX
|
|
|
|
|
|
|
|
namespace VUShared
|
|
|
|
{
|
2022-07-07 16:54:22 -04:00
|
|
|
//Function to emit code to handle accesses to VU1 area mapped in VU0 address space
|
|
|
|
typedef std::function<void(CMipsJitter*, uint8, uint8)> Vu1AreaAccessEmitter;
|
|
|
|
|
2017-04-11 22:28:47 -04:00
|
|
|
enum OP_LATENCY
|
|
|
|
{
|
2019-08-15 12:19:46 -04:00
|
|
|
LATENCY_MAC = 4,
|
|
|
|
LATENCY_DIV = 7,
|
|
|
|
LATENCY_SQRT = 7,
|
2017-04-11 22:28:47 -04:00
|
|
|
LATENCY_RSQRT = 13
|
|
|
|
};
|
|
|
|
|
2023-03-27 09:23:37 -04:00
|
|
|
enum VU_UPPEROP_BIT
|
|
|
|
{
|
|
|
|
VU_UPPEROP_BIT_I = 0x80000000,
|
2024-07-30 17:59:27 -04:00
|
|
|
VU_UPPEROP_BIT_E = 0x40000000,
|
|
|
|
VU_UPPEROP_BIT_M = 0x20000000,
|
|
|
|
VU_UPPEROP_BIT_D = 0x10000000,
|
|
|
|
VU_UPPEROP_BIT_T = 0x08000000,
|
2023-03-27 09:23:37 -04:00
|
|
|
};
|
|
|
|
|
2015-05-06 00:54:15 -04:00
|
|
|
enum VECTOR_COMP
|
|
|
|
{
|
|
|
|
VECTOR_COMPX = 0,
|
|
|
|
VECTOR_COMPY = 1,
|
|
|
|
VECTOR_COMPZ = 2,
|
|
|
|
VECTOR_COMPW = 3,
|
|
|
|
};
|
|
|
|
|
2016-12-31 17:49:40 -05:00
|
|
|
struct REGISTER_PIPEINFO
|
2015-05-06 00:54:15 -04:00
|
|
|
{
|
2016-12-31 17:49:40 -05:00
|
|
|
size_t value;
|
|
|
|
size_t heldValue;
|
|
|
|
size_t counter;
|
2015-05-06 00:54:15 -04:00
|
|
|
};
|
|
|
|
|
2016-12-28 14:01:56 -05:00
|
|
|
struct FLAG_PIPEINFO
|
|
|
|
{
|
|
|
|
size_t value;
|
|
|
|
size_t index;
|
|
|
|
size_t valueArray;
|
|
|
|
size_t timeArray;
|
|
|
|
};
|
|
|
|
|
2015-05-06 00:54:15 -04:00
|
|
|
struct OPERANDSET
|
|
|
|
{
|
2018-04-30 21:01:23 +01:00
|
|
|
unsigned int writeF;
|
|
|
|
unsigned int readF0;
|
2021-02-01 17:25:11 -05:00
|
|
|
unsigned int readElemF0;
|
2018-04-30 21:01:23 +01:00
|
|
|
unsigned int readF1;
|
2020-03-02 21:18:16 -05:00
|
|
|
unsigned int readElemF1;
|
2018-04-30 21:01:23 +01:00
|
|
|
unsigned int writeI;
|
2022-09-07 09:13:03 -04:00
|
|
|
unsigned int writeILsu;
|
2018-04-30 21:01:23 +01:00
|
|
|
unsigned int readI0;
|
|
|
|
unsigned int readI1;
|
|
|
|
bool syncQ;
|
|
|
|
bool readQ;
|
2018-09-02 13:11:09 -04:00
|
|
|
bool syncP;
|
|
|
|
bool readP;
|
2019-10-22 08:04:52 -04:00
|
|
|
bool readMACflags;
|
|
|
|
bool writeMACflags;
|
2016-08-06 00:45:32 -04:00
|
|
|
|
|
|
|
//When set, means that a branch following the instruction will be
|
|
|
|
//able to use the integer value directly
|
2018-04-30 21:01:23 +01:00
|
|
|
bool branchValue;
|
2015-05-06 00:54:15 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
struct VUINSTRUCTION;
|
|
|
|
|
|
|
|
struct VUSUBTABLE
|
|
|
|
{
|
2018-04-30 21:01:23 +01:00
|
|
|
uint32 nShift;
|
|
|
|
uint32 nMask;
|
|
|
|
VUINSTRUCTION* pTable;
|
2015-05-06 00:54:15 -04:00
|
|
|
};
|
|
|
|
|
|
|
|
struct VUINSTRUCTION
|
|
|
|
{
|
2018-04-30 21:01:23 +01:00
|
|
|
const char* name;
|
|
|
|
VUSUBTABLE* subTable;
|
|
|
|
void (*pGetAffectedOperands)(VUINSTRUCTION* pInstr, CMIPS* pCtx, uint32, uint32, OPERANDSET&);
|
2015-05-06 00:54:15 -04:00
|
|
|
};
|
|
|
|
|
2019-10-22 08:04:52 -04:00
|
|
|
enum COMPILEHINT
|
|
|
|
{
|
2024-12-18 11:51:32 -05:00
|
|
|
COMPILEHINT_SKIP_FMAC_UPDATE = (1 << 0),
|
2024-12-18 11:52:26 -05:00
|
|
|
COMPILEHINT_USE_ACCURATE_ADDI = (1 << 1), //For decompression in Tri-Ace games
|
2019-10-22 08:04:52 -04:00
|
|
|
};
|
|
|
|
|
2021-02-01 17:25:11 -05:00
|
|
|
uint32 MakeDestFromComponent(uint32);
|
2018-04-30 21:01:23 +01:00
|
|
|
int32 GetImm11Offset(uint16);
|
|
|
|
int32 GetBranch(uint16);
|
2015-05-06 00:54:15 -04:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
void VerifyVuReflectionTable(MIPSReflection::INSTRUCTION*, VUShared::VUINSTRUCTION*, size_t);
|
2015-05-06 00:54:15 -04:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
bool DestinationHasElement(uint8, unsigned int);
|
|
|
|
void ComputeMemAccessAddr(CMipsJitter*, unsigned int, uint32, uint32, uint32);
|
|
|
|
uint32 GetDestOffset(uint8);
|
|
|
|
uint32* GetVectorElement(CMIPS*, unsigned int, unsigned int);
|
|
|
|
size_t GetVectorElement(unsigned int, unsigned int);
|
|
|
|
uint32* GetAccumulatorElement(CMIPS*, unsigned int);
|
|
|
|
size_t GetAccumulatorElement(unsigned int);
|
2015-05-06 00:54:15 -04:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
void PullVector(CMipsJitter*, uint8, size_t);
|
2024-12-18 17:16:45 -05:00
|
|
|
void PushBcElement(CMipsJitter*, size_t);
|
2018-04-30 21:01:23 +01:00
|
|
|
void PushIntegerRegister(CMipsJitter*, unsigned int);
|
2023-09-07 11:06:06 -04:00
|
|
|
void PullIntegerRegister(CMipsJitter*, unsigned int);
|
2015-05-06 00:54:15 -04:00
|
|
|
|
2025-03-08 17:46:19 -05:00
|
|
|
void MakeComparableFromFloat(CMipsJitter*);
|
2019-10-22 08:04:52 -04:00
|
|
|
void TestSZFlags(CMipsJitter*, uint8, size_t, uint32, uint32);
|
2015-05-06 00:54:15 -04:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
void GetStatus(CMipsJitter*, size_t, uint32);
|
|
|
|
void SetStatus(CMipsJitter*, size_t);
|
2017-01-22 21:25:10 -05:00
|
|
|
|
2021-01-19 08:43:06 -05:00
|
|
|
void ADD_base(CMipsJitter*, uint8, size_t, size_t, size_t, bool, uint32, uint32);
|
2019-10-22 08:04:52 -04:00
|
|
|
void ADDA_base(CMipsJitter*, uint8, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void MADD_base(CMipsJitter*, uint8, size_t, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void MADDA_base(CMipsJitter*, uint8, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void SUB_base(CMipsJitter*, uint8, size_t, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void SUBA_base(CMipsJitter*, uint8, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void MSUB_base(CMipsJitter*, uint8, size_t, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void MSUBA_base(CMipsJitter*, uint8, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void MUL_base(CMipsJitter*, uint8, size_t, size_t, size_t, bool, uint32, uint32);
|
|
|
|
void MULA_base(CMipsJitter*, uint8, size_t, size_t, bool, uint32, uint32);
|
2015-05-06 00:54:15 -04:00
|
|
|
|
2020-04-13 17:04:18 -04:00
|
|
|
void MINI_base(CMipsJitter*, uint8, size_t, size_t, size_t, bool);
|
|
|
|
void MAX_base(CMipsJitter*, uint8, size_t, size_t, size_t, bool);
|
|
|
|
|
2015-05-06 00:54:15 -04:00
|
|
|
//Shared instructions
|
2018-04-30 21:01:23 +01:00
|
|
|
void ABS(CMipsJitter*, uint8, uint8, uint8);
|
2019-10-22 08:04:52 -04:00
|
|
|
void ADD(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void ADDbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void ADDi(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void ADDq(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void ADDA(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void ADDAbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void ADDAi(CMipsJitter*, uint8, uint8, uint32, uint32);
|
2020-05-13 12:09:01 -04:00
|
|
|
void ADDAq(CMipsJitter*, uint8, uint8, uint32, uint32);
|
2018-04-30 21:01:23 +01:00
|
|
|
void CLIP(CMipsJitter*, uint8, uint8, uint32);
|
|
|
|
void DIV(CMipsJitter*, uint8, uint8, uint8, uint8, uint32);
|
|
|
|
void FTOI0(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void FTOI4(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void FTOI12(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void FTOI15(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void IADD(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void IADDI(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void IAND(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void ILWbase(CMipsJitter*, uint8);
|
|
|
|
void ILWR(CMipsJitter*, uint8, uint8, uint8, uint32);
|
|
|
|
void IOR(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void ISUB(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void ITOF0(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void ITOF4(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void ITOF12(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void ITOF15(CMipsJitter*, uint8, uint8, uint8);
|
2023-07-20 18:01:15 -04:00
|
|
|
void ISWbase(CMipsJitter*, uint8, uint8);
|
2018-04-30 21:01:23 +01:00
|
|
|
void ISWR(CMipsJitter*, uint8, uint8, uint8, uint32);
|
|
|
|
void LQbase(CMipsJitter*, uint8, uint8);
|
|
|
|
void LQD(CMipsJitter*, uint8, uint8, uint8, uint32);
|
2024-07-31 11:46:37 -04:00
|
|
|
void LQI(CMipsJitter*, uint8, uint8, uint8, uint32, const Vu1AreaAccessEmitter& = Vu1AreaAccessEmitter());
|
2019-10-22 08:04:52 -04:00
|
|
|
void MADD(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MADDbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MADDi(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MADDq(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MADDA(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MADDAbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MADDAi(CMipsJitter*, uint8, uint8, uint32, uint32);
|
|
|
|
void MADDAq(CMipsJitter*, uint8, uint8, uint32, uint32);
|
2018-04-30 21:01:23 +01:00
|
|
|
void MAX(CMipsJitter*, uint8, uint8, uint8, uint8);
|
|
|
|
void MAXbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8);
|
|
|
|
void MAXi(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void MINI(CMipsJitter*, uint8, uint8, uint8, uint8);
|
|
|
|
void MINIbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8);
|
|
|
|
void MINIi(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void MOVE(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void MR32(CMipsJitter*, uint8, uint8, uint8);
|
2019-10-22 08:04:52 -04:00
|
|
|
void MSUB(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MSUBbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MSUBi(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MSUBq(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MSUBA(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MSUBAbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MSUBAi(CMipsJitter*, uint8, uint8, uint32, uint32);
|
|
|
|
void MSUBAq(CMipsJitter*, uint8, uint8, uint32, uint32);
|
2018-04-30 21:01:23 +01:00
|
|
|
void MFIR(CMipsJitter*, uint8, uint8, uint8);
|
|
|
|
void MTIR(CMipsJitter*, uint8, uint8, uint8);
|
2019-10-22 08:04:52 -04:00
|
|
|
void MUL(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MULbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MULi(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MULq(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MULA(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MULAbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void MULAi(CMipsJitter*, uint8, uint8, uint32, uint32);
|
|
|
|
void MULAq(CMipsJitter*, uint8, uint8, uint32, uint32);
|
|
|
|
void OPMSUB(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
2018-04-30 21:01:23 +01:00
|
|
|
void OPMULA(CMipsJitter*, uint8, uint8);
|
|
|
|
void RINIT(CMipsJitter*, uint8, uint8);
|
|
|
|
void RGET(CMipsJitter*, uint8, uint8);
|
|
|
|
void RNEXT(CMipsJitter*, uint8, uint8);
|
|
|
|
void RSQRT(CMipsJitter*, uint8, uint8, uint8, uint8, uint32);
|
|
|
|
void RXOR(CMipsJitter*, uint8, uint8);
|
|
|
|
void SQbase(CMipsJitter*, uint8, uint8);
|
|
|
|
void SQD(CMipsJitter*, uint8, uint8, uint8, uint32);
|
2022-07-07 16:54:22 -04:00
|
|
|
void SQI(CMipsJitter*, uint8, uint8, uint8, uint32, const Vu1AreaAccessEmitter& = Vu1AreaAccessEmitter());
|
2018-04-30 21:01:23 +01:00
|
|
|
void SQRT(CMipsJitter*, uint8, uint8, uint32);
|
2019-10-22 08:04:52 -04:00
|
|
|
void SUB(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void SUBbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void SUBi(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void SUBq(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void SUBA(CMipsJitter*, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void SUBAbc(CMipsJitter*, uint8, uint8, uint8, uint8, uint32, uint32);
|
|
|
|
void SUBAi(CMipsJitter*, uint8, uint8, uint32, uint32);
|
2018-08-31 18:15:13 -04:00
|
|
|
void WAITP(CMipsJitter*);
|
2018-04-30 21:01:23 +01:00
|
|
|
void WAITQ(CMipsJitter*);
|
|
|
|
|
|
|
|
void FlushPipeline(const REGISTER_PIPEINFO&, CMipsJitter*);
|
2023-05-11 10:01:48 -04:00
|
|
|
void SyncPipeline(const REGISTER_PIPEINFO&, CMipsJitter*, uint32);
|
2018-04-30 21:01:23 +01:00
|
|
|
void CheckPipeline(const REGISTER_PIPEINFO&, CMipsJitter*, uint32);
|
|
|
|
void QueueInPipeline(const REGISTER_PIPEINFO&, CMipsJitter*, uint32, uint32);
|
|
|
|
void CheckFlagPipeline(const FLAG_PIPEINFO&, CMipsJitter*, uint32);
|
|
|
|
void QueueInFlagPipeline(const FLAG_PIPEINFO&, CMipsJitter*, uint32, uint32);
|
|
|
|
void ResetFlagPipeline(const FLAG_PIPEINFO&, CMipsJitter*);
|
2015-05-06 00:54:15 -04:00
|
|
|
|
2023-09-07 16:56:12 -04:00
|
|
|
void CheckFlagPipelineImmediate(const FLAG_PIPEINFO&, CMIPS*, uint32);
|
|
|
|
void ResetFlagPipelineImmediate(const FLAG_PIPEINFO&, CMIPS*, uint32);
|
|
|
|
|
2015-05-06 00:54:15 -04:00
|
|
|
//Shared addressing modes
|
2018-04-30 21:01:23 +01:00
|
|
|
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 ReflOpFsDstItDec(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpFsDstItInc(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpFtFs(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpFtIs(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpFtDstIsDec(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpFtDstIsInc(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 ReflOpAccFsQ(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);
|
|
|
|
void ReflOpIdIsIt(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpItFsf(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpItIsDst(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
void ReflOpItIsImm5(MIPSReflection::INSTRUCTION*, CMIPS*, uint32, uint32, char*, unsigned int);
|
|
|
|
|
|
|
|
void ReflOpAffNone(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
|
|
|
|
2021-06-01 20:39:18 -04:00
|
|
|
void ReflOpAffWrAMfRdFsFt(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
|
|
|
void ReflOpAffWrAMfRdFsFtBc(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
|
|
|
void ReflOpAffWrAMfRdFsI(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
|
|
|
void ReflOpAffWrAMfRdFsQ(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2021-02-09 11:27:53 -05:00
|
|
|
|
2020-03-02 20:16:11 -05:00
|
|
|
void ReflOpAffWrCfRdFsFt(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2021-02-09 11:27:53 -05:00
|
|
|
|
2020-03-02 20:16:11 -05:00
|
|
|
void ReflOpAffWrFdRdFsFt(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2021-02-09 11:27:53 -05:00
|
|
|
void ReflOpAffWrFdRdFsI(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2021-06-01 20:39:18 -04:00
|
|
|
|
|
|
|
void ReflOpAffWrFdMfRdFsFt(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2023-01-05 12:19:19 -05:00
|
|
|
void ReflOpAffWrFdMfRdFsFtBc(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2021-06-01 20:39:18 -04:00
|
|
|
void ReflOpAffWrFdMfRdFsI(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
|
|
|
void ReflOpAffWrFdMfRdFsQ(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2021-02-09 11:27:53 -05:00
|
|
|
|
|
|
|
void ReflOpAffWrFtRdFs(VUINSTRUCTION*, CMIPS*, uint32, uint32, OPERANDSET&);
|
2018-04-30 21:01:23 +01:00
|
|
|
|
|
|
|
VUINSTRUCTION* DereferenceInstruction(VUSUBTABLE*, uint32);
|
|
|
|
void SubTableAffectedOperands(VUINSTRUCTION* pInstr, CMIPS* pCtx, uint32, uint32, OPERANDSET&);
|
|
|
|
|
|
|
|
extern const char* m_sBroadcast[4];
|
|
|
|
extern const char* m_sDestination[16];
|
2016-12-31 17:49:40 -05:00
|
|
|
|
|
|
|
extern const REGISTER_PIPEINFO g_pipeInfoQ;
|
2018-08-31 17:24:03 -04:00
|
|
|
extern const REGISTER_PIPEINFO g_pipeInfoP;
|
2018-04-30 21:01:23 +01:00
|
|
|
extern const FLAG_PIPEINFO g_pipeInfoMac;
|
2020-06-01 17:47:21 -04:00
|
|
|
extern const FLAG_PIPEINFO g_pipeInfoSticky;
|
2018-04-30 21:01:23 +01:00
|
|
|
extern const FLAG_PIPEINFO g_pipeInfoClip;
|
2015-05-06 00:54:15 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|