Changeset 230549 in webkit
- Timestamp:
- Apr 11, 2018, 3:09:09 PM (7 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 1 added
- 1 deleted
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/CMakeLists.txt
r230294 r230549 616 616 jit/AssemblyHelpers.h 617 617 jit/CCallHelpers.h 618 jit/CompactJITCodeMap.h619 618 jit/ExecutableAllocator.h 620 619 jit/FPRInfo.h … … 623 622 jit/JITAllocator.h 624 623 jit/JITCode.h 624 jit/JITCodeMap.h 625 625 jit/JITCompilationEffort.h 626 626 jit/JITMathICForwards.h -
trunk/Source/JavaScriptCore/ChangeLog
r230543 r230549 1 2018-04-11 Mark Lam <mark.lam@apple.com> 2 3 Replace CompactJITCodeMap with JITCodeMap. 4 https://bugs.webkit.org/show_bug.cgi?id=184512 5 <rdar://problem/35391728> 6 7 Reviewed by Filip Pizlo. 8 9 * CMakeLists.txt: 10 * JavaScriptCore.xcodeproj/project.pbxproj: 11 * bytecode/CodeBlock.h: 12 (JSC::CodeBlock::setJITCodeMap): 13 (JSC::CodeBlock::jitCodeMap const): 14 (JSC::CodeBlock::jitCodeMap): Deleted. 15 * dfg/DFGOSRExit.cpp: 16 (JSC::DFG::OSRExit::executeOSRExit): 17 * dfg/DFGOSRExitCompilerCommon.cpp: 18 (JSC::DFG::adjustAndJumpToTarget): 19 * jit/AssemblyHelpers.cpp: 20 (JSC::AssemblyHelpers::decodedCodeMapFor): Deleted. 21 * jit/AssemblyHelpers.h: 22 * jit/CompactJITCodeMap.h: Removed. 23 * jit/JIT.cpp: 24 (JSC::JIT::link): 25 * jit/JITCodeMap.h: Added. 26 (JSC::JITCodeMap::Entry::Entry): 27 (JSC::JITCodeMap::Entry::bytecodeIndex const): 28 (JSC::JITCodeMap::Entry::codeLocation): 29 (JSC::JITCodeMap::append): 30 (JSC::JITCodeMap::finish): 31 (JSC::JITCodeMap::find const): 32 (JSC::JITCodeMap::operator bool const): 33 * llint/LLIntSlowPaths.cpp: 34 (JSC::LLInt::LLINT_SLOW_PATH_DECL): 35 1 36 2018-04-11 Yusuke Suzuki <utatane.tea@gmail.com> 2 37 -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r230543 r230549 550 550 0FD79A2D1EBBBDBB00DA88D3 /* Synchronousness.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD79A2C1EBBBDB200DA88D3 /* Synchronousness.h */; settings = {ATTRIBUTES = (Private, ); }; }; 551 551 0FD81AD3154FB4F000983E72 /* DFGDominators.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD81AD0154FB4EB00983E72 /* DFGDominators.h */; }; 552 0FD82E39141AB14D00179C94 /* CompactJITCodeMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD82E37141AB14200179C94 /* CompactJITCodeMap.h */; settings = {ATTRIBUTES = (Private, ); }; };553 552 0FD82E54141DAEEE00179C94 /* SpeculatedType.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD82E4F141DAEA100179C94 /* SpeculatedType.h */; settings = {ATTRIBUTES = (Private, ); }; }; 554 553 0FD82E57141DAF1000179C94 /* DFGOSREntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FD82E53141DAEDE00179C94 /* DFGOSREntry.h */; }; … … 1756 1755 FE3A06BE1C11041200390FDD /* JITLeftShiftGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3A06B71C1103D900390FDD /* JITLeftShiftGenerator.h */; }; 1757 1756 FE3A06C01C11041A00390FDD /* JITRightShiftGenerator.h in Headers */ = {isa = PBXBuildFile; fileRef = FE3A06B91C1103D900390FDD /* JITRightShiftGenerator.h */; }; 1757 FE476FF4207E85D50093CA2D /* JITCodeMap.h in Headers */ = {isa = PBXBuildFile; fileRef = FE476FF3207E85D40093CA2D /* JITCodeMap.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1758 1758 FE48E6381EB118D2005D7A96 /* ObjectInitializationScope.h in Headers */ = {isa = PBXBuildFile; fileRef = FE48E6361EB1188F005D7A96 /* ObjectInitializationScope.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1759 1759 FE4BFF2C1AD476E700088F87 /* FunctionOverrides.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4BFF2A1AD476E700088F87 /* FunctionOverrides.h */; }; … … 2710 2710 0FD82E1E14172C2F00179C94 /* DFGCapabilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGCapabilities.cpp; path = dfg/DFGCapabilities.cpp; sourceTree = "<group>"; }; 2711 2711 0FD82E1F14172C2F00179C94 /* DFGCapabilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DFGCapabilities.h; path = dfg/DFGCapabilities.h; sourceTree = "<group>"; }; 2712 0FD82E37141AB14200179C94 /* CompactJITCodeMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CompactJITCodeMap.h; sourceTree = "<group>"; };2713 2712 0FD82E4F141DAEA100179C94 /* SpeculatedType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpeculatedType.h; sourceTree = "<group>"; }; 2714 2713 0FD82E52141DAEDE00179C94 /* DFGOSREntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGOSREntry.cpp; path = dfg/DFGOSREntry.cpp; sourceTree = "<group>"; }; … … 4681 4680 FE3A06B91C1103D900390FDD /* JITRightShiftGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITRightShiftGenerator.h; sourceTree = "<group>"; }; 4682 4681 FE42388F1BE18C1200514737 /* JITSubGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JITSubGenerator.cpp; sourceTree = "<group>"; }; 4682 FE476FF3207E85D40093CA2D /* JITCodeMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JITCodeMap.h; sourceTree = "<group>"; }; 4683 4683 FE48E6361EB1188F005D7A96 /* ObjectInitializationScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjectInitializationScope.h; sourceTree = "<group>"; }; 4684 4684 FE48E6371EB118AD005D7A96 /* ObjectInitializationScope.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjectInitializationScope.cpp; sourceTree = "<group>"; }; … … 5478 5478 DC17E8161C9C802B008A6AB3 /* CCallHelpers.cpp */, 5479 5479 0F24E53D17EA9F5900ABB217 /* CCallHelpers.h */, 5480 0FD82E37141AB14200179C94 /* CompactJITCodeMap.h */,5481 5480 0FF054F71AC35B4400E5BE57 /* ExecutableAllocationFuzz.cpp */, 5482 5481 0FF054F81AC35B4400E5BE57 /* ExecutableAllocationFuzz.h */, … … 5511 5510 0F8F94431667635200D61971 /* JITCode.cpp */, 5512 5511 86CCEFDD0F413F8900FD7F9E /* JITCode.h */, 5512 FE476FF3207E85D40093CA2D /* JITCodeMap.h */, 5513 5513 0F0776BD14FF002800102332 /* JITCompilationEffort.h */, 5514 5514 0FAF7EFA165BA919000C8455 /* JITDisassembler.cpp */, … … 8418 8418 0F15F15F14B7A73E005DE37D /* CommonSlowPaths.h in Headers */, 8419 8419 6553A33217A1F1EE008CF6F3 /* CommonSlowPathsExceptions.h in Headers */, 8420 0FD82E39141AB14D00179C94 /* CompactJITCodeMap.h in Headers */,8421 8420 A7E5A3A81797432D00E893C0 /* CompilationResult.h in Headers */, 8422 8421 0FDCE12A1FAFA85F006F3901 /* CompleteSubspace.h in Headers */, … … 8738 8737 E322E5A71DA644A8006E7709 /* FTLSnippetParams.h in Headers */, 8739 8738 0F235BD717178E1C00690C7F /* FTLStackmapArgumentList.h in Headers */, 8739 FE476FF4207E85D50093CA2D /* JITCodeMap.h in Headers */, 8740 8740 0FEA0A12170513DB00BB722C /* FTLState.h in Headers */, 8741 8741 A7FCC26D17A0B6AA00786D1A /* FTLSwitchCase.h in Headers */, -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.h
r230129 r230549 37 37 #include "CodeOrigin.h" 38 38 #include "CodeType.h" 39 #include "CompactJITCodeMap.h"40 39 #include "CompilationResult.h" 41 40 #include "ConcurrentJSLock.h" … … 49 48 #include "Instruction.h" 50 49 #include "JITCode.h" 50 #include "JITCodeMap.h" 51 51 #include "JITMathICForwards.h" 52 52 #include "JSCPoison.h" … … 302 302 void linkIncomingCall(ExecState* callerFrame, LLIntCallLinkInfo*); 303 303 304 void setJITCodeMap( std::unique_ptr<CompactJITCodeMap>jitCodeMap)304 void setJITCodeMap(JITCodeMap&& jitCodeMap) 305 305 { 306 306 m_jitCodeMap = WTFMove(jitCodeMap); 307 307 } 308 CompactJITCodeMap* jitCodeMap()309 { 310 return m_jitCodeMap .get();308 const JITCodeMap& jitCodeMap() const 309 { 310 return m_jitCodeMap; 311 311 } 312 312 … … 988 988 std::unique_ptr<PCToCodeOriginMap> m_pcToCodeOriginMap; 989 989 #endif 990 std::unique_ptr<CompactJITCodeMap>m_jitCodeMap;990 JITCodeMap m_jitCodeMap; 991 991 #if ENABLE(DFG_JIT) 992 992 // This is relevant to non-DFG code blocks that serve as the profiled code block -
trunk/Source/JavaScriptCore/dfg/DFGOSRExit.cpp
r230294 r230549 390 390 391 391 CodeBlock* codeBlockForExit = baselineCodeBlockForOriginAndBaselineCodeBlock(exit.m_codeOrigin, baselineCodeBlock); 392 Vector<BytecodeAndMachineOffset> decodedCodeMap; 393 codeBlockForExit->jitCodeMap()->decode(decodedCodeMap); 394 395 BytecodeAndMachineOffset* mapping = binarySearch<BytecodeAndMachineOffset, unsigned>(decodedCodeMap, decodedCodeMap.size(), exit.m_codeOrigin.bytecodeIndex, BytecodeAndMachineOffset::getBytecodeIndex); 396 397 ASSERT(mapping); 398 ASSERT(mapping->m_bytecodeIndex == exit.m_codeOrigin.bytecodeIndex); 399 400 void* jumpTarget = codeBlockForExit->jitCode()->executableAddressAtOffset(mapping->m_machineCodeOffset); 392 const JITCodeMap& codeMap = codeBlockForExit->jitCodeMap(); 393 CodeLocationLabel codeLocation = codeMap.find(exit.m_codeOrigin.bytecodeIndex); 394 ASSERT(codeLocation); 395 396 PtrTag locationTag = ptrTag(CodeEntryPtrTag, codeBlockForExit, exit.m_codeOrigin.bytecodeIndex); 397 void* jumpTarget = codeLocation.retagged(locationTag, CodeEntryPtrTag).executableAddress(); 401 398 402 399 // Compute the value recoveries. -
trunk/Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp
r230294 r230549 318 318 319 319 CodeBlock* codeBlockForExit = jit.baselineCodeBlockFor(exit.m_codeOrigin); 320 Vector<BytecodeAndMachineOffset>& decodedCodeMap = jit.decodedCodeMapFor(codeBlockForExit); 321 322 BytecodeAndMachineOffset* mapping = binarySearch<BytecodeAndMachineOffset, unsigned>(decodedCodeMap, decodedCodeMap.size(), exit.m_codeOrigin.bytecodeIndex, BytecodeAndMachineOffset::getBytecodeIndex); 323 324 ASSERT(mapping); 325 ASSERT(mapping->m_bytecodeIndex == exit.m_codeOrigin.bytecodeIndex); 326 320 ASSERT(codeBlockForExit == codeBlockForExit->baselineVersion()); 321 ASSERT(codeBlockForExit->jitType() == JITCode::BaselineJIT); 322 CodeLocationLabel codeLocation = codeBlockForExit->jitCodeMap().find(exit.m_codeOrigin.bytecodeIndex); 323 ASSERT(codeLocation); 324 325 PtrTag locationTag = ptrTag(CodeEntryPtrTag, codeBlockForExit, exit.m_codeOrigin.bytecodeIndex); 327 326 PtrTag exitTag = ptrTag(DFGOSRExitPtrTag, nextPtrTagID()); 328 void* jumpTarget = retagCodePtr(codeBlockForExit->jitCode()->executableAddressAtOffset(mapping->m_machineCodeOffset), CodeEntryPtrTag, exitTag); 329 327 void* jumpTarget = codeLocation.retagged(locationTag, exitTag).executableAddress(); 330 328 jit.addPtr(AssemblyHelpers::TrustedImm32(JIT::stackPointerOffsetFor(codeBlockForExit) * sizeof(Register)), GPRInfo::callFrameRegister, AssemblyHelpers::stackPointerRegister); 331 329 if (exit.isExceptionHandler()) { -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
r230516 r230549 49 49 50 50 return codeOrigin.inlineCallFrame->baselineCodeBlock->ownerExecutable(); 51 }52 53 Vector<BytecodeAndMachineOffset>& AssemblyHelpers::decodedCodeMapFor(CodeBlock* codeBlock)54 {55 ASSERT(codeBlock == codeBlock->baselineVersion());56 ASSERT(codeBlock->jitType() == JITCode::BaselineJIT);57 ASSERT(codeBlock->jitCodeMap());58 59 HashMap<CodeBlock*, Vector<BytecodeAndMachineOffset>>::AddResult result = m_decodedCodeMaps.add(codeBlock, Vector<BytecodeAndMachineOffset>());60 61 if (result.isNewEntry)62 codeBlock->jitCodeMap()->decode(result.iterator->value);63 64 return result.iterator->value;65 51 } 66 52 -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h
r230517 r230549 1539 1539 void emitDumbVirtualCall(VM&, CallLinkInfo*); 1540 1540 1541 Vector<BytecodeAndMachineOffset>& decodedCodeMapFor(CodeBlock*);1542 1543 1541 void makeSpaceOnStackForCCall(); 1544 1542 void reclaimSpaceOnStackForCCall(); … … 1662 1660 CodeBlock* m_codeBlock; 1663 1661 CodeBlock* m_baselineCodeBlock; 1664 1665 HashMap<CodeBlock*, Vector<BytecodeAndMachineOffset>> m_decodedCodeMaps;1666 1662 }; 1667 1663 -
trunk/Source/JavaScriptCore/jit/JIT.cpp
r230376 r230549 867 867 } 868 868 869 CompactJITCodeMap::Encoder jitCodeMapEncoder;869 JITCodeMap jitCodeMap; 870 870 for (unsigned bytecodeOffset = 0; bytecodeOffset < m_labels.size(); ++bytecodeOffset) { 871 if (m_labels[bytecodeOffset].isSet()) 872 jitCodeMapEncoder.append(bytecodeOffset, patchBuffer.offsetOf(m_labels[bytecodeOffset])); 873 } 874 m_codeBlock->setJITCodeMap(jitCodeMapEncoder.finish()); 871 if (m_labels[bytecodeOffset].isSet()) { 872 PtrTag tag = ptrTag(CodeEntryPtrTag, m_codeBlock, bytecodeOffset); 873 jitCodeMap.append(bytecodeOffset, patchBuffer.locationOf(m_labels[bytecodeOffset], tag)); 874 } 875 } 876 jitCodeMap.finish(); 877 m_codeBlock->setJITCodeMap(WTFMove(jitCodeMap)); 875 878 876 879 MacroAssemblerCodePtr withArityCheck = patchBuffer.locationOf(m_arityCheck, CodeEntryWithArityCheckPtrTag); -
trunk/Source/JavaScriptCore/llint/LLIntSlowPaths.cpp
r230376 r230549 443 443 444 444 ASSERT(codeBlock->jitType() == JITCode::BaselineJIT); 445 446 Vector<BytecodeAndMachineOffset> map; 447 codeBlock->jitCodeMap()->decode(map); 448 BytecodeAndMachineOffset* mapping = binarySearch<BytecodeAndMachineOffset, unsigned>(map, map.size(), loopOSREntryBytecodeOffset, BytecodeAndMachineOffset::getBytecodeIndex); 449 ASSERT(mapping); 450 ASSERT(mapping->m_bytecodeIndex == loopOSREntryBytecodeOffset); 451 452 void* jumpTarget = codeBlock->jitCode()->executableAddressAtOffset(mapping->m_machineCodeOffset); 445 446 const JITCodeMap& codeMap = codeBlock->jitCodeMap(); 447 CodeLocationLabel codeLocation = codeMap.find(loopOSREntryBytecodeOffset); 448 ASSERT(codeLocation); 449 450 PtrTag locationTag = ptrTag(CodeEntryPtrTag, codeBlock, loopOSREntryBytecodeOffset); 451 void* jumpTarget = codeLocation.retagged(locationTag, CodeEntryPtrTag).executableAddress(); 453 452 ASSERT(jumpTarget); 454 453
Note:
See TracChangeset
for help on using the changeset viewer.