Jit64: clean up GetAllocationOrder()

This commit is contained in:
Tillmann Karras 2015-08-15 07:25:14 +02:00
parent d8d62336b5
commit dd5cc34951
2 changed files with 12 additions and 12 deletions

View File

@ -131,10 +131,10 @@ float RegCache::ScoreRegister(X64Reg xr)
X64Reg RegCache::GetFreeXReg() X64Reg RegCache::GetFreeXReg()
{ {
size_t aCount; size_t aCount;
const int* aOrder = GetAllocationOrder(aCount); const X64Reg* aOrder = GetAllocationOrder(&aCount);
for (size_t i = 0; i < aCount; i++) for (size_t i = 0; i < aCount; i++)
{ {
X64Reg xr = (X64Reg)aOrder[i]; X64Reg xr = aOrder[i];
if (!xregs[xr].locked && xregs[xr].free) if (!xregs[xr].locked && xregs[xr].free)
{ {
return xr; return xr;
@ -226,9 +226,9 @@ void GPRRegCache::SetImmediate32(size_t preg, u32 immValue)
regs[preg].location = Imm32(immValue); regs[preg].location = Imm32(immValue);
} }
const int* GPRRegCache::GetAllocationOrder(size_t& count) const X64Reg* GPRRegCache::GetAllocationOrder(size_t* count)
{ {
static const int allocationOrder[] = static const X64Reg allocationOrder[] =
{ {
// R12, when used as base register, for example in a LEA, can generate bad code! Need to look into this. // R12, when used as base register, for example in a LEA, can generate bad code! Need to look into this.
#ifdef _WIN32 #ifdef _WIN32
@ -237,17 +237,17 @@ const int* GPRRegCache::GetAllocationOrder(size_t& count)
R12, R13, R14, R15, RSI, RDI, R8, R9, R10, R11, RCX R12, R13, R14, R15, RSI, RDI, R8, R9, R10, R11, RCX
#endif #endif
}; };
count = sizeof(allocationOrder) / sizeof(const int); *count = sizeof(allocationOrder) / sizeof(X64Reg);
return allocationOrder; return allocationOrder;
} }
const int* FPURegCache::GetAllocationOrder(size_t& count) const X64Reg* FPURegCache::GetAllocationOrder(size_t* count)
{ {
static const int allocationOrder[] = static const X64Reg allocationOrder[] =
{ {
XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, XMM2, XMM3, XMM4, XMM5 XMM6, XMM7, XMM8, XMM9, XMM10, XMM11, XMM12, XMM13, XMM14, XMM15, XMM2, XMM3, XMM4, XMM5
}; };
count = sizeof(allocationOrder) / sizeof(int); *count = sizeof(allocationOrder) / sizeof(X64Reg);
return allocationOrder; return allocationOrder;
} }
@ -395,7 +395,7 @@ int RegCache::NumFreeRegisters()
{ {
int count = 0; int count = 0;
size_t aCount; size_t aCount;
const int* aOrder = GetAllocationOrder(aCount); const X64Reg* aOrder = GetAllocationOrder(&aCount);
for (size_t i = 0; i < aCount; i++) for (size_t i = 0; i < aCount; i++)
if (!xregs[aOrder[i]].locked && xregs[aOrder[i]].free) if (!xregs[aOrder[i]].locked && xregs[aOrder[i]].free)
count++; count++;

View File

@ -42,7 +42,7 @@ protected:
std::array<PPCCachedReg, 32> regs; std::array<PPCCachedReg, 32> regs;
std::array<X64CachedReg, NUMXREGS> xregs; std::array<X64CachedReg, NUMXREGS> xregs;
virtual const int *GetAllocationOrder(size_t& count) = 0; virtual const Gen::X64Reg* GetAllocationOrder(size_t* count) = 0;
virtual BitSet32 GetRegUtilization() = 0; virtual BitSet32 GetRegUtilization() = 0;
virtual BitSet32 CountRegsIn(size_t preg, u32 lookahead) = 0; virtual BitSet32 CountRegsIn(size_t preg, u32 lookahead) = 0;
@ -176,7 +176,7 @@ public:
void StoreRegister(size_t preg, const Gen::OpArg& newLoc) override; void StoreRegister(size_t preg, const Gen::OpArg& newLoc) override;
void LoadRegister(size_t preg, Gen::X64Reg newLoc) override; void LoadRegister(size_t preg, Gen::X64Reg newLoc) override;
Gen::OpArg GetDefaultLocation(size_t reg) const override; Gen::OpArg GetDefaultLocation(size_t reg) const override;
const int* GetAllocationOrder(size_t& count) override; const Gen::X64Reg* GetAllocationOrder(size_t* count) override;
void SetImmediate32(size_t preg, u32 immValue); void SetImmediate32(size_t preg, u32 immValue);
BitSet32 GetRegUtilization() override; BitSet32 GetRegUtilization() override;
BitSet32 CountRegsIn(size_t preg, u32 lookahead) override; BitSet32 CountRegsIn(size_t preg, u32 lookahead) override;
@ -188,7 +188,7 @@ class FPURegCache final : public RegCache
public: public:
void StoreRegister(size_t preg, const Gen::OpArg& newLoc) override; void StoreRegister(size_t preg, const Gen::OpArg& newLoc) override;
void LoadRegister(size_t preg, Gen::X64Reg newLoc) override; void LoadRegister(size_t preg, Gen::X64Reg newLoc) override;
const int* GetAllocationOrder(size_t& count) override; const Gen::X64Reg* GetAllocationOrder(size_t* count) override;
Gen::OpArg GetDefaultLocation(size_t reg) const override; Gen::OpArg GetDefaultLocation(size_t reg) const override;
BitSet32 GetRegUtilization() override; BitSet32 GetRegUtilization() override;
BitSet32 CountRegsIn(size_t preg, u32 lookahead) override; BitSet32 CountRegsIn(size_t preg, u32 lookahead) override;