Reviewers: Rodolph Perfetta (ARM), ulan,

Description:
A64: Add support for --optimize-for-size in PushMultipleTimes

BUG=none
[email protected],[email protected]
LOG=n

Please review this at https://codereview.chromium.org/140893009/

SVN Base: https://v8.googlecode.com/svn/branches/experimental/a64

Affected files (+11, -3 lines):
  M src/a64/macro-assembler-a64.cc


Index: src/a64/macro-assembler-a64.cc
diff --git a/src/a64/macro-assembler-a64.cc b/src/a64/macro-assembler-a64.cc
index 3d2d24e9e9277c2be15b3099de9e7cdca94e53df..9b600bc195be0d9d8505565db5ba36ad02003afb 100644
--- a/src/a64/macro-assembler-a64.cc
+++ b/src/a64/macro-assembler-a64.cc
@@ -672,10 +672,18 @@ void MacroAssembler::PopCPURegList(CPURegList registers) {
 void MacroAssembler::PushMultipleTimes(int count, Register src) {
   int size = src.SizeInBytes();

-  // TODO(all): Use a loop when optimizing for size.
-  TODO_UNIMPLEMENTED("PushMultipleTimes: Support --optimize-for-size.");
-
   PrepareForPush(count, size);
+
+  if (FLAG_optimize_for_size && count > 4) {
+    Label loop;
+    __ Mov(Tmp0(), count);
+    __ Bind(&loop);
+    PushHelper(1, size, src, NoReg, NoReg, NoReg);
+    __ Subs(Tmp0(), Tmp0(), 1);
+    __ B(ne, &loop);
+    return;
+  }
+
   // Push up to four registers at a time if possible because if the current
// stack pointer is csp and the register size is 32, registers must be pushed
   // in blocks of four in order to maintain the 16-byte alignment for csp.


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to