3131#include < wtf/Deque.h>
3232#include < wtf/Vector.h>
3333
34- WTF_ALLOW_UNSAFE_BUFFER_USAGE_BEGIN
35-
3634namespace WebCore {
3735
3836#if CPU(ARM64)
39- static const JSC ::MacroAssembler::RegisterID callerSavedRegisters[] = {
37+ static constexpr std::array< JSC ::MacroAssembler::RegisterID, 15 > callerSavedRegisters {
4038 JSC ::ARM64Registers::x0,
4139 JSC ::ARM64Registers::x1,
4240 JSC ::ARM64Registers::x2,
@@ -53,12 +51,12 @@ static const JSC::MacroAssembler::RegisterID callerSavedRegisters[] = {
5351 JSC ::ARM64Registers::x13,
5452 JSC ::ARM64Registers::x14,
5553};
56- static const JSC ::MacroAssembler::RegisterID calleeSavedRegisters[] = {
54+ static constexpr std::array< JSC ::MacroAssembler::RegisterID, 1 > calleeSavedRegisters = {
5755 JSC ::ARM64Registers::x19
5856};
5957static const JSC ::MacroAssembler::RegisterID tempRegister = JSC ::ARM64Registers::x15;
6058#elif CPU(X86_64)
61- static const JSC ::MacroAssembler::RegisterID callerSavedRegisters[] = {
59+ static constexpr std::array< JSC ::MacroAssembler::RegisterID, 8 > callerSavedRegisters {
6260 JSC ::X86Registers::eax,
6361 JSC ::X86Registers::ecx,
6462 JSC ::X86Registers::edx,
@@ -68,7 +66,7 @@ static const JSC::MacroAssembler::RegisterID callerSavedRegisters[] = {
6866 JSC ::X86Registers::r9,
6967 JSC ::X86Registers::r10,
7068};
71- static const JSC ::MacroAssembler::RegisterID calleeSavedRegisters[] = {
69+ static constexpr std::array< JSC ::MacroAssembler::RegisterID, 4 > calleeSavedRegisters {
7270 JSC ::X86Registers::r12,
7371 JSC ::X86Registers::r13,
7472 JSC ::X86Registers::r14,
@@ -77,10 +75,11 @@ static const JSC::MacroAssembler::RegisterID calleeSavedRegisters[] = {
7775#else
7876#error RegisterAllocator has no defined registers for the architecture.
7977#endif
80- static const unsigned calleeSavedRegisterCount = std::size(calleeSavedRegisters);
81- static const unsigned maximumRegisterCount = calleeSavedRegisterCount + std::size(callerSavedRegisters);
8278
83- typedef Vector<JSC ::MacroAssembler::RegisterID, maximumRegisterCount> RegisterVector;
79+ static constexpr unsigned calleeSavedRegisterCount = std::size(calleeSavedRegisters);
80+ static constexpr unsigned maximumRegisterCount = calleeSavedRegisterCount + std::size(callerSavedRegisters);
81+
82+ using RegisterVector = Vector<JSC ::MacroAssembler::RegisterID, maximumRegisterCount>;
8483
8584class RegisterAllocator {
8685public:
@@ -151,10 +150,8 @@ class RegisterAllocator {
151150
152151 const Vector<JSC ::MacroAssembler::RegisterID, calleeSavedRegisterCount>& reserveCalleeSavedRegisters (unsigned count)
153152 {
154- RELEASE_ASSERT (count <= std::size (calleeSavedRegisters));
155153 RELEASE_ASSERT (!m_reservedCalleeSavedRegisters.size ());
156- for (unsigned i = 0 ; i < count; ++i) {
157- JSC ::MacroAssembler::RegisterID registerId = calleeSavedRegisters[i];
154+ for (auto registerId : std::span { calleeSavedRegisters }.first (count)) {
158155 m_reservedCalleeSavedRegisters.append (registerId);
159156 m_registers.append (registerId);
160157 }
@@ -246,6 +243,4 @@ inline RegisterAllocator::~RegisterAllocator()
246243
247244} // namespace WebCore
248245
249- WTF_ALLOW_UNSAFE_BUFFER_USAGE_END
250-
251246#endif // ENABLE(CSS_SELECTOR_JIT)
0 commit comments