Chromium Code Reviews| Index: src/arm/lithium-arm.cc |
| diff --git a/src/arm/lithium-arm.cc b/src/arm/lithium-arm.cc |
| index 1d5f0ec4f7095256eee63ba2e1b8dbf379e26b5a..45eef31257275334344daf53d1b8eca41b354475 100644 |
| --- a/src/arm/lithium-arm.cc |
| +++ b/src/arm/lithium-arm.cc |
| @@ -42,10 +42,10 @@ LITHIUM_CONCRETE_INSTRUCTION_LIST(DEFINE_COMPILE) |
| #undef DEFINE_COMPILE |
| LOsrEntry::LOsrEntry() { |
| - for (int i = 0; i < Register::kNumAllocatableRegisters; ++i) { |
| + for (int i = 0; i < Register::NumAllocatableRegisters(); ++i) { |
| register_spills_[i] = NULL; |
| } |
| - for (int i = 0; i < DoubleRegister::kNumAllocatableRegisters; ++i) { |
| + for (int i = 0; i < DoubleRegister::NumAllocatableRegisters(); ++i) { |
| double_register_spills_[i] = NULL; |
| } |
| } |
| @@ -591,6 +591,7 @@ LInstruction* LChunkBuilder::AssignEnvironment(LInstruction* instr) { |
| LInstruction* LChunkBuilder::MarkAsCall(LInstruction* instr, |
| HInstruction* hinstr, |
| CanDeoptimize can_deoptimize) { |
| + info()->MarkAsNonDeferredCalling(); |
| #ifdef DEBUG |
| instr->VerifyCall(); |
| #endif |
| @@ -1629,6 +1630,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) { |
| Representation to = instr->to(); |
| if (from.IsTagged()) { |
| if (to.IsDouble()) { |
| + info()->MarkAsDeferredCalling(); |
| LOperand* value = UseRegister(instr->value()); |
| LNumberUntagD* res = new(zone()) LNumberUntagD(value); |
| return AssignEnvironment(DefineAsRegister(res)); |
| @@ -1653,6 +1655,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) { |
| } |
| } else if (from.IsDouble()) { |
| if (to.IsTagged()) { |
| + info()->MarkAsDeferredCalling(); |
| LOperand* value = UseRegister(instr->value()); |
| LOperand* temp1 = TempRegister(); |
| LOperand* temp2 = TempRegister(); |
| @@ -1672,6 +1675,7 @@ LInstruction* LChunkBuilder::DoChange(HChange* instr) { |
| return AssignEnvironment(DefineAsRegister(res)); |
| } |
| } else if (from.IsInteger32()) { |
| + info()->MarkAsDeferredCalling(); |
| if (to.IsTagged()) { |
| HValue* val = instr->value(); |
| LOperand* value = UseRegisterAtStart(val); |
| @@ -2127,8 +2131,27 @@ LInstruction* LChunkBuilder::DoOsrEntry(HOsrEntry* instr) { |
| LInstruction* LChunkBuilder::DoParameter(HParameter* instr) { |
| - int spill_index = chunk()->GetParameterStackSlot(instr->index()); |
| - return DefineAsSpilled(new(zone()) LParameter, spill_index); |
| + LParameter* result = new(zone()) LParameter; |
| + switch (instr->kind()) { |
| + case FUNCTION_PARAMETER: { |
| + int spill_index = chunk()->GetParameterStackSlot(instr->index()); |
| + return DefineAsSpilled(new(zone()) LParameter, spill_index); |
| + } |
| + case KEYED_LOAD_IC_PARAMETER: { |
| + if (instr->index() == 0) return DefineFixed(result, r1); |
| + if (instr->index() == 1) return DefineFixed(result, r0); |
| + UNREACHABLE(); |
| + break; |
| + } |
| + case KEYED_STORE_IC_PARAMETER: |
|
Jakob Kummerow
2012/11/19 12:36:00
remove for now
danno
2012/11/26 17:16:18
Done.
|
| + if (instr->index() == 0) return DefineFixed(result, r2); |
| + if (instr->index() == 1) return DefineFixed(result, r1); |
| + if (instr->index() == 2) return DefineFixed(result, r0); |
| + break; |
| + default: |
| + UNREACHABLE(); |
| + } |
| + return NULL; |
| } |