Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Unified Diff: src/a64/lithium-gap-resolver-a64.cc

Issue 138943008: A64: Implement support for stack slots in gap resolver (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/a64
Patch Set: updates Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698