mirror of
https://github.com/asmjit/asmjit.git
synced 2025-12-18 04:54:36 +03:00
Simplified unavailable register handing in RAPass (Compiler)
This commit is contained in:
@@ -646,7 +646,6 @@ void ARMRAPass::onInit() noexcept {
|
|||||||
_physRegCount.set(RegGroup::kExtraVirt3, 0);
|
_physRegCount.set(RegGroup::kExtraVirt3, 0);
|
||||||
_buildPhysIndex();
|
_buildPhysIndex();
|
||||||
|
|
||||||
_availableRegCount = _physRegCount;
|
|
||||||
_availableRegs[RegGroup::kGp] = Support::lsbMask<uint32_t>(_physRegCount.get(RegGroup::kGp));
|
_availableRegs[RegGroup::kGp] = Support::lsbMask<uint32_t>(_physRegCount.get(RegGroup::kGp));
|
||||||
_availableRegs[RegGroup::kVec] = Support::lsbMask<uint32_t>(_physRegCount.get(RegGroup::kVec));
|
_availableRegs[RegGroup::kVec] = Support::lsbMask<uint32_t>(_physRegCount.get(RegGroup::kVec));
|
||||||
_availableRegs[RegGroup::kMask] = Support::lsbMask<uint32_t>(_physRegCount.get(RegGroup::kMask));
|
_availableRegs[RegGroup::kMask] = Support::lsbMask<uint32_t>(_physRegCount.get(RegGroup::kMask));
|
||||||
|
|||||||
@@ -314,6 +314,10 @@ struct RARegMask {
|
|||||||
_masks[group] = _masks[group] & ~mask;
|
_masks[group] = _masks[group] & ~mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void clear(const RegMasks& masks) noexcept {
|
||||||
|
_masks.combine<Support::AndNot>(masks);
|
||||||
|
}
|
||||||
|
|
||||||
//! \}
|
//! \}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ static void BaseRAPass_reset(BaseRAPass* self, FuncDetail* funcDetail) noexcept
|
|||||||
self->_scratchRegIndexes.fill(BaseReg::kIdBad);
|
self->_scratchRegIndexes.fill(BaseReg::kIdBad);
|
||||||
|
|
||||||
self->_availableRegs.reset();
|
self->_availableRegs.reset();
|
||||||
self->_availableRegCount.reset();
|
|
||||||
self->_clobberedRegs.reset();
|
self->_clobberedRegs.reset();
|
||||||
|
|
||||||
self->_workRegs.reset();
|
self->_workRegs.reset();
|
||||||
|
|||||||
@@ -883,8 +883,6 @@ public:
|
|||||||
|
|
||||||
//! Registers available for allocation.
|
//! Registers available for allocation.
|
||||||
RARegMask _availableRegs = RARegMask();
|
RARegMask _availableRegs = RARegMask();
|
||||||
//! Count of physical registers per group.
|
|
||||||
RARegCount _availableRegCount = RARegCount();
|
|
||||||
//! Registers clobbered by the function.
|
//! Registers clobbered by the function.
|
||||||
RARegMask _clobberedRegs = RARegMask();
|
RARegMask _clobberedRegs = RARegMask();
|
||||||
|
|
||||||
@@ -990,7 +988,10 @@ public:
|
|||||||
|
|
||||||
inline void makeUnavailable(RegGroup group, uint32_t regId) noexcept {
|
inline void makeUnavailable(RegGroup group, uint32_t regId) noexcept {
|
||||||
_availableRegs[group] &= ~Support::bitMask(regId);
|
_availableRegs[group] &= ~Support::bitMask(regId);
|
||||||
_availableRegCount[group]--;
|
}
|
||||||
|
|
||||||
|
inline void makeUnavailable(const RARegMask::RegMasks& regs) noexcept {
|
||||||
|
_availableRegs.clear(regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
//! Runs the register allocator for the given `func`.
|
//! Runs the register allocator for the given `func`.
|
||||||
@@ -1231,9 +1232,6 @@ public:
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
ASMJIT_INLINE_NODEBUG uint32_t registerSize() const noexcept { return _sp.size(); }
|
ASMJIT_INLINE_NODEBUG uint32_t registerSize() const noexcept { return _sp.size(); }
|
||||||
|
|
||||||
[[nodiscard]]
|
|
||||||
ASMJIT_INLINE_NODEBUG uint32_t availableRegCount(RegGroup group) const noexcept { return _availableRegCount[group]; }
|
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
ASMJIT_INLINE_NODEBUG RAWorkReg* workRegById(uint32_t workId) const noexcept { return _workRegs[workId]; }
|
ASMJIT_INLINE_NODEBUG RAWorkReg* workRegById(uint32_t workId) const noexcept { return _workRegs[workId]; }
|
||||||
|
|
||||||
|
|||||||
@@ -1291,7 +1291,6 @@ void X86RAPass::onInit() noexcept {
|
|||||||
_physRegCount.set(RegGroup::kX86_MM, 8);
|
_physRegCount.set(RegGroup::kX86_MM, 8);
|
||||||
_buildPhysIndex();
|
_buildPhysIndex();
|
||||||
|
|
||||||
_availableRegCount = _physRegCount;
|
|
||||||
_availableRegs[RegGroup::kGp] = Support::lsbMask<RegMask>(_physRegCount.get(RegGroup::kGp));
|
_availableRegs[RegGroup::kGp] = Support::lsbMask<RegMask>(_physRegCount.get(RegGroup::kGp));
|
||||||
_availableRegs[RegGroup::kVec] = Support::lsbMask<RegMask>(_physRegCount.get(RegGroup::kVec));
|
_availableRegs[RegGroup::kVec] = Support::lsbMask<RegMask>(_physRegCount.get(RegGroup::kVec));
|
||||||
_availableRegs[RegGroup::kX86_K] = Support::lsbMask<RegMask>(_physRegCount.get(RegGroup::kX86_K)) ^ 1u;
|
_availableRegs[RegGroup::kX86_K] = Support::lsbMask<RegMask>(_physRegCount.get(RegGroup::kX86_K)) ^ 1u;
|
||||||
|
|||||||
Reference in New Issue
Block a user