diff options
| author | iCatButler <i.am.catbutler@gmail.com> | 2016-03-25 16:25:15 +0000 |
|---|---|---|
| committer | iCatButler <i.am.catbutler@gmail.com> | 2016-03-25 16:25:15 +0000 |
| commit | 7767ea4acbae995cd8e6302bdb7c97e89748dfd8 (patch) | |
| tree | b4a3025b703f8f3f383626aa5a651b2954c3a512 /libpcsxcore/ix86 | |
| parent | 106f6594c9e2ad601deb7ad9bdf5eab8a568c01b (diff) | |
Initial upload of PGXP.
Diffstat (limited to 'libpcsxcore/ix86')
| -rwxr-xr-x | libpcsxcore/ix86/iR3000A.c | 47 |
1 files changed, 29 insertions, 18 deletions
diff --git a/libpcsxcore/ix86/iR3000A.c b/libpcsxcore/ix86/iR3000A.c index d7f68890..d18c47ec 100755 --- a/libpcsxcore/ix86/iR3000A.c +++ b/libpcsxcore/ix86/iR3000A.c @@ -25,6 +25,7 @@ #include "ix86.h" #include <sys/mman.h> +#include "pgxp_gte.h" #ifndef MAP_ANONYMOUS #define MAP_ANONYMOUS MAP_ANON @@ -1546,14 +1547,15 @@ static void recLW() { // SysPrintf("unhandled r32 %x\n", addr); } + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode iPushOfB(); - CALLFunc((u32)psxMemRead32); + CALLFunc((u32)PGXP_psxMemRead32Trace); if (_Rt_) { iRegs[_Rt_].state = ST_UNK; MOV32RtoM((u32)&psxRegs.GPR.r[_Rt_], EAX); } // ADD32ItoR(ESP, 4); - resp+= 4; + resp+= 8; } extern u32 LWL_MASK[4]; @@ -1601,12 +1603,13 @@ void recLWL() { if (_Imm_) ADD32ItoR(EAX, _Imm_); } PUSH32R (EAX); + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode AND32ItoR(EAX, ~3); PUSH32R (EAX); - CALLFunc((u32)psxMemRead32); + CALLFunc((u32)PGXP_psxMemRead32Trace); if (_Rt_) { - ADD32ItoR(ESP, 4); + ADD32ItoR(ESP, 8); POP32R (EDX); AND32ItoR(EDX, 0x3); // shift = addr & 3; @@ -1629,7 +1632,7 @@ void recLWL() { MOV32RtoM((u32)&psxRegs.GPR.r[_Rt_], EAX); } else { // ADD32ItoR(ESP, 8); - resp+= 8; + resp+= 12; } } @@ -1756,12 +1759,13 @@ void recLWR() { if (_Imm_) ADD32ItoR(EAX, _Imm_); } PUSH32R (EAX); + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode AND32ItoR(EAX, ~3); PUSH32R (EAX); - CALLFunc((u32)psxMemRead32); + CALLFunc((u32)PGXP_psxMemRead32Trace); if (_Rt_) { - ADD32ItoR(ESP, 4); + ADD32ItoR(ESP, 8); POP32R (EDX); AND32ItoR(EDX, 0x3); // shift = addr & 3; @@ -1785,7 +1789,7 @@ void recLWR() { MOV32RtoM((u32)&psxRegs.GPR.r[_Rt_], EAX); } else { // ADD32ItoR(ESP, 8); - resp+= 8; + resp+= 12; } } @@ -1978,15 +1982,16 @@ static void recSW() { // SysPrintf("unhandled w32 %x\n", addr); } + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode if (IsConst(_Rt_)) { PUSH32I (iRegs[_Rt_].k); } else { PUSH32M ((u32)&psxRegs.GPR.r[_Rt_]); } iPushOfB(); - CALLFunc((u32)psxMemWrite32); + CALLFunc((u32)PGXP_psxMemWrite32Trace); // ADD32ItoR(ESP, 8); - resp+= 8; + resp+= 12; } //#endif @@ -2104,12 +2109,13 @@ void recSWL() { if (_Imm_) ADD32ItoR(EAX, _Imm_); } PUSH32R (EAX); + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode AND32ItoR(EAX, ~3); PUSH32R (EAX); - CALLFunc((u32)psxMemRead32); + CALLFunc((u32)PGXP_psxMemRead32Trace); - ADD32ItoR(ESP, 4); + ADD32ItoR(ESP, 8); POP32R (EDX); AND32ItoR(EDX, 0x3); // shift = addr & 3; @@ -2126,6 +2132,8 @@ void recSWL() { } SHR32CLtoR(EDX); // _rRt_ >> SWL_SHIFT[shift] + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode + OR32RtoR (EAX, EDX); PUSH32R (EAX); @@ -2137,9 +2145,9 @@ void recSWL() { AND32ItoR(EAX, ~3); PUSH32R (EAX); - CALLFunc((u32)psxMemWrite32); + CALLFunc((u32)PGXP_psxMemWrite32Trace); // ADD32ItoR(ESP, 8); - resp+= 8; + resp+= 12; } extern u32 SWR_MASK[4]; @@ -2186,12 +2194,13 @@ void recSWR() { if (_Imm_) ADD32ItoR(EAX, _Imm_); } PUSH32R (EAX); + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode AND32ItoR(EAX, ~3); PUSH32R (EAX); - CALLFunc((u32)psxMemRead32); + CALLFunc((u32)PGXP_psxMemRead32Trace); - ADD32ItoR(ESP, 4); + ADD32ItoR(ESP, 8); POP32R (EDX); AND32ItoR(EDX, 0x3); // shift = addr & 3; @@ -2208,6 +2217,8 @@ void recSWR() { } SHL32CLtoR(EDX); // _rRt_ << SWR_SHIFT[shift] + PUSH32I(psxRegs.code); // iCB: Needed to extract reg and opcode + OR32RtoR (EAX, EDX); PUSH32R (EAX); @@ -2219,9 +2230,9 @@ void recSWR() { AND32ItoR(EAX, ~3); PUSH32R (EAX); - CALLFunc((u32)psxMemWrite32); + CALLFunc((u32)PGXP_psxMemWrite32Trace); // ADD32ItoR(ESP, 8); - resp += 8; + resp += 12; } /*REC_FUNC(SLL); |
