Commit b5413f7e authored by jacob.bramley's avatar jacob.bramley Committed by Commit bot

[arm] Fix platform requirements for ldrd and strd.

These instructions were available before V8's baseline (ARMv6). V8 can
always assume that they're present.

BUG=

Review-Url: https://codereview.chromium.org/1985013002
Cr-Commit-Position: refs/heads/master@{#36280}
parent f43ed04f
...@@ -2072,7 +2072,6 @@ void Assembler::ldrsh(Register dst, const MemOperand& src, Condition cond) { ...@@ -2072,7 +2072,6 @@ void Assembler::ldrsh(Register dst, const MemOperand& src, Condition cond) {
void Assembler::ldrd(Register dst1, Register dst2, void Assembler::ldrd(Register dst1, Register dst2,
const MemOperand& src, Condition cond) { const MemOperand& src, Condition cond) {
DCHECK(IsEnabled(ARMv7));
DCHECK(src.rm().is(no_reg)); DCHECK(src.rm().is(no_reg));
DCHECK(!dst1.is(lr)); // r14. DCHECK(!dst1.is(lr)); // r14.
DCHECK_EQ(0, dst1.code() % 2); DCHECK_EQ(0, dst1.code() % 2);
...@@ -2087,7 +2086,6 @@ void Assembler::strd(Register src1, Register src2, ...@@ -2087,7 +2086,6 @@ void Assembler::strd(Register src1, Register src2,
DCHECK(!src1.is(lr)); // r14. DCHECK(!src1.is(lr)); // r14.
DCHECK_EQ(0, src1.code() % 2); DCHECK_EQ(0, src1.code() % 2);
DCHECK_EQ(src1.code() + 1, src2.code()); DCHECK_EQ(src1.code() + 1, src2.code());
DCHECK(IsEnabled(ARMv7));
addrmod3(cond | B7 | B6 | B5 | B4, src1, dst); addrmod3(cond | B7 | B6 | B5 | B4, src1, dst);
} }
......
...@@ -858,10 +858,8 @@ void MacroAssembler::Ldrd(Register dst1, Register dst2, ...@@ -858,10 +858,8 @@ void MacroAssembler::Ldrd(Register dst1, Register dst2,
// below doesn't support it yet. // below doesn't support it yet.
DCHECK((src.am() != PreIndex) && (src.am() != NegPreIndex)); DCHECK((src.am() != PreIndex) && (src.am() != NegPreIndex));
// Generate two ldr instructions if ldrd is not available. // Generate two ldr instructions if ldrd is not applicable.
if (CpuFeatures::IsSupported(ARMv7) && !predictable_code_size() && if ((dst1.code() % 2 == 0) && (dst1.code() + 1 == dst2.code())) {
(dst1.code() % 2 == 0) && (dst1.code() + 1 == dst2.code())) {
CpuFeatureScope scope(this, ARMv7);
ldrd(dst1, dst2, src, cond); ldrd(dst1, dst2, src, cond);
} else { } else {
if ((src.am() == Offset) || (src.am() == NegOffset)) { if ((src.am() == Offset) || (src.am() == NegOffset)) {
...@@ -899,10 +897,8 @@ void MacroAssembler::Strd(Register src1, Register src2, ...@@ -899,10 +897,8 @@ void MacroAssembler::Strd(Register src1, Register src2,
// below doesn't support it yet. // below doesn't support it yet.
DCHECK((dst.am() != PreIndex) && (dst.am() != NegPreIndex)); DCHECK((dst.am() != PreIndex) && (dst.am() != NegPreIndex));
// Generate two str instructions if strd is not available. // Generate two str instructions if strd is not applicable.
if (CpuFeatures::IsSupported(ARMv7) && !predictable_code_size() && if ((src1.code() % 2 == 0) && (src1.code() + 1 == src2.code())) {
(src1.code() % 2 == 0) && (src1.code() + 1 == src2.code())) {
CpuFeatureScope scope(this, ARMv7);
strd(src1, src2, dst, cond); strd(src1, src2, dst, cond);
} else { } else {
MemOperand dst2(dst); MemOperand dst2(dst);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment