| Index: src/crankshaft/s390/lithium-gap-resolver-s390.cc
|
| diff --git a/src/crankshaft/ppc/lithium-gap-resolver-ppc.cc b/src/crankshaft/s390/lithium-gap-resolver-s390.cc
|
| similarity index 86%
|
| copy from src/crankshaft/ppc/lithium-gap-resolver-ppc.cc
|
| copy to src/crankshaft/s390/lithium-gap-resolver-s390.cc
|
| index 4e249808f761a34eb7799b67e9c61f1661774c4a..cffcede226fbc2b48c8e86323f65423010561545 100644
|
| --- a/src/crankshaft/ppc/lithium-gap-resolver-ppc.cc
|
| +++ b/src/crankshaft/s390/lithium-gap-resolver-s390.cc
|
| @@ -1,15 +1,15 @@
|
| -// Copyright 2014 the V8 project authors. All rights reserved.
|
| +// Copyright 2015 the V8 project authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "src/crankshaft/ppc/lithium-gap-resolver-ppc.h"
|
| +#include "src/crankshaft/s390/lithium-gap-resolver-s390.h"
|
|
|
| -#include "src/crankshaft/ppc/lithium-codegen-ppc.h"
|
| +#include "src/crankshaft/s390/lithium-codegen-s390.h"
|
|
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -static const Register kSavedValueRegister = {11};
|
| +static const Register kSavedValueRegister = {1};
|
|
|
| LGapResolver::LGapResolver(LCodeGen* owner)
|
| : cgen_(owner),
|
| @@ -18,7 +18,6 @@ LGapResolver::LGapResolver(LCodeGen* owner)
|
| in_cycle_(false),
|
| saved_destination_(NULL) {}
|
|
|
| -
|
| void LGapResolver::Resolve(LParallelMove* parallel_move) {
|
| DCHECK(moves_.is_empty());
|
| // Build up a worklist of moves.
|
| @@ -49,7 +48,6 @@ void LGapResolver::Resolve(LParallelMove* parallel_move) {
|
| moves_.Rewind(0);
|
| }
|
|
|
| -
|
| void LGapResolver::BuildInitialMoveList(LParallelMove* parallel_move) {
|
| // Perform a linear sweep of the moves to add them to the initial list of
|
| // moves to perform, ignoring any move that is redundant (the source is
|
| @@ -63,7 +61,6 @@ void LGapResolver::BuildInitialMoveList(LParallelMove* parallel_move) {
|
| Verify();
|
| }
|
|
|
| -
|
| void LGapResolver::PerformMove(int index) {
|
| // Each call to this function performs a move and deletes it from the move
|
| // graph. We first recursively perform any move blocking this one. We
|
| @@ -121,7 +118,6 @@ void LGapResolver::PerformMove(int index) {
|
| EmitMove(index);
|
| }
|
|
|
| -
|
| void LGapResolver::Verify() {
|
| #ifdef ENABLE_SLOW_DCHECKS
|
| // No operand should be the destination for more than one move.
|
| @@ -146,13 +142,13 @@ void LGapResolver::BreakCycle(int index) {
|
| LOperand* source = moves_[index].source();
|
| saved_destination_ = moves_[index].destination();
|
| if (source->IsRegister()) {
|
| - __ mr(kSavedValueRegister, cgen_->ToRegister(source));
|
| + __ LoadRR(kSavedValueRegister, cgen_->ToRegister(source));
|
| } else if (source->IsStackSlot()) {
|
| __ LoadP(kSavedValueRegister, cgen_->ToMemOperand(source));
|
| } else if (source->IsDoubleRegister()) {
|
| - __ fmr(kScratchDoubleReg, cgen_->ToDoubleRegister(source));
|
| + __ ldr(kScratchDoubleReg, cgen_->ToDoubleRegister(source));
|
| } else if (source->IsDoubleStackSlot()) {
|
| - __ lfd(kScratchDoubleReg, cgen_->ToMemOperand(source));
|
| + __ LoadDouble(kScratchDoubleReg, cgen_->ToMemOperand(source));
|
| } else {
|
| UNREACHABLE();
|
| }
|
| @@ -160,20 +156,19 @@ void LGapResolver::BreakCycle(int index) {
|
| moves_[index].Eliminate();
|
| }
|
|
|
| -
|
| void LGapResolver::RestoreValue() {
|
| DCHECK(in_cycle_);
|
| DCHECK(saved_destination_ != NULL);
|
|
|
| // Spilled value is in kSavedValueRegister or kSavedDoubleValueRegister.
|
| if (saved_destination_->IsRegister()) {
|
| - __ mr(cgen_->ToRegister(saved_destination_), kSavedValueRegister);
|
| + __ LoadRR(cgen_->ToRegister(saved_destination_), kSavedValueRegister);
|
| } else if (saved_destination_->IsStackSlot()) {
|
| __ StoreP(kSavedValueRegister, cgen_->ToMemOperand(saved_destination_));
|
| } else if (saved_destination_->IsDoubleRegister()) {
|
| - __ fmr(cgen_->ToDoubleRegister(saved_destination_), kScratchDoubleReg);
|
| + __ ldr(cgen_->ToDoubleRegister(saved_destination_), kScratchDoubleReg);
|
| } else if (saved_destination_->IsDoubleStackSlot()) {
|
| - __ stfd(kScratchDoubleReg, cgen_->ToMemOperand(saved_destination_));
|
| + __ StoreDouble(kScratchDoubleReg, cgen_->ToMemOperand(saved_destination_));
|
| } else {
|
| UNREACHABLE();
|
| }
|
| @@ -182,7 +177,6 @@ void LGapResolver::RestoreValue() {
|
| saved_destination_ = NULL;
|
| }
|
|
|
| -
|
| void LGapResolver::EmitMove(int index) {
|
| LOperand* source = moves_[index].source();
|
| LOperand* destination = moves_[index].destination();
|
| @@ -193,7 +187,7 @@ void LGapResolver::EmitMove(int index) {
|
| if (source->IsRegister()) {
|
| Register source_register = cgen_->ToRegister(source);
|
| if (destination->IsRegister()) {
|
| - __ mr(cgen_->ToRegister(destination), source_register);
|
| + __ LoadRR(cgen_->ToRegister(destination), source_register);
|
| } else {
|
| DCHECK(destination->IsStackSlot());
|
| __ StoreP(source_register, cgen_->ToMemOperand(destination));
|
| @@ -241,37 +235,37 @@ void LGapResolver::EmitMove(int index) {
|
| } else if (source->IsDoubleRegister()) {
|
| DoubleRegister source_register = cgen_->ToDoubleRegister(source);
|
| if (destination->IsDoubleRegister()) {
|
| - __ fmr(cgen_->ToDoubleRegister(destination), source_register);
|
| + __ ldr(cgen_->ToDoubleRegister(destination), source_register);
|
| } else {
|
| DCHECK(destination->IsDoubleStackSlot());
|
| - __ stfd(source_register, cgen_->ToMemOperand(destination));
|
| + __ StoreDouble(source_register, cgen_->ToMemOperand(destination));
|
| }
|
|
|
| } else if (source->IsDoubleStackSlot()) {
|
| MemOperand source_operand = cgen_->ToMemOperand(source);
|
| if (destination->IsDoubleRegister()) {
|
| - __ lfd(cgen_->ToDoubleRegister(destination), source_operand);
|
| + __ LoadDouble(cgen_->ToDoubleRegister(destination), source_operand);
|
| } else {
|
| DCHECK(destination->IsDoubleStackSlot());
|
| MemOperand destination_operand = cgen_->ToMemOperand(destination);
|
| if (in_cycle_) {
|
| // kSavedDoubleValueRegister was used to break the cycle,
|
| // but kSavedValueRegister is free.
|
| -#if V8_TARGET_ARCH_PPC64
|
| - __ ld(kSavedValueRegister, source_operand);
|
| - __ std(kSavedValueRegister, destination_operand);
|
| +#if V8_TARGET_ARCH_S390X
|
| + __ lg(kSavedValueRegister, source_operand);
|
| + __ stg(kSavedValueRegister, destination_operand);
|
| #else
|
| MemOperand source_high_operand = cgen_->ToHighMemOperand(source);
|
| MemOperand destination_high_operand =
|
| cgen_->ToHighMemOperand(destination);
|
| - __ lwz(kSavedValueRegister, source_operand);
|
| - __ stw(kSavedValueRegister, destination_operand);
|
| - __ lwz(kSavedValueRegister, source_high_operand);
|
| - __ stw(kSavedValueRegister, destination_high_operand);
|
| + __ LoadlW(kSavedValueRegister, source_operand);
|
| + __ StoreW(kSavedValueRegister, destination_operand);
|
| + __ LoadlW(kSavedValueRegister, source_high_operand);
|
| + __ StoreW(kSavedValueRegister, destination_high_operand);
|
| #endif
|
| } else {
|
| - __ lfd(kScratchDoubleReg, source_operand);
|
| - __ stfd(kScratchDoubleReg, destination_operand);
|
| + __ LoadDouble(kScratchDoubleReg, source_operand);
|
| + __ StoreDouble(kScratchDoubleReg, destination_operand);
|
| }
|
| }
|
| } else {
|
| @@ -281,7 +275,6 @@ void LGapResolver::EmitMove(int index) {
|
| moves_[index].Eliminate();
|
| }
|
|
|
| -
|
| #undef __
|
| } // namespace internal
|
| } // namespace v8
|
|
|