blob: ebe6cfe23c34f3942b3945bc8d6f57687cbccedd [file] [log] [blame]
// 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<ArchDefaultRegisterConfiguration>::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