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..8bfe00b12614a163f4aaccdc31e889d72913a823 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,9 @@ 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()); |
| + __ Ldr(kSavedValue, src); |
|
Rodolph Perfetta (ARM)
2014/02/03 11:13:13
This won't work, if you are in a cycle kSavedValue
jochen (gone - plz use gerrit)
2014/02/04 14:57:07
Done.
|
| + __ Str(kSavedValue, cgen_->ToMemOperand(destination)); |
| } |
| } else { |