blob: d630b335a77df7038eac8daec6118a195466ac73 [file] [log] [blame]
sgjesse@chromium.org755c5b12009-05-29 11:04:38 +00001// Copyright 2009 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6// * Redistributions of source code must retain the above copyright
7// notice, this list of conditions and the following disclaimer.
8// * Redistributions in binary form must reproduce the above
9// copyright notice, this list of conditions and the following
10// disclaimer in the documentation and/or other materials provided
11// with the distribution.
12// * Neither the name of Google Inc. nor the names of its
13// contributors may be used to endorse or promote products derived
14// from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28#ifndef V8_X64_REGISTER_ALLOCATOR_X64_INL_H_
29#define V8_X64_REGISTER_ALLOCATOR_X64_INL_H_
30
31#include "v8.h"
32
33namespace v8 {
34namespace internal {
35
36// -------------------------------------------------------------------------
37// RegisterAllocator implementation.
38
39bool RegisterAllocator::IsReserved(Register reg) {
ager@chromium.orgeadaf222009-06-16 09:43:10 +000040 return reg.is(rsp) || reg.is(rbp) || reg.is(rsi) ||
41 reg.is(kScratchRegister);
sgjesse@chromium.org755c5b12009-05-29 11:04:38 +000042}
43
44
45// The register allocator uses small integers to represent the
46// non-reserved assembler registers.
sgjesse@chromium.org755c5b12009-05-29 11:04:38 +000047int RegisterAllocator::ToNumber(Register reg) {
48 ASSERT(reg.is_valid() && !IsReserved(reg));
kasperl@chromium.orge959c182009-07-27 08:59:04 +000049 const int kNumbers[] = {
ager@chromium.orgeadaf222009-06-16 09:43:10 +000050 0, // rax
51 2, // rcx
52 3, // rdx
53 1, // rbx
ager@chromium.org18ad94b2009-09-02 08:22:29 +000054 -1, // rsp Stack pointer.
55 -1, // rbp Frame pointer.
56 -1, // rsi Context.
ager@chromium.orgeadaf222009-06-16 09:43:10 +000057 4, // rdi
58 5, // r8
59 6, // r9
ager@chromium.org18ad94b2009-09-02 08:22:29 +000060 -1, // r10 Scratch register.
61 9, // r11
62 10, // r12
63 -1, // r13 Roots array. This is callee saved.
64 7, // r14
65 8 // r15
ager@chromium.orgeadaf222009-06-16 09:43:10 +000066 };
kasperl@chromium.orge959c182009-07-27 08:59:04 +000067 return kNumbers[reg.code()];
sgjesse@chromium.org755c5b12009-05-29 11:04:38 +000068}
69
70
71Register RegisterAllocator::ToRegister(int num) {
72 ASSERT(num >= 0 && num < kNumRegisters);
kasperl@chromium.orge959c182009-07-27 08:59:04 +000073 const Register kRegisters[] =
ager@chromium.org18ad94b2009-09-02 08:22:29 +000074 { rax, rbx, rcx, rdx, rdi, r8, r9, r14, r15, r11, r12 };
kasperl@chromium.orge959c182009-07-27 08:59:04 +000075 return kRegisters[num];
sgjesse@chromium.org755c5b12009-05-29 11:04:38 +000076}
77
78
79void RegisterAllocator::Initialize() {
ager@chromium.orgeadaf222009-06-16 09:43:10 +000080 Reset();
81 // The non-reserved rdi register is live on JS function entry.
82 Use(rdi); // JS function.
sgjesse@chromium.org755c5b12009-05-29 11:04:38 +000083}
sgjesse@chromium.org755c5b12009-05-29 11:04:38 +000084} } // namespace v8::internal
85
86#endif // V8_X64_REGISTER_ALLOCATOR_X64_INL_H_