[Arm64] Remove buggy --optimize-for-size branch in PushMultipleTimes.
The helper would cause the stack to be unaligned during pushes which caused issues on Arm64. PushMultipleTimes is only used once by InterpreterEntryTrampoline, therefore it doesn't make sense to change it's behaviour for --optimize-for-size. Change-Id: I3bc7d39bc38ffd22a3ee6cca1cdafe5d656d77b5 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1773275 Auto-Submit: Ross McIlroy <rmcilroy@chromium.org> Commit-Queue: Jakob Gruber <jgruber@chromium.org> Reviewed-by: Jakob Gruber <jgruber@chromium.org> Cr-Commit-Position: refs/heads/master@{#63443}
This commit is contained in:
parent
eebb18d33e
commit
f48fb8b16e
@ -1139,43 +1139,28 @@ void MacroAssembler::PushMultipleTimes(CPURegister src, Register count) {
|
||||
UseScratchRegisterScope temps(this);
|
||||
Register temp = temps.AcquireSameSizeAs(count);
|
||||
|
||||
if (FLAG_optimize_for_size) {
|
||||
Label loop, done;
|
||||
Label loop, leftover2, leftover1, done;
|
||||
|
||||
Subs(temp, count, 1);
|
||||
B(mi, &done);
|
||||
Subs(temp, count, 4);
|
||||
B(mi, &leftover2);
|
||||
|
||||
// Push all registers individually, to save code size.
|
||||
Bind(&loop);
|
||||
Subs(temp, temp, 1);
|
||||
PushHelper(1, src.SizeInBytes(), src, NoReg, NoReg, NoReg);
|
||||
B(pl, &loop);
|
||||
// Push groups of four first.
|
||||
Bind(&loop);
|
||||
Subs(temp, temp, 4);
|
||||
PushHelper(4, src.SizeInBytes(), src, src, src, src);
|
||||
B(pl, &loop);
|
||||
|
||||
Bind(&done);
|
||||
} else {
|
||||
Label loop, leftover2, leftover1, done;
|
||||
// Push groups of two.
|
||||
Bind(&leftover2);
|
||||
Tbz(count, 1, &leftover1);
|
||||
PushHelper(2, src.SizeInBytes(), src, src, NoReg, NoReg);
|
||||
|
||||
Subs(temp, count, 4);
|
||||
B(mi, &leftover2);
|
||||
// Push the last one (if required).
|
||||
Bind(&leftover1);
|
||||
Tbz(count, 0, &done);
|
||||
PushHelper(1, src.SizeInBytes(), src, NoReg, NoReg, NoReg);
|
||||
|
||||
// Push groups of four first.
|
||||
Bind(&loop);
|
||||
Subs(temp, temp, 4);
|
||||
PushHelper(4, src.SizeInBytes(), src, src, src, src);
|
||||
B(pl, &loop);
|
||||
|
||||
// Push groups of two.
|
||||
Bind(&leftover2);
|
||||
Tbz(count, 1, &leftover1);
|
||||
PushHelper(2, src.SizeInBytes(), src, src, NoReg, NoReg);
|
||||
|
||||
// Push the last one (if required).
|
||||
Bind(&leftover1);
|
||||
Tbz(count, 0, &done);
|
||||
PushHelper(1, src.SizeInBytes(), src, NoReg, NoReg, NoReg);
|
||||
|
||||
Bind(&done);
|
||||
}
|
||||
Bind(&done);
|
||||
}
|
||||
|
||||
void TurboAssembler::PushHelper(int count, int size, const CPURegister& src0,
|
||||
|
Loading…
Reference in New Issue
Block a user