зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1425583 - Hide ARM64 address computations behind an abstraction. r=sstangl
--HG-- extra : rebase_source : b9ef1e6f8f0169b5db545d862695dd70f22096ba extra : intermediate-source : b320987d9b2cb151bceaddec220645a6decb1026 extra : source : 533dd94fa8d3d93d4332f74d5774ba9b935c2ee7
This commit is contained in:
Родитель
9d9b05b2e8
Коммит
b37e65e581
|
@ -278,9 +278,9 @@ MacroAssembler::add32(Imm32 imm, const Address& dest)
|
||||||
const ARMRegister scratch32 = temps.AcquireW();
|
const ARMRegister scratch32 = temps.AcquireW();
|
||||||
MOZ_ASSERT(scratch32.asUnsized() != dest.base);
|
MOZ_ASSERT(scratch32.asUnsized() != dest.base);
|
||||||
|
|
||||||
Ldr(scratch32, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Ldr(scratch32, toMemOperand(dest));
|
||||||
Add(scratch32, scratch32, Operand(imm.value));
|
Add(scratch32, scratch32, Operand(imm.value));
|
||||||
Str(scratch32, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Str(scratch32, toMemOperand(dest));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -320,9 +320,9 @@ MacroAssembler::addPtr(Imm32 imm, const Address& dest)
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != dest.base);
|
MOZ_ASSERT(scratch64.asUnsized() != dest.base);
|
||||||
|
|
||||||
Ldr(scratch64, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Ldr(scratch64, toMemOperand(dest));
|
||||||
Add(scratch64, scratch64, Operand(imm.value));
|
Add(scratch64, scratch64, Operand(imm.value));
|
||||||
Str(scratch64, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Str(scratch64, toMemOperand(dest));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -332,7 +332,7 @@ MacroAssembler::addPtr(const Address& src, Register dest)
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != src.base);
|
MOZ_ASSERT(scratch64.asUnsized() != src.base);
|
||||||
|
|
||||||
Ldr(scratch64, MemOperand(ARMRegister(src.base, 64), src.offset));
|
Ldr(scratch64, toMemOperand(src));
|
||||||
Add(ARMRegister(dest, 64), ARMRegister(dest, 64), Operand(scratch64));
|
Add(ARMRegister(dest, 64), ARMRegister(dest, 64), Operand(scratch64));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -413,9 +413,9 @@ MacroAssembler::subPtr(Register src, const Address& dest)
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != dest.base);
|
MOZ_ASSERT(scratch64.asUnsized() != dest.base);
|
||||||
|
|
||||||
Ldr(scratch64, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Ldr(scratch64, toMemOperand(dest));
|
||||||
Sub(scratch64, scratch64, Operand(ARMRegister(src, 64)));
|
Sub(scratch64, scratch64, Operand(ARMRegister(src, 64)));
|
||||||
Str(scratch64, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Str(scratch64, toMemOperand(dest));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -431,7 +431,7 @@ MacroAssembler::subPtr(const Address& addr, Register dest)
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != addr.base);
|
MOZ_ASSERT(scratch64.asUnsized() != addr.base);
|
||||||
|
|
||||||
Ldr(scratch64, MemOperand(ARMRegister(addr.base, 64), addr.offset));
|
Ldr(scratch64, toMemOperand(addr));
|
||||||
Sub(ARMRegister(dest, 64), ARMRegister(dest, 64), Operand(scratch64));
|
Sub(ARMRegister(dest, 64), ARMRegister(dest, 64), Operand(scratch64));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1715,7 +1715,7 @@ MacroAssembler::branchToComputedAddress(const BaseIndex& addr)
|
||||||
void
|
void
|
||||||
MacroAssembler::storeUncanonicalizedDouble(FloatRegister src, const Address& dest)
|
MacroAssembler::storeUncanonicalizedDouble(FloatRegister src, const Address& dest)
|
||||||
{
|
{
|
||||||
Str(ARMFPRegister(src, 64), MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Str(ARMFPRegister(src, 64), toMemOperand(dest));
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
MacroAssembler::storeUncanonicalizedDouble(FloatRegister src, const BaseIndex& dest)
|
MacroAssembler::storeUncanonicalizedDouble(FloatRegister src, const BaseIndex& dest)
|
||||||
|
@ -1726,7 +1726,7 @@ MacroAssembler::storeUncanonicalizedDouble(FloatRegister src, const BaseIndex& d
|
||||||
void
|
void
|
||||||
MacroAssembler::storeUncanonicalizedFloat32(FloatRegister src, const Address& addr)
|
MacroAssembler::storeUncanonicalizedFloat32(FloatRegister src, const Address& addr)
|
||||||
{
|
{
|
||||||
Str(ARMFPRegister(src, 32), MemOperand(ARMRegister(addr.base, 64), addr.offset));
|
Str(ARMFPRegister(src, 32), toMemOperand(addr));
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
MacroAssembler::storeUncanonicalizedFloat32(FloatRegister src, const BaseIndex& addr)
|
MacroAssembler::storeUncanonicalizedFloat32(FloatRegister src, const BaseIndex& addr)
|
||||||
|
|
|
@ -783,14 +783,14 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
void loadPrivate(const Address& src, Register dest);
|
void loadPrivate(const Address& src, Register dest);
|
||||||
|
|
||||||
void store8(Register src, const Address& address) {
|
void store8(Register src, const Address& address) {
|
||||||
Strb(ARMRegister(src, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Strb(ARMRegister(src, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void store8(Imm32 imm, const Address& address) {
|
void store8(Imm32 imm, const Address& address) {
|
||||||
vixl::UseScratchRegisterScope temps(this);
|
vixl::UseScratchRegisterScope temps(this);
|
||||||
const ARMRegister scratch32 = temps.AcquireW();
|
const ARMRegister scratch32 = temps.AcquireW();
|
||||||
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
||||||
move32(imm, scratch32.asUnsized());
|
move32(imm, scratch32.asUnsized());
|
||||||
Strb(scratch32, MemOperand(ARMRegister(address.base, 64), address.offset));
|
Strb(scratch32, toMemOperand(address));
|
||||||
}
|
}
|
||||||
void store8(Register src, const BaseIndex& address) {
|
void store8(Register src, const BaseIndex& address) {
|
||||||
doBaseIndex(ARMRegister(src, 32), address, vixl::STRB_w);
|
doBaseIndex(ARMRegister(src, 32), address, vixl::STRB_w);
|
||||||
|
@ -805,14 +805,14 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
}
|
}
|
||||||
|
|
||||||
void store16(Register src, const Address& address) {
|
void store16(Register src, const Address& address) {
|
||||||
Strh(ARMRegister(src, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Strh(ARMRegister(src, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void store16(Imm32 imm, const Address& address) {
|
void store16(Imm32 imm, const Address& address) {
|
||||||
vixl::UseScratchRegisterScope temps(this);
|
vixl::UseScratchRegisterScope temps(this);
|
||||||
const ARMRegister scratch32 = temps.AcquireW();
|
const ARMRegister scratch32 = temps.AcquireW();
|
||||||
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
||||||
move32(imm, scratch32.asUnsized());
|
move32(imm, scratch32.asUnsized());
|
||||||
Strh(scratch32, MemOperand(ARMRegister(address.base, 64), address.offset));
|
Strh(scratch32, toMemOperand(address));
|
||||||
}
|
}
|
||||||
void store16(Register src, const BaseIndex& address) {
|
void store16(Register src, const BaseIndex& address) {
|
||||||
doBaseIndex(ARMRegister(src, 32), address, vixl::STRH_w);
|
doBaseIndex(ARMRegister(src, 32), address, vixl::STRH_w);
|
||||||
|
@ -838,7 +838,7 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != address.base);
|
MOZ_ASSERT(scratch64.asUnsized() != address.base);
|
||||||
Mov(scratch64, uint64_t(imm.value));
|
Mov(scratch64, uint64_t(imm.value));
|
||||||
Str(scratch64, MemOperand(ARMRegister(address.base, 64), address.offset));
|
Str(scratch64, toMemOperand(address));
|
||||||
}
|
}
|
||||||
void storePtr(ImmGCPtr imm, const Address& address) {
|
void storePtr(ImmGCPtr imm, const Address& address) {
|
||||||
vixl::UseScratchRegisterScope temps(this);
|
vixl::UseScratchRegisterScope temps(this);
|
||||||
|
@ -848,7 +848,7 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
storePtr(scratch, address);
|
storePtr(scratch, address);
|
||||||
}
|
}
|
||||||
void storePtr(Register src, const Address& address) {
|
void storePtr(Register src, const Address& address) {
|
||||||
Str(ARMRegister(src, 64), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Str(ARMRegister(src, 64), toMemOperand(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
void storePtr(ImmWord imm, const BaseIndex& address) {
|
void storePtr(ImmWord imm, const BaseIndex& address) {
|
||||||
|
@ -889,10 +889,10 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
const ARMRegister scratch32 = temps.AcquireW();
|
const ARMRegister scratch32 = temps.AcquireW();
|
||||||
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
||||||
Mov(scratch32, uint64_t(imm.value));
|
Mov(scratch32, uint64_t(imm.value));
|
||||||
Str(scratch32, MemOperand(ARMRegister(address.base, 64), address.offset));
|
Str(scratch32, toMemOperand(address));
|
||||||
}
|
}
|
||||||
void store32(Register r, const Address& address) {
|
void store32(Register r, const Address& address) {
|
||||||
Str(ARMRegister(r, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Str(ARMRegister(r, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void store32(Imm32 imm, const BaseIndex& address) {
|
void store32(Imm32 imm, const BaseIndex& address) {
|
||||||
vixl::UseScratchRegisterScope temps(this);
|
vixl::UseScratchRegisterScope temps(this);
|
||||||
|
@ -913,7 +913,7 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
|
|
||||||
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
MOZ_ASSERT(scratch32.asUnsized() != address.base);
|
||||||
Mov(scratch32, uint64_t(imm.value));
|
Mov(scratch32, uint64_t(imm.value));
|
||||||
Str(scratch32, MemOperand(ARMRegister(address.base, 64), address.offset));
|
Str(scratch32, toMemOperand(address));
|
||||||
}
|
}
|
||||||
|
|
||||||
void store64(Register64 src, Address address) {
|
void store64(Register64 src, Address address) {
|
||||||
|
@ -1048,21 +1048,21 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != lhs.base);
|
MOZ_ASSERT(scratch64.asUnsized() != lhs.base);
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != rhs);
|
MOZ_ASSERT(scratch64.asUnsized() != rhs);
|
||||||
Ldr(scratch64, MemOperand(ARMRegister(lhs.base, 64), lhs.offset));
|
Ldr(scratch64, toMemOperand(lhs));
|
||||||
Cmp(scratch64, Operand(ARMRegister(rhs, 64)));
|
Cmp(scratch64, Operand(ARMRegister(rhs, 64)));
|
||||||
}
|
}
|
||||||
void cmpPtr(const Address& lhs, ImmWord rhs) {
|
void cmpPtr(const Address& lhs, ImmWord rhs) {
|
||||||
vixl::UseScratchRegisterScope temps(this);
|
vixl::UseScratchRegisterScope temps(this);
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != lhs.base);
|
MOZ_ASSERT(scratch64.asUnsized() != lhs.base);
|
||||||
Ldr(scratch64, MemOperand(ARMRegister(lhs.base, 64), lhs.offset));
|
Ldr(scratch64, toMemOperand(lhs));
|
||||||
Cmp(scratch64, Operand(rhs.value));
|
Cmp(scratch64, Operand(rhs.value));
|
||||||
}
|
}
|
||||||
void cmpPtr(const Address& lhs, ImmPtr rhs) {
|
void cmpPtr(const Address& lhs, ImmPtr rhs) {
|
||||||
vixl::UseScratchRegisterScope temps(this);
|
vixl::UseScratchRegisterScope temps(this);
|
||||||
const ARMRegister scratch64 = temps.AcquireX();
|
const ARMRegister scratch64 = temps.AcquireX();
|
||||||
MOZ_ASSERT(scratch64.asUnsized() != lhs.base);
|
MOZ_ASSERT(scratch64.asUnsized() != lhs.base);
|
||||||
Ldr(scratch64, MemOperand(ARMRegister(lhs.base, 64), lhs.offset));
|
Ldr(scratch64, toMemOperand(lhs));
|
||||||
Cmp(scratch64, Operand(uint64_t(rhs.value)));
|
Cmp(scratch64, Operand(uint64_t(rhs.value)));
|
||||||
}
|
}
|
||||||
void cmpPtr(const Address& lhs, ImmGCPtr rhs) {
|
void cmpPtr(const Address& lhs, ImmGCPtr rhs) {
|
||||||
|
@ -1094,7 +1094,7 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
Ldr(ARMFPRegister(dest, 64), MemOperand(scratch64, src.offset));
|
Ldr(ARMFPRegister(dest, 64), MemOperand(scratch64, src.offset));
|
||||||
}
|
}
|
||||||
void loadFloatAsDouble(const Address& addr, FloatRegister dest) {
|
void loadFloatAsDouble(const Address& addr, FloatRegister dest) {
|
||||||
Ldr(ARMFPRegister(dest, 32), MemOperand(ARMRegister(addr.base,64), addr.offset));
|
Ldr(ARMFPRegister(dest, 32), toMemOperand(addr));
|
||||||
fcvt(ARMFPRegister(dest, 64), ARMFPRegister(dest, 32));
|
fcvt(ARMFPRegister(dest, 64), ARMFPRegister(dest, 32));
|
||||||
}
|
}
|
||||||
void loadFloatAsDouble(const BaseIndex& src, FloatRegister dest) {
|
void loadFloatAsDouble(const BaseIndex& src, FloatRegister dest) {
|
||||||
|
@ -1115,7 +1115,7 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadFloat32(const Address& addr, FloatRegister dest) {
|
void loadFloat32(const Address& addr, FloatRegister dest) {
|
||||||
Ldr(ARMFPRegister(dest, 32), MemOperand(ARMRegister(addr.base,64), addr.offset));
|
Ldr(ARMFPRegister(dest, 32), toMemOperand(addr));
|
||||||
}
|
}
|
||||||
void loadFloat32(const BaseIndex& src, FloatRegister dest) {
|
void loadFloat32(const BaseIndex& src, FloatRegister dest) {
|
||||||
ARMRegister base(src.base, 64);
|
ARMRegister base(src.base, 64);
|
||||||
|
@ -1175,7 +1175,7 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
}
|
}
|
||||||
|
|
||||||
void load32(const Address& address, Register dest) {
|
void load32(const Address& address, Register dest) {
|
||||||
Ldr(ARMRegister(dest, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Ldr(ARMRegister(dest, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void load32(const BaseIndex& src, Register dest) {
|
void load32(const BaseIndex& src, Register dest) {
|
||||||
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDR_w);
|
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDR_w);
|
||||||
|
@ -1191,28 +1191,28 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
}
|
}
|
||||||
|
|
||||||
void load8SignExtend(const Address& address, Register dest) {
|
void load8SignExtend(const Address& address, Register dest) {
|
||||||
Ldrsb(ARMRegister(dest, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Ldrsb(ARMRegister(dest, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void load8SignExtend(const BaseIndex& src, Register dest) {
|
void load8SignExtend(const BaseIndex& src, Register dest) {
|
||||||
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRSB_w);
|
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRSB_w);
|
||||||
}
|
}
|
||||||
|
|
||||||
void load8ZeroExtend(const Address& address, Register dest) {
|
void load8ZeroExtend(const Address& address, Register dest) {
|
||||||
Ldrb(ARMRegister(dest, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Ldrb(ARMRegister(dest, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void load8ZeroExtend(const BaseIndex& src, Register dest) {
|
void load8ZeroExtend(const BaseIndex& src, Register dest) {
|
||||||
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRB_w);
|
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRB_w);
|
||||||
}
|
}
|
||||||
|
|
||||||
void load16SignExtend(const Address& address, Register dest) {
|
void load16SignExtend(const Address& address, Register dest) {
|
||||||
Ldrsh(ARMRegister(dest, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Ldrsh(ARMRegister(dest, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void load16SignExtend(const BaseIndex& src, Register dest) {
|
void load16SignExtend(const BaseIndex& src, Register dest) {
|
||||||
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRSH_w);
|
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRSH_w);
|
||||||
}
|
}
|
||||||
|
|
||||||
void load16ZeroExtend(const Address& address, Register dest) {
|
void load16ZeroExtend(const Address& address, Register dest) {
|
||||||
Ldrh(ARMRegister(dest, 32), MemOperand(ARMRegister(address.base, 64), address.offset));
|
Ldrh(ARMRegister(dest, 32), toMemOperand(address));
|
||||||
}
|
}
|
||||||
void load16ZeroExtend(const BaseIndex& src, Register dest) {
|
void load16ZeroExtend(const BaseIndex& src, Register dest) {
|
||||||
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRH_w);
|
doBaseIndex(ARMRegister(dest, 32), src, vixl::LDRH_w);
|
||||||
|
@ -1229,9 +1229,9 @@ class MacroAssemblerCompat : public vixl::MacroAssembler
|
||||||
const ARMRegister scratch32 = temps.AcquireW();
|
const ARMRegister scratch32 = temps.AcquireW();
|
||||||
MOZ_ASSERT(scratch32.asUnsized() != dest.base);
|
MOZ_ASSERT(scratch32.asUnsized() != dest.base);
|
||||||
|
|
||||||
Ldr(scratch32, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Ldr(scratch32, toMemOperand(dest));
|
||||||
Adds(scratch32, scratch32, Operand(imm.value));
|
Adds(scratch32, scratch32, Operand(imm.value));
|
||||||
Str(scratch32, MemOperand(ARMRegister(dest.base, 64), dest.offset));
|
Str(scratch32, toMemOperand(dest));
|
||||||
}
|
}
|
||||||
|
|
||||||
void subs32(Imm32 imm, Register dest) {
|
void subs32(Imm32 imm, Register dest) {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче