зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1373290 - Move object/string pre-barrier null check to JIT code. r=nbp
This commit is contained in:
Родитель
c0de281328
Коммит
3adc938ea8
|
@ -1037,6 +1037,8 @@ class MacroAssembler : public MacroAssemblerSpecific
|
|||
inline void branchPtr(Condition cond, const Address& lhs, ImmGCPtr rhs, Label* label) PER_SHARED_ARCH;
|
||||
inline void branchPtr(Condition cond, const Address& lhs, ImmWord rhs, Label* label) PER_SHARED_ARCH;
|
||||
|
||||
inline void branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label) PER_SHARED_ARCH;
|
||||
|
||||
inline void branchPtr(Condition cond, const AbsoluteAddress& lhs, Register rhs, Label* label)
|
||||
DEFINED_ON(arm, arm64, mips_shared, x86, x64);
|
||||
inline void branchPtr(Condition cond, const AbsoluteAddress& lhs, ImmWord rhs, Label* label)
|
||||
|
@ -1654,6 +1656,8 @@ class MacroAssembler : public MacroAssemblerSpecific
|
|||
|
||||
if (type == MIRType::Value)
|
||||
branchTestGCThing(Assembler::NotEqual, address, &done);
|
||||
else if (type == MIRType::Object || type == MIRType::String)
|
||||
branchPtr(Assembler::Equal, address, ImmWord(0), &done);
|
||||
|
||||
Push(PreBarrierReg);
|
||||
computeEffectiveAddress(address, PreBarrierReg);
|
||||
|
|
|
@ -1433,15 +1433,15 @@ MarkValueFromIon(JSRuntime* rt, Value* vp)
|
|||
void
|
||||
MarkStringFromIon(JSRuntime* rt, JSString** stringp)
|
||||
{
|
||||
if (*stringp)
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, stringp, "write barrier");
|
||||
MOZ_ASSERT(*stringp);
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, stringp, "write barrier");
|
||||
}
|
||||
|
||||
void
|
||||
MarkObjectFromIon(JSRuntime* rt, JSObject** objp)
|
||||
{
|
||||
if (*objp)
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, objp, "write barrier");
|
||||
MOZ_ASSERT(*objp);
|
||||
TraceManuallyBarrieredEdge(&rt->gc.marker, objp, "write barrier");
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1457,6 +1457,12 @@ MacroAssembler::branchPtr(Condition cond, wasm::SymbolicAddress lhs, Register rh
|
|||
branchPtr(cond, scratch2, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
branch32(cond, lhs, Imm32(rhs.value), label);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline CodeOffsetJump
|
||||
MacroAssembler::branchPtrWithPatch(Condition cond, Register lhs, T rhs, RepatchLabel* label)
|
||||
|
|
|
@ -1032,6 +1032,17 @@ MacroAssembler::branchPtr(Condition cond, wasm::SymbolicAddress lhs, Register rh
|
|||
branchPtr(cond, scratch, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
vixl::UseScratchRegisterScope temps(this);
|
||||
const Register scratch = temps.AcquireX().asUnsized();
|
||||
MOZ_ASSERT(scratch != lhs.base);
|
||||
MOZ_ASSERT(scratch != lhs.index);
|
||||
loadPtr(lhs, scratch);
|
||||
branchPtr(cond, scratch, rhs, label);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
CodeOffsetJump
|
||||
MacroAssembler::branchPtrWithPatch(Condition cond, Register lhs, T rhs, RepatchLabel* label)
|
||||
|
|
|
@ -571,6 +571,13 @@ MacroAssembler::branchPtr(Condition cond, wasm::SymbolicAddress lhs, Register rh
|
|||
branchPtr(cond, SecondScratchReg, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
loadPtr(lhs, SecondScratchReg);
|
||||
branchPtr(cond, SecondScratchReg, rhs, label);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
CodeOffsetJump
|
||||
MacroAssembler::branchPtrWithPatch(Condition cond, Register lhs, T rhs, RepatchLabel* label)
|
||||
|
|
|
@ -871,6 +871,9 @@ class Assembler : public AssemblerX86Shared
|
|||
case Operand::MEM_REG_DISP:
|
||||
masm.cmpq_im(rhs.value, lhs.disp(), lhs.base());
|
||||
break;
|
||||
case Operand::MEM_SCALE:
|
||||
masm.cmpq_im(rhs.value, lhs.disp(), lhs.base(), lhs.index(), lhs.scale());
|
||||
break;
|
||||
case Operand::MEM_ADDRESS32:
|
||||
masm.cmpq_im(rhs.value, lhs.address());
|
||||
break;
|
||||
|
|
|
@ -582,6 +582,12 @@ MacroAssembler::branchPtr(Condition cond, const Address& lhs, ImmWord rhs, Label
|
|||
branchPtrImpl(cond, lhs, rhs, label);
|
||||
}
|
||||
|
||||
void
|
||||
MacroAssembler::branchPtr(Condition cond, const BaseIndex& lhs, ImmWord rhs, Label* label)
|
||||
{
|
||||
branchPtrImpl(cond, lhs, rhs, label);
|
||||
}
|
||||
|
||||
template <typename T, typename S, typename L>
|
||||
void
|
||||
MacroAssembler::branchPtrImpl(Condition cond, const T& lhs, const S& rhs, L label)
|
||||
|
|
Загрузка…
Ссылка в новой задаче