void r4300i_SH (void) { s32 Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } if (!r4300i_SH_VAddr(Address,GPR[Opcode.rt].UHW[0])) { //DisplayError("SH TLB: %X",Address); } }
void r4300i_LD (void) { s32 Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (!r4300i_LD_VAddr(Address,&GPR[Opcode.rt].UDW)) { //DisplayError("LD TLB: %X",Address); } }
void r4300i_LL (void) { uint32_t Address = GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset; uintptr_t ll = 0; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,1); } if (Opcode.rt == 0) { return; } if (!r4300i_LW_VAddr(Address,&GPR[Opcode.rt].UW[0])) { //if (ShowTLBMisses) { DisplayError("LW TLB: %X",Address); //} TLB_READ_EXCEPTION(Address); } else { GPR[Opcode.rt].DW = GPR[Opcode.rt].W[0]; } LLBit = 1; LLAddr = Address; ll = LLAddr; TranslateVaddr(&ll); LLAddr = ll; }
void _fastcall r4300i_SD (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } if (!r4300i_SD_VAddr(Address,GPR[Opcode.rt].UDW)) { DisplayError("SD TLB: %X",Address); } }
void R4300iOp32::LW() { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; 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()) { g_Notify->DisplayError(stdstr_f(__FUNCTION__ " TLB: %X", Address).ToUTF16().c_str()); } TLB_READ_EXCEPTION(Address); } else { _GPR[m_Opcode.rt].W[0] = _GPR[m_Opcode.rt].W[0]; } }
void _fastcall r4300i_SH (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } if (!r4300i_SH_VAddr(Address,GPR[Opcode.rt].UHW[0])) { #ifndef EXTERNAL_RELEASE DisplayError("SH TLB: %X",Address); #endif } }
void _fastcall r4300i_SDC1 (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; TEST_COP1_USABLE_EXCEPTION if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } if (!r4300i_SD_VAddr(Address,*(__int64 *)FPRDoubleLocation[Opcode.ft])) { DisplayError("SDC1 TLB: %X",Address); } }
void r4300i_SWC1 (void) { s32 Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; TEST_COP1_USABLE_EXCEPTION if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } if (!r4300i_SW_VAddr(Address,*(s32 *)FPRFloatLocation[Opcode.ft])) { //DisplayError("SWC1 TLB: %X",Address); } }
void r4300i_LDC1 (void) { s32 Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; TEST_COP1_USABLE_EXCEPTION if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (!r4300i_LD_VAddr(Address,&*(u64 *)FPRDoubleLocation[Opcode.ft])) { //DisplayError("LD TLB: %X",Address); } }
void _fastcall r4300i_SWC1 (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; TEST_COP1_USABLE_EXCEPTION if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } if (!r4300i_SW_VAddr(Address,*(DWORD *)FPRFloatLocation[Opcode.ft])) { #ifndef EXTERNAL_RELEASE DisplayError("SWC1 TLB: %X",Address); #endif } }
void _fastcall r4300i_LDC1 (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; TEST_COP1_USABLE_EXCEPTION if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (!r4300i_LD_VAddr(Address,&*(unsigned __int64 *)FPRDoubleLocation[Opcode.ft])) { #ifndef EXTERNAL_RELEASE DisplayError("LD TLB: %X",Address); #endif } }
void r4300i_SD (void) { uint32_t Address = GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset; if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,0); } if (!r4300i_SD_VAddr(Address,GPR[Opcode.rt].UDW)) { } }
void _fastcall r4300i_LWC1 (void) { DWORD Address = GPR[Opcode.base].UW[0] + (DWORD)((short)Opcode.offset); TEST_COP1_USABLE_EXCEPTION if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (!r4300i_LW_VAddr(Address,&*(DWORD *)FPRFloatLocation[Opcode.ft])) { if (ShowTLBMisses) { DisplayError("LWC1 TLB: %X",Address); } TLB_READ_EXCEPTION(Address); } }
void r4300i_SW (void) { uint32_t Address = GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,0); } if (!r4300i_SW_VAddr(Address,GPR[Opcode.rt].UW[0])) { DisplayError("SW TLB: %X",Address); } }
void _fastcall r4300i_LHU (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (!r4300i_LH_VAddr(Address,&GPR[Opcode.rt].UHW[0])) { if (ShowTLBMisses) { DisplayError("LHU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); } else { GPR[Opcode.rt].UDW = GPR[Opcode.rt].UHW[0]; } }
void r4300i_SDC1 (void) { uint32_t Address = GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset; TEST_COP1_USABLE_EXCEPTION if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,0); } if (!r4300i_SD_VAddr(Address,*(int64_t *)FPRDoubleLocation[Opcode.ft])) { } }
void _fastcall r4300i_SC (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } #if (!defined(EXTERNAL_RELEASE)) Log_SW(PROGRAM_COUNTER,Address,GPR[Opcode.rt].UW[0]); #endif if (LLBit == 1) { if (!r4300i_SW_VAddr(Address,GPR[Opcode.rt].UW[0])) { DisplayError("SW TLB: %X",Address); } } GPR[Opcode.rt].UW[0] = LLBit; }
void _fastcall r4300i_LD (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 7) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (!r4300i_LD_VAddr(Address,&GPR[Opcode.rt].UDW)) { #ifndef EXTERNAL_RELEASE DisplayError("LD TLB: %X",Address); #endif } #ifdef Interpreter_StackTest if (Opcode.rt == 29) { StackValue = GPR[Opcode.rt].W[0]; } #endif }
void _fastcall r4300i_SW (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,FALSE); } #if (!defined(EXTERNAL_RELEASE)) Log_SW(PROGRAM_COUNTER,Address,GPR[Opcode.rt].UW[0]); #endif if (!r4300i_SW_VAddr(Address,GPR[Opcode.rt].UW[0])) { DisplayError("SW TLB: %X",Address); } //TranslateVaddr(&Address); //if (Address == 0x00090AA0) { // LogMessage("%X: Write %X to %X",PROGRAM_COUNTER,GPR[Opcode.rt].UW[0],GPR[Opcode.base].UW[0] + (short)Opcode.offset); //} }
void r4300i_LWU (void) { s32 Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (Opcode.rt == 0) { return; } if (!r4300i_LW_VAddr(Address,&GPR[Opcode.rt].UW[0])) { if (ShowTLBMisses) { //DisplayError("LWU TLB: %X",Address); } TLB_READ_EXCEPTION(Address); } else { GPR[Opcode.rt].UDW = GPR[Opcode.rt].UW[0]; } }
void r4300i_LWC1 (void) { uint32_t Address = GPR[Opcode.base].UW[0] + (uint32_t)((int16_t)Opcode.offset); TEST_COP1_USABLE_EXCEPTION if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,1); } if (!r4300i_LW_VAddr(Address,&*(uint32_t *)FPRFloatLocation[Opcode.ft])) { //if (ShowTLBMisses) { DisplayError("LWC1 TLB: %X",Address); //} TLB_READ_EXCEPTION(Address); } }
void _fastcall r4300i_LL (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } if (Opcode.rt == 0) { return; } if (!r4300i_LW_VAddr(Address,&GPR[Opcode.rt].UW[0])) { if (ShowTLBMisses) { DisplayError("LW TLB: %X",Address); } TLB_READ_EXCEPTION(Address); } else { GPR[Opcode.rt].DW = GPR[Opcode.rt].W[0]; } LLBit = 1; LLAddr = Address; TranslateVaddr(&LLAddr); }
void r4300i_LHU (void) { uint32_t Address = GPR[Opcode.base].UW[0] + (int16_t)Opcode.offset; if ((Address & 1) != 0) { ADDRESS_ERROR_EXCEPTION(Address,1); } if (!r4300i_LH_VAddr(Address,&GPR[Opcode.rt].UHW[0])) { //if (ShowTLBMisses) { DisplayError("LHU TLB: %X",Address); //} TLB_READ_EXCEPTION(Address); } else { GPR[Opcode.rt].UDW = GPR[Opcode.rt].UHW[0]; } }
void R4300iOp32::LHU() { 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()) { g_Notify->DisplayError(stdstr_f(__FUNCTION__ " TLB: %X", Address).ToUTF16().c_str()); } TLB_READ_EXCEPTION(Address); } else { _GPR[m_Opcode.rt].UW[0] = _GPR[m_Opcode.rt].UHW[0]; } }
void R4300iOp32::LWU() { DWORD Address = _GPR[m_Opcode.base].UW[0] + (short)m_Opcode.offset; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address, true); } 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 { _GPR[m_Opcode.rt].UW[0] = _GPR[m_Opcode.rt].UW[0]; } }
void _fastcall r4300i_LW (void) { DWORD Address = GPR[Opcode.base].UW[0] + (short)Opcode.offset; if ((Address & 3) != 0) { ADDRESS_ERROR_EXCEPTION(Address,TRUE); } #if (!defined(EXTERNAL_RELEASE)) Log_LW(PROGRAM_COUNTER,Address); #endif if (Opcode.rt == 0) { return; } if (!r4300i_LW_VAddr(Address,&GPR[Opcode.rt].UW[0])) { if (ShowTLBMisses) { DisplayError("LW TLB: %X",Address); } TLB_READ_EXCEPTION(Address); } else { GPR[Opcode.rt].DW = GPR[Opcode.rt].W[0]; //TranslateVaddr(&Address); //if (Address == 0x00090AA0) { // LogMessage("%X: Read %X from %X",PROGRAM_COUNTER,GPR[Opcode.rt].UW[0],GPR[Opcode.base].UW[0] + (short)Opcode.offset); //} } }