mirror of https://github.com/PCSX2/pcsx2.git
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:
parent
fdbabaa11c
commit
f460985004
|
@ -618,7 +618,7 @@ typedef s32 (CALLBACK* _CDVDctrlTrayClose)();
|
||||||
typedef s32 (CALLBACK* _CDVDreadSector)(u8* buffer, u32 lsn, int mode);
|
typedef s32 (CALLBACK* _CDVDreadSector)(u8* buffer, u32 lsn, int mode);
|
||||||
typedef s32 (CALLBACK* _CDVDgetDualInfo)(s32* dualType, u32* _layer1start);
|
typedef s32 (CALLBACK* _CDVDgetDualInfo)(s32* dualType, u32* _layer1start);
|
||||||
|
|
||||||
typedef void (CALLBACK* _CDVDnewDiskCB)(void (CALLBACK* callback)());
|
typedef void (CALLBACK* _CDVDnewDiskCB)(void (*callback)());
|
||||||
|
|
||||||
|
|
||||||
// DEV9
|
// DEV9
|
||||||
|
|
|
@ -514,7 +514,7 @@ void cdvdDetectDisk()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK cdvdNewDiskCB()
|
void cdvdNewDiskCB()
|
||||||
{
|
{
|
||||||
DoCDVDresetDiskTypeCache();
|
DoCDVDresetDiskTypeCache();
|
||||||
|
|
||||||
|
|
|
@ -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!
|
// We really should not have a function with the exact same name as a callback except for case!
|
||||||
extern void cdvdDetectDisk();
|
extern void cdvdDetectDisk();
|
||||||
extern void CALLBACK cdvdNewDiskCB();
|
extern void cdvdNewDiskCB();
|
||||||
extern u8 cdvdRead(u8 key);
|
extern u8 cdvdRead(u8 key);
|
||||||
extern void cdvdWrite(u8 key, u8 rt);
|
extern void cdvdWrite(u8 key, u8 rt);
|
||||||
|
|
|
@ -396,7 +396,7 @@ s32 CALLBACK ISOdummyS32()
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CALLBACK ISOnewDiskCB(void(CALLBACK*)())
|
void CALLBACK ISOnewDiskCB(__unused void(*callback)())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
pcsx2/VU.h
13
pcsx2/VU.h
|
@ -180,16 +180,5 @@ PCSX2_ALIGNED16_EXTERN(VURegs VU0);
|
||||||
|
|
||||||
#define VU1 (*g_pVU1)
|
#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
|
|
||||||
}
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
* If not, see <http://www.gnu.org/licenses/>.
|
* If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
@ -26,7 +25,7 @@
|
||||||
/*****************************************/
|
/*****************************************/
|
||||||
|
|
||||||
|
|
||||||
__inline void vuUpdateDI(VURegs * VU) {
|
void vuUpdateDI(VURegs * VU) {
|
||||||
// u32 Flag_S = 0;
|
// u32 Flag_S = 0;
|
||||||
// u32 Flag_I = 0;
|
// u32 Flag_I = 0;
|
||||||
// u32 Flag_D = 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;
|
// 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;
|
u32 v = *(u32*)&f;
|
||||||
int exp = (v >> 23) & 0xff;
|
int exp = (v >> 23) & 0xff;
|
||||||
|
@ -112,7 +111,7 @@ __forceinline void VU_MACw_CLEAR(VURegs * VU)
|
||||||
VU->macflag&= ~(0x1111<<0);
|
VU->macflag&= ~(0x1111<<0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VU_STAT_UPDATE(VURegs * VU) {
|
__releaseinline void VU_STAT_UPDATE(VURegs * VU) {
|
||||||
int newflag = 0 ;
|
int newflag = 0 ;
|
||||||
if (VU->macflag & 0x000F) newflag = 0x1;
|
if (VU->macflag & 0x000F) newflag = 0x1;
|
||||||
if (VU->macflag & 0x00F0) newflag |= 0x2;
|
if (VU->macflag & 0x00F0) newflag |= 0x2;
|
||||||
|
|
|
@ -16,15 +16,12 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "VU.h"
|
#include "VU.h"
|
||||||
|
|
||||||
void vuUpdateDI(VURegs * VU);
|
extern u32 VU_MACx_UPDATE(VURegs * VU, float x);
|
||||||
__forceinline u32 VU_MAC_UPDATE( int shift, VURegs * VU, float f);
|
extern u32 VU_MACy_UPDATE(VURegs * VU, float y);
|
||||||
__forceinline u32 VU_MACx_UPDATE(VURegs * VU, float x);
|
extern u32 VU_MACz_UPDATE(VURegs * VU, float z);
|
||||||
__forceinline u32 VU_MACy_UPDATE(VURegs * VU, float y);
|
extern u32 VU_MACw_UPDATE(VURegs * VU, float w);
|
||||||
__forceinline u32 VU_MACz_UPDATE(VURegs * VU, float z);
|
extern void VU_MACx_CLEAR(VURegs * VU);
|
||||||
__forceinline u32 VU_MACw_UPDATE(VURegs * VU, float w);
|
extern void VU_MACy_CLEAR(VURegs * VU);
|
||||||
__forceinline void VU_MACx_CLEAR(VURegs * VU);
|
extern void VU_MACz_CLEAR(VURegs * VU);
|
||||||
__forceinline void VU_MACy_CLEAR(VURegs * VU);
|
extern void VU_MACw_CLEAR(VURegs * VU);
|
||||||
__forceinline void VU_MACz_CLEAR(VURegs * VU);
|
extern void VU_STAT_UPDATE(VURegs * VU);
|
||||||
__forceinline void VU_MACw_CLEAR(VURegs * VU);
|
|
||||||
void VU_STAT_UPDATE(VURegs * VU);
|
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,6 @@
|
||||||
* If not, see <http://www.gnu.org/licenses/>.
|
* If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
@ -46,9 +45,9 @@
|
||||||
#define _UImm11_ (s32)(VU->code & 0x7ff)
|
#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;
|
int i;
|
||||||
|
|
||||||
for (i=0; i<8; 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->fdiv.enable == 0) return;
|
||||||
|
|
||||||
if ((VU->cycle - VU->fdiv.sCycle) >= VU->fdiv.Cycle) {
|
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->efu.enable == 0) return;
|
||||||
|
|
||||||
if ((VU->cycle - VU->efu.sCycle) >= VU->efu.Cycle) {
|
if ((VU->cycle - VU->efu.sCycle) >= VU->efu.Cycle) {
|
||||||
|
@ -143,13 +142,13 @@ void _vuFlushAll(VURegs* VU)
|
||||||
} while(nRepeat);
|
} while(nRepeat);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuTestPipes(VURegs * VU) {
|
__forceinline void _vuTestPipes(VURegs * VU) {
|
||||||
_vuFMACflush(VU);
|
_vuFMACflush(VU);
|
||||||
_vuFDIVflush(VU);
|
_vuFDIVflush(VU);
|
||||||
_vuEFUflush(VU);
|
_vuEFUflush(VU);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuFMACTestStall(VURegs * VU, int reg, int xyzw) {
|
static void __fastcall _vuFMACTestStall(VURegs * VU, int reg, int xyzw) {
|
||||||
int cycle;
|
int cycle;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -172,7 +171,7 @@ void _vuFMACTestStall(VURegs * VU, int reg, int xyzw) {
|
||||||
_vuTestPipes(VU);
|
_vuTestPipes(VU);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuFMACAdd(VURegs * VU, int reg, int xyzw) {
|
static __releaseinline void __fastcall _vuFMACAdd(VURegs * VU, int reg, int xyzw) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* find a free fmac pipe */
|
/* find a free fmac pipe */
|
||||||
|
@ -195,7 +194,7 @@ void _vuFMACAdd(VURegs * VU, int reg, int xyzw) {
|
||||||
VU->fmac[i].clipflag = VU->clipflag;
|
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");
|
VUM_LOG("adding FDIV pipe");
|
||||||
|
|
||||||
VU->fdiv.enable = 1;
|
VU->fdiv.enable = 1;
|
||||||
|
@ -205,7 +204,7 @@ void _vuFDIVAdd(VURegs * VU, int cycles) {
|
||||||
VU->fdiv.statusflag = VU->statusflag;
|
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");
|
// VUM_LOG("adding EFU pipe\n");
|
||||||
|
|
||||||
VU->efu.enable = 1;
|
VU->efu.enable = 1;
|
||||||
|
@ -214,7 +213,7 @@ void _vuEFUAdd(VURegs * VU, int cycles) {
|
||||||
VU->efu.reg.F = VU->p.F;
|
VU->efu.reg.F = VU->p.F;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuFlushFDIV(VURegs * VU) {
|
static __releaseinline void __fastcall _vuFlushFDIV(VURegs * VU) {
|
||||||
int cycle;
|
int cycle;
|
||||||
|
|
||||||
if (VU->fdiv.enable == 0) return;
|
if (VU->fdiv.enable == 0) return;
|
||||||
|
@ -228,7 +227,7 @@ void _vuFlushFDIV(VURegs * VU) {
|
||||||
VU->VI[REG_STATUS_FLAG].UL = VU->fdiv.statusflag;
|
VU->VI[REG_STATUS_FLAG].UL = VU->fdiv.statusflag;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuFlushEFU(VURegs * VU) {
|
static __releaseinline void __fastcall _vuFlushEFU(VURegs * VU) {
|
||||||
int cycle;
|
int cycle;
|
||||||
|
|
||||||
if (VU->efu.enable == 0) return;
|
if (VU->efu.enable == 0) return;
|
||||||
|
@ -241,7 +240,7 @@ void _vuFlushEFU(VURegs * VU) {
|
||||||
VU->VI[REG_P].UL = VU->efu.reg.UL;
|
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) {
|
if (VUregsn->VFread0) {
|
||||||
_vuFMACTestStall(VU, VUregsn->VFread0, VUregsn->VFr0xyzw);
|
_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) {
|
if (VUregsn->VFwrite) {
|
||||||
_vuFMACAdd(VU, VUregsn->VFwrite, VUregsn->VFwxyzw);
|
_vuFMACAdd(VU, VUregsn->VFwrite, VUregsn->VFwxyzw);
|
||||||
} else
|
} 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);
|
// _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn);
|
||||||
_vuFlushFDIV(VU);
|
_vuFlushFDIV(VU);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuAddFDIVStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
__forceinline void _vuAddFDIVStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
||||||
if (VUregsn->VIwrite & (1 << REG_Q)) {
|
if (VUregsn->VIwrite & (1 << REG_Q)) {
|
||||||
_vuFDIVAdd(VU, VUregsn->cycles);
|
_vuFDIVAdd(VU, VUregsn->cycles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void _vuTestEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
__forceinline void _vuTestEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
||||||
// _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn);
|
// _vuTestFMACStalls(VURegs * VU, _VURegsNum *VUregsn);
|
||||||
_vuFlushEFU(VU);
|
_vuFlushEFU(VU);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuAddEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
__forceinline void _vuAddEFUStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
||||||
if (VUregsn->VIwrite & (1 << REG_P)) {
|
if (VUregsn->VIwrite & (1 << REG_P)) {
|
||||||
_vuEFUAdd(VU, VUregsn->cycles);
|
_vuEFUAdd(VU, VUregsn->cycles);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
__forceinline void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
||||||
switch (VUregsn->pipe) {
|
switch (VUregsn->pipe) {
|
||||||
case VUPIPE_FMAC: _vuTestFMACStalls(VU, VUregsn); break;
|
case VUPIPE_FMAC: _vuTestFMACStalls(VU, VUregsn); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
__forceinline void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
||||||
switch (VUregsn->pipe) {
|
switch (VUregsn->pipe) {
|
||||||
case VUPIPE_FMAC: _vuTestFMACStalls(VU, VUregsn); break;
|
case VUPIPE_FMAC: _vuTestFMACStalls(VU, VUregsn); break;
|
||||||
case VUPIPE_FDIV: _vuTestFDIVStalls(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) {
|
switch (VUregsn->pipe) {
|
||||||
case VUPIPE_FMAC: _vuAddFMACStalls(VU, VUregsn); break;
|
case VUPIPE_FMAC: _vuAddFMACStalls(VU, VUregsn); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
__forceinline void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
||||||
switch (VUregsn->pipe) {
|
switch (VUregsn->pipe) {
|
||||||
case VUPIPE_FMAC: _vuAddFMACStalls(VU, VUregsn); break;
|
case VUPIPE_FMAC: _vuAddFMACStalls(VU, VUregsn); break;
|
||||||
case VUPIPE_FDIV: _vuAddFDIVStalls(VU, VUregsn); break;
|
case VUPIPE_FDIV: _vuAddFDIVStalls(VU, VUregsn); break;
|
||||||
|
@ -317,7 +316,7 @@ void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn) {
|
||||||
/* VU Upper instructions */
|
/* VU Upper instructions */
|
||||||
/******************************/
|
/******************************/
|
||||||
#ifndef INT_VUDOUBLEHACK
|
#ifndef INT_VUDOUBLEHACK
|
||||||
float vuDouble(u32 f)
|
static float __fastcall vuDouble(u32 f)
|
||||||
{
|
{
|
||||||
switch(f & 0x7f800000){
|
switch(f & 0x7f800000){
|
||||||
case 0x0:
|
case 0x0:
|
||||||
|
@ -337,7 +336,7 @@ float vuDouble(u32 f)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
float vuDouble(u32 f)
|
static __forceinline float vuDouble(u32 f)
|
||||||
{
|
{
|
||||||
return *(float*)&f;
|
return *(float*)&f;
|
||||||
}
|
}
|
||||||
|
@ -1578,6 +1577,17 @@ void _vuMR32(VURegs * VU) {
|
||||||
if (_W) VU->VF[_Ft_].i.w = tx;
|
if (_W) VU->VF[_Ft_].i.w = tx;
|
||||||
}//last updated 23/10/03 linuzappz
|
}//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) {
|
void _vuLQ(VURegs * VU) {
|
||||||
s16 imm;
|
s16 imm;
|
||||||
u16 addr;
|
u16 addr;
|
||||||
|
|
|
@ -15,16 +15,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "VU.h"
|
#include "VU.h"
|
||||||
|
#include "VUflags.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);
|
|
||||||
|
|
||||||
#define float_to_int4(x) (s32)((float)x * (1.0f / 0.0625f))
|
#define float_to_int4(x) (s32)((float)x * (1.0f / 0.0625f))
|
||||||
#define float_to_int12(x) (s32)((float)x * (1.0f / 0.000244140625f))
|
#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)
|
#define MAC_Reset( VU ) VU->VI[REG_MAC_FLAG].UL = VU->VI[REG_MAC_FLAG].UL & (~0xFFFF)
|
||||||
|
|
||||||
void _vuSetCycleFlags(VURegs * VU);
|
extern void _vuTestPipes(VURegs * VU);
|
||||||
void _vuFlushFDIV(VURegs * VU);
|
extern void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
|
||||||
void _vuFlushEFU(VURegs * VU);
|
extern void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
|
||||||
void _vuTestPipes(VURegs * VU);
|
extern void _vuAddUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
|
||||||
void _vuTestUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
|
extern void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
|
||||||
void _vuTestLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
|
|
||||||
void _vuAddUpperStalls(VURegs * VU, _VURegsNum *VUregsn);
|
|
||||||
void _vuAddLowerStalls(VURegs * VU, _VURegsNum *VUregsn);
|
|
||||||
|
|
||||||
/******************************/
|
/******************************/
|
||||||
/* VU Upper instructions */
|
/* VU Upper instructions */
|
||||||
|
|
|
@ -48,7 +48,92 @@ __forceinline static int _limit(int a, int max)
|
||||||
{
|
{
|
||||||
return (a > max) ? max : a;
|
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)
|
static __releaseinline void writeXYZW(u32 offnum, u32 &dest, u32 data)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
|
|
87
pcsx2/Vif.h
87
pcsx2/Vif.h
|
@ -148,89 +148,10 @@ extern "C"
|
||||||
extern u32* _vifCol;
|
extern u32* _vifCol;
|
||||||
}
|
}
|
||||||
|
|
||||||
static __forceinline u32 setVifRowRegs(u32 reg, u32 data)
|
//extern u32 setVifRowRegs(u32 reg, u32 data);
|
||||||
{
|
//extern u32 getVifRowRegs(u32 reg);
|
||||||
switch (reg)
|
//extern u32 setVifColRegs(u32 reg, u32 data);
|
||||||
{
|
//extern u32 getVifColRegs(u32 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...
|
|
||||||
}
|
|
||||||
|
|
||||||
#define vif0Regs ((VIFregisters*)&PS2MEM_HW[0x3800])
|
#define vif0Regs ((VIFregisters*)&PS2MEM_HW[0x3800])
|
||||||
#define vif1Regs ((VIFregisters*)&PS2MEM_HW[0x3c00])
|
#define vif1Regs ((VIFregisters*)&PS2MEM_HW[0x3c00])
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
#include "iFPU.h"
|
#include "iFPU.h"
|
||||||
#include "iCOP0.h"
|
#include "iCOP0.h"
|
||||||
#include "VUmicro.h"
|
#include "VUmicro.h"
|
||||||
#include "VUflags.h"
|
|
||||||
#include "sVU_Micro.h"
|
#include "sVU_Micro.h"
|
||||||
#include "sVU_Debug.h"
|
#include "sVU_Debug.h"
|
||||||
#include "sVU_zerorec.h"
|
#include "sVU_zerorec.h"
|
||||||
|
|
Loading…
Reference in New Issue