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

Unified Diff: runtime/vm/flow_graph_compiler_arm64.cc

Issue 295243005: Adds more SIMD instructions to arm64. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 7 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 | « runtime/vm/disassembler_arm64.cc ('k') | runtime/vm/intermediate_language_arm.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/flow_graph_compiler_arm64.cc
===================================================================
--- runtime/vm/flow_graph_compiler_arm64.cc (revision 36576)
+++ runtime/vm/flow_graph_compiler_arm64.cc (working copy)
@@ -1440,8 +1440,7 @@
reg_idx >= 0; --reg_idx) {
VRegister fpu_reg = static_cast<VRegister>(reg_idx);
if (locs->live_registers()->ContainsFpuRegister(fpu_reg)) {
- // TODO(zra): Save the whole V register.
- __ PushDouble(fpu_reg);
+ __ PushQuad(fpu_reg);
}
}
}
@@ -1473,8 +1472,7 @@
for (intptr_t reg_idx = 0; reg_idx < kNumberOfVRegisters; ++reg_idx) {
VRegister fpu_reg = static_cast<VRegister>(reg_idx);
if (locs->live_registers()->ContainsFpuRegister(fpu_reg)) {
- // TODO(zra): Restore the whole V register.
- __ PopDouble(fpu_reg);
+ __ PopQuad(fpu_reg);
}
}
}
@@ -1595,7 +1593,7 @@
}
} else if (source.IsFpuRegister()) {
if (destination.IsFpuRegister()) {
- __ fmovdd(destination.fpu_reg(), source.fpu_reg());
+ __ vmov(destination.fpu_reg(), source.fpu_reg());
} else {
if (destination.IsDoubleStackSlot()) {
const intptr_t dest_offset = destination.ToStackSlotOffset();
@@ -1603,7 +1601,8 @@
__ StoreDToOffset(src, FP, dest_offset, PP);
} else {
ASSERT(destination.IsQuadStackSlot());
- UNIMPLEMENTED();
+ const intptr_t dest_offset = destination.ToStackSlotOffset();
+ __ StoreQToOffset(source.fpu_reg(), FP, dest_offset, PP);
}
}
} else if (source.IsDoubleStackSlot()) {
@@ -1619,7 +1618,16 @@
__ StoreDToOffset(VTMP, FP, dest_offset, PP);
}
} else if (source.IsQuadStackSlot()) {
- UNIMPLEMENTED();
+ if (destination.IsFpuRegister()) {
+ const intptr_t dest_offset = source.ToStackSlotOffset();
+ __ LoadQFromOffset(destination.fpu_reg(), FP, dest_offset, PP);
+ } else {
+ ASSERT(destination.IsQuadStackSlot());
+ const intptr_t source_offset = source.ToStackSlotOffset();
+ const intptr_t dest_offset = destination.ToStackSlotOffset();
+ __ LoadQFromOffset(VTMP, FP, source_offset, PP);
+ __ StoreQToOffset(VTMP, FP, dest_offset, PP);
+ }
} else {
ASSERT(source.IsConstant());
const Object& constant = source.constant();
« no previous file with comments | « runtime/vm/disassembler_arm64.cc ('k') | runtime/vm/intermediate_language_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698