Index: src/ia32/assembler-ia32.h |
diff --git a/src/ia32/assembler-ia32.h b/src/ia32/assembler-ia32.h |
index 20446b0085e4098c5f133b45c1f0ccf72909038b..f7f71baae58ba07d1d35dc956facb15bcd81805c 100644 |
--- a/src/ia32/assembler-ia32.h |
+++ b/src/ia32/assembler-ia32.h |
@@ -30,7 +30,7 @@ |
// The original source code covered by the above license above has been |
// modified significantly by Google Inc. |
-// Copyright 2010 the V8 project authors. All rights reserved. |
+// Copyright 2011 the V8 project authors. All rights reserved. |
// A light-weight IA32 Assembler. |
@@ -64,30 +64,14 @@ namespace internal { |
// and best performance in optimized code. |
// |
struct Register { |
- static const int kNumAllocatableRegisters = 5; |
+ static const int kNumAllocatableRegisters = 6; |
static const int kNumRegisters = 8; |
- static int ToAllocationIndex(Register reg) { |
- ASSERT(reg.code() < 4 || reg.code() == 7); |
- return (reg.code() == 7) ? 4 : reg.code(); |
- } |
+ static inline const char* AllocationIndexToString(int index); |
- static Register FromAllocationIndex(int index) { |
- ASSERT(index >= 0 && index < kNumAllocatableRegisters); |
- return (index == 4) ? from_code(7) : from_code(index); |
- } |
+ static inline int ToAllocationIndex(Register reg); |
- static const char* AllocationIndexToString(int index) { |
- ASSERT(index >= 0 && index < kNumAllocatableRegisters); |
- const char* const names[] = { |
- "eax", |
- "ecx", |
- "edx", |
- "ebx", |
- "edi" |
- }; |
- return names[index]; |
- } |
+ static inline Register FromAllocationIndex(int index); |
static Register from_code(int code) { |
Register r = { code }; |
@@ -110,6 +94,7 @@ struct Register { |
int code_; |
}; |
+ |
const Register eax = { 0 }; |
const Register ecx = { 1 }; |
const Register edx = { 2 }; |
@@ -121,6 +106,26 @@ const Register edi = { 7 }; |
const Register no_reg = { -1 }; |
+inline const char* Register::AllocationIndexToString(int index) { |
+ ASSERT(index >= 0 && index < kNumAllocatableRegisters); |
+ // This is the mapping of allocation indices to registers. |
+ const char* const kNames[] = { "eax", "ecx", "edx", "ebx", "esi", "edi" }; |
+ return kNames[index]; |
+} |
+ |
+ |
+inline int Register::ToAllocationIndex(Register reg) { |
+ ASSERT(reg.is_valid() && !reg.is(esp) && !reg.is(ebp)); |
+ return (reg.code() >= 6) ? reg.code() - 2 : reg.code(); |
+} |
+ |
+ |
+inline Register Register::FromAllocationIndex(int index) { |
+ ASSERT(index >= 0 && index < kNumAllocatableRegisters); |
+ return (index >= 4) ? from_code(index + 2) : from_code(index); |
+} |
+ |
+ |
struct XMMRegister { |
static const int kNumAllocatableRegisters = 7; |
static const int kNumRegisters = 8; |