Chromium Code Reviews| Index: src/a64/lithium-gap-resolver-a64.cc |
| diff --git a/src/a64/lithium-gap-resolver-a64.cc b/src/a64/lithium-gap-resolver-a64.cc |
| index 6a29ac142c32958dc2e4cfe019167df4032aee7e..1a4b0e5fd8adc5ef894858ffb7a52225d68cecda 100644 |
| --- a/src/a64/lithium-gap-resolver-a64.cc |
| +++ b/src/a64/lithium-gap-resolver-a64.cc |
| @@ -184,7 +184,7 @@ void LGapResolver::BreakCycle(int index) { |
| if (source->IsRegister()) { |
| __ Mov(kSavedValue, cgen_->ToRegister(source)); |
| } else if (source->IsStackSlot()) { |
| - UNIMPLEMENTED(); |
| + __ Ldr(kSavedValue, cgen_->ToMemOperand(source)); |
| } else if (source->IsDoubleRegister()) { |
| // TODO(all): We should use a double register to store the value to avoid |
| // the penalty of the mov across register banks. We are going to reserve |
| @@ -194,7 +194,7 @@ void LGapResolver::BreakCycle(int index) { |
| // do that. |
| __ Fmov(kSavedValue, cgen_->ToDoubleRegister(source)); |
| } else if (source->IsDoubleStackSlot()) { |
| - UNIMPLEMENTED(); |
| + __ Ldr(kSavedValue, cgen_->ToMemOperand(source)); |
| } else { |
| UNREACHABLE(); |
| } |
| @@ -213,11 +213,11 @@ void LGapResolver::RestoreValue() { |
| if (saved_destination_->IsRegister()) { |
| __ Mov(cgen_->ToRegister(saved_destination_), kSavedValue); |
| } else if (saved_destination_->IsStackSlot()) { |
| - UNIMPLEMENTED(); |
| + __ Str(kSavedValue, cgen_->ToMemOperand(saved_destination_)); |
| } else if (saved_destination_->IsDoubleRegister()) { |
| __ Fmov(cgen_->ToDoubleRegister(saved_destination_), kSavedValue); |
| } else if (saved_destination_->IsDoubleStackSlot()) { |
| - UNIMPLEMENTED(); |
| + __ Str(kSavedValue, cgen_->ToMemOperand(saved_destination_)); |
| } else { |
| UNREACHABLE(); |
| } |
| @@ -294,8 +294,10 @@ void LGapResolver::EmitMove(int index) { |
| if (destination->IsDoubleRegister()) { |
| __ Ldr(cgen_->ToDoubleRegister(destination), src); |
| } else { |
| - // TODO(all): double stack slot to double stack slot move. |
| - UNIMPLEMENTED(); |
| + ASSERT(destination->IsDoubleStackSlot()); |
|
Rodolph Perfetta (ARM)
2014/02/04 16:32:10
How about reusing EmitStackSlotMove define below
|
| + DoubleRegister temp = crankshaft_fp_scratch; |
| + __ Ldr(temp, src); |
| + __ Str(temp, cgen_->ToMemOperand(destination)); |
| } |
| } else { |