author | bobslept <bobslept@protonmail.com> |
Mon, 13 Aug 2018 19:09:07 -0400 | |
changeset 433944 | e8a440cca97f287d762b84f8c7b1fea7a770a108 |
parent 433943 | 6d056cbd325488d6545ccf3fd7dd5c9b4c29a203 |
child 433945 | 23b954ab9d4323c67d28e548940de8121986cce5 |
push id | 107212 |
push user | mgaudet@mozilla.com |
push date | Wed, 29 Aug 2018 20:40:56 +0000 |
treeherder | mozilla-inbound@e8a440cca97f [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mgaudet |
bugs | 1461374 |
milestone | 63.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/js/src/jit/BaselineCacheIRCompiler.cpp +++ b/js/src/jit/BaselineCacheIRCompiler.cpp @@ -420,67 +420,16 @@ BaselineCacheIRCompiler::emitGuardSpecif return false; Address addr(stubAddress(reader.stubOffset())); masm.branchPtr(Assembler::NotEqual, addr, sym, failure->label()); return true; } bool -BaselineCacheIRCompiler::emitGuardXrayExpandoShapeAndDefaultProto() -{ - Register obj = allocator.useRegister(masm, reader.objOperandId()); - bool hasExpando = reader.readBool(); - Address shapeWrapperAddress(stubAddress(reader.stubOffset())); - - AutoScratchRegister scratch(allocator, masm); - Maybe<AutoScratchRegister> scratch2, scratch3; - if (hasExpando) { - scratch2.emplace(allocator, masm); - scratch3.emplace(allocator, masm); - } - - FailurePath* failure; - if (!addFailurePath(&failure)) - return false; - - masm.loadPtr(Address(obj, ProxyObject::offsetOfReservedSlots()), scratch); - Address holderAddress(scratch, sizeof(Value) * GetXrayJitInfo()->xrayHolderSlot); - Address expandoAddress(scratch, NativeObject::getFixedSlotOffset(GetXrayJitInfo()->holderExpandoSlot)); - - if (hasExpando) { - masm.branchTestObject(Assembler::NotEqual, holderAddress, failure->label()); - masm.unboxObject(holderAddress, scratch); - masm.branchTestObject(Assembler::NotEqual, expandoAddress, failure->label()); - masm.unboxObject(expandoAddress, scratch); - - // Unwrap the expando before checking its shape. - masm.loadPtr(Address(scratch, ProxyObject::offsetOfReservedSlots()), scratch); - masm.unboxObject(Address(scratch, js::detail::ProxyReservedSlots::offsetOfPrivateSlot()), scratch); - - masm.loadPtr(shapeWrapperAddress, scratch2.ref()); - LoadShapeWrapperContents(masm, scratch2.ref(), scratch2.ref(), failure->label()); - masm.branchTestObjShape(Assembler::NotEqual, scratch, *scratch2, *scratch3, scratch, - failure->label()); - - // The reserved slots on the expando should all be in fixed slots. - Address protoAddress(scratch, NativeObject::getFixedSlotOffset(GetXrayJitInfo()->expandoProtoSlot)); - masm.branchTestUndefined(Assembler::NotEqual, protoAddress, failure->label()); - } else { - Label done; - masm.branchTestObject(Assembler::NotEqual, holderAddress, &done); - masm.unboxObject(holderAddress, scratch); - masm.branchTestObject(Assembler::Equal, expandoAddress, failure->label()); - masm.bind(&done); - } - - return true; -} - -bool BaselineCacheIRCompiler::emitLoadValueResult() { AutoOutputRegister output(*this); masm.loadValue(stubAddress(reader.stubOffset()), output.valueReg()); return true; } bool
--- a/js/src/jit/CacheIRCompiler.cpp +++ b/js/src/jit/CacheIRCompiler.cpp @@ -19,16 +19,17 @@ #include "jit/MacroAssembler-inl.h" #include "vm/Realm-inl.h" using namespace js; using namespace js::jit; using mozilla::BitwiseCast; +using mozilla::Maybe; ValueOperand CacheRegisterAllocator::useValueRegister(MacroAssembler& masm, ValOperandId op) { OperandLocation& loc = operandLocations_[op.id()]; switch (loc.kind()) { case OperandLocation::ValueReg: @@ -2678,16 +2679,67 @@ CacheIRCompiler::emitGuardTagNotEqual() masm.branchTestNumber(Assembler::NotEqual, rhs, &done); masm.jump(failure->label()); masm.bind(&done); return true; } bool +CacheIRCompiler::emitGuardXrayExpandoShapeAndDefaultProto() +{ + Register obj = allocator.useRegister(masm, reader.objOperandId()); + bool hasExpando = reader.readBool(); + StubFieldOffset shapeWrapper(reader.stubOffset(), StubField::Type::JSObject); + + AutoScratchRegister scratch(allocator, masm); + Maybe<AutoScratchRegister> scratch2, scratch3; + if (hasExpando) { + scratch2.emplace(allocator, masm); + scratch3.emplace(allocator, masm); + } + + FailurePath* failure; + if (!addFailurePath(&failure)) + return false; + + masm.loadPtr(Address(obj, ProxyObject::offsetOfReservedSlots()), scratch); + Address holderAddress(scratch, sizeof(Value) * GetXrayJitInfo()->xrayHolderSlot); + Address expandoAddress(scratch, NativeObject::getFixedSlotOffset(GetXrayJitInfo()->holderExpandoSlot)); + + if (hasExpando) { + masm.branchTestObject(Assembler::NotEqual, holderAddress, failure->label()); + masm.unboxObject(holderAddress, scratch); + masm.branchTestObject(Assembler::NotEqual, expandoAddress, failure->label()); + masm.unboxObject(expandoAddress, scratch); + + // Unwrap the expando before checking its shape. + masm.loadPtr(Address(scratch, ProxyObject::offsetOfReservedSlots()), scratch); + masm.unboxObject(Address(scratch, js::detail::ProxyReservedSlots::offsetOfPrivateSlot()), scratch); + + emitLoadStubField(shapeWrapper, scratch2.ref()); + LoadShapeWrapperContents(masm, scratch2.ref(), scratch2.ref(), failure->label()); + masm.branchTestObjShape(Assembler::NotEqual, scratch, *scratch2, *scratch3, scratch, + failure->label()); + + // The reserved slots on the expando should all be in fixed slots. + Address protoAddress(scratch, NativeObject::getFixedSlotOffset(GetXrayJitInfo()->expandoProtoSlot)); + masm.branchTestUndefined(Assembler::NotEqual, protoAddress, failure->label()); + } else { + Label done; + masm.branchTestObject(Assembler::NotEqual, holderAddress, &done); + masm.unboxObject(holderAddress, scratch); + masm.branchTestObject(Assembler::Equal, expandoAddress, failure->label()); + masm.bind(&done); + } + + return true; +} + +bool CacheIRCompiler::emitGuardNoAllocationMetadataBuilder() { FailurePath* failure; if (!addFailurePath(&failure)) return false; masm.branchPtr(Assembler::NotEqual, AbsoluteAddress(cx_->realm()->addressOfMetadataBuilder()),
--- a/js/src/jit/CacheIRCompiler.h +++ b/js/src/jit/CacheIRCompiler.h @@ -41,18 +41,19 @@ namespace jit { _(GuardMagicValue) \ _(GuardNoUnboxedExpando) \ _(GuardAndLoadUnboxedExpando) \ _(GuardNoDetachedTypedObjects) \ _(GuardNoDenseElements) \ _(GuardAndGetIndexFromString) \ _(GuardIndexIsNonNegative) \ _(GuardTagNotEqual) \ + _(GuardXrayExpandoShapeAndDefaultProto)\ _(GuardNoAllocationMetadataBuilder) \ - _(GuardObjectGroupNotPretenured) \ + _(GuardObjectGroupNotPretenured) \ _(LoadObject) \ _(LoadProto) \ _(LoadEnclosingEnvironment) \ _(LoadWrapperTarget) \ _(LoadValueTag) \ _(LoadDOMExpandoValue) \ _(LoadDOMExpandoValueIgnoreGeneration)\ _(LoadUndefinedResult) \
--- a/js/src/jit/IonCacheIRCompiler.cpp +++ b/js/src/jit/IonCacheIRCompiler.cpp @@ -835,68 +835,16 @@ IonCacheIRCompiler::emitGuardSpecificSym if (!addFailurePath(&failure)) return false; masm.branchPtr(Assembler::NotEqual, sym, ImmGCPtr(expected), failure->label()); return true; } bool -IonCacheIRCompiler::emitGuardXrayExpandoShapeAndDefaultProto() -{ - Register obj = allocator.useRegister(masm, reader.objOperandId()); - bool hasExpando = reader.readBool(); - JSObject* shapeWrapper = objectStubField(reader.stubOffset()); - MOZ_ASSERT(hasExpando == !!shapeWrapper); - - AutoScratchRegister scratch(allocator, masm); - Maybe<AutoScratchRegister> scratch2, scratch3; - if (hasExpando) { - scratch2.emplace(allocator, masm); - scratch3.emplace(allocator, masm); - } - - FailurePath* failure; - if (!addFailurePath(&failure)) - return false; - - masm.loadPtr(Address(obj, ProxyObject::offsetOfReservedSlots()), scratch); - Address holderAddress(scratch, sizeof(Value) * GetXrayJitInfo()->xrayHolderSlot); - Address expandoAddress(scratch, NativeObject::getFixedSlotOffset(GetXrayJitInfo()->holderExpandoSlot)); - - if (hasExpando) { - masm.branchTestObject(Assembler::NotEqual, holderAddress, failure->label()); - masm.unboxObject(holderAddress, scratch); - masm.branchTestObject(Assembler::NotEqual, expandoAddress, failure->label()); - masm.unboxObject(expandoAddress, scratch); - - // Unwrap the expando before checking its shape. - masm.loadPtr(Address(scratch, ProxyObject::offsetOfReservedSlots()), scratch); - masm.unboxObject(Address(scratch, detail::ProxyReservedSlots::offsetOfPrivateSlot()), scratch); - - masm.movePtr(ImmGCPtr(shapeWrapper), scratch2.ref()); - LoadShapeWrapperContents(masm, scratch2.ref(), scratch2.ref(), failure->label()); - masm.branchTestObjShape(Assembler::NotEqual, scratch, *scratch2, *scratch3, scratch, - failure->label()); - - // The reserved slots on the expando should all be in fixed slots. - Address protoAddress(scratch, NativeObject::getFixedSlotOffset(GetXrayJitInfo()->expandoProtoSlot)); - masm.branchTestUndefined(Assembler::NotEqual, protoAddress, failure->label()); - } else { - Label done; - masm.branchTestObject(Assembler::NotEqual, holderAddress, &done); - masm.unboxObject(holderAddress, scratch); - masm.branchTestObject(Assembler::Equal, expandoAddress, failure->label()); - masm.bind(&done); - } - - return true; -} - -bool IonCacheIRCompiler::emitLoadValueResult() { MOZ_CRASH("Baseline-specific op"); } bool IonCacheIRCompiler::emitLoadFixedSlotResult()