Same general cleanups (mostly to the VU interpreters), but on trunk this time. :) Also Fixes Issue 417 (I hope)

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1900 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
Jake.Stine 2009-09-21 14:19:49 +00:00
parent fdbabaa11c
commit f460985004
12 changed files with 147 additions and 159 deletions

View File

@ -618,7 +618,7 @@ typedef s32 (CALLBACK* _CDVDctrlTrayClose)();
typedef s32 (CALLBACK* _CDVDreadSector)(u8* buffer, u32 lsn, int mode);
typedef s32 (CALLBACK* _CDVDgetDualInfo)(s32* dualType, u32* _layer1start);
typedef void (CALLBACK* _CDVDnewDiskCB)(void (CALLBACK* callback)());
typedef void (CALLBACK* _CDVDnewDiskCB)(void (*callback)());
// DEV9

View File

@ -514,7 +514,7 @@ void cdvdDetectDisk()
}
}
void CALLBACK cdvdNewDiskCB()
void cdvdNewDiskCB()
{
DoCDVDresetDiskTypeCache();

View File

@ -138,6 +138,6 @@ extern void cdvdReadInterrupt();
// We really should not have a function with the exact same name as a callback except for case!
extern void cdvdDetectDisk();
extern void CALLBACK cdvdNewDiskCB();
extern void cdvdNewDiskCB();
extern u8 cdvdRead(u8 key);
extern void cdvdWrite(u8 key, u8 rt);

View File

@ -396,7 +396,7 @@ s32 CALLBACK ISOdummyS32()
return 0;
}
void CALLBACK ISOnewDiskCB(void(CALLBACK*)())
void CALLBACK ISOnewDiskCB(__unused void(*callback)())
{
}

View File

@ -180,16 +180,5 @@ PCSX2_ALIGNED16_EXTERN(VURegs VU0);
#define VU1 (*g_pVU1)
extern u32* GET_VU_MEM(VURegs* VU, u32 addr);
#ifdef _WIN32
extern __forceinline u32* GET_VU_MEM(VURegs* VU, u32 addr)
#else
static __forceinline u32* GET_VU_MEM(VURegs* VU, u32 addr)
#endif
{
if( VU == g_pVU1 ) return (u32*)(VU1.Mem+(addr&0x3fff));
if( addr >= 0x4000 ) return (u32*)(VU0.Mem+(addr&0x43f0)); // get VF and VI regs (they're mapped to 0x4xx0 in VU0 mem!)
return (u32*)(VU0.Mem+(addr&0x0fff)); // for addr 0x0000 to 0x4000 just wrap around
}

View File

