--- a/js/src/jit/CodeGenerator.cpp
+++ b/js/src/jit/CodeGenerator.cpp
@@ -3787,16 +3787,46 @@ void
CodeGenerator::visitCopyLexicalEnvironmentObject(LCopyLexicalEnvironmentObject* lir)
{
pushArg(Imm32(lir->mir()->copySlots()));
pushArg(ToRegister(lir->env()));
callVM(CopyLexicalEnvironmentObjectInfo, lir);
}
void
+CodeGenerator::visitGuardShape(LGuardShape* guard)
+{
+ Register obj = ToRegister(guard->input());
+ Label bail;
+ masm.branchTestObjShape(Assembler::NotEqual, obj, guard->mir()->shape(), &bail);
+ bailoutFrom(&bail, guard->snapshot());
+}
+
+void
+CodeGenerator::visitGuardObjectGroup(LGuardObjectGroup* guard)
+{
+ Register obj = ToRegister(guard->input());
+ Assembler::Condition cond =
+ guard->mir()->bailOnEquality() ? Assembler::Equal : Assembler::NotEqual;
+ Label bail;
+ masm.branchTestObjGroup(cond, obj, guard->mir()->group(), &bail);
+ bailoutFrom(&bail, guard->snapshot());
+}
+
+void
+CodeGenerator::visitGuardClass(LGuardClass* guard)
+{
+ Register obj = ToRegister(guard->input());
+ Register tmp = ToRegister(guard->tempInt());
+ Label bail;
+ masm.branchTestObjClass(Assembler::NotEqual, obj, tmp, guard->mir()->getClass(), &bail);
+ bailoutFrom(&bail, guard->snapshot());
+}
+
+void
CodeGenerator::visitGuardObjectIdentity(LGuardObjectIdentity* guard)
{
Register input = ToRegister(guard->input());
Register expected = ToRegister(guard->expected());
Assembler::Condition cond =
guard->mir()->bailOnEquality() ? Assembler::Equal : Assembler::NotEqual;
bailoutCmpPtr(cond, input, expected, guard->snapshot());
--- a/js/src/jit/CodeGenerator.h
+++ b/js/src/jit/CodeGenerator.h
@@ -150,16 +150,19 @@ class CodeGenerator final : public CodeG
void visitLoadSlotT(LLoadSlotT* lir);
void visitLoadSlotV(LLoadSlotV* lir);
void visitStoreSlotT(LStoreSlotT* lir);
void visitStoreSlotV(LStoreSlotV* lir);
void visitElements(LElements* lir);
void visitConvertElementsToDoubles(LConvertElementsToDoubles* lir);
void visitMaybeToDoubleElement(LMaybeToDoubleElement* lir);
void visitMaybeCopyElementsForWrite(LMaybeCopyElementsForWrite* lir);
+ void visitGuardShape(LGuardShape* guard);
+ void visitGuardObjectGroup(LGuardObjectGroup* guard);
+ void visitGuardClass(LGuardClass* guard);
void visitGuardObjectIdentity(LGuardObjectIdentity* guard);
void visitGuardReceiverPolymorphic(LGuardReceiverPolymorphic* lir);
void visitGuardUnboxedExpando(LGuardUnboxedExpando* lir);
void visitLoadUnboxedExpando(LLoadUnboxedExpando* lir);
void visitTypeBarrierV(LTypeBarrierV* lir);
void visitTypeBarrierO(LTypeBarrierO* lir);
void emitPostWriteBarrier(const LAllocation* obj);
void emitPostWriteBarrier(Register objreg);
--- a/js/src/jit/Lowering.cpp
+++ b/js/src/jit/Lowering.cpp
@@ -3993,20 +3993,41 @@ LIRGenerator::visitGuardObjectIdentity(M
LGuardObjectIdentity* guard = new(alloc()) LGuardObjectIdentity(useRegister(ins->object()),
useRegister(ins->expected()));
assignSnapshot(guard, Bailout_ObjectIdentityOrTypeGuard);
add(guard, ins);
redefine(ins, ins->object());
}
void
+LIRGenerator::visitGuardShape(MGuardShape* ins)
+{
+ MOZ_ASSERT(ins->object()->type() == MIRType::Object);
+
+ LGuardShape* guard = new(alloc()) LGuardShape(useRegisterAtStart(ins->object()));
+ assignSnapshot(guard, ins->bailoutKind());
+ add(guard, ins);
+ redefine(ins, ins->object());
+}
+
+void
+LIRGenerator::visitGuardObjectGroup(MGuardObjectGroup* ins)
+{
+ MOZ_ASSERT(ins->object()->type() == MIRType::Object);
+
+ LGuardObjectGroup* guard = new(alloc()) LGuardObjectGroup(useRegisterAtStart(ins->object()));
+ assignSnapshot(guard, ins->bailoutKind());
+ add(guard, ins);
+ redefine(ins, ins->object());
+}
+
+void
LIRGenerator::visitGuardClass(MGuardClass* ins)
{
- LDefinition t = temp();
- LGuardClass* guard = new(alloc()) LGuardClass(useRegister(ins->object()), t);
+ LGuardClass* guard = new(alloc()) LGuardClass(useRegister(ins->object()), temp());
assignSnapshot(guard, Bailout_ObjectIdentityOrTypeGuard);
add(guard, ins);
}
void
LIRGenerator::visitGuardObject(MGuardObject* ins)
{
// The type policy does all the work, so at this point the input
--- a/js/src/jit/Lowering.h
+++ b/js/src/jit/Lowering.h
@@ -259,16 +259,18 @@ class LIRGenerator : public LIRGenerator
void visitStoreFixedSlot(MStoreFixedSlot* ins) override;
void visitGetPropSuperCache(MGetPropSuperCache* ins) override;
void visitGetPropertyCache(MGetPropertyCache* ins) override;
void visitGetPropertyPolymorphic(MGetPropertyPolymorphic* ins) override;
void visitSetPropertyPolymorphic(MSetPropertyPolymorphic* ins) override;
void visitBindNameCache(MBindNameCache* ins) override;
void visitCallBindVar(MCallBindVar* ins) override;
void visitGuardObjectIdentity(MGuardObjectIdentity* ins) override;
+ void visitGuardShape(MGuardShape* ins) override;
+ void visitGuardObjectGroup(MGuardObjectGroup* ins) override;
void visitGuardClass(MGuardClass* ins) override;
void visitGuardObject(MGuardObject* ins) override;
void visitGuardString(MGuardString* ins) override;
void visitGuardReceiverPolymorphic(MGuardReceiverPolymorphic* ins) override;
void visitGuardUnboxedExpando(MGuardUnboxedExpando* ins) override;
void visitLoadUnboxedExpando(MLoadUnboxedExpando* ins) override;
void visitPolyInlineGuard(MPolyInlineGuard* ins) override;
void visitAssertRange(MAssertRange* ins) override;
--- a/js/src/jit/arm/CodeGenerator-arm.cpp
+++ b/js/src/jit/arm/CodeGenerator-arm.cpp
@@ -1738,46 +1738,16 @@ CodeGeneratorARM::visitNotF(LNotF* ins)
masm.as_vmrs(pc);
masm.ma_mov(Imm32(0), dest);
masm.ma_mov(Imm32(1), dest, Assembler::Equal);
masm.ma_mov(Imm32(1), dest, Assembler::Overflow);
}
}
void
-CodeGeneratorARM::visitGuardShape(LGuardShape* guard)
-{
- Register obj = ToRegister(guard->input());
- Label bail;
- masm.branchTestObjShape(Assembler::NotEqual, obj, guard->mir()->shape(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
-CodeGeneratorARM::visitGuardObjectGroup(LGuardObjectGroup* guard)
-{
- Register obj = ToRegister(guard->input());
- Assembler::Condition cond =
- guard->mir()->bailOnEquality() ? Assembler::Equal : Assembler::NotEqual;
- Label bail;
- masm.branchTestObjGroup(cond, obj, guard->mir()->group(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
-CodeGeneratorARM::visitGuardClass(LGuardClass* guard)
-{
- Register obj = ToRegister(guard->input());
- Register tmp = ToRegister(guard->tempInt());
- Label bail;
- masm.branchTestObjClass(Assembler::NotEqual, obj, tmp, guard->mir()->getClass(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
CodeGeneratorARM::generateInvalidateEpilogue()
{
// Ensure that there is enough space in the buffer for the OsiPoint patching
// to occur. Otherwise, we could overwrite the invalidation epilogue.
for (size_t i = 0; i < sizeof(void*); i += Assembler::NopSize())
masm.nop();
masm.bind(&invalidate_);
--- a/js/src/jit/arm/CodeGenerator-arm.h
+++ b/js/src/jit/arm/CodeGenerator-arm.h
@@ -217,21 +217,16 @@ class CodeGeneratorARM : public CodeGene
public:
void visitBox(LBox* box);
void visitBoxFloatingPoint(LBoxFloatingPoint* box);
void visitUnbox(LUnbox* unbox);
void visitValue(LValue* value);
void visitDouble(LDouble* ins);
void visitFloat32(LFloat32* ins);
-
- void visitGuardShape(LGuardShape* guard);
- void visitGuardObjectGroup(LGuardObjectGroup* guard);
- void visitGuardClass(LGuardClass* guard);
-
void visitNegI(LNegI* lir);
void visitNegD(LNegD* lir);
void visitNegF(LNegF* lir);
void visitLoadTypedArrayElementStatic(LLoadTypedArrayElementStatic* ins);
void visitStoreTypedArrayElementStatic(LStoreTypedArrayElementStatic* ins);
void visitAtomicTypedArrayElementBinop(LAtomicTypedArrayElementBinop* lir);
void visitAtomicTypedArrayElementBinopForEffect(LAtomicTypedArrayElementBinopForEffect* lir);
void visitCompareExchangeTypedArrayElement(LCompareExchangeTypedArrayElement* lir);
--- a/js/src/jit/arm/LIR-arm.h
+++ b/js/src/jit/arm/LIR-arm.h
@@ -378,48 +378,16 @@ class LTableSwitchV : public LInstructio
const LDefinition* tempFloat() {
return getTemp(1);
}
const LDefinition* tempPointer() {
return nullptr;
}
};
-class LGuardShape : public LInstructionHelper<0, 1, 0>
-{
- public:
- LIR_HEADER(GuardShape);
-
- explicit LGuardShape(const LAllocation& in) {
- setOperand(0, in);
- }
- const MGuardShape* mir() const {
- return mir_->toGuardShape();
- }
- const LDefinition* tempInt() {
- return getTemp(0);
- }
-};
-
-class LGuardObjectGroup : public LInstructionHelper<0, 1, 0>
-{
- public:
- LIR_HEADER(GuardObjectGroup);
-
- explicit LGuardObjectGroup(const LAllocation& in) {
- setOperand(0, in);
- }
- const MGuardObjectGroup* mir() const {
- return mir_->toGuardObjectGroup();
- }
- const LDefinition* tempInt() {
- return getTemp(0);
- }
-};
-
class LMulI : public LBinaryMath<0>
{
public:
LIR_HEADER(MulI);
MMul* mir() {
return mir_->toMul();
}
--- a/js/src/jit/arm/Lowering-arm.cpp
+++ b/js/src/jit/arm/Lowering-arm.cpp
@@ -476,38 +476,16 @@ LIRGeneratorARM::newLTableSwitch(const L
LTableSwitchV*
LIRGeneratorARM::newLTableSwitchV(MTableSwitch* tableswitch)
{
return new(alloc()) LTableSwitchV(useBox(tableswitch->getOperand(0)),
temp(), tempDouble(), tableswitch);
}
void
-LIRGeneratorARM::visitGuardShape(MGuardShape* ins)
-{
- MOZ_ASSERT(ins->object()->type() == MIRType::Object);
-
- LGuardShape* guard = new(alloc()) LGuardShape(useRegister(ins->object()));
- assignSnapshot(guard, ins->bailoutKind());
- add(guard, ins);
- redefine(ins, ins->object());
-}
-
-void
-LIRGeneratorARM::visitGuardObjectGroup(MGuardObjectGroup* ins)
-{
- MOZ_ASSERT(ins->object()->type() == MIRType::Object);
-
- LGuardObjectGroup* guard = new(alloc()) LGuardObjectGroup(useRegister(ins->object()));
- assignSnapshot(guard, ins->bailoutKind());
- add(guard, ins);
- redefine(ins, ins->object());
-}
-
-void
LIRGeneratorARM::lowerUrshD(MUrsh* mir)
{
MDefinition* lhs = mir->lhs();
MDefinition* rhs = mir->rhs();
MOZ_ASSERT(lhs->type() == MIRType::Int32);
MOZ_ASSERT(rhs->type() == MIRType::Int32);
--- a/js/src/jit/arm/Lowering-arm.h
+++ b/js/src/jit/arm/Lowering-arm.h
@@ -95,18 +95,16 @@ class LIRGeneratorARM : public LIRGenera
MTableSwitch* ins);
LTableSwitchV* newLTableSwitchV(MTableSwitch* ins);
public:
void visitBox(MBox* box) override;
void visitUnbox(MUnbox* unbox) override;
void visitReturn(MReturn* ret) override;
void lowerPhi(MPhi* phi);
- void visitGuardShape(MGuardShape* ins) override;
- void visitGuardObjectGroup(MGuardObjectGroup* ins) override;
void visitWasmSelect(MWasmSelect* ins) override;
void visitWasmUnsignedToDouble(MWasmUnsignedToDouble* ins) override;
void visitWasmUnsignedToFloat32(MWasmUnsignedToFloat32* ins) override;
void visitWasmLoad(MWasmLoad* ins) override;
void visitWasmStore(MWasmStore* ins) override;
void visitAsmJSLoadHeap(MAsmJSLoadHeap* ins) override;
void visitAsmJSStoreHeap(MAsmJSStoreHeap* ins) override;
void visitWasmCompareExchangeHeap(MWasmCompareExchangeHeap* ins) override;
--- a/js/src/jit/arm64/CodeGenerator-arm64.cpp
+++ b/js/src/jit/arm64/CodeGenerator-arm64.cpp
@@ -572,34 +572,16 @@ void
CodeGeneratorARM64::storeElementTyped(const LAllocation* value, MIRType valueType,
MIRType elementType, Register elements,
const LAllocation* index)
{
MOZ_CRASH("CodeGeneratorARM64::storeElementTyped");
}
void
-CodeGeneratorARM64::visitGuardShape(LGuardShape* guard)
-{
- MOZ_CRASH("visitGuardShape");
-}
-
-void
-CodeGeneratorARM64::visitGuardObjectGroup(LGuardObjectGroup* guard)
-{
- MOZ_CRASH("visitGuardObjectGroup");
-}
-
-void
-CodeGeneratorARM64::visitGuardClass(LGuardClass* guard)
-{
- MOZ_CRASH("CodeGeneratorARM64::visitGuardClass");
-}
-
-void
CodeGeneratorARM64::visitInterruptCheck(LInterruptCheck* lir)
{
MOZ_CRASH("CodeGeneratorARM64::visitInterruptCheck");
}
void
CodeGeneratorARM64::generateInvalidateEpilogue()
{
--- a/js/src/jit/arm64/CodeGenerator-arm64.h
+++ b/js/src/jit/arm64/CodeGenerator-arm64.h
@@ -179,20 +179,16 @@ class CodeGeneratorARM64 : public CodeGe
void visitFloat32(LFloat32* ins);
void visitLoadSlotV(LLoadSlotV* load);
void visitLoadSlotT(LLoadSlotT* load);
void visitStoreSlotT(LStoreSlotT* load);
void visitLoadElementT(LLoadElementT* load);
- void visitGuardShape(LGuardShape* guard);
- void visitGuardObjectGroup(LGuardObjectGroup* guard);
- void visitGuardClass(LGuardClass* guard);
-
void visitInterruptCheck(LInterruptCheck* lir);
void visitNegI(LNegI* lir);
void visitNegD(LNegD* lir);
void visitNegF(LNegF* lir);
void visitLoadTypedArrayElementStatic(LLoadTypedArrayElementStatic* ins);
void visitStoreTypedArrayElementStatic(LStoreTypedArrayElementStatic* ins);
void visitCompareExchangeTypedArrayElement(LCompareExchangeTypedArrayElement* lir);
--- a/js/src/jit/arm64/LIR-arm64.h
+++ b/js/src/jit/arm64/LIR-arm64.h
@@ -303,50 +303,16 @@ class LTableSwitchV : public LInstructio
const LDefinition* tempFloat() {
return getTemp(1);
}
const LDefinition* tempPointer() {
return nullptr;
}
};
-class LGuardShape : public LInstructionHelper<0, 1, 1>
-{
- public:
- LIR_HEADER(GuardShape);
-
- LGuardShape(const LAllocation& in, const LDefinition& temp) {
- setOperand(0, in);
- setTemp(0, temp);
- }
- const MGuardShape* mir() const {
- return mir_->toGuardShape();
- }
- const LDefinition* tempInt() {
- return getTemp(0);
- }
-};
-
-class LGuardObjectGroup : public LInstructionHelper<0, 1, 1>
-{
- public:
- LIR_HEADER(GuardObjectGroup);
-
- LGuardObjectGroup(const LAllocation& in, const LDefinition& temp) {
- setOperand(0, in);
- setTemp(0, temp);
- }
- const MGuardObjectGroup* mir() const {
- return mir_->toGuardObjectGroup();
- }
- const LDefinition* tempInt() {
- return getTemp(0);
- }
-};
-
class LMulI : public LBinaryMath<0>
{
public:
LIR_HEADER(MulI);
MMul* mir() {
return mir_->toMul();
}
--- a/js/src/jit/arm64/Lowering-arm64.cpp
+++ b/js/src/jit/arm64/Lowering-arm64.cpp
@@ -193,28 +193,16 @@ LIRGeneratorARM64::newLTableSwitch(const
LTableSwitchV*
LIRGeneratorARM64::newLTableSwitchV(MTableSwitch* tableswitch)
{
MOZ_CRASH("newLTableSwitchV");
}
void
-LIRGeneratorARM64::visitGuardShape(MGuardShape* ins)
-{
- MOZ_CRASH("visitGuardShape");
-}
-
-void
-LIRGeneratorARM64::visitGuardObjectGroup(MGuardObjectGroup* ins)
-{
- MOZ_CRASH("visitGuardObjectGroup");
-}
-
-void
LIRGeneratorARM64::lowerUrshD(MUrsh* mir)
{
MOZ_CRASH("lowerUrshD");
}
void
LIRGeneratorARM64::visitWasmNeg(MWasmNeg* ins)
{
--- a/js/src/jit/arm64/Lowering-arm64.h
+++ b/js/src/jit/arm64/Lowering-arm64.h
@@ -96,18 +96,16 @@ class LIRGeneratorARM64 : public LIRGene
const LDefinition& inputCopy,
MTableSwitch* ins);
public:
void visitBox(MBox* box) override;
void visitUnbox(MUnbox* unbox) override;
void visitReturn(MReturn* ret) override;
void lowerPhi(MPhi* phi);
- void visitGuardShape(MGuardShape* ins) override;
- void visitGuardObjectGroup(MGuardObjectGroup* ins) override;
void visitWasmUnsignedToDouble(MWasmUnsignedToDouble* ins) override;
void visitWasmUnsignedToFloat32(MWasmUnsignedToFloat32* ins) override;
void visitAsmJSLoadHeap(MAsmJSLoadHeap* ins) override;
void visitAsmJSStoreHeap(MAsmJSStoreHeap* ins) override;
void visitWasmCompareExchangeHeap(MWasmCompareExchangeHeap* ins) override;
void visitWasmAtomicExchangeHeap(MWasmAtomicExchangeHeap* ins) override;
void visitWasmAtomicBinopHeap(MWasmAtomicBinopHeap* ins) override;
void visitStoreTypedArrayElementStatic(MStoreTypedArrayElementStatic* ins) override;
--- a/js/src/jit/mips-shared/CodeGenerator-mips-shared.cpp
+++ b/js/src/jit/mips-shared/CodeGenerator-mips-shared.cpp
@@ -1764,46 +1764,16 @@ CodeGeneratorMIPSShared::visitNotF(LNotF
FloatRegister in = ToFloatRegister(ins->input());
Register dest = ToRegister(ins->output());
masm.loadConstantFloat32(0.0f, ScratchFloat32Reg);
masm.ma_cmp_set_float32(dest, in, ScratchFloat32Reg, Assembler::DoubleEqualOrUnordered);
}
void
-CodeGeneratorMIPSShared::visitGuardShape(LGuardShape* guard)
-{
- Register obj = ToRegister(guard->input());
- Label bail;
- masm.branchTestObjShape(Assembler::NotEqual, obj, guard->mir()->shape(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
-CodeGeneratorMIPSShared::visitGuardObjectGroup(LGuardObjectGroup* guard)
-{
- Register obj = ToRegister(guard->input());
- Assembler::Condition cond =
- guard->mir()->bailOnEquality() ? Assembler::Equal : Assembler::NotEqual;
- Label bail;
- masm.branchTestObjGroup(cond, obj, guard->mir()->group(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
-CodeGeneratorMIPSShared::visitGuardClass(LGuardClass* guard)
-{
- Register obj = ToRegister(guard->input());
- Register tmp = ToRegister(guard->tempInt());
- Label bail;
- masm.branchTestObjClass(Assembler::NotEqual, obj, tmp, guard->mir()->getClass(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
CodeGeneratorMIPSShared::visitMemoryBarrier(LMemoryBarrier* ins)
{
masm.memoryBarrier(ins->type());
}
void
CodeGeneratorMIPSShared::generateInvalidateEpilogue()
{
--- a/js/src/jit/mips-shared/CodeGenerator-mips-shared.h
+++ b/js/src/jit/mips-shared/CodeGenerator-mips-shared.h
@@ -201,21 +201,16 @@ class CodeGeneratorMIPSShared : public C
void visitCopySignF(LCopySignF* ins);
public:
CodeGeneratorMIPSShared(MIRGenerator* gen, LIRGraph* graph, MacroAssembler* masm);
void visitValue(LValue* value);
void visitDouble(LDouble* ins);
void visitFloat32(LFloat32* ins);
-
- void visitGuardShape(LGuardShape* guard);
- void visitGuardObjectGroup(LGuardObjectGroup* guard);
- void visitGuardClass(LGuardClass* guard);
-
void visitNegI(LNegI* lir);
void visitNegD(LNegD* lir);
void visitNegF(LNegF* lir);
void visitLoadTypedArrayElementStatic(LLoadTypedArrayElementStatic* ins);
void visitStoreTypedArrayElementStatic(LStoreTypedArrayElementStatic* ins);
void visitWasmLoad(LWasmLoad* ins);
void visitWasmUnalignedLoad(LWasmUnalignedLoad* ins);
void visitWasmStore(LWasmStore* ins);
--- a/js/src/jit/mips-shared/LIR-mips-shared.h
+++ b/js/src/jit/mips-shared/LIR-mips-shared.h
@@ -205,48 +205,16 @@ class LTableSwitchV : public LInstructio
const LDefinition* tempFloat() {
return getTemp(1);
}
const LDefinition* tempPointer() {
return getTemp(2);
}
};
-class LGuardShape : public LInstructionHelper<0, 1, 0>
-{
- public:
- LIR_HEADER(GuardShape);
-
- explicit LGuardShape(const LAllocation& in) {
- setOperand(0, in);
- }
- const MGuardShape* mir() const {
- return mir_->toGuardShape();
- }
- const LDefinition* tempInt() {
- return getTemp(0);
- }
-};
-
-class LGuardObjectGroup : public LInstructionHelper<0, 1, 0>
-{
- public:
- LIR_HEADER(GuardObjectGroup);
-
- explicit LGuardObjectGroup(const LAllocation& in) {
- setOperand(0, in);
- }
- const MGuardObjectGroup* mir() const {
- return mir_->toGuardObjectGroup();
- }
- const LDefinition* tempInt() {
- return getTemp(0);
- }
-};
-
class LMulI : public LBinaryMath<0>
{
public:
LIR_HEADER(MulI);
MMul* mir() {
return mir_->toMul();
}
--- a/js/src/jit/mips-shared/Lowering-mips-shared.cpp
+++ b/js/src/jit/mips-shared/Lowering-mips-shared.cpp
@@ -283,38 +283,16 @@ LIRGeneratorMIPSShared::newLTableSwitch(
LTableSwitchV*
LIRGeneratorMIPSShared::newLTableSwitchV(MTableSwitch* tableswitch)
{
return new(alloc()) LTableSwitchV(useBox(tableswitch->getOperand(0)),
temp(), tempDouble(), temp(), tableswitch);
}
void
-LIRGeneratorMIPSShared::visitGuardShape(MGuardShape* ins)
-{
- MOZ_ASSERT(ins->object()->type() == MIRType::Object);
-
- LGuardShape* guard = new(alloc()) LGuardShape(useRegister(ins->object()));
- assignSnapshot(guard, ins->bailoutKind());
- add(guard, ins);
- redefine(ins, ins->object());
-}
-
-void
-LIRGeneratorMIPSShared::visitGuardObjectGroup(MGuardObjectGroup* ins)
-{
- MOZ_ASSERT(ins->object()->type() == MIRType::Object);
-
- LGuardObjectGroup* guard = new(alloc()) LGuardObjectGroup(useRegister(ins->object()));
- assignSnapshot(guard, ins->bailoutKind());
- add(guard, ins);
- redefine(ins, ins->object());
-}
-
-void
LIRGeneratorMIPSShared::lowerUrshD(MUrsh* mir)
{
MDefinition* lhs = mir->lhs();
MDefinition* rhs = mir->rhs();
MOZ_ASSERT(lhs->type() == MIRType::Int32);
MOZ_ASSERT(rhs->type() == MIRType::Int32);
--- a/js/src/jit/mips-shared/Lowering-mips-shared.h
+++ b/js/src/jit/mips-shared/Lowering-mips-shared.h
@@ -76,18 +76,16 @@ class LIRGeneratorMIPSShared : public LI
void visitWasmSelect(MWasmSelect* ins);
LTableSwitch* newLTableSwitch(const LAllocation& in, const LDefinition& inputCopy,
MTableSwitch* ins);
LTableSwitchV* newLTableSwitchV(MTableSwitch* ins);
public:
void lowerPhi(MPhi* phi);
- void visitGuardShape(MGuardShape* ins);
- void visitGuardObjectGroup(MGuardObjectGroup* ins);
void visitWasmUnsignedToDouble(MWasmUnsignedToDouble* ins);
void visitWasmUnsignedToFloat32(MWasmUnsignedToFloat32* ins);
void visitAsmJSLoadHeap(MAsmJSLoadHeap* ins);
void visitAsmJSStoreHeap(MAsmJSStoreHeap* ins);
void visitWasmCompareExchangeHeap(MWasmCompareExchangeHeap* ins);
void visitWasmAtomicExchangeHeap(MWasmAtomicExchangeHeap* ins);
void visitWasmAtomicBinopHeap(MWasmAtomicBinopHeap* ins);
void visitStoreTypedArrayElementStatic(MStoreTypedArrayElementStatic* ins);
--- a/js/src/jit/none/LIR-none.h
+++ b/js/src/jit/none/LIR-none.h
@@ -96,16 +96,14 @@ class LModPowTwoI : public LInstructionH
{
public:
int32_t shift() { MOZ_CRASH(); }
LModPowTwoI(const LAllocation& lhs, int32_t shift) { MOZ_CRASH(); }
MMod* mir() const { MOZ_CRASH(); }
};
-class LGuardShape : public LInstruction {};
-class LGuardObjectGroup : public LInstruction {};
class LMulI : public LInstruction {};
} // namespace jit
} // namespace js
#endif /* jit_none_LIR_none_h */
--- a/js/src/jit/none/Lowering-none.h
+++ b/js/src/jit/none/Lowering-none.h
@@ -70,18 +70,16 @@ class LIRGeneratorNone : public LIRGener
void lowerMulI(MMul*, MDefinition*, MDefinition*) { MOZ_CRASH(); }
void lowerUDiv(MDiv*) { MOZ_CRASH(); }
void lowerUMod(MMod*) { MOZ_CRASH(); }
void visitBox(MBox* box) override { MOZ_CRASH(); }
void visitUnbox(MUnbox* unbox) override { MOZ_CRASH(); }
void visitReturn(MReturn* ret) override { MOZ_CRASH(); }
void visitPowHalf(MPowHalf*) override { MOZ_CRASH(); }
void visitWasmNeg(MWasmNeg*) override { MOZ_CRASH(); }
- void visitGuardShape(MGuardShape* ins) override { MOZ_CRASH(); }
- void visitGuardObjectGroup(MGuardObjectGroup* ins) override { MOZ_CRASH(); }
void visitWasmUnsignedToDouble(MWasmUnsignedToDouble* ins) override { MOZ_CRASH(); }
void visitWasmUnsignedToFloat32(MWasmUnsignedToFloat32* ins) override { MOZ_CRASH(); }
void visitAsmJSLoadHeap(MAsmJSLoadHeap* ins) override { MOZ_CRASH(); }
void visitAsmJSStoreHeap(MAsmJSStoreHeap* ins) override { MOZ_CRASH(); }
void visitStoreTypedArrayElementStatic(MStoreTypedArrayElementStatic* ins) override { MOZ_CRASH(); }
void visitAtomicTypedArrayElementBinop(MAtomicTypedArrayElementBinop* ins) override { MOZ_CRASH(); }
void visitCompareExchangeTypedArrayElement(MCompareExchangeTypedArrayElement* ins) override { MOZ_CRASH(); }
void visitAtomicExchangeTypedArrayElement(MAtomicExchangeTypedArrayElement* ins) override { MOZ_CRASH(); }
--- a/js/src/jit/shared/LIR-shared.h
+++ b/js/src/jit/shared/LIR-shared.h
@@ -8036,16 +8036,42 @@ class LGuardObjectIdentity : public LIns
const LAllocation* expected() {
return getOperand(1);
}
const MGuardObjectIdentity* mir() const {
return mir_->toGuardObjectIdentity();
}
};
+class LGuardShape : public LInstructionHelper<0, 1, 0>
+{
+ public:
+ LIR_HEADER(GuardShape)
+
+ explicit LGuardShape(const LAllocation& in) {
+ setOperand(0, in);
+ }
+ const MGuardShape* mir() const {
+ return mir_->toGuardShape();
+ }
+};
+
+class LGuardObjectGroup : public LInstructionHelper<0, 1, 0>
+{
+ public:
+ LIR_HEADER(GuardObjectGroup)
+
+ explicit LGuardObjectGroup(const LAllocation& in) {
+ setOperand(0, in);
+ }
+ const MGuardObjectGroup* mir() const {
+ return mir_->toGuardObjectGroup();
+ }
+};
+
// Guard against an object's class.
class LGuardClass : public LInstructionHelper<0, 1, 1>
{
public:
LIR_HEADER(GuardClass)
LGuardClass(const LAllocation& in, const LDefinition& temp) {
setOperand(0, in);
--- a/js/src/jit/x86-shared/CodeGenerator-x86-shared.cpp
+++ b/js/src/jit/x86-shared/CodeGenerator-x86-shared.cpp
@@ -2368,46 +2368,16 @@ CodeGeneratorX86Shared::visitNearbyIntF(
FloatRegister input = ToFloatRegister(lir->input());
FloatRegister output = ToFloatRegister(lir->output());
RoundingMode roundingMode = lir->mir()->roundingMode();
masm.vroundss(Assembler::ToX86RoundingMode(roundingMode), input, output, output);
}
void
-CodeGeneratorX86Shared::visitGuardShape(LGuardShape* guard)
-{
- Register obj = ToRegister(guard->input());
- Label bail;
- masm.branchTestObjShape(Assembler::NotEqual, obj, guard->mir()->shape(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
-CodeGeneratorX86Shared::visitGuardObjectGroup(LGuardObjectGroup* guard)
-{
- Register obj = ToRegister(guard->input());
- Assembler::Condition cond =
- guard->mir()->bailOnEquality() ? Assembler::Equal : Assembler::NotEqual;
- Label bail;
- masm.branchTestObjGroup(cond, obj, guard->mir()->group(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
-CodeGeneratorX86Shared::visitGuardClass(LGuardClass* guard)
-{
- Register obj = ToRegister(guard->input());
- Register tmp = ToRegister(guard->tempInt());
- Label bail;
- masm.branchTestObjClass(Assembler::NotEqual, obj, tmp, guard->mir()->getClass(), &bail);
- bailoutFrom(&bail, guard->snapshot());
-}
-
-void
CodeGeneratorX86Shared::visitEffectiveAddress(LEffectiveAddress* ins)
{
const MEffectiveAddress* mir = ins->mir();
Register base = ToRegister(ins->base());
Register index = ToRegister(ins->index());
Register output = ToRegister(ins->output());
masm.leal(Operand(base, index, mir->scale(), mir->displacement()), output);
}
--- a/js/src/jit/x86-shared/CodeGenerator-x86-shared.h
+++ b/js/src/jit/x86-shared/CodeGenerator-x86-shared.h
@@ -236,19 +236,16 @@ class CodeGeneratorX86Shared : public Co
void visitFloor(LFloor* lir);
void visitFloorF(LFloorF* lir);
void visitCeil(LCeil* lir);
void visitCeilF(LCeilF* lir);
void visitRound(LRound* lir);
void visitRoundF(LRoundF* lir);
void visitNearbyInt(LNearbyInt* lir);
void visitNearbyIntF(LNearbyIntF* lir);
- void visitGuardShape(LGuardShape* guard);
- void visitGuardObjectGroup(LGuardObjectGroup* guard);
- void visitGuardClass(LGuardClass* guard);
void visitEffectiveAddress(LEffectiveAddress* ins);
void visitUDivOrMod(LUDivOrMod* ins);
void visitUDivOrModConstant(LUDivOrModConstant *ins);
void visitWasmStackArg(LWasmStackArg* ins);
void visitWasmStackArgI64(LWasmStackArgI64* ins);
void visitWasmSelect(LWasmSelect* ins);
void visitWasmReinterpret(LWasmReinterpret* lir);
void visitMemoryBarrier(LMemoryBarrier* ins);
--- a/js/src/jit/x86-shared/LIR-x86-shared.h
+++ b/js/src/jit/x86-shared/LIR-x86-shared.h
@@ -299,42 +299,16 @@ class LTableSwitchV : public LInstructio
const LDefinition* tempFloat() {
return getTemp(1);
}
const LDefinition* tempPointer() {
return getTemp(2);
}
};
-class LGuardShape : public LInstructionHelper<0, 1, 0>
-{
- public:
- LIR_HEADER(GuardShape)
-
- explicit LGuardShape(const LAllocation& in) {
- setOperand(0, in);
- }
- const MGuardShape* mir() const {
- return mir_->toGuardShape();
- }
-};
-
-class LGuardObjectGroup : public LInstructionHelper<0, 1, 0>
-{
- public:
- LIR_HEADER(GuardObjectGroup)
-
- explicit LGuardObjectGroup(const LAllocation& in) {
- setOperand(0, in);
- }
- const MGuardObjectGroup* mir() const {
- return mir_->toGuardObjectGroup();
- }
-};
-
class LMulI : public LBinaryMath<0, 1>
{
public:
LIR_HEADER(MulI)
LMulI(const LAllocation& lhs, const LAllocation& rhs, const LAllocation& lhsCopy) {
setOperand(0, lhs);
setOperand(1, rhs);
--- a/js/src/jit/x86-shared/Lowering-x86-shared.cpp
+++ b/js/src/jit/x86-shared/Lowering-x86-shared.cpp
@@ -29,38 +29,16 @@ LIRGeneratorX86Shared::newLTableSwitch(c
LTableSwitchV*
LIRGeneratorX86Shared::newLTableSwitchV(MTableSwitch* tableswitch)
{
return new(alloc()) LTableSwitchV(useBox(tableswitch->getOperand(0)),
temp(), tempDouble(), temp(), tableswitch);
}
void
-LIRGeneratorX86Shared::visitGuardShape(MGuardShape* ins)
-{
- MOZ_ASSERT(ins->object()->type() == MIRType::Object);
-
- LGuardShape* guard = new(alloc()) LGuardShape(useRegisterAtStart(ins->object()));
- assignSnapshot(guard, ins->bailoutKind());
- add(guard, ins);
- redefine(ins, ins->object());
-}
-
-void
-LIRGeneratorX86Shared::visitGuardObjectGroup(MGuardObjectGroup* ins)
-{
- MOZ_ASSERT(ins->object()->type() == MIRType::Object);
-
- LGuardObjectGroup* guard = new(alloc()) LGuardObjectGroup(useRegisterAtStart(ins->object()));
- assignSnapshot(guard, ins->bailoutKind());
- add(guard, ins);
- redefine(ins, ins->object());
-}
-
-void
LIRGeneratorX86Shared::visitPowHalf(MPowHalf* ins)
{
MDefinition* input = ins->input();
MOZ_ASSERT(input->type() == MIRType::Double);
LPowHalfD* lir = new(alloc()) LPowHalfD(useRegisterAtStart(input));
define(lir, ins);
}
--- a/js/src/jit/x86-shared/Lowering-x86-shared.h
+++ b/js/src/jit/x86-shared/Lowering-x86-shared.h
@@ -18,18 +18,16 @@ class LIRGeneratorX86Shared : public LIR
LIRGeneratorX86Shared(MIRGenerator* gen, MIRGraph& graph, LIRGraph& lirGraph)
: LIRGeneratorShared(gen, graph, lirGraph)
{}
LTableSwitch* newLTableSwitch(const LAllocation& in, const LDefinition& inputCopy,
MTableSwitch* ins);
LTableSwitchV* newLTableSwitchV(MTableSwitch* ins);
- void visitGuardShape(MGuardShape* ins) override;
- void visitGuardObjectGroup(MGuardObjectGroup* ins) override;
void visitPowHalf(MPowHalf* ins) override;
void lowerForShift(LInstructionHelper<1, 2, 0>* ins, MDefinition* mir, MDefinition* lhs,
MDefinition* rhs);
void lowerForALU(LInstructionHelper<1, 1, 0>* ins, MDefinition* mir, MDefinition* input);
void lowerForALU(LInstructionHelper<1, 2, 0>* ins, MDefinition* mir, MDefinition* lhs,
MDefinition* rhs);
template<size_t Temps>