mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-06-07 17:07:15 +00:00
fix: PPTC blacklist trigger conditions
See merge request ryubing/ryujinx!28
This commit is contained in:
parent
b71a4cb745
commit
9b429afbb4
@ -33,7 +33,7 @@ namespace ARMeilleure.Translation.PTC
|
|||||||
private const string OuterHeaderMagicString = "PTCohd\0\0";
|
private const string OuterHeaderMagicString = "PTCohd\0\0";
|
||||||
private const string InnerHeaderMagicString = "PTCihd\0\0";
|
private const string InnerHeaderMagicString = "PTCihd\0\0";
|
||||||
|
|
||||||
private const uint InternalVersion = 7007; //! To be incremented manually for each change to the ARMeilleure project.
|
private const uint InternalVersion = 7008; //! To be incremented manually for each change to the ARMeilleure project.
|
||||||
|
|
||||||
private const string ActualDir = "0";
|
private const string ActualDir = "0";
|
||||||
private const string BackupDir = "1";
|
private const string BackupDir = "1";
|
||||||
@ -873,7 +873,7 @@ namespace ARMeilleure.Translation.PTC
|
|||||||
|
|
||||||
Debug.Assert(Profiler.IsAddressInStaticCodeRange(address));
|
Debug.Assert(Profiler.IsAddressInStaticCodeRange(address));
|
||||||
|
|
||||||
TranslatedFunction func = translator.Translate(address, executionMode, highCq);
|
TranslatedFunction func = translator.Translate(address, executionMode, highCq, pptcTranslation: true);
|
||||||
|
|
||||||
if (func == null)
|
if (func == null)
|
||||||
{
|
{
|
||||||
|
@ -219,7 +219,7 @@ namespace ARMeilleure.Translation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false)
|
internal TranslatedFunction Translate(ulong address, ExecutionMode mode, bool highCq, bool singleStep = false, bool pptcTranslation = false)
|
||||||
{
|
{
|
||||||
ArmEmitterContext context = new(
|
ArmEmitterContext context = new(
|
||||||
Memory,
|
Memory,
|
||||||
@ -246,7 +246,7 @@ namespace ARMeilleure.Translation
|
|||||||
context.Branch(context.GetLabel(address));
|
context.Branch(context.GetLabel(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
ControlFlowGraph cfg = EmitAndGetCFG(context, blocks, out Range funcRange, out Counter<uint> counter);
|
ControlFlowGraph cfg = EmitAndGetCFG(context, blocks, out Range funcRange, out Counter<uint> counter, pptcTranslation);
|
||||||
|
|
||||||
if (cfg == null)
|
if (cfg == null)
|
||||||
{
|
{
|
||||||
@ -326,7 +326,8 @@ namespace ARMeilleure.Translation
|
|||||||
ArmEmitterContext context,
|
ArmEmitterContext context,
|
||||||
Block[] blocks,
|
Block[] blocks,
|
||||||
out Range range,
|
out Range range,
|
||||||
out Counter<uint> counter)
|
out Counter<uint> counter,
|
||||||
|
bool pptcTranslation)
|
||||||
{
|
{
|
||||||
counter = null;
|
counter = null;
|
||||||
|
|
||||||
@ -411,7 +412,10 @@ namespace ARMeilleure.Translation
|
|||||||
if (opCode.Instruction.Emitter != null)
|
if (opCode.Instruction.Emitter != null)
|
||||||
{
|
{
|
||||||
opCode.Instruction.Emitter(context);
|
opCode.Instruction.Emitter(context);
|
||||||
if (opCode.Instruction.Name == InstName.Und && blkIndex == 0)
|
// if we're pre-compiling PPTC functions, and we hit an Undefined instruction as the first
|
||||||
|
// instruction in the block, mark the function as blacklisted
|
||||||
|
// this way, we don't pre-compile Exlaunch hooks, which allows ExeFS mods to run with PPTC
|
||||||
|
if (pptcTranslation && opCode.Instruction.Name == InstName.Und && blkIndex == 0)
|
||||||
{
|
{
|
||||||
range = new Range(rangeStart, rangeEnd);
|
range = new Range(rangeStart, rangeEnd);
|
||||||
return null;
|
return null;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user