Index: src/arm64/lithium-gap-resolver-arm64.h |
diff --git a/src/arm64/lithium-gap-resolver-arm64.h b/src/arm64/lithium-gap-resolver-arm64.h |
index 55d4ecbf9d210865d074abd64d7e315bd3643937..f9a945c6fdfd52f6fc82973ade050dde404b14a8 100644 |
--- a/src/arm64/lithium-gap-resolver-arm64.h |
+++ b/src/arm64/lithium-gap-resolver-arm64.h |
@@ -8,6 +8,7 @@ |
#include "src/v8.h" |
#include "src/lithium.h" |
+#include "src/arm64/delayed-masm-arm64.h" |
namespace v8 { |
namespace internal { |
@@ -43,12 +44,28 @@ class LGapResolver BASE_EMBEDDED { |
void EmitMove(int index); |
// Emit a move from one stack slot to another. |
- void EmitStackSlotMove(int index); |
+ void EmitStackSlotMove(int index) { |
+ masm_.StackSlotMove(moves_[index].source(), moves_[index].destination()); |
+ } |
// Verify the move list before performing moves. |
void Verify(); |
+ // Registers used to solve cycles. |
+ const Register& SavedValueRegister() { |
+ ASSERT(!masm_.ScratchRegister().IsAllocatable()); |
+ return masm_.ScratchRegister(); |
+ } |
+ const FPRegister& SavedFPValueRegister() { |
+ // We use the Crankshaft floating-point scratch register to break a cycle |
+ // involving double values as the MacroAssembler will not need it for the |
+ // operations performed by the gap resolver. |
+ ASSERT(!crankshaft_fp_scratch.IsAllocatable()); |
+ return crankshaft_fp_scratch; |
+ } |
+ |
LCodeGen* cgen_; |
+ DelayedMasm masm_; |
// List of moves not yet resolved. |
ZoneList<LMoveOperands> moves_; |
@@ -56,10 +73,6 @@ class LGapResolver BASE_EMBEDDED { |
int root_index_; |
bool in_cycle_; |
LOperand* saved_destination_; |
- |
- // We use the root register as a scratch in a few places. When that happens, |
- // this flag is set to indicate that it needs to be restored. |
- bool need_to_restore_root_; |
}; |
} } // namespace v8::internal |