mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-07 09:54:42 +00:00
Bug 1873926: Remove branching from MacroAssembler::signInt32. r=jandem
Replace the explicit branching with a conditional move. Differential Revision: https://phabricator.services.mozilla.com/D198162
This commit is contained in:
parent
04689ca3bc
commit
e61907e230
@ -4417,12 +4417,10 @@ void MacroAssembler::pow32(Register base, Register power, Register dest,
|
||||
void MacroAssembler::signInt32(Register input, Register output) {
|
||||
MOZ_ASSERT(input != output);
|
||||
|
||||
Label done;
|
||||
move32(input, output);
|
||||
rshift32Arithmetic(Imm32(31), output);
|
||||
branch32(Assembler::LessThanOrEqual, input, Imm32(0), &done);
|
||||
move32(Imm32(1), output);
|
||||
bind(&done);
|
||||
or32(Imm32(1), output);
|
||||
cmp32Move32(Assembler::Equal, input, Imm32(0), input, output);
|
||||
}
|
||||
|
||||
void MacroAssembler::signDouble(FloatRegister input, FloatRegister output) {
|
||||
|
@ -2115,6 +2115,10 @@ class MacroAssembler : public MacroAssemblerSpecific {
|
||||
template <typename T>
|
||||
inline void fallibleUnboxBigInt(const T& src, Register dest, Label* fail);
|
||||
|
||||
inline void cmp32Move32(Condition cond, Register lhs, Imm32 rhs, Register src,
|
||||
Register dest)
|
||||
DEFINED_ON(arm, arm64, loong64, riscv64, wasm32, mips_shared, x86_shared);
|
||||
|
||||
inline void cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest)
|
||||
DEFINED_ON(arm, arm64, loong64, riscv64, wasm32, mips_shared, x86_shared);
|
||||
|
@ -2363,6 +2363,12 @@ void MacroAssembler::branchToComputedAddress(const BaseIndex& addr) {
|
||||
}
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
ma_mov(src, dest, LeaveCC, cond);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
|
@ -2029,6 +2029,13 @@ void MacroAssembler::branchToComputedAddress(const BaseIndex& addr) {
|
||||
Br(scratch64);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
Csel(ARMRegister(dest, 32), ARMRegister(src, 32), ARMRegister(dest, 32),
|
||||
cond);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
|
@ -1858,6 +1858,13 @@ void MacroAssembler::branchToComputedAddress(const BaseIndex& addr) {
|
||||
branch(scratch2);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
SecondScratchRegisterScope scratch2(asMasm());
|
||||
cmp32Set(cond, lhs, rhs, scratch2);
|
||||
moveIfNotZero(dest, src, scratch2);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
SecondScratchRegisterScope scratch2(asMasm());
|
||||
|
@ -1132,6 +1132,20 @@ void MacroAssembler::branchToComputedAddress(const BaseIndex& addr) {
|
||||
branch(ScratchRegister);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
Register scratch = ScratchRegister;
|
||||
MOZ_ASSERT(src != scratch && dest != scratch);
|
||||
cmp32Set(cond, lhs, rhs, scratch);
|
||||
#ifdef MIPSR6
|
||||
as_selnez(src, src, scratch);
|
||||
as_seleqz(dest, dest, scratch);
|
||||
as_or(dest, dest, src);
|
||||
#else
|
||||
as_movn(dest, src, scratch);
|
||||
#endif
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
Register scratch = ScratchRegister;
|
||||
|
@ -1343,6 +1343,14 @@ void MacroAssembler::cmp32LoadPtr(Condition cond, const Address& lhs, Imm32 rhs,
|
||||
bind(&skip);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
UseScratchRegisterScope temps(this);
|
||||
Register scratch2 = temps.Acquire();
|
||||
cmp32Set(cond, lhs, rhs, scratch2);
|
||||
moveIfNotZero(dest, src, scratch2);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
UseScratchRegisterScope temps(this);
|
||||
|
@ -964,6 +964,11 @@ void MacroAssembler::branchTestString(Condition cond, const ValueOperand& value,
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
MOZ_CRASH();
|
||||
|
@ -1139,6 +1139,12 @@ void MacroAssembler::testBigIntSet(Condition cond, const T& src,
|
||||
emitSet(cond, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Imm32 rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
cmovCCl(cond, src, dest);
|
||||
}
|
||||
|
||||
void MacroAssembler::cmp32Move32(Condition cond, Register lhs, Register rhs,
|
||||
Register src, Register dest) {
|
||||
cmp32(lhs, rhs);
|
||||
|
Loading…
Reference in New Issue
Block a user