// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "src/compiler/register-configuration.h" #include "src/globals.h" #include "src/macro-assembler.h" namespace v8 { namespace internal { namespace compiler { namespace { STATIC_ASSERT(RegisterConfiguration::kMaxGeneralRegisters >= Register::kNumRegisters); STATIC_ASSERT(RegisterConfiguration::kMaxDoubleRegisters >= DoubleRegister::kMaxNumRegisters); class ArchDefaultRegisterConfiguration : public RegisterConfiguration { public: ArchDefaultRegisterConfiguration() : RegisterConfiguration(Register::kMaxNumAllocatableRegisters, #if V8_TARGET_ARCH_X87 1, 1, #else DoubleRegister::NumAllocatableRegisters(), DoubleRegister::NumAllocatableAliasedRegisters(), #endif general_register_name_table_, double_register_name_table_) { DCHECK_EQ(Register::kMaxNumAllocatableRegisters, Register::NumAllocatableRegisters()); for (int i = 0; i < Register::kMaxNumAllocatableRegisters; ++i) { general_register_name_table_[i] = Register::AllocationIndexToString(i); } DCHECK_GE(DoubleRegister::kMaxNumAllocatableRegisters, DoubleRegister::NumAllocatableRegisters()); for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) { double_register_name_table_[i] = DoubleRegister::AllocationIndexToString(i); } } const char* general_register_name_table_[Register::kMaxNumAllocatableRegisters]; const char* double_register_name_table_[DoubleRegister::kMaxNumAllocatableRegisters]; }; static base::LazyInstance::type kDefaultRegisterConfiguration = LAZY_INSTANCE_INITIALIZER; } // namespace const RegisterConfiguration* RegisterConfiguration::ArchDefault() { return &kDefaultRegisterConfiguration.Get(); } RegisterConfiguration::RegisterConfiguration( int num_general_registers, int num_double_registers, int num_aliased_double_registers, const char* const* general_register_names, const char* const* double_register_names) : num_general_registers_(num_general_registers), num_double_registers_(num_double_registers), num_aliased_double_registers_(num_aliased_double_registers), general_register_names_(general_register_names), double_register_names_(double_register_names) {} } // namespace compiler } // namespace internal } // namespace v8