mirror of https://github.com/PCSX2/pcsx2.git
EE: Add COP1 Instructions to profiler
This commit is contained in:
parent
38c548854e
commit
72e8d083b7
|
@ -115,6 +115,7 @@ static const __aligned16 u32 s_pos[4] = { 0x7fffffff, 0xffffffff, 0xffffffff, 0x
|
||||||
void recCFC1(void)
|
void recCFC1(void)
|
||||||
{
|
{
|
||||||
if ( !_Rt_ || ( (_Fs_ != 0) && (_Fs_ != 31) ) ) return;
|
if ( !_Rt_ || ( (_Fs_ != 0) && (_Fs_ != 31) ) ) return;
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CFC1);
|
||||||
|
|
||||||
_eeOnWriteReg(_Rt_, 1);
|
_eeOnWriteReg(_Rt_, 1);
|
||||||
|
|
||||||
|
@ -135,6 +136,7 @@ void recCFC1(void)
|
||||||
void recCTC1()
|
void recCTC1()
|
||||||
{
|
{
|
||||||
if ( _Fs_ != 31 ) return;
|
if ( _Fs_ != 31 ) return;
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CTC1);
|
||||||
|
|
||||||
if ( GPR_IS_CONST1(_Rt_) )
|
if ( GPR_IS_CONST1(_Rt_) )
|
||||||
{
|
{
|
||||||
|
@ -180,6 +182,7 @@ void recMFC1()
|
||||||
{
|
{
|
||||||
int regt, regs;
|
int regt, regs;
|
||||||
if ( ! _Rt_ ) return;
|
if ( ! _Rt_ ) return;
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MFC1);
|
||||||
|
|
||||||
_eeOnWriteReg(_Rt_, 1);
|
_eeOnWriteReg(_Rt_, 1);
|
||||||
|
|
||||||
|
@ -242,6 +245,7 @@ void recMFC1()
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recMTC1()
|
void recMTC1()
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MTC1);
|
||||||
if( GPR_IS_CONST1(_Rt_) )
|
if( GPR_IS_CONST1(_Rt_) )
|
||||||
{
|
{
|
||||||
_deleteFPtoXMMreg(_Fs_, 0);
|
_deleteFPtoXMMreg(_Fs_, 0);
|
||||||
|
@ -407,6 +411,7 @@ void ClampValues(int regd) {
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recABS_S_xmm(int info)
|
void recABS_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::ABS_F);
|
||||||
if( info & PROCESS_EE_S ) xMOVSS(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_S));
|
if( info & PROCESS_EE_S ) xMOVSS(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_S));
|
||||||
else xMOVSSZX(xRegisterSSE(EEREC_D), ptr[&fpuRegs.fpr[_Fs_]]);
|
else xMOVSSZX(xRegisterSSE(EEREC_D), ptr[&fpuRegs.fpr[_Fs_]]);
|
||||||
|
|
||||||
|
@ -639,6 +644,7 @@ int recCommutativeOp(int info, int regd, int op)
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recADD_S_xmm(int info)
|
void recADD_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::ADD_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
ClampValues(recCommutativeOp(info, EEREC_D, 0));
|
ClampValues(recCommutativeOp(info, EEREC_D, 0));
|
||||||
//REC_FPUOP(ADD_S);
|
//REC_FPUOP(ADD_S);
|
||||||
|
@ -648,6 +654,7 @@ FPURECOMPILE_CONSTCODE(ADD_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recADDA_S_xmm(int info)
|
void recADDA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::ADDA_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
ClampValues(recCommutativeOp(info, EEREC_ACC, 0));
|
ClampValues(recCommutativeOp(info, EEREC_ACC, 0));
|
||||||
}
|
}
|
||||||
|
@ -673,24 +680,28 @@ static void _setupBranchTest()
|
||||||
|
|
||||||
void recBC1F()
|
void recBC1F()
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::BC1F);
|
||||||
_setupBranchTest();
|
_setupBranchTest();
|
||||||
recDoBranchImm(JNZ32(0));
|
recDoBranchImm(JNZ32(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void recBC1T()
|
void recBC1T()
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::BC1T);
|
||||||
_setupBranchTest();
|
_setupBranchTest();
|
||||||
recDoBranchImm(JZ32(0));
|
recDoBranchImm(JZ32(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void recBC1FL()
|
void recBC1FL()
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::BC1FL);
|
||||||
_setupBranchTest();
|
_setupBranchTest();
|
||||||
recDoBranchImm_Likely(JNZ32(0));
|
recDoBranchImm_Likely(JNZ32(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
void recBC1TL()
|
void recBC1TL()
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::BC1TL);
|
||||||
_setupBranchTest();
|
_setupBranchTest();
|
||||||
recDoBranchImm_Likely(JZ32(0));
|
recDoBranchImm_Likely(JZ32(0));
|
||||||
}
|
}
|
||||||
|
@ -702,6 +713,7 @@ void recBC1TL()
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recC_EQ_xmm(int info)
|
void recC_EQ_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CEQ_F);
|
||||||
int tempReg;
|
int tempReg;
|
||||||
int t0reg;
|
int t0reg;
|
||||||
|
|
||||||
|
@ -765,12 +777,14 @@ FPURECOMPILE_CONSTCODE(C_EQ, XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recC_F()
|
void recC_F()
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CF_F);
|
||||||
xAND(ptr32[&fpuRegs.fprc[31]], ~FPUflagC );
|
xAND(ptr32[&fpuRegs.fprc[31]], ~FPUflagC );
|
||||||
}
|
}
|
||||||
//REC_FPUFUNC(C_F);
|
//REC_FPUFUNC(C_F);
|
||||||
|
|
||||||
void recC_LE_xmm(int info )
|
void recC_LE_xmm(int info )
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CLE_F);
|
||||||
int tempReg; //tempX86reg
|
int tempReg; //tempX86reg
|
||||||
int t0reg; //tempXMMreg
|
int t0reg; //tempXMMreg
|
||||||
|
|
||||||
|
@ -844,6 +858,7 @@ FPURECOMPILE_CONSTCODE(C_LE, XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recC_LT_xmm(int info)
|
void recC_LT_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CLT_F);
|
||||||
int tempReg;
|
int tempReg;
|
||||||
int t0reg;
|
int t0reg;
|
||||||
|
|
||||||
|
@ -924,6 +939,7 @@ FPURECOMPILE_CONSTCODE(C_LT, XMMINFO_READS|XMMINFO_READT);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recCVT_S_xmm(int info)
|
void recCVT_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CVTS_F);
|
||||||
if( !(info&PROCESS_EE_S) || (EEREC_D != EEREC_S && !(info&PROCESS_EE_MODEWRITES)) ) {
|
if( !(info&PROCESS_EE_S) || (EEREC_D != EEREC_S && !(info&PROCESS_EE_MODEWRITES)) ) {
|
||||||
xCVTSI2SS(xRegisterSSE(EEREC_D), ptr32[&fpuRegs.fpr[_Fs_]]);
|
xCVTSI2SS(xRegisterSSE(EEREC_D), ptr32[&fpuRegs.fpr[_Fs_]]);
|
||||||
}
|
}
|
||||||
|
@ -941,6 +957,9 @@ void recCVT_W()
|
||||||
DOUBLE::recCVT_W();
|
DOUBLE::recCVT_W();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// If we have the following EmitOP() on the top then it'll get calculated twice when CHECK_FPU_FULL is true
|
||||||
|
// as we also have an EmitOP() at recCVT_W() on iFPUd.cpp. hence we have it below the possible return.
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CVTW);
|
||||||
|
|
||||||
int regs = _checkXMMreg(XMMTYPE_FPREG, _Fs_, MODE_READ);
|
int regs = _checkXMMreg(XMMTYPE_FPREG, _Fs_, MODE_READ);
|
||||||
|
|
||||||
|
@ -949,7 +968,7 @@ void recCVT_W()
|
||||||
if (CHECK_FPU_EXTRA_OVERFLOW) fpuFloat2(regs);
|
if (CHECK_FPU_EXTRA_OVERFLOW) fpuFloat2(regs);
|
||||||
xCVTTSS2SI(eax, xRegisterSSE(regs));
|
xCVTTSS2SI(eax, xRegisterSSE(regs));
|
||||||
xMOVMSKPS(edx, xRegisterSSE(regs)); //extract the signs
|
xMOVMSKPS(edx, xRegisterSSE(regs)); //extract the signs
|
||||||
xAND(edx, 1); //keep only LSB
|
xAND(edx, 1); //keep only LSB
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1034,6 +1053,7 @@ static __aligned16 SSE_MXCSR roundmode_nearest, roundmode_neg;
|
||||||
|
|
||||||
void recDIV_S_xmm(int info)
|
void recDIV_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::DIV_F);
|
||||||
bool roundmodeFlag = false;
|
bool roundmodeFlag = false;
|
||||||
int t0reg = _allocTempXMMreg(XMMT_FPS, -1);
|
int t0reg = _allocTempXMMreg(XMMT_FPS, -1);
|
||||||
//Console.WriteLn("DIV");
|
//Console.WriteLn("DIV");
|
||||||
|
@ -1286,6 +1306,7 @@ void recMADDtemp(int info, int regd)
|
||||||
|
|
||||||
void recMADD_S_xmm(int info)
|
void recMADD_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MADD_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
recMADDtemp(info, EEREC_D);
|
recMADDtemp(info, EEREC_D);
|
||||||
}
|
}
|
||||||
|
@ -1294,6 +1315,7 @@ FPURECOMPILE_CONSTCODE(MADD_S, XMMINFO_WRITED|XMMINFO_READACC|XMMINFO_READS|XMMI
|
||||||
|
|
||||||
void recMADDA_S_xmm(int info)
|
void recMADDA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MADDA_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
recMADDtemp(info, EEREC_ACC);
|
recMADDtemp(info, EEREC_ACC);
|
||||||
}
|
}
|
||||||
|
@ -1307,6 +1329,7 @@ FPURECOMPILE_CONSTCODE(MADDA_S, XMMINFO_WRITEACC|XMMINFO_READACC|XMMINFO_READS|X
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recMAX_S_xmm(int info)
|
void recMAX_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MAX_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
recCommutativeOp(info, EEREC_D, 2);
|
recCommutativeOp(info, EEREC_D, 2);
|
||||||
}
|
}
|
||||||
|
@ -1315,6 +1338,7 @@ FPURECOMPILE_CONSTCODE(MAX_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recMIN_S_xmm(int info)
|
void recMIN_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MIN_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
recCommutativeOp(info, EEREC_D, 3);
|
recCommutativeOp(info, EEREC_D, 3);
|
||||||
}
|
}
|
||||||
|
@ -1328,6 +1352,7 @@ FPURECOMPILE_CONSTCODE(MIN_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recMOV_S_xmm(int info)
|
void recMOV_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MOV_F);
|
||||||
if( info & PROCESS_EE_S ) xMOVSS(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_S));
|
if( info & PROCESS_EE_S ) xMOVSS(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_S));
|
||||||
else xMOVSSZX(xRegisterSSE(EEREC_D), ptr[&fpuRegs.fpr[_Fs_]]);
|
else xMOVSSZX(xRegisterSSE(EEREC_D), ptr[&fpuRegs.fpr[_Fs_]]);
|
||||||
}
|
}
|
||||||
|
@ -1473,6 +1498,7 @@ int t1reg;
|
||||||
|
|
||||||
void recMSUB_S_xmm(int info)
|
void recMSUB_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MSUB_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
recMSUBtemp(info, EEREC_D);
|
recMSUBtemp(info, EEREC_D);
|
||||||
}
|
}
|
||||||
|
@ -1481,6 +1507,7 @@ FPURECOMPILE_CONSTCODE(MSUB_S, XMMINFO_WRITED|XMMINFO_READACC|XMMINFO_READS|XMMI
|
||||||
|
|
||||||
void recMSUBA_S_xmm(int info)
|
void recMSUBA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MSUBA_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
recMSUBtemp(info, EEREC_ACC);
|
recMSUBtemp(info, EEREC_ACC);
|
||||||
}
|
}
|
||||||
|
@ -1494,6 +1521,7 @@ FPURECOMPILE_CONSTCODE(MSUBA_S, XMMINFO_WRITEACC|XMMINFO_READACC|XMMINFO_READS|X
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recMUL_S_xmm(int info)
|
void recMUL_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MUL_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
ClampValues(recCommutativeOp(info, EEREC_D, 1));
|
ClampValues(recCommutativeOp(info, EEREC_D, 1));
|
||||||
}
|
}
|
||||||
|
@ -1502,6 +1530,7 @@ FPURECOMPILE_CONSTCODE(MUL_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recMULA_S_xmm(int info)
|
void recMULA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MULA_F);
|
||||||
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
//xAND(ptr32[&fpuRegs.fprc[31]], ~(FPUflagO|FPUflagU)); // Clear O and U flags
|
||||||
ClampValues(recCommutativeOp(info, EEREC_ACC, 1));
|
ClampValues(recCommutativeOp(info, EEREC_ACC, 1));
|
||||||
}
|
}
|
||||||
|
@ -1514,6 +1543,7 @@ FPURECOMPILE_CONSTCODE(MULA_S, XMMINFO_WRITEACC|XMMINFO_READS|XMMINFO_READT);
|
||||||
// NEG XMM
|
// NEG XMM
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recNEG_S_xmm(int info) {
|
void recNEG_S_xmm(int info) {
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::NEG_F);
|
||||||
if( info & PROCESS_EE_S ) xMOVSS(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_S));
|
if( info & PROCESS_EE_S ) xMOVSS(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_S));
|
||||||
else xMOVSSZX(xRegisterSSE(EEREC_D), ptr[&fpuRegs.fpr[_Fs_]]);
|
else xMOVSSZX(xRegisterSSE(EEREC_D), ptr[&fpuRegs.fpr[_Fs_]]);
|
||||||
|
|
||||||
|
@ -1586,6 +1616,7 @@ void recSUBop(int info, int regd)
|
||||||
|
|
||||||
void recSUB_S_xmm(int info)
|
void recSUB_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::SUB_F);
|
||||||
recSUBop(info, EEREC_D);
|
recSUBop(info, EEREC_D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1594,6 +1625,7 @@ FPURECOMPILE_CONSTCODE(SUB_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recSUBA_S_xmm(int info)
|
void recSUBA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::SUBA_F);
|
||||||
recSUBop(info, EEREC_ACC);
|
recSUBop(info, EEREC_ACC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1606,6 +1638,7 @@ FPURECOMPILE_CONSTCODE(SUBA_S, XMMINFO_WRITEACC|XMMINFO_READS|XMMINFO_READT);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recSQRT_S_xmm(int info)
|
void recSQRT_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::SQRT_F);
|
||||||
u8* pjmp;
|
u8* pjmp;
|
||||||
bool roundmodeFlag = false;
|
bool roundmodeFlag = false;
|
||||||
//Console.WriteLn("FPU: SQRT");
|
//Console.WriteLn("FPU: SQRT");
|
||||||
|
@ -1725,6 +1758,7 @@ void recRSQRThelper2(int regd, int t0reg) // Preforms the RSQRT function when re
|
||||||
|
|
||||||
void recRSQRT_S_xmm(int info)
|
void recRSQRT_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::RSQRT_F);
|
||||||
// iFPUd (Full mode) sets roundmode to nearest for rSQRT.
|
// iFPUd (Full mode) sets roundmode to nearest for rSQRT.
|
||||||
// Should this do the same, or should Full mode leave roundmode alone? --air
|
// Should this do the same, or should Full mode leave roundmode alone? --air
|
||||||
|
|
||||||
|
|
|
@ -307,6 +307,7 @@ void SetMaxValue(int regd)
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recABS_S_xmm(int info)
|
void recABS_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::ABS_F);
|
||||||
GET_S(EEREC_D);
|
GET_S(EEREC_D);
|
||||||
|
|
||||||
CLEAR_OU_FLAGS;
|
CLEAR_OU_FLAGS;
|
||||||
|
@ -450,6 +451,7 @@ void recFPUOp(int info, int regd, int op, bool acc)
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recADD_S_xmm(int info)
|
void recADD_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::ADD_F);
|
||||||
recFPUOp(info, EEREC_D, 0, false);
|
recFPUOp(info, EEREC_D, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -457,6 +459,7 @@ FPURECOMPILE_CONSTCODE(ADD_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recADDA_S_xmm(int info)
|
void recADDA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::ADDA_F);
|
||||||
recFPUOp(info, EEREC_ACC, 0, true);
|
recFPUOp(info, EEREC_ACC, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,6 +482,7 @@ void recCMP(int info)
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recC_EQ_xmm(int info)
|
void recC_EQ_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CEQ_F);
|
||||||
recCMP(info);
|
recCMP(info);
|
||||||
|
|
||||||
j8Ptr[0] = JZ8(0);
|
j8Ptr[0] = JZ8(0);
|
||||||
|
@ -493,6 +497,7 @@ FPURECOMPILE_CONSTCODE(C_EQ, XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recC_LE_xmm(int info )
|
void recC_LE_xmm(int info )
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CLE_F);
|
||||||
recCMP(info);
|
recCMP(info);
|
||||||
|
|
||||||
j8Ptr[0] = JBE8(0);
|
j8Ptr[0] = JBE8(0);
|
||||||
|
@ -507,6 +512,7 @@ FPURECOMPILE_CONSTCODE(C_LE, XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recC_LT_xmm(int info)
|
void recC_LT_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CLT_F);
|
||||||
recCMP(info);
|
recCMP(info);
|
||||||
|
|
||||||
j8Ptr[0] = JB8(0);
|
j8Ptr[0] = JB8(0);
|
||||||
|
@ -526,6 +532,7 @@ FPURECOMPILE_CONSTCODE(C_LT, XMMINFO_READS|XMMINFO_READT);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recCVT_S_xmm(int info)
|
void recCVT_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CVTS_F);
|
||||||
if( !(info&PROCESS_EE_S) || (EEREC_D != EEREC_S && !(info&PROCESS_EE_MODEWRITES)) ) {
|
if( !(info&PROCESS_EE_S) || (EEREC_D != EEREC_S && !(info&PROCESS_EE_MODEWRITES)) ) {
|
||||||
xCVTSI2SS(xRegisterSSE(EEREC_D), ptr32[&fpuRegs.fpr[_Fs_]]);
|
xCVTSI2SS(xRegisterSSE(EEREC_D), ptr32[&fpuRegs.fpr[_Fs_]]);
|
||||||
}
|
}
|
||||||
|
@ -538,6 +545,7 @@ FPURECOMPILE_CONSTCODE(CVT_S, XMMINFO_WRITED|XMMINFO_READS);
|
||||||
|
|
||||||
void recCVT_W() //called from iFPU.cpp's recCVT_W
|
void recCVT_W() //called from iFPU.cpp's recCVT_W
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::CVTW);
|
||||||
int regs = _checkXMMreg(XMMTYPE_FPREG, _Fs_, MODE_READ);
|
int regs = _checkXMMreg(XMMTYPE_FPREG, _Fs_, MODE_READ);
|
||||||
|
|
||||||
if( regs >= 0 )
|
if( regs >= 0 )
|
||||||
|
@ -631,6 +639,7 @@ static __aligned16 SSE_MXCSR roundmode_nearest, roundmode_neg;
|
||||||
|
|
||||||
void recDIV_S_xmm(int info)
|
void recDIV_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::DIV_F);
|
||||||
bool roundmodeFlag = false;
|
bool roundmodeFlag = false;
|
||||||
//Console.WriteLn("DIV");
|
//Console.WriteLn("DIV");
|
||||||
|
|
||||||
|
@ -745,6 +754,7 @@ void recMaddsub(int info, int regd, int op, bool acc)
|
||||||
|
|
||||||
void recMADD_S_xmm(int info)
|
void recMADD_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MADD_F);
|
||||||
recMaddsub(info, EEREC_D, 0, false);
|
recMaddsub(info, EEREC_D, 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -752,6 +762,7 @@ FPURECOMPILE_CONSTCODE(MADD_S, XMMINFO_WRITED|XMMINFO_READACC|XMMINFO_READS|XMMI
|
||||||
|
|
||||||
void recMADDA_S_xmm(int info)
|
void recMADDA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MADDA_F);
|
||||||
recMaddsub(info, EEREC_ACC, 0, true);
|
recMaddsub(info, EEREC_ACC, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -794,6 +805,7 @@ void recMINMAX(int info, bool ismin)
|
||||||
|
|
||||||
void recMAX_S_xmm(int info)
|
void recMAX_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MAX_F);
|
||||||
recMINMAX(info, false);
|
recMINMAX(info, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -801,6 +813,7 @@ FPURECOMPILE_CONSTCODE(MAX_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recMIN_S_xmm(int info)
|
void recMIN_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MIN_F);
|
||||||
recMINMAX(info, true);
|
recMINMAX(info, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -813,6 +826,7 @@ FPURECOMPILE_CONSTCODE(MIN_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recMOV_S_xmm(int info)
|
void recMOV_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MOV_F);
|
||||||
GET_S(EEREC_D);
|
GET_S(EEREC_D);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -826,6 +840,7 @@ FPURECOMPILE_CONSTCODE(MOV_S, XMMINFO_WRITED|XMMINFO_READS);
|
||||||
|
|
||||||
void recMSUB_S_xmm(int info)
|
void recMSUB_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MSUB_F);
|
||||||
recMaddsub(info, EEREC_D, 1, false);
|
recMaddsub(info, EEREC_D, 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,6 +848,7 @@ FPURECOMPILE_CONSTCODE(MSUB_S, XMMINFO_WRITED|XMMINFO_READACC|XMMINFO_READS|XMMI
|
||||||
|
|
||||||
void recMSUBA_S_xmm(int info)
|
void recMSUBA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MSUBA_F);
|
||||||
recMaddsub(info, EEREC_ACC, 1, true);
|
recMaddsub(info, EEREC_ACC, 1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -844,6 +860,7 @@ FPURECOMPILE_CONSTCODE(MSUBA_S, XMMINFO_WRITEACC|XMMINFO_READACC|XMMINFO_READS|X
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recMUL_S_xmm(int info)
|
void recMUL_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MUL_F);
|
||||||
int sreg, treg;
|
int sreg, treg;
|
||||||
ALLOC_S(sreg); ALLOC_T(treg);
|
ALLOC_S(sreg); ALLOC_T(treg);
|
||||||
|
|
||||||
|
@ -855,6 +872,7 @@ FPURECOMPILE_CONSTCODE(MUL_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recMULA_S_xmm(int info)
|
void recMULA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::MULA_F);
|
||||||
int sreg, treg;
|
int sreg, treg;
|
||||||
ALLOC_S(sreg); ALLOC_T(treg);
|
ALLOC_S(sreg); ALLOC_T(treg);
|
||||||
|
|
||||||
|
@ -869,8 +887,9 @@ FPURECOMPILE_CONSTCODE(MULA_S, XMMINFO_WRITEACC|XMMINFO_READS|XMMINFO_READT);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
// NEG XMM
|
// NEG XMM
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recNEG_S_xmm(int info) {
|
void recNEG_S_xmm(int info)
|
||||||
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::NEG_F);
|
||||||
GET_S(EEREC_D);
|
GET_S(EEREC_D);
|
||||||
|
|
||||||
CLEAR_OU_FLAGS;
|
CLEAR_OU_FLAGS;
|
||||||
|
@ -888,6 +907,7 @@ FPURECOMPILE_CONSTCODE(NEG_S, XMMINFO_WRITED|XMMINFO_READS);
|
||||||
|
|
||||||
void recSUB_S_xmm(int info)
|
void recSUB_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::SUB_F);
|
||||||
recFPUOp(info, EEREC_D, 1, false);
|
recFPUOp(info, EEREC_D, 1, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,6 +916,7 @@ FPURECOMPILE_CONSTCODE(SUB_S, XMMINFO_WRITED|XMMINFO_READS|XMMINFO_READT);
|
||||||
|
|
||||||
void recSUBA_S_xmm(int info)
|
void recSUBA_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::SUBA_F);
|
||||||
recFPUOp(info, EEREC_ACC, 1, true);
|
recFPUOp(info, EEREC_ACC, 1, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -908,6 +929,7 @@ FPURECOMPILE_CONSTCODE(SUBA_S, XMMINFO_WRITEACC|XMMINFO_READS|XMMINFO_READT);
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
void recSQRT_S_xmm(int info)
|
void recSQRT_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::SQRT_F);
|
||||||
u8 *pjmp;
|
u8 *pjmp;
|
||||||
int roundmodeFlag = 0;
|
int roundmodeFlag = 0;
|
||||||
int tempReg = _allocX86reg(xEmptyReg, X86TYPE_TEMP, 0, 0);
|
int tempReg = _allocX86reg(xEmptyReg, X86TYPE_TEMP, 0, 0);
|
||||||
|
@ -1031,6 +1053,7 @@ void recRSQRThelper2(int regd, int regt) // Preforms the RSQRT function when reg
|
||||||
|
|
||||||
void recRSQRT_S_xmm(int info)
|
void recRSQRT_S_xmm(int info)
|
||||||
{
|
{
|
||||||
|
EE::Profiler.EmitOp(eeOpcode::RSQRT_F);
|
||||||
int sreg, treg;
|
int sreg, treg;
|
||||||
|
|
||||||
// iFPU (regular FPU) doesn't touch roundmode for rSQRT.
|
// iFPU (regular FPU) doesn't touch roundmode for rSQRT.
|
||||||
|
|
Loading…
Reference in New Issue