JitArm64: Add bitset constants for caller saved registers
This commit is contained in:
parent
6c3141e0cc
commit
de21dc5fd9
|
@ -1146,6 +1146,8 @@ public:
|
|||
bool TryEORI2R(ARM64Reg Rd, ARM64Reg Rn, u64 imm);
|
||||
|
||||
// ABI related
|
||||
static constexpr BitSet32 CALLER_SAVED_GPRS = BitSet32(0x4007FFFF);
|
||||
static constexpr BitSet32 CALLER_SAVED_FPRS = BitSet32(0xFFFF00FF);
|
||||
void ABI_PushRegisters(BitSet32 registers);
|
||||
void ABI_PopRegisters(BitSet32 registers, BitSet32 ignore_mask = BitSet32(0));
|
||||
|
||||
|
|
|
@ -149,15 +149,9 @@ void Arm64GPRCache::Start(PPCAnalyst::BlockRegStats& stats)
|
|||
{
|
||||
}
|
||||
|
||||
bool Arm64GPRCache::IsCalleeSaved(ARM64Reg reg) const
|
||||
bool Arm64GPRCache::IsCallerSaved(ARM64Reg reg) const
|
||||
{
|
||||
static constexpr auto callee_regs = {
|
||||
ARM64Reg::X28, ARM64Reg::X27, ARM64Reg::X26, ARM64Reg::X25,
|
||||
ARM64Reg::X24, ARM64Reg::X23, ARM64Reg::X22, ARM64Reg::X21,
|
||||
ARM64Reg::X20, ARM64Reg::X19, ARM64Reg::INVALID_REG,
|
||||
};
|
||||
|
||||
return std::find(callee_regs.begin(), callee_regs.end(), EncodeRegTo64(reg)) != callee_regs.end();
|
||||
return ARM64XEmitter::CALLER_SAVED_GPRS[DecodeReg(reg)];
|
||||
}
|
||||
|
||||
const OpArg& Arm64GPRCache::GetGuestGPROpArg(size_t preg) const
|
||||
|
@ -416,7 +410,7 @@ BitSet32 Arm64GPRCache::GetCallerSavedUsed() const
|
|||
BitSet32 registers(0);
|
||||
for (const auto& it : m_host_registers)
|
||||
{
|
||||
if (it.IsLocked() && !IsCalleeSaved(it.GetReg()))
|
||||
if (it.IsLocked() && IsCallerSaved(it.GetReg()))
|
||||
registers[DecodeReg(it.GetReg())] = true;
|
||||
}
|
||||
return registers;
|
||||
|
@ -716,14 +710,9 @@ void Arm64FPRCache::FlushByHost(ARM64Reg host_reg, ARM64Reg tmp_reg)
|
|||
}
|
||||
}
|
||||
|
||||
bool Arm64FPRCache::IsCalleeSaved(ARM64Reg reg) const
|
||||
bool Arm64FPRCache::IsCallerSaved(ARM64Reg reg) const
|
||||
{
|
||||
static constexpr auto callee_regs = {
|
||||
ARM64Reg::Q8, ARM64Reg::Q9, ARM64Reg::Q10, ARM64Reg::Q11, ARM64Reg::Q12,
|
||||
ARM64Reg::Q13, ARM64Reg::Q14, ARM64Reg::Q15, ARM64Reg::INVALID_REG,
|
||||
};
|
||||
|
||||
return std::find(callee_regs.begin(), callee_regs.end(), reg) != callee_regs.end();
|
||||
return ARM64XEmitter::CALLER_SAVED_FPRS[DecodeReg(reg)];
|
||||
}
|
||||
|
||||
bool Arm64FPRCache::IsTopHalfUsed(ARM64Reg reg) const
|
||||
|
@ -841,7 +830,7 @@ BitSet32 Arm64FPRCache::GetCallerSavedUsed() const
|
|||
BitSet32 registers(0);
|
||||
for (const auto& it : m_host_registers)
|
||||
{
|
||||
if (it.IsLocked() && (!IsCalleeSaved(it.GetReg()) || IsTopHalfUsed(it.GetReg())))
|
||||
if (it.IsLocked() && (IsCallerSaved(it.GetReg()) || IsTopHalfUsed(it.GetReg())))
|
||||
registers[DecodeReg(it.GetReg())] = true;
|
||||
}
|
||||
return registers;
|
||||
|
|
|
@ -291,7 +291,7 @@ protected:
|
|||
void FlushRegister(size_t index, bool maintain_state, Arm64Gen::ARM64Reg tmp_reg) override;
|
||||
|
||||
private:
|
||||
bool IsCalleeSaved(Arm64Gen::ARM64Reg reg) const;
|
||||
bool IsCallerSaved(Arm64Gen::ARM64Reg reg) const;
|
||||
|
||||
struct GuestRegInfo
|
||||
{
|
||||
|
@ -350,7 +350,7 @@ protected:
|
|||
void FlushRegister(size_t preg, bool maintain_state, Arm64Gen::ARM64Reg tmp_reg) override;
|
||||
|
||||
private:
|
||||
bool IsCalleeSaved(Arm64Gen::ARM64Reg reg) const;
|
||||
bool IsCallerSaved(Arm64Gen::ARM64Reg reg) const;
|
||||
bool IsTopHalfUsed(Arm64Gen::ARM64Reg reg) const;
|
||||
|
||||
void FlushRegisters(BitSet32 regs, bool maintain_state, Arm64Gen::ARM64Reg tmp_reg);
|
||||
|
|
Loading…
Reference in New Issue