mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-17 07:15:46 +00:00
Bug 1687441 part 6 - Add spectreMaskIndexPtr to the MacroAssembler. r=anba
Baesd on spectreMaskIndex32 and cmp32Move32. Also removes incorrect and unused cmp32 implementations on ARM64. Differential Revision: https://phabricator.services.mozilla.com/D102431
This commit is contained in:
parent
ace89cf6f2
commit
6d5c1e5451
@ -3896,6 +3896,27 @@ void MacroAssembler::spectreMaskIndex32(Register index, const Address& length,
|
||||
cmp32Move32(Assembler::Below, index, length, index, output);
|
||||
}
|
||||
|
||||
void MacroAssembler::spectreMaskIndexPtr(Register index, Register length,
|
||||
Register output) {
|
||||
MOZ_ASSERT(JitOptions.spectreIndexMasking);
|
||||
MOZ_ASSERT(length != output);
|
||||
MOZ_ASSERT(index != output);
|
||||
|
||||
movePtr(ImmWord(0), output);
|
||||
cmpPtrMovePtr(Assembler::Below, index, length, index, output);
|
||||
}
|
||||
|
||||
void MacroAssembler::spectreMaskIndexPtr(Register index, const Address& length,
|
||||
Register output) {
|
||||
MOZ_ASSERT(JitOptions.spectreIndexMasking);
|
||||
MOZ_ASSERT(index != length.base);
|
||||
MOZ_ASSERT(length.base != output);
|
||||
MOZ_ASSERT(index != output);
|
||||
|
||||
movePtr(ImmWord(0), output);
|
||||
cmpPtrMovePtr(Assembler::Below, index, length, index, output);
|
||||
}
|
||||
|
||||
void MacroAssembler::boundsCheck32PowerOfTwo(Register index, uint32_t length,
|
||||
Label* failure) {
|
||||
MOZ_ASSERT(mozilla::IsPowerOfTwo(length));
|
||||
|
@ -1858,6 +1858,12 @@ class MacroAssembler : public MacroAssemblerSpecific {
|
||||
Register src, Register dest)
|
||||
DEFINED_ON(arm, arm64, mips_shared, x86_shared);
|
||||
|
||||
inline void cmpPtrMovePtr(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) PER_ARCH;
|
||||
|
||||
inline void cmpPtrMovePtr(Condition cond, Register lhs, const Address& rhs,
|
||||
Register src, Register dest) PER_ARCH;
|
||||
|
||||
inline void cmp32Load32(Condition cond, Register lhs, const Address& rhs,
|
||||
const Address& src, Register dest)
|
||||
DEFINED_ON(arm, arm64, mips_shared, x86_shared);
|
||||
@ -3608,6 +3614,9 @@ class MacroAssembler : public MacroAssemblerSpecific {
|
||||
void spectreMaskIndex32(Register index, Register length, Register output);
|
||||
void spectreMaskIndex32(Register index, const Address& length,
|
||||
Register output);
|
||||
void spectreMaskIndexPtr(Register index, Register length, Register output);
|
||||
void spectreMaskIndexPtr(Register index, const Address& length,
|
||||
Register output);
|
||||
|
||||
// The length must be a power of two. Performs a bounds check and Spectre
|
||||
// index masking.
|
||||
|
@ -2015,6 +2015,17 @@ void MacroAssembler::cmp32Move32(Condition cond, Register lhs,
|
||||
cmp32Move32(cond, lhs, scratch, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32Move32(cond, lhs, rhs, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs,
|
||||
const Address& rhs, Register src,
|
||||
Register dest) {
|
||||
cmp32Move32(cond, lhs, rhs, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Load32(Condition cond, Register lhs,
|
||||
const Address& rhs, const Address& src,
|
||||
Register dest) {
|
||||
|
@ -1746,11 +1746,22 @@ void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs,
|
||||
const Address& rhs, Register src,
|
||||
Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
Csel(ARMRegister(dest, 32), ARMRegister(src, 32), ARMRegister(dest, 32),
|
||||
MOZ_CRASH("NYI");
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
cmpPtr(lhs, rhs);
|
||||
Csel(ARMRegister(dest, 64), ARMRegister(src, 64), ARMRegister(dest, 64),
|
||||
cond);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs,
|
||||
const Address& rhs, Register src,
|
||||
Register dest) {
|
||||
MOZ_CRASH("NYI");
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Load32(Condition cond, Register lhs,
|
||||
const Address& rhs, const Address& src,
|
||||
Register dest) {
|
||||
|
@ -1062,14 +1062,6 @@ class MacroAssemblerCompat : public vixl::MacroAssembler {
|
||||
Ldr(scratch32, toMemOperand(lhs));
|
||||
Cmp(scratch32, Operand(ARMRegister(rhs, 32)));
|
||||
}
|
||||
void cmp32(Register lhs, const Address& rhs) {
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const ARMRegister scratch32 = temps.AcquireW();
|
||||
MOZ_ASSERT(scratch32.asUnsized() != rhs.base);
|
||||
MOZ_ASSERT(scratch32.asUnsized() != lhs);
|
||||
Ldr(scratch32, toMemOperand(rhs));
|
||||
Cmp(scratch32, Operand(ARMRegister(lhs, 32)));
|
||||
}
|
||||
void cmp32(const vixl::Operand& lhs, Imm32 rhs) {
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const ARMRegister scratch32 = temps.AcquireW();
|
||||
@ -1082,12 +1074,6 @@ class MacroAssemblerCompat : public vixl::MacroAssembler {
|
||||
Mov(scratch32, lhs);
|
||||
Cmp(scratch32, Operand(ARMRegister(rhs, 32)));
|
||||
}
|
||||
void cmp32(Register lhs, const vixl::Operand& rhs) {
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const ARMRegister scratch32 = temps.AcquireW();
|
||||
Mov(scratch32, rhs);
|
||||
Cmp(scratch32, Operand(ARMRegister(lhs, 32)));
|
||||
}
|
||||
|
||||
void cmn32(Register lhs, Imm32 rhs) {
|
||||
Cmn(ARMRegister(lhs, 32), Operand(rhs.value));
|
||||
|
@ -724,6 +724,19 @@ void MacroAssembler::branchToComputedAddress(const BaseIndex& address) {
|
||||
jmp(Operand(address));
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
cmpPtr(lhs, rhs);
|
||||
cmovCCq(cond, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs,
|
||||
const Address& rhs, Register src,
|
||||
Register dest) {
|
||||
cmpPtr(lhs, Operand(rhs));
|
||||
cmovCCq(cond, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32MovePtr(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
|
@ -992,6 +992,17 @@ void MacroAssembler::cmp32LoadPtr(Condition cond, const Address& lhs, Imm32 rhs,
|
||||
cmovCCl(cond, Operand(src), dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32Move32(cond, lhs, rhs, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmpPtrMovePtr(Condition cond, Register lhs,
|
||||
const Address& rhs, Register src,
|
||||
Register dest) {
|
||||
cmp32Move32(cond, lhs, rhs, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::test32LoadPtr(Condition cond, const Address& addr,
|
||||
Imm32 mask, const Address& src,
|
||||
Register dest) {
|
||||
|
Loading…
Reference in New Issue
Block a user