mirror of https://github.com/PCSX2/pcsx2.git
- Added microVU_Flags.inl to the project file (somewhere along the lines it went missing)
- Fixed sVU COP2 to compile correctly (when disabling mVU Macro) - Fixed minor mVU debug/logging bugs - Made mVU0 exit execution every ~768 cycles which fixes Rachet and Clank hanging (mVU0 already did this before when the m-bit was set, but now it does it all the time even when the m-bit isn't set; other games might be effected by this change...) git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2158 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
3c54e2ba75
commit
61b2ab7583
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="windows-1253"?>
|
<?xml version="1.0" encoding="windows-1253"?>
|
||||||
<VisualStudioProject
|
<VisualStudioProject
|
||||||
ProjectType="Visual C++"
|
ProjectType="Visual C++"
|
||||||
Version="9,00"
|
Version="9.00"
|
||||||
Name="pcsx2"
|
Name="pcsx2"
|
||||||
ProjectGUID="{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}"
|
ProjectGUID="{1CEFD830-2B76-4596-A4EE-BCD7280A60BD}"
|
||||||
RootNamespace="pcsx2"
|
RootNamespace="pcsx2"
|
||||||
|
@ -663,6 +663,10 @@
|
||||||
RelativePath="..\..\x86\microVU_Execute.inl"
|
RelativePath="..\..\x86\microVU_Execute.inl"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\x86\microVU_Flags.inl"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\x86\microVU_IR.h"
|
RelativePath="..\..\x86\microVU_IR.h"
|
||||||
>
|
>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "R5900OpcodeTables.h"
|
#include "R5900OpcodeTables.h"
|
||||||
#include "VUmicro.h"
|
#include "VUmicro.h"
|
||||||
#include "sVU_Micro.h"
|
#include "sVU_Micro.h"
|
||||||
|
using namespace x86Emitter;
|
||||||
extern void _vu0WaitMicro();
|
extern void _vu0WaitMicro();
|
||||||
|
|
||||||
#ifndef CHECK_MACROVU0
|
#ifndef CHECK_MACROVU0
|
||||||
|
|
|
@ -20,9 +20,7 @@
|
||||||
#include "VU.h"
|
#include "VU.h"
|
||||||
#include "GS.h"
|
#include "GS.h"
|
||||||
#include "x86emitter/x86emitter.h"
|
#include "x86emitter/x86emitter.h"
|
||||||
|
|
||||||
using namespace x86Emitter;
|
using namespace x86Emitter;
|
||||||
|
|
||||||
#include "microVU.h"
|
#include "microVU.h"
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
@ -32,35 +30,37 @@ using namespace x86Emitter;
|
||||||
__aligned16 microVU microVU0;
|
__aligned16 microVU microVU0;
|
||||||
__aligned16 microVU microVU1;
|
__aligned16 microVU microVU1;
|
||||||
|
|
||||||
#define __four(val) { val, val, val, val }
|
const __aligned(32) mVU_Globals mVUglob = {
|
||||||
|
__four(0x7fffffff), // absclip
|
||||||
const __aligned(32) mVU_Globals mVUglob =
|
__four(0x80000000), // signbit
|
||||||
{
|
__four(0xff7fffff), // minvals
|
||||||
// absclip / signbit
|
__four(0x7f7fffff), // maxvals
|
||||||
// minvals / maxlavs
|
__four(0x3f800000), // ONE!
|
||||||
__four( 0x7fffffff ), __four( 0x80000000 ),
|
__four(0x3f490fdb), // PI4!
|
||||||
__four( 0xff7fffff ), __four( 0x7f7fffff ),
|
__four(0x3f7ffff5), // T1
|
||||||
|
__four(0xbeaaa61c), // T5
|
||||||
__four( 0x3f800000 ), // ONE!
|
__four(0x3e4c40a6), // T2
|
||||||
__four( 0x3f490fdb ), // PI4!
|
__four(0xbe0e6c63), // T3
|
||||||
|
__four(0x3dc577df), // T4
|
||||||
// T1 T2 T3 T4
|
__four(0xbd6501c4), // T6
|
||||||
// T5 T6 T7 T8
|
__four(0x3cb31652), // T7
|
||||||
__four( 0x3f7ffff5 ), __four( 0xbeaaa61c ), __four( 0x3e4c40a6 ), __four( 0xbe0e6c63 ),
|
__four(0xbb84d7e7), // T8
|
||||||
__four( 0x3dc577df ), __four( 0xbd6501c4 ), __four( 0x3cb31652 ), __four( 0xbb84d7e7 ),
|
__four(0xbe2aaaa4), // S2
|
||||||
|
__four(0x3c08873e), // S3
|
||||||
// S2 S3 S4 S5
|
__four(0xb94fb21f), // S4
|
||||||
__four( 0xbe2aaaa4 ), __four( 0x3c08873e ), __four( 0xb94fb21f ), __four( 0x362e9c14 ),
|
__four(0x362e9c14), // S5
|
||||||
|
__four(0x3e7fffa8), // E1
|
||||||
// E1 E2 E3
|
__four(0x3d0007f4), // E2
|
||||||
// E4 E5 E6
|
__four(0x3b29d3ff), // E3
|
||||||
__four( 0x3e7fffa8 ), __four( 0x3d0007f4 ), __four( 0x3b29d3ff ),
|
__four(0x3933e553), // E4
|
||||||
__four( 0x3933e553 ), __four( 0x36b63510 ), __four( 0x353961ac ),
|
__four(0x36b63510), // E5
|
||||||
|
__four(0x353961ac), // E6
|
||||||
// FTOI_4 / 12 / 15
|
__four(16.0), // FTOI_4
|
||||||
// ITOF_4 / 12 / 15
|
__four(4096.0), // FTOI_12
|
||||||
__four( 16.0 ), __four( 4096.0 ), __four( 32768.0 ),
|
__four(32768.0), // FTOI_15
|
||||||
__four( 0.0625f ), __four( 0.000244140625 ), __four( 0.000030517578125 )
|
__four(0.0625f), // ITOF_4
|
||||||
|
__four(0.000244140625), // ITOF_12
|
||||||
|
__four(0.000030517578125) // ITOF_15
|
||||||
};
|
};
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
|
@ -288,12 +288,12 @@ microVUt(void) mVUtestCycles(mV) {
|
||||||
SUB32ItoM((uptr)&mVU->cycles, mVUcycles);
|
SUB32ItoM((uptr)&mVU->cycles, mVUcycles);
|
||||||
if (IsDevBuild || !isVU1) {
|
if (IsDevBuild || !isVU1) {
|
||||||
u32* jmp32 = JG32(0);
|
u32* jmp32 = JG32(0);
|
||||||
if (!isVU1) { TEST32ItoM((uptr)&mVU->regs->flags, VUFLAG_MFLAGSET); vu0jmp = JZ32(0); }
|
//if (!isVU1) { TEST32ItoM((uptr)&mVU->regs->flags, VUFLAG_MFLAGSET); vu0jmp = JZ32(0); }
|
||||||
MOV32ItoR(gprT2, (uptr)mVU);
|
MOV32ItoR(gprT2, (uptr)mVU);
|
||||||
if (isVU1) CALLFunc((uptr)mVUwarning1);
|
if (isVU1) CALLFunc((uptr)mVUwarning1);
|
||||||
//else CALLFunc((uptr)mVUwarning0); // VU0 is allowed early exit for COP2 Interlock Simulation
|
//else CALLFunc((uptr)mVUwarning0); // VU0 is allowed early exit for COP2 Interlock Simulation
|
||||||
mVUendProgram(mVU, NULL, 0);
|
mVUendProgram(mVU, NULL, 0);
|
||||||
if (!isVU1) x86SetJ32(vu0jmp);
|
//if (!isVU1) x86SetJ32(vu0jmp);
|
||||||
x86SetJ32(jmp32);
|
x86SetJ32(jmp32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -342,7 +342,6 @@ microVUr(void*) mVUcompile(microVU* mVU, u32 startPC, uptr pState) {
|
||||||
mVUsetupRange(mVU, startPC, 1); // Setup Program Bounds/Range
|
mVUsetupRange(mVU, startPC, 1); // Setup Program Bounds/Range
|
||||||
mVU->regAlloc->reset(); // Reset regAlloc
|
mVU->regAlloc->reset(); // Reset regAlloc
|
||||||
mVUinitFirstPass(mVU, pState, thisPtr);
|
mVUinitFirstPass(mVU, pState, thisPtr);
|
||||||
|
|
||||||
for (int branch = 0; mVUcount < endCount; mVUcount++) {
|
for (int branch = 0; mVUcount < endCount; mVUcount++) {
|
||||||
incPC(1);
|
incPC(1);
|
||||||
startLoop(mVU);
|
startLoop(mVU);
|
||||||
|
|
|
@ -103,7 +103,7 @@ void mVUdispatcherB(mV) {
|
||||||
microVUx(void*) __fastcall mVUexecute(u32 startPC, u32 cycles) {
|
microVUx(void*) __fastcall mVUexecute(u32 startPC, u32 cycles) {
|
||||||
|
|
||||||
microVU* mVU = mVUx;
|
microVU* mVU = mVUx;
|
||||||
//mVUprint("microVU%x: startPC = 0x%x, cycles = 0x%x", vuIndex, startPC, cycles);
|
mVUprint("microVU%x: startPC = 0x%x, cycles = 0x%x", vuIndex, startPC, cycles);
|
||||||
|
|
||||||
mVUsearchProg<vuIndex>(); // Find and set correct program
|
mVUsearchProg<vuIndex>(); // Find and set correct program
|
||||||
mVU->cycles = cycles;
|
mVU->cycles = cycles;
|
||||||
|
|
|
@ -48,7 +48,7 @@ microVUx(void) __mVUdumpProgram(int progIndex) {
|
||||||
int bPC = iPC;
|
int bPC = iPC;
|
||||||
mVUbranch = 0;
|
mVUbranch = 0;
|
||||||
|
|
||||||
const wxString logname( wxsFormat( L"microVU%d prog - %02d.html", L"logs", vuIndex, progIndex) );
|
const wxString logname( wxsFormat( L"microVU%d prog - %02d.html", vuIndex, progIndex) );
|
||||||
mVU->logFile = new AsciiFile( Path::Combine( g_Conf->Folders.Logs, logname), L"w" );
|
mVU->logFile = new AsciiFile( Path::Combine( g_Conf->Folders.Logs, logname), L"w" );
|
||||||
|
|
||||||
mVUlog("<html>\n");
|
mVUlog("<html>\n");
|
||||||
|
|
|
@ -19,28 +19,15 @@
|
||||||
// Global Variables
|
// Global Variables
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
struct mVU_Globals
|
struct mVU_Globals {
|
||||||
{
|
u32 absclip[4], signbit[4], minvals[4], maxvals[4];
|
||||||
u32 absclip[4], signbit[4],
|
|
||||||
minvals[4], maxvals[4];
|
|
||||||
u32 one[4];
|
u32 one[4];
|
||||||
u32 Pi4[4];
|
u32 Pi4[4];
|
||||||
|
u32 T1[4], T2[4], T3[4], T4[4], T5[4], T6[4], T7[4], T8[4];
|
||||||
u32 T1[4], T2[4], T3[4], T4[4],
|
|
||||||
T5[4], T6[4], T7[4], T8[4];
|
|
||||||
|
|
||||||
u32 S2[4], S3[4], S4[4], S5[4];
|
u32 S2[4], S3[4], S4[4], S5[4];
|
||||||
|
u32 E1[4], E2[4], E3[4], E4[4], E5[4], E6[4];
|
||||||
u32 E1[4], E2[4], E3[4],
|
float FTOI_4[4], FTOI_12[4], FTOI_15[4];
|
||||||
E4[4], E5[4], E6[4];
|
float ITOF_4[4], ITOF_12[4], ITOF_15[4];
|
||||||
|
|
||||||
float FTOI_4[4],
|
|
||||||
FTOI_12[4],
|
|
||||||
FTOI_15[4];
|
|
||||||
|
|
||||||
float ITOF_4[4],
|
|
||||||
ITOF_12[4],
|
|
||||||
ITOF_15[4];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const __aligned(32) mVU_Globals mVUglob;
|
extern const __aligned(32) mVU_Globals mVUglob;
|
||||||
|
@ -169,6 +156,7 @@ typedef u32 (__fastcall *mVUCall)(void*, void*);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Misc Macros...
|
// Misc Macros...
|
||||||
|
#define __four(val) { val, val, val, val }
|
||||||
#define mVUprogI mVU->prog.prog[progIndex]
|
#define mVUprogI mVU->prog.prog[progIndex]
|
||||||
#define mVUcurProg mVU->prog.prog[mVU->prog.cur]
|
#define mVUcurProg mVU->prog.prog[mVU->prog.cur]
|
||||||
#define mVUblocks mVU->prog.prog[mVU->prog.cur].block
|
#define mVUblocks mVU->prog.prog[mVU->prog.cur].block
|
||||||
|
@ -241,7 +229,7 @@ typedef u32 (__fastcall *mVUCall)(void*, void*);
|
||||||
|
|
||||||
// Debug Stuff...
|
// Debug Stuff...
|
||||||
#ifdef mVUdebug
|
#ifdef mVUdebug
|
||||||
#define mVUprint Console.Status
|
#define mVUprint Console.WriteLn
|
||||||
#else
|
#else
|
||||||
#define mVUprint 0&&
|
#define mVUprint 0&&
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue