Changeset 292083 in webkit
- Timestamp:
- Mar 29, 2022, 5:08:22 PM (3 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 deleted
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r290647 r292083 877 877 jit/TempRegisterSet.h 878 878 jit/ThunkGenerator.h 879 jit/UnusedPointer.h880 879 881 880 llint/LLIntOpcode.h -
trunk/Source/JavaScriptCore/ChangeLog
r292080 r292083 1 2022-03-29 Yusuke Suzuki <[email protected]> 2 3 [JSC] Use constants buffer to load JSGlobalObject in BaselineJIT thunks 4 https://bugs.webkit.org/show_bug.cgi?id=238414 5 6 Reviewed by Saam Barati. 7 8 Since these thunks are only called from BaselineJIT, we can assume constants 9 buffer register. And since we are always using 0 index for JSGlobalObject, 10 we can encode this into these shared thunks directly instead of loading 11 CodeBlock pointer from the stack. 12 13 We also fix using OBJECT_OFFSETOF for JSGlobalObject directly. We should use 14 it as JSGlobalObject::offsetOfXXX to make it clean and make it annotated that 15 these fields are accessed by JIT. 16 17 This patch also removes UnusedPointer.h since it is no longer used. 18 19 * CMakeLists.txt: 20 * JavaScriptCore.xcodeproj/project.pbxproj: 21 * jit/JIT.cpp: 22 (JSC::JIT::JIT): 23 (JSC::JIT::emitVarReadOnlyCheck): 24 * jit/JIT.h: 25 * jit/JITInlines.h: 26 (JSC::JIT::loadConstant): 27 (JSC::JIT::loadGlobalObject): 28 * jit/JITOpcodes.cpp: 29 (JSC::JIT::emit_op_overrides_has_instance): 30 (JSC::JIT::valueIsFalseyGenerator): 31 (JSC::JIT::valueIsTruthyGenerator): 32 (JSC::JIT::op_throw_handlerGenerator): 33 (JSC::JIT::op_check_traps_handlerGenerator): 34 * jit/JITPropertyAccess.cpp: 35 (JSC::JIT::slow_op_get_by_val_callSlowOperationThenCheckExceptionGenerator): 36 (JSC::JIT::slow_op_get_private_name_callSlowOperationThenCheckExceptionGenerator): 37 (JSC::JIT::slow_op_put_by_val_callSlowOperationThenCheckExceptionGenerator): 38 (JSC::JIT::slow_op_put_private_name_callSlowOperationThenCheckExceptionGenerator): 39 (JSC::JIT::slow_op_del_by_id_callSlowOperationThenCheckExceptionGenerator): 40 (JSC::JIT::slow_op_del_by_val_callSlowOperationThenCheckExceptionGenerator): 41 (JSC::JIT::slow_op_get_by_id_callSlowOperationThenCheckExceptionGenerator): 42 (JSC::JIT::slow_op_get_by_id_with_this_callSlowOperationThenCheckExceptionGenerator): 43 (JSC::JIT::slow_op_put_by_id_callSlowOperationThenCheckExceptionGenerator): 44 (JSC::JIT::generateOpResolveScopeThunk): 45 (JSC::JIT::generateOpGetFromScopeThunk): 46 (JSC::JIT::emitVarInjectionCheck): 47 * jit/UnusedPointer.h: Removed. 48 * runtime/JSGlobalObject.h: 49 (JSC::JSGlobalObject::offsetOfVarInjectionWatchpoint): 50 (JSC::JSGlobalObject::offsetOfVarReadOnlyWatchpoint): 51 (JSC::JSGlobalObject::offsetOfFunctionProtoHasInstanceSymbolFunction): 52 1 53 2022-03-29 Geza Lore <[email protected]> 2 54 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r291935 r292083 270 270 0F2DD8141AB3D8BE00BBB8E8 /* DFGArgumentsUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2DD80F1AB3D8BE00BBB8E8 /* DFGArgumentsUtilities.h */; }; 271 271 0F2DD8151AB3D8BE00BBB8E8 /* DFGForAllKills.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2DD8101AB3D8BE00BBB8E8 /* DFGForAllKills.h */; }; 272 0F2E892C16D028AD009E4FD2 /* UnusedPointer.h in Headers */ = {isa = PBXBuildFile; fileRef = 65987F2F16828A7E003C2F8D /* UnusedPointer.h */; settings = {ATTRIBUTES = (Private, ); }; };273 272 0F2E892D16D02BAF009E4FD2 /* DFGMinifiedID.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FB4B51016B3A964003F696B /* DFGMinifiedID.h */; settings = {ATTRIBUTES = (Private, ); }; }; 274 273 0F2FC77316E12F740038D976 /* DFGDCEPhase.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F2FC77116E12F6F0038D976 /* DFGDCEPhase.h */; }; … … 4214 4213 658D3A5519638268003C45D6 /* VMEntryRecord.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = VMEntryRecord.h; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; 4215 4214 65987F2C167FE84B003C2F8D /* DFGOSRExitCompilationInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGOSRExitCompilationInfo.h; path = dfg/DFGOSRExitCompilationInfo.h; sourceTree = "<group>"; }; 4216 65987F2F16828A7E003C2F8D /* UnusedPointer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UnusedPointer.h; sourceTree = "<group>"; };4217 4215 659CDA591F67509800D3E53F /* YarrUnicodeProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = YarrUnicodeProperties.cpp; path = yarr/YarrUnicodeProperties.cpp; sourceTree = "<group>"; }; 4218 4216 659CDA5A1F67509800D3E53F /* YarrUnicodeProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = YarrUnicodeProperties.h; path = yarr/YarrUnicodeProperties.h; sourceTree = "<group>"; }; … … 6681 6679 A7386552118697B400540279 /* ThunkGenerators.cpp */, 6682 6680 A7386553118697B400540279 /* ThunkGenerators.h */, 6683 65987F2F16828A7E003C2F8D /* UnusedPointer.h */,6684 6681 ); 6685 6682 path = jit; … … 11206 11203 14AD91261DCA9FA40014F9FE /* UnlinkedProgramCodeBlock.h in Headers */, 11207 11204 14AB66761DECF40900A56C26 /* UnlinkedSourceCode.h in Headers */, 11208 0F2E892C16D028AD009E4FD2 /* UnusedPointer.h in Headers */,11209 11205 99DA00B11BD5994E00F4575C /* UpdateContents.py in Headers */, 11210 11206 0F963B3813FC6FE90002D9B2 /* ValueProfile.h in Headers */, -
trunk/Source/JavaScriptCore/jit/JIT.cpp
r290768 r292083 78 78 , m_loopOSREntryBytecodeIndex(loopOSREntryBytecodeIndex) 79 79 { 80 m_globalObjectConstant = addToConstantPool(JITConstantPool::Type::GlobalObject); 80 auto globalObjectConstant = addToConstantPool(JITConstantPool::Type::GlobalObject); 81 ASSERT_UNUSED(globalObjectConstant, globalObjectConstant == s_globalObjectConstant); 81 82 m_profiledCodeBlock = codeBlock; 82 83 m_unlinkedCodeBlock = codeBlock->unlinkedCodeBlock(); … … 138 139 if (resolveType == GlobalVar || resolveType == GlobalVarWithVarInjectionChecks) { 139 140 loadGlobalObject(scratchGPR); 140 loadPtr(Address(scratchGPR, OBJECT_OFFSETOF(JSGlobalObject, m_varReadOnlyWatchpoint)), scratchGPR);141 loadPtr(Address(scratchGPR, JSGlobalObject::offsetOfVarReadOnlyWatchpoint()), scratchGPR); 141 142 addSlowCase(branch8(Equal, Address(scratchGPR, WatchpointSet::offsetOfState()), TrustedImm32(IsInvalidated))); 142 143 } -
trunk/Source/JavaScriptCore/jit/JIT.h
r290768 r292083 48 48 #include "LLIntData.h" 49 49 #include "PCToCodeOriginMap.h" 50 #include "UnusedPointer.h"51 50 #include <wtf/UniqueRef.h> 52 51 … … 170 169 using MacroAssembler::Label; 171 170 172 static constexpr uintptr_t patchGetByIdDefaultStructure = unusedPointer;173 static constexpr int patchGetByIdDefaultOffset = 0;174 // Magic number - initial offset cannot be representable as a signed 8bit value, or the X86Assembler175 // will compress the displacement, and we may not be able to fit a patched offset.176 static constexpr int patchPutByIdDefaultOffset = 256;177 178 171 using Base = JSInterfaceJIT; 179 172 180 173 public: 181 JIT(VM&, CodeBlock* = nullptr, BytecodeIndex loopOSREntryBytecodeOffset = BytecodeIndex(0));174 JIT(VM&, CodeBlock*, BytecodeIndex loopOSREntryBytecodeOffset); 182 175 ~JIT(); 183 176 … … 190 183 void doMainThreadPreparationBeforeCompile(); 191 184 192 static CompilationResult compile(VM& vm, CodeBlock* codeBlock, JITCompilationEffort effort , BytecodeIndex bytecodeOffset = BytecodeIndex(0))193 { 194 return JIT(vm, codeBlock, bytecodeOffset).privateCompile(codeBlock, effort);185 static CompilationResult compile(VM& vm, CodeBlock* codeBlock, JITCompilationEffort effort) 186 { 187 return JIT(vm, codeBlock, BytecodeIndex(0)).privateCompile(codeBlock, effort); 195 188 } 196 189 … … 205 198 static constexpr GPRReg s_metadataGPR = LLInt::Registers::metadataTableGPR; 206 199 static constexpr GPRReg s_constantsGPR = LLInt::Registers::pbGPR; 200 static constexpr JITConstantPool::Constant s_globalObjectConstant { 0 }; 207 201 208 202 private: … … 257 251 private: 258 252 void loadGlobalObject(GPRReg); 253 254 // Assuming s_constantsGPR is available. 255 static void loadGlobalObject(CCallHelpers&, GPRReg); 256 static void loadConstant(CCallHelpers&, unsigned constantIndex, GPRReg); 257 259 258 void loadCodeBlockConstant(VirtualRegister, JSValueRegs); 260 259 void loadCodeBlockConstantPayload(VirtualRegister, RegisterID); … … 963 962 964 963 Vector<JITConstantPool::Value> m_constantPool; 965 JITConstantPool::Constant m_globalObjectConstant { std::numeric_limits<unsigned>::max() };966 964 SegmentedVector<UnlinkedCallLinkInfo> m_unlinkedCalls; 967 965 SegmentedVector<UnlinkedStructureStubInfo> m_unlinkedStubInfos; -
trunk/Source/JavaScriptCore/jit/JITInlines.h
r290768 r292083 494 494 } 495 495 496 ALWAYS_INLINE void JIT::loadConstant(CCallHelpers& jit, JITConstantPool::Constant constantIndex, GPRReg result) 497 { 498 jit.loadPtr(Address(s_constantsGPR, BaselineJITData::offsetOfData() + static_cast<uintptr_t>(constantIndex) * sizeof(void*)), result); 499 } 500 501 ALWAYS_INLINE void JIT::loadGlobalObject(CCallHelpers& jit, GPRReg result) 502 { 503 loadConstant(jit, s_globalObjectConstant, result); 504 } 505 496 506 ALWAYS_INLINE void JIT::loadConstant(JITConstantPool::Constant constantIndex, GPRReg result) 497 507 { 498 load Ptr(Address(s_constantsGPR, BaselineJITData::offsetOfData() + static_cast<uintptr_t>(constantIndex) * sizeof(void*)), result);508 loadConstant(*this, constantIndex, result); 499 509 } 500 510 501 511 ALWAYS_INLINE void JIT::loadGlobalObject(GPRReg result) 502 512 { 503 load Constant(m_globalObjectConstant, result);513 loadGlobalObject(*this, result); 504 514 } 505 515 -
trunk/Source/JavaScriptCore/jit/JITOpcodes.cpp
r292080 r292083 135 135 move(TrustedImm32(1), regT0); 136 136 loadGlobalObject(regT1); 137 Jump customHasInstanceValue = branchPtr(NotEqual, regT2, Address(regT1, OBJECT_OFFSETOF(JSGlobalObject, m_functionProtoHasInstanceSymbolFunction)));137 Jump customHasInstanceValue = branchPtr(NotEqual, regT2, Address(regT1, JSGlobalObject::offsetOfFunctionProtoHasInstanceSymbolFunction())); 138 138 // We know that constructor is an object from the way bytecode is emitted for instanceof expressions. 139 139 emitGetVirtualRegisterPayload(constructor, regT2); … … 471 471 jit.tagReturnAddress(); 472 472 473 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 474 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 473 loadGlobalObject(jit, globalObjectGPR); 475 474 jit.move(TrustedImm32(1), regT0); 476 475 auto isFalsey = jit.branchIfFalsey(vm, valueJSR, scratch1GPR, scratch2GPR, fpRegT0, fpRegT1, shouldCheckMasqueradesAsUndefined, globalObjectGPR); … … 658 657 jit.tagReturnAddress(); 659 658 660 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 661 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 659 loadGlobalObject(jit, globalObjectGPR); 662 660 jit.move(TrustedImm32(1), regT0); 663 661 auto isTruthy = jit.branchIfTruthy(vm, valueJSR, scratch1GPR, scratch2GPR, fpRegT0, fpRegT1, shouldCheckMasqueradesAsUndefined, globalObjectGPR); … … 729 727 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 730 728 jit.prepareCallOperation(vm); 731 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 732 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 729 loadGlobalObject(jit, globalObjectGPR); 733 730 jit.setupArguments<decltype(operationThrow)>(globalObjectGPR, thrownValueJSR); 734 731 Call operation = jit.call(OperationPtrTag); … … 1559 1556 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 1560 1557 jit.prepareCallOperation(vm); 1561 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 1562 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 1558 loadGlobalObject(jit, globalObjectGPR); 1563 1559 jit.setupArguments<decltype(operationHandleTraps)>(globalObjectGPR); 1564 1560 CCallHelpers::Call operation = jit.call(OperationPtrTag); -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp
r292080 r292083 150 150 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 151 151 jit.prepareCallOperation(vm); 152 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 153 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 152 loadGlobalObject(jit, globalObjectGPR); 154 153 jit.setupArguments<SlowOperation>(globalObjectGPR, stubInfoGPR, profileGPR, baseJSR, propertyJSR); 155 154 static_assert(preferredArgumentGPR<SlowOperation, 1>() == argumentGPR1, "Needed for branch to slow operation via StubInfo"); … … 245 244 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 246 245 jit.prepareCallOperation(vm); 247 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 248 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 246 loadGlobalObject(jit, globalObjectGPR); 249 247 jit.setupArguments<SlowOperation>(globalObjectGPR, stubInfoGPR, baseJSR, propertyJSR); 250 248 static_assert(preferredArgumentGPR<SlowOperation, 1>() == argumentGPR1, "Needed for branch to slow operation via StubInfo"); … … 468 466 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 469 467 jit.prepareCallOperation(vm); 470 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 471 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 468 loadGlobalObject(jit, globalObjectGPR); 472 469 jit.setupArgumentsForIndirectCall<SlowOperatoin>(stubInfoGPR, 473 470 globalObjectGPR, baseJSR, propertyJSR, valueJSR, stubInfoGPR, profileGPR); … … 566 563 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 567 564 jit.prepareCallOperation(vm); 568 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 569 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 565 loadGlobalObject(jit, globalObjectGPR); 570 566 // Loading nullptr to this register is necessary for setupArgumentsForIndirectCall 571 567 // to not clobber globalObjectGPR on ARM_THUMB2, and is otherwise harmless. … … 746 742 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 747 743 jit.prepareCallOperation(vm); 748 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 749 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 744 loadGlobalObject(jit, globalObjectGPR); 750 745 jit.setupArguments<SlowOperation>(globalObjectGPR, stubInfoGPR, baseJSR, propertyGPR, ecmaModeGPR); 751 746 static_assert(preferredArgumentGPR<SlowOperation, 1>() == argumentGPR1, "Needed for branch to slow operation via StubInfo"); … … 858 853 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 859 854 jit.prepareCallOperation(vm); 860 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 861 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 855 loadGlobalObject(jit, globalObjectGPR); 862 856 jit.setupArguments<SlowOperation>(globalObjectGPR, stubInfoGPR, baseJSR, propertyJSR, ecmaModeGPR); 863 857 static_assert(preferredArgumentGPR<SlowOperation, 1>() == argumentGPR1, "Needed for branch to slow operation via StubInfo"); … … 1085 1079 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 1086 1080 jit.prepareCallOperation(vm); 1087 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 1088 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 1081 loadGlobalObject(jit, globalObjectGPR); 1089 1082 jit.setupArguments<SlowOperation>(globalObjectGPR, stubInfoGPR, baseJSR, propertyGPR); 1090 1083 static_assert(preferredArgumentGPR<SlowOperation, 1>() == argumentGPR1, "Needed for branch to slow operation via StubInfo"); … … 1186 1179 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 1187 1180 jit.prepareCallOperation(vm); 1188 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 1189 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 1181 loadGlobalObject(jit, globalObjectGPR); 1190 1182 jit.setupArguments<SlowOperation>(globalObjectGPR, stubInfoGPR, baseJSR, thisJSR, propertyGPR); 1191 1183 static_assert(preferredArgumentGPR<SlowOperation, 1>() == argumentGPR1, "Needed for branch to slow operation via StubInfo"); … … 1295 1287 jit.store32(bytecodeOffsetGPR, tagFor(CallFrameSlot::argumentCountIncludingThis)); 1296 1288 jit.prepareCallOperation(vm); 1297 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), globalObjectGPR); 1298 jit.loadPtr(Address(globalObjectGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 1289 loadGlobalObject(jit, globalObjectGPR); 1299 1290 jit.setupArguments<SlowOperation>(globalObjectGPR, stubInfoGPR, valueJSR, baseJSR, propertyGPR); 1300 1291 static_assert(preferredArgumentGPR<SlowOperation, 1>() == argumentGPR1, "Needed for branch to slow operation via StubInfo"); … … 1593 1584 if (globalObjectGPR == InvalidGPRReg) { 1594 1585 globalObjectGPR = scratchGPR; 1595 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), scratchGPR); 1596 jit.loadPtr(Address(scratchGPR, CodeBlock::offsetOfGlobalObject()), globalObjectGPR); 1586 loadGlobalObject(jit, globalObjectGPR); 1597 1587 } 1598 jit.loadPtr(Address(globalObjectGPR, OBJECT_OFFSETOF(JSGlobalObject, m_varInjectionWatchpoint)), scratchGPR);1588 jit.loadPtr(Address(globalObjectGPR, JSGlobalObject::offsetOfVarInjectionWatchpoint()), scratchGPR); 1599 1589 slowCase.append(jit.branch8(Equal, Address(scratchGPR, WatchpointSet::offsetOfState()), TrustedImm32(IsInvalidated))); 1600 1590 }; … … 1618 1608 case GlobalPropertyWithVarInjectionChecks: { 1619 1609 // JSScope::constantScopeForCodeBlock() loads codeBlock->globalObject(). 1620 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), scratchGPR); 1621 jit.loadPtr(Address(scratchGPR, CodeBlock::offsetOfGlobalObject()), returnValueGPR); 1610 loadGlobalObject(jit, returnValueGPR); 1622 1611 doVarInjectionCheck(needsVarInjectionChecks(resolveType), returnValueGPR); 1623 1612 jit.load32(Address(metadataGPR, Metadata::offsetOfGlobalLexicalBindingEpoch()), scratchGPR); … … 1632 1621 // JSScope::constantScopeForCodeBlock() loads codeBlock->globalObject() for GlobalVar*, 1633 1622 // and codeBlock->globalObject()->globalLexicalEnvironment() for GlobalLexicalVar*. 1634 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), scratchGPR); 1635 jit.loadPtr(Address(scratchGPR, CodeBlock::offsetOfGlobalObject()), returnValueGPR); 1623 loadGlobalObject(jit, returnValueGPR); 1636 1624 doVarInjectionCheck(needsVarInjectionChecks(resolveType), returnValueGPR); 1637 1625 if (resolveType == GlobalLexicalVar || resolveType == GlobalLexicalVarWithVarInjectionChecks) … … 1810 1798 if (!needsVarInjectionChecks) 1811 1799 return; 1812 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), scratchGPR); 1813 jit.loadPtr(Address(scratchGPR, CodeBlock::offsetOfGlobalObject()), scratchGPR); 1814 jit.loadPtr(Address(scratchGPR, OBJECT_OFFSETOF(JSGlobalObject, m_varInjectionWatchpoint)), scratchGPR); 1800 loadGlobalObject(jit, scratchGPR); 1801 jit.loadPtr(Address(scratchGPR, JSGlobalObject::offsetOfVarInjectionWatchpoint()), scratchGPR); 1815 1802 slowCase.append(jit.branch8(Equal, Address(scratchGPR, WatchpointSet::offsetOfState()), TrustedImm32(IsInvalidated))); 1816 1803 }; … … 1827 1814 1828 1815 jit.jitAssert(scopedLambda<Jump(void)>([&] () -> Jump { 1829 jit.loadPtr(addressFor(CallFrameSlot::codeBlock), scratchGPR); 1830 jit.loadPtr(Address(scratchGPR, CodeBlock::offsetOfGlobalObject()), scratchGPR); 1816 loadGlobalObject(jit, scratchGPR); 1831 1817 return jit.branchPtr(Equal, scopeGPR, scratchGPR); 1832 1818 })); … … 2570 2556 2571 2557 loadGlobalObject(scratchGPR); 2572 loadPtr(Address(scratchGPR, OBJECT_OFFSETOF(JSGlobalObject, m_varInjectionWatchpoint)), scratchGPR);2558 loadPtr(Address(scratchGPR, JSGlobalObject::offsetOfVarInjectionWatchpoint()), scratchGPR); 2573 2559 addSlowCase(branch8(Equal, Address(scratchGPR, WatchpointSet::offsetOfState()), TrustedImm32(IsInvalidated))); 2574 2560 } -
trunk/Source/JavaScriptCore/runtime/JSGlobalObject.h
r291756 r292083 925 925 static ptrdiff_t offsetOfGlobalLexicalEnvironment() { return OBJECT_OFFSETOF(JSGlobalObject, m_globalLexicalEnvironment); } 926 926 static ptrdiff_t offsetOfGlobalLexicalBindingEpoch() { return OBJECT_OFFSETOF(JSGlobalObject, m_globalLexicalBindingEpoch); } 927 static ptrdiff_t offsetOfVarInjectionWatchpoint() { return OBJECT_OFFSETOF(JSGlobalObject, m_varInjectionWatchpoint); } 928 static ptrdiff_t offsetOfVarReadOnlyWatchpoint() { return OBJECT_OFFSETOF(JSGlobalObject, m_varReadOnlyWatchpoint); } 929 static ptrdiff_t offsetOfFunctionProtoHasInstanceSymbolFunction() { return OBJECT_OFFSETOF(JSGlobalObject, m_functionProtoHasInstanceSymbolFunction); } 927 930 928 931 #if ENABLE(REMOTE_INSPECTOR)
Note:
See TracChangeset
for help on using the changeset viewer.