Index: src/lithium-allocator.cc |
diff --git a/src/lithium-allocator.cc b/src/lithium-allocator.cc |
index 4396c7354c76d5f6511821ee8d4a0043565fa411..83805dc729a0f015db1340f7252b6ed550bc7600 100644 |
--- a/src/lithium-allocator.cc |
+++ b/src/lithium-allocator.cc |
@@ -46,6 +46,29 @@ |
namespace v8 { |
namespace internal { |
+ |
+#define DEFINE_OPERAND_CACHE(name, type) \ |
+ name name::cache[name::kNumCachedOperands]; \ |
+ void name::SetUpCache() { \ |
+ for (int i = 0; i < kNumCachedOperands; i++) { \ |
+ cache[i].ConvertTo(type, i); \ |
+ } \ |
+ } \ |
+ static bool name##_initialize() { \ |
+ name::SetUpCache(); \ |
+ return true; \ |
+ } \ |
+ static bool name##_cache_initialized = name##_initialize(); |
+ |
+DEFINE_OPERAND_CACHE(LConstantOperand, CONSTANT_OPERAND) |
+DEFINE_OPERAND_CACHE(LStackSlot, STACK_SLOT) |
+DEFINE_OPERAND_CACHE(LDoubleStackSlot, DOUBLE_STACK_SLOT) |
+DEFINE_OPERAND_CACHE(LRegister, REGISTER) |
+DEFINE_OPERAND_CACHE(LDoubleRegister, DOUBLE_REGISTER) |
+ |
+#undef DEFINE_OPERAND_CACHE |
+ |
+ |
static inline LifetimePosition Min(LifetimePosition a, LifetimePosition b) { |
return a.Value() < b.Value() ? a : b; |
} |