@ -13,7 +13,6 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
#include "PrecompiledHeader.h"
#include <cmath>
@ -26,7 +25,7 @@
/*****************************************/
__inline void vuUpdateDI(VURegs * VU) {
void vuUpdateDI(VURegs * VU) {
// u32 Flag_S = 0;
// u32 Flag_I = 0;
// u32 Flag_D = 0;
@ -41,7 +40,7 @@ __inline void vuUpdateDI(VURegs * VU) {
// VU->statusflag|= (Flag_D | (VU0.VI[REG_STATUS_FLAG].US[0] >> 5)) << 11;
}
__forceinline u32 VU_MAC_UPDATE( int shift, VURegs * VU, float f)
static __releaseinline u32 VU_MAC_UPDATE( int shift, VURegs * VU, float f )
{
u32 v = *(u32*)&f;
int exp = (v >> 23) & 0xff;
@ -112,7 +111,7 @@ __forceinline void VU_MACw_CLEAR(VURegs * VU)
VU->macflag&= ~(0x1111<<0);
}
void VU_STAT_UPDATE(VURegs * VU) {
__releaseinline void VU_STAT_UPDATE(VURegs * VU) {
int newflag = 0 ;
if (VU->macflag & 0x000F) newflag = 0x1;
if (VU->macflag & 0x00F0) newflag |= 0x2;

View File

@ -16,15 +16,12 @@
#pragma once
#include "VU.h"
void vuUpdateDI(VURegs * VU);
__forceinline u32 VU_MAC_UPDATE( int shift, VURegs * VU, float f);
__forceinline u32 VU_MACx_UPDATE(VURegs * VU, float x);
__forceinline u32 VU_MACy_UPDATE(VURegs * VU, float y);
__forceinline u32 VU_MACz_UPDATE(VURegs * VU, float z);
__forceinline u32 VU_MACw_UPDATE(VURegs * VU, float w);
__forceinline void VU_MACx_CLEAR(VURegs * VU);
__forceinline void VU_MACy_CLEAR(VURegs * VU);
__forceinline void VU_MACz_CLEAR(VURegs * VU);
__forceinline void VU_MACw_CLEAR(VURegs * VU);
void VU_STAT_UPDATE(VURegs * VU);
extern u32 VU_MACx_UPDATE(VURegs * VU, float x);
extern u32 VU_MACy_UPDATE(VURegs * VU, float y);
extern u32 VU_MACz_UPDATE(VURegs * VU, float z);
extern u32 VU_MACw_UPDATE(VURegs * VU, float w);
extern void VU_MACx_CLEAR(VURegs * VU);
extern void VU_MACy_CLEAR(VURegs * VU);
extern void VU_MACz_CLEAR(VURegs * VU);
extern void VU_MACw_CLEAR(VURegs * VU);
extern void VU_STAT_UPDATE(VURegs * VU);

View File

@ -13,7 +13,6 @@
* If not, see <http://www.gnu.org/licenses/>.
*/
#include "PrecompiledHeader.h"
#include <cmath>
@ -46,9 +45,9 @@
#define _UImm11_ (s32)(VU->code & 0x7ff)
VECTOR RDzero;
static PCSX2_ALIGNED16( VECTOR RDzero );
void _vuFMACflush(VURegs * VU) {
static __releaseinline void __fastcall _vuFMACflush(VURegs * VU) {
int i;
for (i=0; i<8; i++) {
@ -65,7 +64,7 @@ void _vuFMACflush(VURegs * VU) {
}
}
void _vuFDIVflush(VURegs * VU) {
static __releaseinline void __fastcall _vuFDIVflush(VURegs * VU) {
if (VU->fdiv.enable == 0) return;
if ((VU->cycle - VU->fdiv.sCycle) >= VU->fdiv.Cycle) {
@ -77,7 +76,7 @@ void _vuFDIVflush(VURegs * VU) {
}
}
void _vuEFUflush(VURegs * VU) {
static __releaseinline void __fastcall _vuEFUflush(VURegs * VU) {
if (VU->efu.enable == 0) return;
if ((VU->cycle - VU->efu.sCycle) >= VU->efu.Cycle) {
@ -143,13 +142,13 @@ void _vuFlushAll(VURegs* VU)
} while(nRepeat);
}
void _vuTestPipes(VURegs * VU) {
__forceinline void _vuTestPipes(VURegs * VU) {
_vuFMACflush(VU);
_vuFDIVflush(VU);
_vuEFUflush(VU);
}
void _vuFMACTestStall(VURegs * VU, int reg, int xyzw) {
static void __fastcall _vuFMACTestStall(VURegs * VU, int reg, int xyzw) {
int cycle;
int i;
@ -172,7 +171,7 @@ void _vuFMACTestStall(VURegs * VU, int reg, int xyzw) {
_vuTestPipes(VU);
}
void _vuFMACAdd(VURegs * VU, int reg, int xyzw) {
static __releaseinline void __fastcall _vuFMACAdd(VURegs * VU, int reg, int xyzw) {
int i;
/* find a free fmac pipe */
@ -195,7 +194,7 @@ void _vuFMACAdd(VURegs * VU, int reg, int xyzw) {
VU->fmac[i].clipflag = VU->clipflag;
}
void _vuFDIVAdd(VURegs * VU, int cycles) {
static __releaseinline void __fastcall _vuFDIVAdd(VURegs * VU, int cycles) {
VUM_LOG("adding FDIV pipe");
VU->fdiv.enable = 1;
@ -205,7 +204,7 @@ void _vuFDIVAdd(VURegs * VU, int cycles) {
VU->fdiv.statusflag = VU->statusflag;
}
void _vuEFUAdd(VURegs * VU, int cycles) {
static __releaseinline void __fastcall _vuEFUAdd(VURegs * VU, int cycles) {
// VUM_LOG("adding EFU pipe\n");
VU->efu.enable = 1;
@ -214,7 +213,7 @@ void _vuEFUAdd(VURegs * VU, int cycles) {
VU->efu.reg.F = VU->p.F;
}
void _vuFlushFDIV(VURegs * VU) {
static __releaseinline void __fastcall _vuFlushFDIV(VURegs * VU) {
int cycle;
if (VU->fdiv.enable == 0) return;
@ -228,7 +227,7 @@ void _vuFlushFDIV(VURegs * VU) {
VU->VI[REG_STATUS_FLAG].UL = VU->fdiv.statusflag;
}
void _vuFlushEFU(VURegs * VU) {
static __releaseinline void __fastcall _vuFlushEFU(VURegs * VU) {
int cycle;
if (VU->efu.enable == 0) return;
@ -241,7 +240,7 @@ void _vuFlushEFU(VURegs * VU) {
VU->VI[REG_P].UL = VU->efu.reg.UL;
}
void _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn) {
if (VUregsn->VFread0) {
_vuFMACTestStall(VU, VUregsn->VFread0, VUregsn->VFr0xyzw);
}
@ -250,7 +249,7 @@ void _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn) {
}
}
void _vuAddFMACStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuAddFMACStalls(VURegs * VU, _VURegsNum *VUregsn) {
if (VUregsn->VFwrite) {
_vuFMACAdd(VU, VUregsn->VFwrite, VUregsn->VFwxyzw);
} else
@ -261,36 +260,36 @@ void _vuAddFMACStalls(VURegs * VU, _VURegsNum *VUregsn) {
}
}
void _vuTestFDIVStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuTestFDIVStalls(VURegs * VU, _VURegsNum *VUregsn) {
// _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn);
_vuFlushFDIV(VU);
}
void _vuAddFDIVStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuAddFDIVStalls(VURegs * VU, _VURegsNum *VUregsn) {
if (VUregsn->VIwrite & (1 << REG_Q)) {
_vuFDIVAdd(VU, VUregsn->cycles);
}
}
void _vuTestEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuTestEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
// _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn);
_vuFlushEFU(VU);
}
void _vuAddEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuAddEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
if (VUregsn->VIwrite & (1 << REG_P)) {
_vuEFUAdd(VU, VUregsn->cycles);
}
}
void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn) {
switch (VUregsn->pipe) {
case VUPIPE_FMAC: _vuTestFMACStalls(VU, VUregsn); break;
}
}
void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
switch (VUregsn->pipe) {
case VUPIPE_FMAC: _vuTestFMACStalls(VU, VUregsn); break;
case VUPIPE_FDIV: _vuTestFDIVStalls(VU, VUregsn); break;
@ -298,13 +297,13 @@ void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
}
}
void _vuAddUpperStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuAddUpperStalls(VURegs * VU, _VURegsNum *VUregsn) {
switch (VUregsn->pipe) {
case VUPIPE_FMAC: _vuAddFMACStalls(VU, VUregsn); break;
}
}
void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
__forceinline void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
switch (VUregsn->pipe) {
case VUPIPE_FMAC: _vuAddFMACStalls(VU, VUregsn); break;
case VUPIPE_FDIV: _vuAddFDIVStalls(VU, VUregsn); break;
@ -317,7 +316,7 @@ void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
/* VU Upper instructions */
/******************************/
#ifndef INT_VUDOUBLEHACK
float vuDouble(u32 f)
static float __fastcall vuDouble(u32 f)
{
switch(f & 0x7f800000){
case 0x0:
@ -337,7 +336,7 @@ float vuDouble(u32 f)
}
}
#else
float vuDouble(u32 f)
static __forceinline float vuDouble(u32 f)
{
return *(float*)&f;
}
@ -1578,6 +1577,17 @@ void _vuMR32(VURegs * VU) {
if (_W) VU->VF[_Ft_].i.w = tx;
}//last updated 23/10/03 linuzappz
// --------------------------------------------------------------------------------------
// Load / Store Instructions (VU Interpreter)
// --------------------------------------------------------------------------------------
__forceinline u32* GET_VU_MEM(VURegs* VU, u32 addr) // non-static, also used by sVU for now.
{
if( VU == g_pVU1 ) return (u32*)(VU1.Mem+(addr&0x3fff));
if( addr >= 0x4000 ) return (u32*)(VU0.Mem+(addr&0x43f0)); // get VF and VI regs (they're mapped to 0x4xx0 in VU0 mem!)
return (u32*)(VU0.Mem+(addr&0x0fff)); // for addr 0x0000 to 0x4000 just wrap around
}
void _vuLQ(VURegs * VU) {
s16 imm;
u16 addr;

View File

@ -15,16 +15,7 @@
#pragma once
#include "VU.h"
extern __forceinline u32 VU_MAC_UPDATE( int shift, VURegs * VU, float f);
extern __forceinline u32 VU_MACx_UPDATE(VURegs * VU, float x);
extern __forceinline u32 VU_MACy_UPDATE(VURegs * VU, float y);
extern __forceinline u32 VU_MACz_UPDATE(VURegs * VU, float z);
extern __forceinline u32 VU_MACw_UPDATE(VURegs * VU, float w);
extern __forceinline void VU_MACx_CLEAR(VURegs * VU);
extern __forceinline void VU_MACy_CLEAR(VURegs * VU);
extern __forceinline void VU_MACz_CLEAR(VURegs * VU);
extern __forceinline void VU_MACw_CLEAR(VURegs * VU);
#include "VUflags.h"
#define float_to_int4(x) (s32)((float)x * (1.0f / 0.0625f))
#define float_to_int12(x) (s32)((float)x * (1.0f / 0.000244140625f))
@ -36,14 +27,11 @@ extern __forceinline void VU_MACw_CLEAR(VURegs * VU);
#define MAC_Reset( VU ) VU->VI[REG_MAC_FLAG].UL = VU->VI[REG_MAC_FLAG].UL & (~0xFFFF)
void _vuSetCycleFlags(VURegs * VU);
void _vuFlushFDIV(VURegs * VU);
void _vuFlushEFU(VURegs * VU);
void _vuTestPipes(VURegs * VU);
void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
void _vuAddUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
extern void _vuTestPipes(VURegs * VU);
extern void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
extern void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
extern void _vuAddUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
extern void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
/******************************/
/* VU Upper instructions */

View File

@ -48,7 +48,92 @@ __forceinline static int _limit(int a, int max)
{
return (a > max) ? max : a;
}
static __forceinline u32 setVifRowRegs(u32 reg, u32 data)
{
switch (reg)
{
case 0:
vifRegs->r0 = data;
break;
case 1:
vifRegs->r1 = data;
break;
case 2:
vifRegs->r2 = data;
break;
case 3:
vifRegs->r3 = data;
break;
jNO_DEFAULT;
}
return data;
}
static __forceinline u32 getVifRowRegs(u32 reg)
{
switch (reg)
{
case 0:
return vifRegs->r0;
break;
case 1:
return vifRegs->r1;
break;
case 2:
return vifRegs->r2;
break;
case 3:
return vifRegs->r3;
break;
jNO_DEFAULT;
}
return 0; // unreachable...
}
static __forceinline u32 setVifColRegs(u32 reg, u32 data)
{
switch (reg)
{
case 0:
vifRegs->c0 = data;
break;
case 1:
vifRegs->c1 = data;
break;
case 2:
vifRegs->c2 = data;
break;
case 3:
vifRegs->c3 = data;
break;
jNO_DEFAULT;
}
return data;
}
static __forceinline u32 getVifColRegs(u32 reg)
{
switch (reg)
{
case 0:
return vifRegs->c0;
break;
case 1:
return vifRegs->c1;
break;
case 2:
return vifRegs->c2;
break;
case 3:
return vifRegs->c3;
break;
jNO_DEFAULT;
}
return 0; // unreachable...
}
static __releaseinline void writeXYZW(u32 offnum, u32 &dest, u32 data)
{
int n;

View File

@ -148,89 +148,10 @@ extern "C"
extern u32* _vifCol;
}
static __forceinline u32 setVifRowRegs(u32 reg, u32 data)
{
switch (reg)
{
case 0:
vifRegs->r0 = data;
break;
case 1:
vifRegs->r1 = data;
break;
case 2:
vifRegs->r2 = data;
break;
case 3:
vifRegs->r3 = data;
break;
jNO_DEFAULT;
}
return data;
}
static __forceinline u32 getVifRowRegs(u32 reg)
{
switch (reg)
{
case 0:
return vifRegs->r0;
break;
case 1:
return vifRegs->r1;
break;
case 2:
return vifRegs->r2;
break;
case 3:
return vifRegs->r3;
break;
jNO_DEFAULT;
}
return 0; // unreachable...
}
static __forceinline u32 setVifColRegs(u32 reg, u32 data)
{
switch (reg)
{
case 0:
vifRegs->c0 = data;
break;
case 1:
vifRegs->c1 = data;
break;
case 2:
vifRegs->c2 = data;
break;
case 3:
vifRegs->c3 = data;
break;
jNO_DEFAULT;
}
return data;
}
static __forceinline u32 getVifColRegs(u32 reg)
{
switch (reg)
{
case 0:
return vifRegs->c0;
break;
case 1:
return vifRegs->c1;
break;
case 2:
return vifRegs->c2;
break;
case 3:
return vifRegs->c3;
break;
jNO_DEFAULT;
}
return 0; // unreachable...
}
//extern u32 setVifRowRegs(u32 reg, u32 data);
//extern u32 getVifRowRegs(u32 reg);
//extern u32 setVifColRegs(u32 reg, u32 data);
//extern u32 getVifColRegs(u32 reg);
#define vif0Regs ((VIFregisters*)&PS2MEM_HW[0x3800])
#define vif1Regs ((VIFregisters*)&PS2MEM_HW[0x3c00])

View File

@ -23,7 +23,6 @@
#include "iFPU.h"
#include "iCOP0.h"
#include "VUmicro.h"
#include "VUflags.h"
#include "sVU_Micro.h"
#include "sVU_Debug.h"
#include "sVU_zerorec.h"