| Index: src/lithium.cc
|
| diff --git a/src/lithium.cc b/src/lithium.cc
|
| index 5a44fcec9992ba7ef54eb94aa04cde430b185e45..aefd8b6492c45c7af1859a10dc037a0b507cd26c 100644
|
| --- a/src/lithium.cc
|
| +++ b/src/lithium.cc
|
| @@ -94,6 +94,31 @@ void LOperand::PrintTo(StringStream* stream) {
|
| }
|
| }
|
|
|
| +#define DEFINE_OPERAND_CACHE(name, type) \
|
| + name* name::cache = NULL; \
|
| + void name::SetUpCache() { \
|
| + if (cache) return; \
|
| + cache = new name[kNumCachedOperands]; \
|
| + for (int i = 0; i < kNumCachedOperands; i++) { \
|
| + cache[i].ConvertTo(type, i); \
|
| + } \
|
| + } \
|
| +
|
| +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
|
| +
|
| +void LOperand::SetUpCaches() {
|
| + LConstantOperand::SetUpCache();
|
| + LStackSlot::SetUpCache();
|
| + LDoubleStackSlot::SetUpCache();
|
| + LRegister::SetUpCache();
|
| + LDoubleRegister::SetUpCache();
|
| +}
|
|
|
| bool LParallelMove::IsRedundant() const {
|
| for (int i = 0; i < move_operands_.length(); ++i) {
|
|
|