Files
ppsspp/Core/MIPS/Interpreter.h
T
Henrik RydgårdandClaude Opus 5.5 99335adb40 CPU: Keep COP0 in MIPSState, and interpret eret
The COP0 register file was a static array in the interpreter, shared by
anything that ran kernel code and lost on a savestate load. It's now part of
MIPSState and saved with it (MIPSState section version 5).

eret returns to EPC, or to ErrorEPC with Status.ERL set, as MIPS32 defines
it; that isn't checked against a PSP yet. It and halt carry a new ENDS_BLOCK
flag: the IR frontend ends the block after them and exits to whatever PC the
interpreter left, and the interpreter's IR-matching block timing stops there
too. TestCPUEret runs it on the interpreter, IR interpreter and JIT.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-20 12:36:52 +02:00

58 lines
2.3 KiB
C++

// Copyright (c) 2012- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#pragma once
#include "Common/CommonTypes.h"
#include "Core/MIPS/MIPS.h"
int MIPS_InterpretSingleStep(MIPSState *mips);
namespace MIPSInt
{
void Int_Syscall(MIPSState *mips, MIPSOpcode op);
void Int_mxc1(MIPSState *mips, MIPSOpcode op);
void Int_Cop0(MIPSState *mips, MIPSOpcode op);
void Int_Eret(MIPSState *mips, MIPSOpcode op);
void Int_RelBranch(MIPSState *mips, MIPSOpcode op);
void Int_RelBranchRI(MIPSState *mips, MIPSOpcode op);
void Int_IType(MIPSState *mips, MIPSOpcode op);
void Int_ITypeMem(MIPSState *mips, MIPSOpcode op);
void Int_RType2(MIPSState *mips, MIPSOpcode op);
void Int_RType3(MIPSState *mips, MIPSOpcode op);
void Int_ShiftType(MIPSState *mips, MIPSOpcode op);
void Int_MulDivType(MIPSState *mips, MIPSOpcode op);
void Int_JumpType(MIPSState *mips, MIPSOpcode op);
void Int_JumpRegType(MIPSState *mips, MIPSOpcode op);
void Int_Allegrex2(MIPSState *mips, MIPSOpcode op);
void Int_FPULS(MIPSState *mips, MIPSOpcode op);
void Int_FPU3op(MIPSState *mips, MIPSOpcode op);
void Int_FPU2op(MIPSState *mips, MIPSOpcode op);
void Int_Allegrex(MIPSState *mips, MIPSOpcode op);
void Int_FPUComp(MIPSState *mips, MIPSOpcode op);
void Int_FPUBranch(MIPSState *mips, MIPSOpcode op);
void Int_CallReplacement(MIPSState *mips, MIPSOpcode op);
void Int_Special2(MIPSState *mips, MIPSOpcode op);
void Int_Special3(MIPSState *mips, MIPSOpcode op);
void Int_Interrupt(MIPSState *mips, MIPSOpcode op);
void Int_Cache(MIPSState *mips, MIPSOpcode op);
void Int_Sync(MIPSState *mips, MIPSOpcode op);
void Int_Break(MIPSState *mips, MIPSOpcode op);
void Int_StoreSync(MIPSState *mips, MIPSOpcode op);
}