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 7e784b29eb74e0ea1ad375f852fd4e1838fbcf33..f924805d741c3a258cb31498e31afa7ad7631e9a 100644 |
--- a/src/a64/lithium-gap-resolver-a64.cc |
+++ b/src/a64/lithium-gap-resolver-a64.cc |
@@ -156,6 +156,7 @@ void LGapResolver::Verify() { |
TODO_UNIMPLEMENTED("LGapResolver::Verify"); |
} |
+ |
void LGapResolver::BreakCycle(int index) { |
ASSERT(moves_[index].destination()->Equals(moves_[root_index_].source())); |
ASSERT(!in_cycle_); |
@@ -233,6 +234,7 @@ void LGapResolver::EmitMove(int index) { |
ASSERT(destination->IsStackSlot()); |
__ Str(source_register, cgen_->ToMemOperand(destination)); |
} |
+ |
} else if (source->IsStackSlot()) { |
MemOperand source_operand = cgen_->ToMemOperand(source); |
if (destination->IsRegister()) { |
@@ -241,6 +243,7 @@ void LGapResolver::EmitMove(int index) { |
ASSERT(destination->IsStackSlot()); |
EmitStackSlotMove(index); |
} |
+ |
} else if (source->IsConstantOperand()) { |
LConstantOperand* constant_source = LConstantOperand::cast(source); |
if (destination->IsRegister()) { |
@@ -252,6 +255,9 @@ void LGapResolver::EmitMove(int index) { |
} else { |
__ LoadObject(dst, cgen_->ToHandle(constant_source)); |
} |
+ } else if (source->IsDoubleRegister()) { |
+ DoubleRegister result = cgen_->ToDoubleRegister(destination); |
+ __ Fmov(result, cgen_->ToDouble(constant_source)); |
} else { |
ASSERT(destination->IsStackSlot()); |
ASSERT(!in_cycle_); // Constant moves happen after all cycles are gone. |
@@ -265,6 +271,7 @@ void LGapResolver::EmitMove(int index) { |
} |
__ Str(kSavedValue, cgen_->ToMemOperand(destination)); |
} |
+ |
} else if (source->IsDoubleRegister()) { |
DoubleRegister src = cgen_->ToDoubleRegister(source); |
if (destination->IsDoubleRegister()) { |
@@ -273,6 +280,7 @@ void LGapResolver::EmitMove(int index) { |
ASSERT(destination->IsDoubleStackSlot()); |
__ Str(src, cgen_->ToMemOperand(destination)); |
} |
+ |
} else if (source->IsDoubleStackSlot()) { |
MemOperand src = cgen_->ToMemOperand(source); |
if (destination->IsDoubleRegister()) { |
@@ -281,6 +289,7 @@ void LGapResolver::EmitMove(int index) { |
// TODO(all): double stack slot to double stack slot move. |
UNIMPLEMENTED(); |
} |
+ |
} else { |
UNREACHABLE(); |
} |