From 1b4d2d0cfbd664fae37a06e841b3653ff696bba6 Mon Sep 17 00:00:00 2001 From: Ryan Collins Date: Sun, 29 Mar 2015 11:02:27 -0400 Subject: [PATCH] Update the N64 System/Interpreter files to allman --- .../Interpreter/Interpreter CPU.cpp | 134 +++-- .../Interpreter/Interpreter Ops 32.cpp | 405 +++++++++----- .../Interpreter/Interpreter Ops.cpp | 497 +++++++++++++----- 3 files changed, 742 insertions(+), 294 deletions(-) diff --git a/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp b/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp index b98c24d15..216fd014b 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp +++ b/Source/Project64/N64 System/Interpreter/Interpreter CPU.cpp @@ -17,18 +17,22 @@ void ExecuteInterpreterOps (DWORD /*Cycles*/) g_Notify->BreakPoint(__FILEW__,__LINE__); } -bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) { +bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) +{ OPCODE Command; - if (!g_MMU->LW_VAddr(PC + 4, Command.Hex)) { + if (!g_MMU->LW_VAddr(PC + 4, Command.Hex)) + { //g_Notify->DisplayError(L"Failed to load word 2"); //ExitThread(0); return TRUE; } - switch (Command.op) { + switch (Command.op) + { case R4300i_SPECIAL: - switch (Command.funct) { + switch (Command.funct) + { case R4300i_SPECIAL_SLL: case R4300i_SPECIAL_SRL: case R4300i_SPECIAL_SRA: @@ -62,9 +66,18 @@ bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) { case R4300i_SPECIAL_DSLL32: case R4300i_SPECIAL_DSRL32: case R4300i_SPECIAL_DSRA32: - if (Command.rd == 0) { return FALSE; } - if (Command.rd == Reg1) { return TRUE; } - if (Command.rd == Reg2) { return TRUE; } + if (Command.rd == 0) + { + return FALSE; + } + if (Command.rd == Reg1) + { + return TRUE; + } + if (Command.rd == Reg2) + { + return TRUE; + } break; case R4300i_SPECIAL_MULT: case R4300i_SPECIAL_MULTU: @@ -84,16 +97,28 @@ bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) { } break; case R4300i_CP0: - switch (Command.rs) { + switch (Command.rs) + { case R4300i_COP0_MT: break; case R4300i_COP0_MF: - if (Command.rt == 0) { return FALSE; } - if (Command.rt == Reg1) { return TRUE; } - if (Command.rt == Reg2) { return TRUE; } + if (Command.rt == 0) + { + return FALSE; + } + if (Command.rt == Reg1) + { + return TRUE; + } + if (Command.rt == Reg2) + { + return TRUE; + } break; default: - if ( (Command.rs & 0x10 ) != 0 ) { - switch( Command.funct ) { + if ( (Command.rs & 0x10 ) != 0 ) + { + switch ( Command.funct ) + { case R4300i_COP0_CO_TLBR: break; case R4300i_COP0_CO_TLBWI: break; case R4300i_COP0_CO_TLBWR: break; @@ -105,7 +130,9 @@ bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) { } return TRUE; } - } else { + } + else + { if (g_Settings->LoadBool(Debugger_Enabled)) { g_Notify->DisplayError(L"Does %s effect Delay slot at %X?\n7",R4300iOpcodeName(Command.Hex,PC+4), PC); @@ -115,11 +142,21 @@ bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) { } break; case R4300i_CP1: - switch (Command.fmt) { + switch (Command.fmt) + { case R4300i_COP1_MF: - if (Command.rt == 0) { return FALSE; } - if (Command.rt == Reg1) { return TRUE; } - if (Command.rt == Reg2) { return TRUE; } + if (Command.rt == 0) + { + return FALSE; + } + if (Command.rt == Reg1) + { + return TRUE; + } + if (Command.rt == Reg2) + { + return TRUE; + } break; case R4300i_COP1_CF: break; case R4300i_COP1_MT: break; @@ -158,9 +195,18 @@ bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) { case R4300i_LD: case R4300i_LWC1: case R4300i_LDC1: - if (Command.rt == 0) { return FALSE; } - if (Command.rt == Reg1) { return TRUE; } - if (Command.rt == Reg2) { return TRUE; } + if (Command.rt == 0) + { + return FALSE; + } + if (Command.rt == Reg1) + { + return TRUE; + } + if (Command.rt == Reg2) + { + return TRUE; + } break; case R4300i_CACHE: break; case R4300i_SB: break; @@ -181,7 +227,7 @@ bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2) { return FALSE; } -void CInterpreterCPU::BuildCPU (void ) +void CInterpreterCPU::BuildCPU (void) { R4300iOp::m_TestTimer = FALSE; R4300iOp::m_NextInstruction = NORMAL; @@ -190,14 +236,20 @@ void CInterpreterCPU::BuildCPU (void ) if (g_Settings->LoadBool(Game_32Bit)) { m_R4300i_Opcode = R4300iOp32::BuildInterpreter(); - } else { + } + else + { m_R4300i_Opcode = R4300iOp::BuildInterpreter(); } } -void CInterpreterCPU::InPermLoop (void) { +void CInterpreterCPU::InPermLoop (void) +{ // *** Changed ***/ - //if (CPU_Type == CPU_SyncCores) { SyncRegisters.CP0[9] +=5; } + //if (CPU_Type == CPU_SyncCores) + //{ + // SyncRegisters.CP0[9] +=5; + //} /* Interrupts enabled */ if (( g_Reg->STATUS_REGISTER & STATUS_IE ) == 0 || @@ -205,21 +257,27 @@ void CInterpreterCPU::InPermLoop (void) { ( g_Reg->STATUS_REGISTER & STATUS_ERL ) != 0 || ( g_Reg->STATUS_REGISTER & 0xFF00) == 0) { - if (g_Plugins->Gfx()->UpdateScreen != NULL) { g_Plugins->Gfx()->UpdateScreen(); } + if (g_Plugins->Gfx()->UpdateScreen != NULL) + { + _Plugins->Gfx()->UpdateScreen(); + } //CurrentFrame = 0; //CurrentPercent = 0; //DisplayFPS(); g_Notify->DisplayError(GS(MSG_PERM_LOOP)); g_System->CloseCpu(); - } else { - if (*g_NextTimer > 0) { + } + else + { + if (*g_NextTimer > 0) + { *g_NextTimer = 0 - g_System->CountPerOp(); g_SystemTimer->UpdateTimers(); } } } -void CInterpreterCPU::ExecuteCPU (void ) +void CInterpreterCPU::ExecuteCPU (void) { bool & Done = g_System->m_EndEmulation; DWORD & PROGRAM_COUNTER = *_PROGRAM_COUNTER; @@ -232,7 +290,7 @@ void CInterpreterCPU::ExecuteCPU (void ) __try { - while(!Done) + while (!Done) { if (g_MMU->LW_VAddr(PROGRAM_COUNTER, Opcode.Hex)) { @@ -290,12 +348,15 @@ void CInterpreterCPU::ExecuteCPU (void ) default: g_Notify->BreakPoint(__FILEW__,__LINE__); } - } else { + } + else + { g_Reg->DoTLBReadMiss(R4300iOp::m_NextInstruction == JUMP,PROGRAM_COUNTER); R4300iOp::m_NextInstruction = NORMAL; } } - } __except( g_MMU->MemoryFilter( GetExceptionCode(), GetExceptionInformation()) ) { + } __except( g_MMU->MemoryFilter( GetExceptionCode(), GetExceptionInformation()) ) + { g_Notify->DisplayError(GS(MSG_UNKNOWN_MEM_ACTION)); ExitThread(0); } @@ -314,7 +375,7 @@ void CInterpreterCPU::ExecuteOps ( int Cycles ) __try { - while(!Done) + while (!Done) { if (Cycles <= 0) { @@ -397,12 +458,15 @@ void CInterpreterCPU::ExecuteOps ( int Cycles ) default: g_Notify->BreakPoint(__FILEW__,__LINE__); } - } else { + } + else + { g_Reg->DoTLBReadMiss(R4300iOp::m_NextInstruction == JUMP,PROGRAM_COUNTER); R4300iOp::m_NextInstruction = NORMAL; } } - } __except( g_MMU->MemoryFilter( GetExceptionCode(), GetExceptionInformation()) ) { + } __except( g_MMU->MemoryFilter( GetExceptionCode(), GetExceptionInformation()) ) + { g_Notify->DisplayError(GS(MSG_UNKNOWN_MEM_ACTION)); ExitThread(0); } diff --git a/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp b/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp index a691f7a6c..6c1e1967a 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp +++ b/Source/Project64/N64 System/Interpreter/Interpreter Ops 32.cpp @@ -628,7 +628,8 @@ R4300iOp32::Func * R4300iOp32::BuildInterpreter (void ) /************************* Opcode functions *************************/ -void R4300iOp32::JAL (void) { +void R4300iOp32::JAL (void) +{ m_NextInstruction = DELAY_SLOT; m_JumpToLocation = ((*_PROGRAM_COUNTER) & 0xF0000000) + (m_Opcode.target << 2); _GPR[31].UW[0] = (*_PROGRAM_COUNTER) + 8; @@ -639,9 +640,11 @@ void R4300iOp32::JAL (void) { } } -void R4300iOp32::BEQ (void) { +void R4300iOp32::BEQ (void) +{ m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] == _GPR[m_Opcode.rt].W[0]) { + if (_GPR[m_Opcode.rs].W[0] == _GPR[m_Opcode.rt].W[0]) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -650,14 +653,18 @@ void R4300iOp32::BEQ (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::BNE (void) { +void R4300iOp32::BNE (void) +{ m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] != _GPR[m_Opcode.rt].W[0]) { + if (_GPR[m_Opcode.rs].W[0] != _GPR[m_Opcode.rt].W[0]) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -666,14 +673,17 @@ void R4300iOp32::BNE (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } void R4300iOp32::BLEZ (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] <= 0) { + if (_GPR[m_Opcode.rs].W[0] <= 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -682,14 +692,18 @@ void R4300iOp32::BLEZ (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::BGTZ (void) { +void R4300iOp32::BGTZ (void) +{ m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] > 0) { + if (_GPR[m_Opcode.rs].W[0] > 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -698,48 +712,61 @@ void R4300iOp32::BGTZ (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::ADDI (void) { +void R4300iOp32::ADDI (void) +{ #ifdef Interpreter_StackTest - if (m_Opcode.rs == 29 && m_Opcode.rt == 29) { + if (m_Opcode.rs == 29 && m_Opcode.rt == 29) + { StackValue += (short)m_Opcode.immediate; } #endif _GPR[m_Opcode.rt].W[0] = (_GPR[m_Opcode.rs].W[0] + ((short)m_Opcode.immediate)); #ifdef Interpreter_StackTest - if (m_Opcode.rt == 29 && m_Opcode.rs != 29) { + if (m_Opcode.rt == 29 && m_Opcode.rs != 29) + { StackValue = _GPR[m_Opcode.rt].W[0]; } #endif } -void R4300iOp32::ADDIU (void) { +void R4300iOp32::ADDIU (void) +{ #ifdef Interpreter_StackTest - if (m_Opcode.rs == 29 && m_Opcode.rt == 29) { + if (m_Opcode.rs == 29 && m_Opcode.rt == 29) + { StackValue += (short)m_Opcode.immediate; } #endif _GPR[m_Opcode.rt].W[0] = (_GPR[m_Opcode.rs].W[0] + ((short)m_Opcode.immediate)); #ifdef Interpreter_StackTest - if (m_Opcode.rt == 29 && m_Opcode.rs != 29) { + if (m_Opcode.rt == 29 && m_Opcode.rs != 29) + { StackValue = _GPR[m_Opcode.rt].W[0]; } #endif } -void R4300iOp32::SLTI (void) { - if (_GPR[m_Opcode.rs].W[0] < (__int64)((short)m_Opcode.immediate)) { +void R4300iOp32::SLTI (void) +{ + if (_GPR[m_Opcode.rs].W[0] < (__int64)((short)m_Opcode.immediate)) + { _GPR[m_Opcode.rt].W[0] = 1; - } else { + } + else + { _GPR[m_Opcode.rt].W[0] = 0; } } -void R4300iOp32::SLTIU (void) { +void R4300iOp32::SLTIU (void) +{ int imm32 = (short)m_Opcode.immediate; __int64 imm64; @@ -747,29 +774,36 @@ void R4300iOp32::SLTIU (void) { _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rs].UW[0] < (unsigned __int64)imm64?1:0; } -void R4300iOp32::ANDI (void) { +void R4300iOp32::ANDI (void) +{ _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rs].W[0] & m_Opcode.immediate; } -void R4300iOp32::ORI (void) { +void R4300iOp32::ORI (void) +{ _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rs].W[0] | m_Opcode.immediate; } -void R4300iOp32::XORI (void) { +void R4300iOp32::XORI (void) +{ _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rs].W[0] ^ m_Opcode.immediate; } -void R4300iOp32::LUI (void) { +void R4300iOp32::LUI (void) +{ _GPR[m_Opcode.rt].W[0] = (long)((short)m_Opcode.offset << 16); #ifdef Interpreter_StackTest - if (m_Opcode.rt == 29) { + if (m_Opcode.rt == 29) + { StackValue = _GPR[m_Opcode.rt].W[0]; } #endif } -void R4300iOp32::BEQL (void) { - if (_GPR[m_Opcode.rs].W[0] == _GPR[m_Opcode.rt].W[0]) { +void R4300iOp32::BEQL (void) +{ + if (_GPR[m_Opcode.rs].W[0] == _GPR[m_Opcode.rt].W[0]) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -779,14 +813,18 @@ void R4300iOp32::BEQL (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::BNEL (void) { - if (_GPR[m_Opcode.rs].W[0] != _GPR[m_Opcode.rt].W[0]) { +void R4300iOp32::BNEL (void) +{ + if (_GPR[m_Opcode.rs].W[0] != _GPR[m_Opcode.rt].W[0]) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -796,14 +834,18 @@ void R4300iOp32::BNEL (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::BLEZL (void) { - if (_GPR[m_Opcode.rs].W[0] <= 0) { +void R4300iOp32::BLEZL (void) +{ + if (_GPR[m_Opcode.rs].W[0] <= 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -813,14 +855,18 @@ void R4300iOp32::BLEZL (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::BGTZL (void) { - if (_GPR[m_Opcode.rs].W[0] > 0) { +void R4300iOp32::BGTZL (void) +{ + if (_GPR[m_Opcode.rs].W[0] > 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -830,38 +876,54 @@ void R4300iOp32::BGTZL (void) { m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::LB (void) { +void R4300iOp32::LB (void) +{ DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LB TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rt].B[0]; } } -void R4300iOp32::LH (void) { +void R4300iOp32::LH (void) +{ DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } - if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) { - if (bShowTLBMisses()) { + if ((Address & 1) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } + if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LH TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rt].HW[0]; } } -void R4300iOp32::LWL (void) { +void R4300iOp32::LWL (void) +{ DWORD Offset, Address, Value; Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; @@ -869,7 +931,8 @@ void R4300iOp32::LWL (void) { if (!g_MMU->LW_VAddr((Address & ~3),Value)) { - if (bShowTLBMisses()) { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LWL TLB: %X",Address); } TLB_READ_EXCEPTION(Address); @@ -880,51 +943,73 @@ void R4300iOp32::LWL (void) { _GPR[m_Opcode.rt].W[0] += (int)(Value << LWL_SHIFT[Offset]); } -void R4300iOp32::LW (void) { +void R4300iOp32::LW (void) +{ DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } if (LogOptions.GenerateLog) { Log_LW((*_PROGRAM_COUNTER),Address); } - if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LW TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rt].W[0]; } } -void R4300iOp32::LBU (void) { +void R4300iOp32::LBU (void) +{ DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LBU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].UW[0] = _GPR[m_Opcode.rt].UB[0]; } } -void R4300iOp32::LHU (void) { +void R4300iOp32::LHU (void) +{ DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } - if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) { - if (bShowTLBMisses()) { + if ((Address & 1) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } + if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LHU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].UW[0] = _GPR[m_Opcode.rt].UHW[0]; } } -void R4300iOp32::LWR (void) { +void R4300iOp32::LWR (void) +{ DWORD Offset, Address, Value; Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; @@ -944,118 +1029,158 @@ void R4300iOp32::LWR (void) { _GPR[m_Opcode.rt].W[0] += (int)(Value >> LWR_SHIFT[Offset]); } -void R4300iOp32::LWU (void) { +void R4300iOp32::LWU (void) +{ DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } - if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LWU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].UW[0] = _GPR[m_Opcode.rt].UW[0]; } } -void R4300iOp32::LL (void) { +void R4300iOp32::LL (void) +{ DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } - if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LL TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rt].W[0]; (*_LLBit) = 1; } } /********************** R4300i OpCodes: Special **********************/ -void R4300iOp32::SPECIAL_SLL (void) { +void R4300iOp32::SPECIAL_SLL (void) +{ _GPR[m_Opcode.rd].W[0] = (_GPR[m_Opcode.rt].W[0] << m_Opcode.sa); } -void R4300iOp32::SPECIAL_SRL (void) { +void R4300iOp32::SPECIAL_SRL (void) +{ _GPR[m_Opcode.rd].W[0] = (int)(_GPR[m_Opcode.rt].UW[0] >> m_Opcode.sa); } -void R4300iOp32::SPECIAL_SRA (void) { +void R4300iOp32::SPECIAL_SRA (void) +{ _GPR[m_Opcode.rd].W[0] = (_GPR[m_Opcode.rt].W[0] >> m_Opcode.sa); } -void R4300iOp32::SPECIAL_SLLV (void) { +void R4300iOp32::SPECIAL_SLLV (void) +{ _GPR[m_Opcode.rd].W[0] = (_GPR[m_Opcode.rt].W[0] << (_GPR[m_Opcode.rs].UW[0] & 0x1F)); } -void R4300iOp32::SPECIAL_SRLV (void) { +void R4300iOp32::SPECIAL_SRLV (void) +{ _GPR[m_Opcode.rd].W[0] = (int)(_GPR[m_Opcode.rt].UW[0] >> (_GPR[m_Opcode.rs].UW[0] & 0x1F)); } -void R4300iOp32::SPECIAL_SRAV (void) { +void R4300iOp32::SPECIAL_SRAV (void) +{ _GPR[m_Opcode.rd].W[0] = (_GPR[m_Opcode.rt].W[0] >> (_GPR[m_Opcode.rs].UW[0] & 0x1F)); } -void R4300iOp32::SPECIAL_JALR (void) { +void R4300iOp32::SPECIAL_JALR (void) +{ m_NextInstruction = DELAY_SLOT; m_JumpToLocation = _GPR[m_Opcode.rs].UW[0]; _GPR[m_Opcode.rd].W[0] = (long)((*_PROGRAM_COUNTER) + 8); m_TestTimer = TRUE; } -void R4300iOp32::SPECIAL_ADD (void) { +void R4300iOp32::SPECIAL_ADD (void) +{ _GPR[m_Opcode.rd].W[0] = _GPR[m_Opcode.rs].W[0] + _GPR[m_Opcode.rt].W[0]; } -void R4300iOp32::SPECIAL_ADDU (void) { +void R4300iOp32::SPECIAL_ADDU (void) +{ _GPR[m_Opcode.rd].W[0] = _GPR[m_Opcode.rs].W[0] + _GPR[m_Opcode.rt].W[0]; } -void R4300iOp32::SPECIAL_SUB (void) { +void R4300iOp32::SPECIAL_SUB (void) +{ _GPR[m_Opcode.rd].W[0] = _GPR[m_Opcode.rs].W[0] - _GPR[m_Opcode.rt].W[0]; } -void R4300iOp32::SPECIAL_SUBU (void) { +void R4300iOp32::SPECIAL_SUBU (void) +{ _GPR[m_Opcode.rd].W[0] = _GPR[m_Opcode.rs].W[0] - _GPR[m_Opcode.rt].W[0]; } -void R4300iOp32::SPECIAL_AND (void) { +void R4300iOp32::SPECIAL_AND (void) +{ _GPR[m_Opcode.rd].W[0] = _GPR[m_Opcode.rs].W[0] & _GPR[m_Opcode.rt].W[0]; } -void R4300iOp32::SPECIAL_OR (void) { +void R4300iOp32::SPECIAL_OR (void) +{ _GPR[m_Opcode.rd].W[0] = _GPR[m_Opcode.rs].W[0] | _GPR[m_Opcode.rt].W[0]; #ifdef Interpreter_StackTest - if (m_Opcode.rd == 29) { + if (m_Opcode.rd == 29) + { StackValue = _GPR[m_Opcode.rd].W[0]; } #endif } -void R4300iOp32::SPECIAL_NOR (void) { +void R4300iOp32::SPECIAL_NOR (void) +{ _GPR[m_Opcode.rd].W[0] = ~(_GPR[m_Opcode.rs].W[0] | _GPR[m_Opcode.rt].W[0]); } -void R4300iOp32::SPECIAL_SLT (void) { - if (_GPR[m_Opcode.rs].W[0] < _GPR[m_Opcode.rt].W[0]) { +void R4300iOp32::SPECIAL_SLT (void) +{ + if (_GPR[m_Opcode.rs].W[0] < _GPR[m_Opcode.rt].W[0]) + { _GPR[m_Opcode.rd].W[0] = 1; - } else { + } + else + { _GPR[m_Opcode.rd].W[0] = 0; } } -void R4300iOp32::SPECIAL_SLTU (void) { - if (_GPR[m_Opcode.rs].UW[0] < _GPR[m_Opcode.rt].UW[0]) { +void R4300iOp32::SPECIAL_SLTU (void) +{ + if (_GPR[m_Opcode.rs].UW[0] < _GPR[m_Opcode.rt].UW[0]) + { _GPR[m_Opcode.rd].W[0] = 1; - } else { + } + else + { _GPR[m_Opcode.rd].W[0] = 0; } } -void R4300iOp32::SPECIAL_TEQ (void) { +void R4300iOp32::SPECIAL_TEQ (void) +{ if (_GPR[m_Opcode.rs].W[0] == _GPR[m_Opcode.rt].W[0] && g_Settings->LoadBool(Debugger_Enabled)) { g_Notify->DisplayError(L"Should trap this ???"); @@ -1073,9 +1198,11 @@ void R4300iOp32::SPECIAL_DSRA32 (void) } /********************** R4300i OpCodes: RegImm **********************/ -void R4300iOp32::REGIMM_BLTZ (void) { +void R4300iOp32::REGIMM_BLTZ (void) +{ m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] < 0) { + if (_GPR[m_Opcode.rs].W[0] < 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1084,14 +1211,18 @@ void R4300iOp32::REGIMM_BLTZ (void) { CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::REGIMM_BGEZ (void) { +void R4300iOp32::REGIMM_BGEZ (void) +{ m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] >= 0) { + if (_GPR[m_Opcode.rs].W[0] >= 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1100,13 +1231,17 @@ void R4300iOp32::REGIMM_BGEZ (void) { CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::REGIMM_BLTZL (void) { - if (_GPR[m_Opcode.rs].W[0] < 0) { +void R4300iOp32::REGIMM_BLTZL (void) +{ + if (_GPR[m_Opcode.rs].W[0] < 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -1116,14 +1251,18 @@ void R4300iOp32::REGIMM_BLTZL (void) { CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::REGIMM_BGEZL (void) { - if (_GPR[m_Opcode.rs].W[0] >= 0) { +void R4300iOp32::REGIMM_BGEZL (void) +{ + if (_GPR[m_Opcode.rs].W[0] >= 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -1133,15 +1272,19 @@ void R4300iOp32::REGIMM_BGEZL (void) { CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } -void R4300iOp32::REGIMM_BLTZAL (void) { +void R4300iOp32::REGIMM_BLTZAL (void) +{ m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] < 0) { + if (_GPR[m_Opcode.rs].W[0] < 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1150,15 +1293,19 @@ void R4300iOp32::REGIMM_BLTZAL (void) { CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } _GPR[31].W[0]= (long)((*_PROGRAM_COUNTER) + 8); } -void R4300iOp32::REGIMM_BGEZAL (void) { +void R4300iOp32::REGIMM_BGEZAL (void) +{ m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].W[0] >= 0) { + if (_GPR[m_Opcode.rs].W[0] >= 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1167,7 +1314,9 @@ void R4300iOp32::REGIMM_BGEZAL (void) { CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } _GPR[31].W[0] = (long)((*_PROGRAM_COUNTER) + 8); @@ -1186,16 +1335,19 @@ void R4300iOp32::COP0_MF (void) { _GPR[m_Opcode.rt].W[0] = (int)_CP0[m_Opcode.rd]; } -void R4300iOp32::COP0_MT (void) { +void R4300iOp32::COP0_MT (void) +{ if (LogOptions.LogCP0changes) { LogMessage("%08X: Writing 0x%X to %s register (Originally: 0x%08X)",(*_PROGRAM_COUNTER), _GPR[m_Opcode.rt].UW[0],CRegName::Cop0[m_Opcode.rd], _CP0[m_Opcode.rd]); - if (m_Opcode.rd == 11) { //Compare + if (m_Opcode.rd == 11) //Compare + { LogMessage("%08X: Cause register changed from %08X to %08X",(*_PROGRAM_COUNTER), g_Reg->CAUSE_REGISTER, (g_Reg->CAUSE_REGISTER & ~CAUSE_IP7)); } } - switch (m_Opcode.rd) { + switch (m_Opcode.rd) + { case 0: //Index case 2: //EntryLo0 case 3: //EntryLo1 @@ -1229,10 +1381,13 @@ void R4300iOp32::COP0_MT (void) { g_SystemTimer->UpdateCompareTimer(); break; case 12: //Status - if ((_CP0[m_Opcode.rd] & STATUS_FR) != (_GPR[m_Opcode.rt].UW[0] & STATUS_FR)) { + if ((_CP0[m_Opcode.rd] & STATUS_FR) != (_GPR[m_Opcode.rt].UW[0] & STATUS_FR)) + { _CP0[m_Opcode.rd] = _GPR[m_Opcode.rt].UW[0]; g_Reg->FixFpuLocations(); - } else { + } + else + { _CP0[m_Opcode.rd] = _GPR[m_Opcode.rt].UW[0]; } if ((_CP0[m_Opcode.rd] & 0x18) != 0 && g_Settings->LoadBool(Debugger_Enabled)) @@ -1254,12 +1409,14 @@ void R4300iOp32::COP0_MT (void) { } /************************** COP1 functions **************************/ -void R4300iOp32::COP1_MF (void) { +void R4300iOp32::COP1_MF (void) +{ TEST_COP1_USABLE_EXCEPTION _GPR[m_Opcode.rt].W[0] = *(int *)_FPR_S[m_Opcode.fs]; } -void R4300iOp32::COP1_CF (void) { +void R4300iOp32::COP1_CF (void) +{ TEST_COP1_USABLE_EXCEPTION if (m_Opcode.fs != 31 && m_Opcode.fs != 0) { @@ -1269,8 +1426,8 @@ void R4300iOp32::COP1_CF (void) { _GPR[m_Opcode.rt].W[0] = (int)_FPCR[m_Opcode.fs]; } -void R4300iOp32::COP1_DMT (void) { +void R4300iOp32::COP1_DMT (void) +{ TEST_COP1_USABLE_EXCEPTION *(__int64 *)_FPR_D[m_Opcode.fs] = _GPR[m_Opcode.rt].W[0]; } - diff --git a/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp b/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp index 1d4ead132..617b6e20a 100644 --- a/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp +++ b/Source/Project64/N64 System/Interpreter/Interpreter Ops.cpp @@ -37,7 +37,7 @@ const DWORD R4300iOp::LWL_MASK[4] = { 0x00000000, 0x000000FF,0x0000FFFF,0x00FFF const DWORD R4300iOp::LWR_MASK[4] = { 0xFFFFFF00, 0xFFFF0000,0xFF000000,0x0000000 }; const int R4300iOp::SWL_SHIFT[4] = { 0, 8, 16, 24 }; -const int R4300iOp::SWR_SHIFT[4] = { 24, 16 , 8, 0 }; +const int R4300iOp::SWR_SHIFT[4] = { 24, 16 , 8, 0 }; const int R4300iOp::LWL_SHIFT[4] = { 0, 8, 16, 24}; const int R4300iOp::LWR_SHIFT[4] = { 24, 16 ,8, 0 }; @@ -710,8 +710,14 @@ bool DelaySlotEffectsCompare (DWORD PC, DWORD Reg1, DWORD Reg2); void TestInterpreterJump (DWORD PC, DWORD TargetPC, int Reg1, int Reg2) { - if (PC != TargetPC) { return; } - if (DelaySlotEffectsCompare(PC,Reg1,Reg2)) { return; } + if (PC != TargetPC) + { + return; + } + if (DelaySlotEffectsCompare(PC,Reg1,Reg2)) + { + return; + } R4300iOp::m_NextInstruction = PERMLOOP_DO_DELAY; R4300iOp::m_TestTimer = TRUE; } @@ -742,7 +748,8 @@ void R4300iOp::JAL (void) void R4300iOp::BEQ (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW == _GPR[m_Opcode.rt].DW) { + if (_GPR[m_Opcode.rs].DW == _GPR[m_Opcode.rt].DW) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -751,7 +758,9 @@ void R4300iOp::BEQ (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } @@ -759,7 +768,8 @@ void R4300iOp::BEQ (void) void R4300iOp::BNE (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW != _GPR[m_Opcode.rt].DW) { + if (_GPR[m_Opcode.rs].DW != _GPR[m_Opcode.rt].DW) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -768,7 +778,9 @@ void R4300iOp::BNE (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } @@ -776,7 +788,8 @@ void R4300iOp::BNE (void) void R4300iOp::BLEZ (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW <= 0) { + if (_GPR[m_Opcode.rs].DW <= 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -785,7 +798,9 @@ void R4300iOp::BLEZ (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } @@ -793,7 +808,8 @@ void R4300iOp::BLEZ (void) void R4300iOp::BGTZ (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW > 0) { + if (_GPR[m_Opcode.rs].DW > 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -802,7 +818,9 @@ void R4300iOp::BGTZ (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } @@ -810,13 +828,15 @@ void R4300iOp::BGTZ (void) void R4300iOp::ADDI (void) { #ifdef Interpreter_StackTest - if (m_Opcode.rs == 29 && m_Opcode.rt == 29) { + if (m_Opcode.rs == 29 && m_Opcode.rt == 29) + { StackValue += (short)m_Opcode.immediate; } #endif _GPR[m_Opcode.rt].DW = (_GPR[m_Opcode.rs].W[0] + ((short)m_Opcode.immediate)); #ifdef Interpreter_StackTest - if (m_Opcode.rt == 29 && m_Opcode.rs != 29) { + if (m_Opcode.rt == 29 && m_Opcode.rs != 29) + { StackValue = _GPR[m_Opcode.rt].W[0]; } #endif @@ -825,13 +845,15 @@ void R4300iOp::ADDI (void) void R4300iOp::ADDIU (void) { #ifdef Interpreter_StackTest - if (m_Opcode.rs == 29 && m_Opcode.rt == 29) { + if (m_Opcode.rs == 29 && m_Opcode.rt == 29) + { StackValue += (short)m_Opcode.immediate; } #endif _GPR[m_Opcode.rt].DW = (_GPR[m_Opcode.rs].W[0] + ((short)m_Opcode.immediate)); #ifdef Interpreter_StackTest - if (m_Opcode.rt == 29 && m_Opcode.rs != 29) { + if (m_Opcode.rt == 29 && m_Opcode.rs != 29) + { StackValue = _GPR[m_Opcode.rt].W[0]; } #endif @@ -839,9 +861,12 @@ void R4300iOp::ADDIU (void) void R4300iOp::SLTI (void) { - if (_GPR[m_Opcode.rs].DW < (__int64)((short)m_Opcode.immediate)) { + if (_GPR[m_Opcode.rs].DW < (__int64)((short)m_Opcode.immediate)) + { _GPR[m_Opcode.rt].DW = 1; - } else { + } + else + { _GPR[m_Opcode.rt].DW = 0; } } @@ -874,7 +899,8 @@ void R4300iOp::LUI (void) { _GPR[m_Opcode.rt].DW = (long)((short)m_Opcode.offset << 16); #ifdef Interpreter_StackTest - if (m_Opcode.rt == 29) { + if (m_Opcode.rt == 29) + { StackValue = _GPR[m_Opcode.rt].W[0]; } #endif @@ -882,7 +908,8 @@ void R4300iOp::LUI (void) void R4300iOp::BEQL (void) { - if (_GPR[m_Opcode.rs].DW == _GPR[m_Opcode.rt].DW) { + if (_GPR[m_Opcode.rs].DW == _GPR[m_Opcode.rt].DW) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -892,7 +919,9 @@ void R4300iOp::BEQL (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } @@ -900,7 +929,8 @@ void R4300iOp::BEQL (void) void R4300iOp::BNEL (void) { - if (_GPR[m_Opcode.rs].DW != _GPR[m_Opcode.rt].DW) { + if (_GPR[m_Opcode.rs].DW != _GPR[m_Opcode.rt].DW) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -910,7 +940,9 @@ void R4300iOp::BNEL (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } @@ -918,7 +950,8 @@ void R4300iOp::BNEL (void) void R4300iOp::BLEZL (void) { - if (_GPR[m_Opcode.rs].DW <= 0) { + if (_GPR[m_Opcode.rs].DW <= 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -928,7 +961,9 @@ void R4300iOp::BLEZL (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } @@ -936,7 +971,8 @@ void R4300iOp::BLEZL (void) void R4300iOp::BGTZL (void) { - if (_GPR[m_Opcode.rs].DW > 0) { + if (_GPR[m_Opcode.rs].DW > 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -946,7 +982,9 @@ void R4300iOp::BGTZL (void) m_NextInstruction = PERMLOOP_DO_DELAY; } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } @@ -1014,12 +1052,16 @@ void R4300iOp::LDR (void) void R4300iOp::LB (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LB TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rt].B[0]; } } @@ -1027,13 +1069,20 @@ void R4300iOp::LB (void) void R4300iOp::LH (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } - if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) { - if (bShowTLBMisses()) { + if ((Address & 1) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } + if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LH TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rt].HW[0]; } } @@ -1062,19 +1111,26 @@ void R4300iOp::LWL (void) void R4300iOp::LW (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } if (LogOptions.GenerateLog) { Log_LW((*_PROGRAM_COUNTER),Address); } - if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LW TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rt].W[0]; } } @@ -1082,12 +1138,16 @@ void R4300iOp::LW (void) void R4300iOp::LBU (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LBU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].UDW = _GPR[m_Opcode.rt].UB[0]; } } @@ -1095,13 +1155,20 @@ void R4300iOp::LBU (void) void R4300iOp::LHU (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } - if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) { - if (bShowTLBMisses()) { + if ((Address & 1) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } + if (!g_MMU->LH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LHU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].UDW = _GPR[m_Opcode.rt].UHW[0]; } } @@ -1130,14 +1197,21 @@ void R4300iOp::LWR (void) void R4300iOp::LWU (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } - if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) { - if (bShowTLBMisses()) { + if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LWU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].UDW = _GPR[m_Opcode.rt].UW[0]; } } @@ -1145,7 +1219,8 @@ void R4300iOp::LWU (void) void R4300iOp::SB (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if (!g_MMU->SB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) { + if (!g_MMU->SB_VAddr(Address,_GPR[m_Opcode.rt].UB[0])) + { if (bHaveDebugger()) { g_Notify->BreakPoint(__FILEW__,__LINE__); @@ -1160,7 +1235,10 @@ void R4300iOp::SB (void) void R4300iOp::SH (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } + if ((Address & 1) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,FALSE); + } if (!g_MMU->SH_VAddr(Address,_GPR[m_Opcode.rt].UHW[0])) { if (bHaveDebugger()) @@ -1214,7 +1292,10 @@ void R4300iOp::SWL (void) void R4300iOp::SW (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,FALSE); + } if (LogOptions.GenerateLog) { Log_SW((*_PROGRAM_COUNTER),Address,_GPR[m_Opcode.rt].UW[0]); @@ -1238,8 +1319,8 @@ QWORD SDL_MASK[8] = { 0,0xFF00000000000000, 0xFFFFFFFF00000000, 0xFFFFFFFFFF000000, 0xFFFFFFFFFFFF0000, - 0xFFFFFFFFFFFFFF00 - }; + 0xFFFFFFFFFFFFFF00 }; + int SDL_SHIFT[8] = { 0, 8, 16, 24, 32, 40, 48, 56 }; void R4300iOp::SDL (void) @@ -1286,8 +1367,8 @@ QWORD SDR_MASK[8] = { 0x00FFFFFFFFFFFFFF, 0x0000000000FFFFFF, 0x000000000000FFFF, 0x00000000000000FF, - 0x0000000000000000 - }; + 0x0000000000000000 }; + int SDR_SHIFT[8] = { 56,48,40,32,24,16,8,0 }; void R4300iOp::SDR (void) @@ -1365,7 +1446,10 @@ void R4300iOp::SWR (void) void R4300iOp::CACHE (void) { - if (!LogOptions.LogCache) { return; } + if (!LogOptions.LogCache) + { + return; + } LogMessage("%08X: Cache operation %d, 0x%08X", (*_PROGRAM_COUNTER), m_Opcode.rt, _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset ); } @@ -1373,7 +1457,10 @@ void R4300iOp::CACHE (void) void R4300iOp::LL (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } if (!g_MMU->LW_VAddr(Address,_GPR[m_Opcode.rt].UW[0])) { @@ -1382,7 +1469,9 @@ void R4300iOp::LL (void) g_Notify->DisplayError(L"LL TLB: %X",Address); } TLB_READ_EXCEPTION(Address); - } else { + } + else + { _GPR[m_Opcode.rt].DW = _GPR[m_Opcode.rt].W[0]; (*_LLBit) = 1; } @@ -1392,9 +1481,14 @@ void R4300iOp::LWC1 (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (DWORD)((short)m_Opcode.offset); TEST_COP1_USABLE_EXCEPTION - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } - if (!g_MMU->LW_VAddr(Address,*(DWORD *)_FPR_S[m_Opcode.ft])) { - if (bShowTLBMisses()) { + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } + if (!g_MMU->LW_VAddr(Address,*(DWORD *)_FPR_S[m_Opcode.ft])) + { + if (bShowTLBMisses()) + { g_Notify->DisplayError(L"LWC1 TLB: %X",Address); } TLB_READ_EXCEPTION(Address); @@ -1404,7 +1498,10 @@ void R4300iOp::LWC1 (void) void R4300iOp::SC (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,FALSE); + } Log_SW((*_PROGRAM_COUNTER),Address,_GPR[m_Opcode.rt].UW[0]); if ((*_LLBit) == 1) { @@ -1423,7 +1520,10 @@ void R4300iOp::SC (void) void R4300iOp::LD (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 7) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } if (!g_MMU->LD_VAddr(Address,_GPR[m_Opcode.rt].UDW)) { if (bHaveDebugger()) @@ -1437,7 +1537,8 @@ void R4300iOp::LD (void) return; } #ifdef Interpreter_StackTest - if (m_Opcode.rt == 29) { + if (m_Opcode.rt == 29) + { StackValue = _GPR[m_Opcode.rt].W[0]; } #endif @@ -1449,7 +1550,10 @@ void R4300iOp::LDC1 (void) DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; TEST_COP1_USABLE_EXCEPTION - if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } + if ((Address & 7) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,TRUE); + } if (!g_MMU->LD_VAddr(Address,*(unsigned __int64 *)_FPR_D[m_Opcode.ft])) { if (bHaveDebugger()) @@ -1467,7 +1571,10 @@ void R4300iOp::SWC1 (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; TEST_COP1_USABLE_EXCEPTION - if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } + if ((Address & 3) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,FALSE); + } if (!g_MMU->SW_VAddr(Address,*(DWORD *)_FPR_S[m_Opcode.ft])) { @@ -1487,7 +1594,10 @@ void R4300iOp::SDC1 (void) DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; TEST_COP1_USABLE_EXCEPTION - if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } + if ((Address & 7) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,FALSE); + } if (!g_MMU->SD_VAddr(Address,*(__int64 *)_FPR_D[m_Opcode.ft])) { if (bHaveDebugger()) @@ -1504,7 +1614,10 @@ void R4300iOp::SDC1 (void) void R4300iOp::SD (void) { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; - if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } + if ((Address & 7) != 0) + { + ADDRESS_ERROR_EXCEPTION(Address,FALSE); + } if (!g_MMU->SD_VAddr(Address,_GPR[m_Opcode.rt].UDW)) { if (bHaveDebugger()) @@ -1579,6 +1692,7 @@ void R4300iOp::SPECIAL_BREAK (void) void R4300iOp::SPECIAL_SYNC (void) { + } void R4300iOp::SPECIAL_MFHI (void) @@ -1632,11 +1746,17 @@ void R4300iOp::SPECIAL_MULTU (void) void R4300iOp::SPECIAL_DIV (void) { - if ( _GPR[m_Opcode.rt].UDW != 0 ) { + if ( _GPR[m_Opcode.rt].UDW != 0 ) + { _RegLO->DW = _GPR[m_Opcode.rs].W[0] / _GPR[m_Opcode.rt].W[0]; _RegHI->DW = _GPR[m_Opcode.rs].W[0] % _GPR[m_Opcode.rt].W[0]; - } else { - if (bShowDivByZero()) { g_Notify->DisplayError(L"DIV by 0 ???"); } + } + else + { + if (bShowDivByZero()) + { + g_Notify->DisplayError(L"DIV by 0 ???"); + } _RegLO->DW = 0; _RegHI->DW = 0; } @@ -1648,8 +1768,13 @@ void R4300iOp::SPECIAL_DIVU (void) { _RegLO->DW = (int)(_GPR[m_Opcode.rs].UW[0] / _GPR[m_Opcode.rt].UW[0]); _RegHI->DW = (int)(_GPR[m_Opcode.rs].UW[0] % _GPR[m_Opcode.rt].UW[0]); - } else { - if (bShowDivByZero()) { g_Notify->DisplayError(L"DIVU by 0 ???"); } + } + else + { + if (bShowDivByZero()) + { + g_Notify->DisplayError(L"DIVU by 0 ???"); + } _RegLO->DW = 0; _RegHI->DW = 0; } @@ -1685,10 +1810,13 @@ void R4300iOp::SPECIAL_DMULTU (void) void R4300iOp::SPECIAL_DDIV (void) { - if ( _GPR[m_Opcode.rt].UDW != 0 ) { + if ( _GPR[m_Opcode.rt].UDW != 0 ) + { _RegLO->DW = _GPR[m_Opcode.rs].DW / _GPR[m_Opcode.rt].DW; _RegHI->DW = _GPR[m_Opcode.rs].DW % _GPR[m_Opcode.rt].DW; - } else { + } + else + { if (bHaveDebugger()) { g_Notify->DisplayError(L"DDIV by 0 ???"); @@ -1698,10 +1826,13 @@ void R4300iOp::SPECIAL_DDIV (void) void R4300iOp::SPECIAL_DDIVU (void) { - if ( _GPR[m_Opcode.rt].UDW != 0 ) { + if ( _GPR[m_Opcode.rt].UDW != 0 ) + { _RegLO->UDW = _GPR[m_Opcode.rs].UDW / _GPR[m_Opcode.rt].UDW; _RegHI->UDW = _GPR[m_Opcode.rs].UDW % _GPR[m_Opcode.rt].UDW; - } else { + } + else + { if (bHaveDebugger()) { g_Notify->DisplayError(L"DDIVU by 0 ???"); @@ -1738,7 +1869,8 @@ void R4300iOp::SPECIAL_OR (void) { _GPR[m_Opcode.rd].DW = _GPR[m_Opcode.rs].DW | _GPR[m_Opcode.rt].DW; #ifdef Interpreter_StackTest - if (m_Opcode.rd == 29) { + if (m_Opcode.rd == 29) + { StackValue = _GPR[m_Opcode.rd].W[0]; } #endif @@ -1756,18 +1888,24 @@ void R4300iOp::SPECIAL_NOR (void) void R4300iOp::SPECIAL_SLT (void) { - if (_GPR[m_Opcode.rs].DW < _GPR[m_Opcode.rt].DW) { + if (_GPR[m_Opcode.rs].DW < _GPR[m_Opcode.rt].DW) + { _GPR[m_Opcode.rd].DW = 1; - } else { + } + else + { _GPR[m_Opcode.rd].DW = 0; } } void R4300iOp::SPECIAL_SLTU (void) { - if (_GPR[m_Opcode.rs].UDW < _GPR[m_Opcode.rt].UDW) { + if (_GPR[m_Opcode.rs].UDW < _GPR[m_Opcode.rt].UDW) + { _GPR[m_Opcode.rd].DW = 1; - } else { + } + else + { _GPR[m_Opcode.rd].DW = 0; } } @@ -1834,7 +1972,8 @@ void R4300iOp::SPECIAL_DSRA32 (void) void R4300iOp::REGIMM_BLTZ (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW < 0) { + if (_GPR[m_Opcode.rs].DW < 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1843,7 +1982,9 @@ void R4300iOp::REGIMM_BLTZ (void) CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } @@ -1851,7 +1992,8 @@ void R4300iOp::REGIMM_BLTZ (void) void R4300iOp::REGIMM_BGEZ (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW >= 0) { + if (_GPR[m_Opcode.rs].DW >= 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1860,14 +2002,17 @@ void R4300iOp::REGIMM_BGEZ (void) CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } void R4300iOp::REGIMM_BLTZL (void) { - if (_GPR[m_Opcode.rs].DW < 0) { + if (_GPR[m_Opcode.rs].DW < 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -1877,7 +2022,9 @@ void R4300iOp::REGIMM_BLTZL (void) CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } @@ -1885,7 +2032,8 @@ void R4300iOp::REGIMM_BLTZL (void) void R4300iOp::REGIMM_BGEZL (void) { - if (_GPR[m_Opcode.rs].DW >= 0) { + if (_GPR[m_Opcode.rs].DW >= 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) @@ -1895,7 +2043,9 @@ void R4300iOp::REGIMM_BGEZL (void) CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } @@ -1904,7 +2054,8 @@ void R4300iOp::REGIMM_BGEZL (void) void R4300iOp::REGIMM_BLTZAL (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW < 0) { + if (_GPR[m_Opcode.rs].DW < 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1913,7 +2064,9 @@ void R4300iOp::REGIMM_BLTZAL (void) CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } _GPR[31].DW= (long)((*_PROGRAM_COUNTER) + 8); @@ -1922,7 +2075,8 @@ void R4300iOp::REGIMM_BLTZAL (void) void R4300iOp::REGIMM_BGEZAL (void) { m_NextInstruction = DELAY_SLOT; - if (_GPR[m_Opcode.rs].DW >= 0) { + if (_GPR[m_Opcode.rs].DW >= 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; if ((*_PROGRAM_COUNTER) == m_JumpToLocation) { @@ -1931,7 +2085,9 @@ void R4300iOp::REGIMM_BGEZAL (void) CInterpreterCPU::InPermLoop(); } } - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } _GPR[31].DW = (long)((*_PROGRAM_COUNTER) + 8); @@ -1962,7 +2118,8 @@ void R4300iOp::COP0_MT (void) } } - switch (m_Opcode.rd) { + switch (m_Opcode.rd) + { case 0: //Index case 2: //EntryLo0 case 3: //EntryLo1 @@ -1996,10 +2153,13 @@ void R4300iOp::COP0_MT (void) g_SystemTimer->UpdateCompareTimer(); break; case 12: //Status - if ((_CP0[m_Opcode.rd] & STATUS_FR) != (_GPR[m_Opcode.rt].UW[0] & STATUS_FR)) { + if ((_CP0[m_Opcode.rd] & STATUS_FR) != (_GPR[m_Opcode.rt].UW[0] & STATUS_FR)) + { _CP0[m_Opcode.rd] = _GPR[m_Opcode.rt].UW[0]; g_Reg->FixFpuLocations(); - } else { + } + else + { _CP0[m_Opcode.rd] = _GPR[m_Opcode.rt].UW[0]; } if ((_CP0[m_Opcode.rd] & 0x18) != 0 && bHaveDebugger()) @@ -2023,35 +2183,50 @@ void R4300iOp::COP0_MT (void) /************************** COP0 CO functions ***********************/ void R4300iOp::COP0_CO_TLBR (void) { - if (!g_System->bUseTlb()) { return; } + if (!g_System->bUseTlb()) + { + return; + } g_TLB->ReadEntry(); } void R4300iOp::COP0_CO_TLBWI (void) { - if (!g_System->bUseTlb()) { return; } + if (!g_System->bUseTlb()) + { + return; + } g_TLB->WriteEntry(g_Reg->INDEX_REGISTER & 0x1F,FALSE); } void R4300iOp::COP0_CO_TLBWR (void) { - if (!g_System->bUseTlb()) { return; } + if (!g_System->bUseTlb()) + { + return; + } g_TLB->WriteEntry(g_Reg->RANDOM_REGISTER & 0x1F,true); } void R4300iOp::COP0_CO_TLBP (void) { - if (!g_System->bUseTlb()) { return; } + if (!g_System->bUseTlb()) + { + return; + } g_TLB->Probe(); } void R4300iOp::COP0_CO_ERET (void) { m_NextInstruction = JUMP; - if ((g_Reg->STATUS_REGISTER & STATUS_ERL) != 0) { + if ((g_Reg->STATUS_REGISTER & STATUS_ERL) != 0) + { m_JumpToLocation = g_Reg->ERROREPC_REGISTER; g_Reg->STATUS_REGISTER &= ~STATUS_ERL; - } else { + } + else + { m_JumpToLocation = g_Reg->EPC_REGISTER; g_Reg->STATUS_REGISTER &= ~STATUS_EXL; } @@ -2078,7 +2253,10 @@ void R4300iOp::COP1_CF (void) TEST_COP1_USABLE_EXCEPTION if (m_Opcode.fs != 31 && m_Opcode.fs != 0) { - if (bHaveDebugger()) { g_Notify->DisplayError(L"CFC1 what register are you writing to ?"); } + if (bHaveDebugger()) + { + g_Notify->DisplayError(L"CFC1 what register are you writing to ?"); + } return; } _GPR[m_Opcode.rt].DW = (int)_FPCR[m_Opcode.fs]; @@ -2101,7 +2279,8 @@ void R4300iOp::COP1_CT (void) TEST_COP1_USABLE_EXCEPTION if (m_Opcode.fs == 31) { _FPCR[m_Opcode.fs] = _GPR[m_Opcode.rt].W[0]; - switch((_FPCR[m_Opcode.fs] & 3)) { + switch ((_FPCR[m_Opcode.fs] & 3)) + { case 0: *_RoundingModel = ROUND_NEAR; break; case 1: *_RoundingModel = ROUND_CHOP; break; case 2: *_RoundingModel = ROUND_UP; break; @@ -2109,7 +2288,10 @@ void R4300iOp::COP1_CT (void) } return; } - if (bHaveDebugger()) { g_Notify->DisplayError(L"CTC1 what register are you writing to ?"); } + if (bHaveDebugger()) + { + g_Notify->DisplayError(L"CTC1 what register are you writing to ?"); + } } /************************* COP1: BC1 functions ***********************/ @@ -2117,9 +2299,12 @@ void R4300iOp::COP1_BCF (void) { TEST_COP1_USABLE_EXCEPTION m_NextInstruction = DELAY_SLOT; - if ((_FPCR[31] & FPCSR_C) == 0) { + if ((_FPCR[31] & FPCSR_C) == 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } @@ -2128,9 +2313,12 @@ void R4300iOp::COP1_BCT (void) { TEST_COP1_USABLE_EXCEPTION m_NextInstruction = DELAY_SLOT; - if ((_FPCR[31] & FPCSR_C) != 0) { + if ((_FPCR[31] & FPCSR_C) != 0) + { m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; - } else { + } + else + { m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } @@ -2138,10 +2326,13 @@ void R4300iOp::COP1_BCT (void) void R4300iOp::COP1_BCFL (void) { TEST_COP1_USABLE_EXCEPTION - if ((_FPCR[31] & FPCSR_C) == 0) { + if ((_FPCR[31] & FPCSR_C) == 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } @@ -2150,17 +2341,22 @@ void R4300iOp::COP1_BCFL (void) void R4300iOp::COP1_BCTL (void) { TEST_COP1_USABLE_EXCEPTION - if ((_FPCR[31] & FPCSR_C) != 0) { + if ((_FPCR[31] & FPCSR_C) != 0) + { m_NextInstruction = DELAY_SLOT; m_JumpToLocation = (*_PROGRAM_COUNTER) + ((short)m_Opcode.offset << 2) + 4; - } else { + } + else + { m_NextInstruction = JUMP; m_JumpToLocation = (*_PROGRAM_COUNTER) + 8; } } /************************** COP1: S functions ************************/ -__inline void Float_RoundToInteger32( int * Dest, float * Source ) { - _asm { +__inline void Float_RoundToInteger32( int * Dest, float * Source ) +{ + _asm + { mov esi, [Source] mov edi, [Dest] fld dword ptr [esi] @@ -2168,8 +2364,10 @@ __inline void Float_RoundToInteger32( int * Dest, float * Source ) { } } -__inline void Float_RoundToInteger64( __int64 * Dest, float * Source ) { - _asm { +__inline void Float_RoundToInteger64( __int64 * Dest, float * Source ) +{ + _asm + { mov esi, [Source] mov edi, [Dest] fld dword ptr [esi] @@ -2212,7 +2410,8 @@ void R4300iOp::COP1_S_SQRT (void) float * Dest = (float *)_FPR_S[m_Opcode.fd]; float * Source = (float *)_FPR_S[m_Opcode.fs]; - _asm { + _asm + { push esi mov esi, dword ptr [Source] fld dword ptr [esi] @@ -2326,15 +2525,23 @@ void R4300iOp::COP1_S_CMP (void) if (_isnan(Temp0) || _isnan(Temp1)) { - if (bHaveDebugger()) { g_Notify->DisplayError(__FUNCTIONW__ L": Nan ?"); } + if (bHaveDebugger()) + { + g_Notify->DisplayError(__FUNCTIONW__ L": Nan ?"); + } less = FALSE; equal = FALSE; unorded = TRUE; if ((m_Opcode.funct & 8) != 0) { - if (bHaveDebugger()) { g_Notify->DisplayError(L"Signal InvalidOperationException\nin r4300i_COP1_S_CMP\n%X %ff\n%X %ff", Temp0,Temp0,Temp1,Temp1); } + if (bHaveDebugger()) + { + g_Notify->DisplayError(L"Signal InvalidOperationException\nin r4300i_COP1_S_CMP\n%X %ff\n%X %ff", Temp0,Temp0,Temp1,Temp1); + } } - } else { + } + else + { less = Temp0 < Temp1; equal = Temp0 == Temp1; unorded = FALSE; @@ -2343,17 +2550,22 @@ void R4300iOp::COP1_S_CMP (void) condition = ((m_Opcode.funct & 4) && less) | ((m_Opcode.funct & 2) && equal) | ((m_Opcode.funct & 1) && unorded); - if (condition) { + if (condition) + { _FPCR[31] |= FPCSR_C; - } else { + } + else + { _FPCR[31] &= ~FPCSR_C; } } /************************** COP1: D functions ************************/ -__inline void Double_RoundToInteger32( DWORD * Dest, double * Source ) { - _asm { +__inline void Double_RoundToInteger32( DWORD * Dest, double * Source ) +{ + _asm + { mov esi, [Source] mov edi, [Dest] fld qword ptr [esi] @@ -2361,8 +2573,10 @@ __inline void Double_RoundToInteger32( DWORD * Dest, double * Source ) { } } -__inline void Double_RoundToInteger64( unsigned __int64 * Dest, double * Source ) { - _asm { +__inline void Double_RoundToInteger64( unsigned __int64 * Dest, double * Source ) +{ + _asm + { mov esi, [Source] mov edi, [Dest] fld qword ptr [esi] @@ -2508,13 +2722,19 @@ void R4300iOp::COP1_D_CMP (void) if (_isnan(Temp0.D) || _isnan(Temp1.D)) { - if (bHaveDebugger()) { g_Notify->DisplayError(__FUNCTIONW__ L": Nan ?"); } + if (bHaveDebugger()) + { + g_Notify->DisplayError(__FUNCTIONW__ L": Nan ?"); + } less = FALSE; equal = FALSE; unorded = TRUE; if ((m_Opcode.funct & 8) != 0) { - if (bHaveDebugger()) { g_Notify->DisplayError(L"Signal InvalidOperationException\nin " __FUNCTIONW__); } + if (bHaveDebugger()) + { + g_Notify->DisplayError(L"Signal InvalidOperationException\nin " __FUNCTIONW__); + } } } else @@ -2527,9 +2747,12 @@ void R4300iOp::COP1_D_CMP (void) condition = ((m_Opcode.funct & 4) && less) | ((m_Opcode.funct & 2) && equal) | ((m_Opcode.funct & 1) && unorded); - if (condition) { + if (condition) + { _FPCR[31] |= FPCSR_C; - } else { + } + else + { _FPCR[31] &= ~FPCSR_C; } } @@ -2573,17 +2796,21 @@ void R4300iOp::UnknownOpcode (void) g_Notify->BreakPoint(__FILEW__,__LINE__); #ifdef tofix - if (HaveDebugger && !inFullScreen) { + if (HaveDebugger && !inFullScreen) + { int response; strcat(Message,"\n\nDo you wish to enter the debugger ?"); response = MessageBox(NULL,Message,GS(MSG_MSGBOX_TITLE), MB_YESNO | MB_ICONERROR ); - if (response == IDYES) { + if (response == IDYES) + { Enter_R4300i_Commands_Window (); } ExitThread(0); - } else { + } + else + { g_Notify->DisplayError(Message); ExitThread(0); }