mirror of https://github.com/PCSX2/pcsx2.git
vif: don't allocate vifblock hash on the heap
Avoid an extra indirection to access the hash bucket (Find function)
This commit is contained in:
parent
3dc7dc0cdc
commit
1acc81c25d
|
@ -86,7 +86,7 @@ struct nVifStruct {
|
||||||
RecompiledCodeReserve* recReserve;
|
RecompiledCodeReserve* recReserve;
|
||||||
u8* recWritePtr; // current write pos into the reserve
|
u8* recWritePtr; // current write pos into the reserve
|
||||||
|
|
||||||
HashBucket<_tParams>* vifBlocks; // Vif Blocks
|
HashBucket<_tParams> vifBlocks; // Vif Blocks
|
||||||
|
|
||||||
nVifStruct();
|
nVifStruct();
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "Utilities/Perf.h"
|
#include "Utilities/Perf.h"
|
||||||
|
|
||||||
static void recReset(int idx) {
|
static void recReset(int idx) {
|
||||||
nVif[idx].vifBlocks->clear();
|
nVif[idx].vifBlocks.clear();
|
||||||
|
|
||||||
nVif[idx].recReserve->Reset();
|
nVif[idx].recReserve->Reset();
|
||||||
|
|
||||||
|
@ -40,17 +40,12 @@ void dVifReserve(int idx) {
|
||||||
void dVifReset(int idx) {
|
void dVifReset(int idx) {
|
||||||
pxAssertDev(nVif[idx].recReserve, "Dynamic VIF recompiler reserve must be created prior to VIF use or reset!");
|
pxAssertDev(nVif[idx].recReserve, "Dynamic VIF recompiler reserve must be created prior to VIF use or reset!");
|
||||||
|
|
||||||
if(!nVif[idx].vifBlocks)
|
|
||||||
nVif[idx].vifBlocks = new HashBucket<_tParams>();
|
|
||||||
|
|
||||||
recReset(idx);
|
recReset(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dVifClose(int idx) {
|
void dVifClose(int idx) {
|
||||||
if (nVif[idx].recReserve)
|
if (nVif[idx].recReserve)
|
||||||
nVif[idx].recReserve->Reset();
|
nVif[idx].recReserve->Reset();
|
||||||
|
|
||||||
safe_delete(nVif[idx].vifBlocks);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void dVifRelease(int idx) {
|
void dVifRelease(int idx) {
|
||||||
|
@ -303,7 +298,7 @@ _vifT static __ri void dVifExecuteUnpack(const u8* data, uptr x86, bool isFill)
|
||||||
|
|
||||||
_vifT __fi uptr dVifCompile(nVifBlock& key) {
|
_vifT __fi uptr dVifCompile(nVifBlock& key) {
|
||||||
nVifStruct& v = nVif[idx];
|
nVifStruct& v = nVif[idx];
|
||||||
nVifBlock* block = v.vifBlocks->find(&key);
|
nVifBlock* block = v.vifBlocks.find(&key);
|
||||||
|
|
||||||
// Cache hit
|
// Cache hit
|
||||||
if (likely(block != nullptr))
|
if (likely(block != nullptr))
|
||||||
|
@ -321,7 +316,7 @@ _vifT __fi uptr dVifCompile(nVifBlock& key) {
|
||||||
xSetPtr(v.recWritePtr);
|
xSetPtr(v.recWritePtr);
|
||||||
|
|
||||||
key.startPtr = (uptr)xGetAlignedCallTarget();
|
key.startPtr = (uptr)xGetAlignedCallTarget();
|
||||||
v.vifBlocks->add(key);
|
v.vifBlocks.add(key);
|
||||||
|
|
||||||
VifUnpackSSE_Dynarec(v, key).CompileRoutine();
|
VifUnpackSSE_Dynarec(v, key).CompileRoutine();
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,6 @@ static const __aligned16 Fnptr_VifUnpackLoop UnpackLoopTable[2][2][2] = {
|
||||||
|
|
||||||
nVifStruct::nVifStruct()
|
nVifStruct::nVifStruct()
|
||||||
{
|
{
|
||||||
vifBlocks = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void reserveNewVif(int idx)
|
void reserveNewVif(int idx)
|
||||||
|
|
Loading…
Reference in New Issue