Use MakeClip.
Some checks failed
Check Format / run_clangformat (push) Has been cancelled
Build Android / build_android (apk) (push) Has been cancelled
Build Android / build_android (libretro) (push) Has been cancelled
Build iOS / build_ios (push) Has been cancelled
Build JavaScript / build_js (push) Has been cancelled
Build Linux / build_linux (push) Has been cancelled
Build Linux ARM32 / build_linux_arm32 (push) Has been cancelled
Build Linux ARM64 / build_linux_arm64 (push) Has been cancelled
Build macOS / build_macos (push) Has been cancelled
Build Windows / build_windows (x86_32, Visual Studio 16 2019, installer32.nsi, win32_msvc2019, Win32) (push) Has been cancelled
Build Windows Psf / build_windows_psf (on, x86_64, Visual Studio 16 2019, installer64.nsi, x64) (push) Has been cancelled
Build Windows / build_windows (x86_64, Visual Studio 16 2019, installer64.nsi, win64_msvc2019_64, x64) (push) Has been cancelled
Build Windows Psf / build_windows_psf (off, x86_64, Visual Studio 16 2019, installer64.nsi, x64) (push) Has been cancelled

This commit is contained in:
Jean-Philip Desjardins 2025-03-05 08:47:00 -05:00
parent 43e373a540
commit 361bfece5d
2 changed files with 31 additions and 37 deletions

View file

@ -759,7 +759,8 @@ void VUShared::ADDAq(CMipsJitter* codeGen, uint8 dest, uint8 fs, uint32 relative
void VUShared::CLIP(CMipsJitter* codeGen, uint8 nFs, uint8 nFt, uint32 relativePipeTime) void VUShared::CLIP(CMipsJitter* codeGen, uint8 nFs, uint8 nFt, uint32 relativePipeTime)
{ {
size_t tempOffset = offsetof(CMIPS, m_State.nCOP2T); //We can do better if we got this condition
assert(!((nFs == 0) && (nFt == 0)));
//Load previous value //Load previous value
{ {
@ -772,51 +773,44 @@ void VUShared::CLIP(CMipsJitter* codeGen, uint8 nFs, uint8 nFt, uint32 relativeP
codeGen->And(); codeGen->And();
codeGen->LoadFromRefIdx(); codeGen->LoadFromRefIdx();
codeGen->PullRel(tempOffset);
//Create some space for the new test results
codeGen->Shl(6);
} }
//Create some space for the new test results //Compute test result
codeGen->PushRel(tempOffset);
codeGen->Shl(6);
codeGen->PullRel(tempOffset);
for(unsigned int i = 0; i < 3; i++)
{ {
//c > +|w| codeGen->MD_PushRel(offsetof(CMIPS, m_State.nCOP2[nFs]));
codeGen->FP_PushRel32(offsetof(CMIPS, m_State.nCOP2[nFs].nV[i]));
codeGen->FP_PushRel32(offsetof(CMIPS, m_State.nCOP2[nFt].nV[3]));
codeGen->FP_AbsS();
codeGen->FP_CmpS(Jitter::CONDITION_AB); //Upper bound
codeGen->PushCst(0); if(nFt == 0)
codeGen->BeginIf(Jitter::CONDITION_NE);
{ {
codeGen->PushRel(tempOffset); codeGen->MD_PushCstExpand(1.0f);
codeGen->PushCst(1 << ((i * 2) + 0));
codeGen->Or();
codeGen->PullRel(tempOffset);
} }
codeGen->EndIf(); else
//c < -|w|
codeGen->FP_PushRel32(offsetof(CMIPS, m_State.nCOP2[nFs].nV[i]));
codeGen->FP_PushRel32(offsetof(CMIPS, m_State.nCOP2[nFt].nV[3]));
codeGen->FP_AbsS();
codeGen->FP_NegS();
codeGen->FP_CmpS(Jitter::CONDITION_BL);
codeGen->PushCst(0);
codeGen->BeginIf(Jitter::CONDITION_NE);
{ {
codeGen->PushRel(tempOffset); PushBcElement(codeGen, offsetof(CMIPS, m_State.nCOP2[nFt].nV[3]));
codeGen->PushCst(1 << ((i * 2) + 1)); codeGen->MD_AbsS();
codeGen->Or();
codeGen->PullRel(tempOffset);
} }
codeGen->EndIf();
//Lower bound
if(nFt == 0)
{
codeGen->MD_PushCstExpand(-1.0f);
}
else
{
PushBcElement(codeGen, offsetof(CMIPS, m_State.nCOP2[nFt].nV[3]));
codeGen->MD_AbsS();
codeGen->MD_NegS();
}
codeGen->MD_MakeClip();
} }
codeGen->PushRel(tempOffset); //Combine with previous value
codeGen->Or();
QueueInFlagPipeline(g_pipeInfoClip, codeGen, LATENCY_MAC, relativePipeTime); QueueInFlagPipeline(g_pipeInfoClip, codeGen, LATENCY_MAC, relativePipeTime);
} }

2
deps/CodeGen vendored

@ -1 +1 @@
Subproject commit 5af39cab7ecc0ff7341a575c1550d87f74fd2305 Subproject commit b82963b44f9105fa7ac0f0e44ea5c3f8415a472d