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.