Changeset 293746 in webkit
- Timestamp:
- May 3, 2022, 4:27:42 PM (4 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 7 edited
-
ChangeLog (modified) (1 diff)
-
dfg/DFGSpeculativeJIT.cpp (modified) (2 diffs)
-
ftl/FTLLowerDFGToB3.cpp (modified) (1 diff)
-
jit/AssemblyHelpers.cpp (modified) (3 diffs)
-
jit/AssemblyHelpers.h (modified) (1 diff)
-
runtime/JSCConfig.h (modified) (1 diff)
-
tools/IntegrityInlines.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r293729 r293746 1 2022-05-03 Yusuke Suzuki <ysuzuki@apple.com> 2 3 [JSC] Extend Structure heap size from 1GB to 4GB 4 https://bugs.webkit.org/show_bug.cgi?id=240028 5 6 Reviewed by Saam Barati. 7 8 1GB was much smaller compared to StructureIDTable (which allowed 7GB). 9 This patch extends 1GB to 4GB, that's maximum limit of the current encoding scheme (we can 10 extend it further to 64GB if we introduce shift based on alignment, but currently not used). 11 We use this 4GB on platforms which has enough virtual address space. 12 13 * ftl/FTLLowerDFGToB3.cpp: 14 (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq): 15 * jit/AssemblyHelpers.cpp: 16 (JSC::AssemblyHelpers::emitNonNullDecodeStructureID): 17 * runtime/JSCConfig.h: 18 1 19 2022-05-03 Philippe Normand <pnormand@igalia.com> and Pavel Feldman <pavel.feldman@gmail.com> and Yury Semikhatsky <yurys@chromium.org> 2 20 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r293714 r293746 14861 14861 m_jit.load32(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructureID() - JSFunction::rareDataTag), structureGPR); 14862 14862 slowCases.append(m_jit.branchTest32(CCallHelpers::Zero, structureGPR)); 14863 m_jit.emitNonNullDecode StructureID(structureGPR, structureGPR);14863 m_jit.emitNonNullDecodeZeroExtendedStructureID(structureGPR, structureGPR); 14864 14864 m_jit.move(TrustedImmPtr(node->isInternalPromise() ? JSInternalPromise::info() : JSPromise::info()), scratch1GPR); 14865 14865 slowCases.append(m_jit.branchPtr(CCallHelpers::NotEqual, scratch1GPR, CCallHelpers::Address(structureGPR, Structure::classInfoOffset()))); … … 14910 14910 m_jit.load32(JITCompiler::Address(rareDataGPR, FunctionRareData::offsetOfInternalFunctionAllocationProfile() + InternalFunctionAllocationProfile::offsetOfStructureID() - JSFunction::rareDataTag), structureGPR); 14911 14911 slowCases.append(m_jit.branchTest32(CCallHelpers::Zero, structureGPR)); 14912 m_jit.emitNonNullDecode StructureID(structureGPR, structureGPR);14912 m_jit.emitNonNullDecodeZeroExtendedStructureID(structureGPR, structureGPR); 14913 14913 m_jit.move(TrustedImmPtr(JSClass::info()), scratch1GPR); 14914 14914 slowCases.append(m_jit.branchPtr(CCallHelpers::NotEqual, scratch1GPR, CCallHelpers::Address(structureGPR, Structure::classInfoOffset()))); -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp
r293710 r293746 21018 21018 return m_out.shl(m_out.zeroExtPtr(structureID), m_out.constIntPtr(StructureID::encodeShiftAmount)); 21019 21019 #else 21020 LValue maskedStructureID = m_out.bitAnd(structureID, m_out.constInt32(StructureID::structureIDMask)); 21020 LValue maskedStructureID = structureID; 21021 if constexpr (structureHeapAddressSize < 4 * GB) 21022 maskedStructureID = m_out.bitAnd(structureID, m_out.constInt32(StructureID::structureIDMask)); 21021 21023 return m_out.add(m_out.constIntPtr(g_jscConfig.startOfStructureHeap), m_out.zeroExtPtr(maskedStructureID)); 21022 21024 #endif -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.cpp
r293710 r293746 404 404 } 405 405 406 void AssemblyHelpers::emitNonNullDecode StructureID(RegisterID source, RegisterID dest)406 void AssemblyHelpers::emitNonNullDecodeZeroExtendedStructureID(RegisterID source, RegisterID dest) 407 407 { 408 408 #if ENABLE(STRUCTURE_ID_WITH_SHIFT) … … 410 410 #elif CPU(ADDRESS64) 411 411 // This could use BFI on arm64 but that only helps if the start of structure heap is encodable as a mov and not as an immediate in the add so it's probably not super important. 412 and32(TrustedImm32(StructureID::structureIDMask), source, dest); 413 add64(TrustedImm64(g_jscConfig.startOfStructureHeap), dest); 412 if constexpr (structureHeapAddressSize >= 4 * GB) { 413 ASSERT(structureHeapAddressSize == 4 * GB); 414 move(source, dest); 415 add64(TrustedImm64(g_jscConfig.startOfStructureHeap), dest); 416 } else { 417 and32(TrustedImm32(StructureID::structureIDMask), source, dest); 418 add64(TrustedImm64(g_jscConfig.startOfStructureHeap), dest); 419 } 414 420 #else // not CPU(ADDRESS64) 415 421 move(source, dest); … … 420 426 { 421 427 load32(MacroAssembler::Address(source, JSCell::structureIDOffset()), dest); 422 emitNonNullDecode StructureID(dest, dest);428 emitNonNullDecodeZeroExtendedStructureID(dest, dest); 423 429 } 424 430 -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h
r293203 r293746 1611 1611 } 1612 1612 1613 void emitNonNullDecode StructureID(RegisterID source, RegisterID dest);1613 void emitNonNullDecodeZeroExtendedStructureID(RegisterID source, RegisterID dest); 1614 1614 void emitLoadStructure(VM&, RegisterID source, RegisterID dest); 1615 1615 void emitLoadPrototype(VM&, GPRReg objectGPR, JSValueRegs resultRegs, JumpList& slowPath); -
trunk/Source/JavaScriptCore/runtime/JSCConfig.h
r293657 r293746 47 47 constexpr uintptr_t structureHeapAddressSize = 512 * MB; 48 48 #else 49 constexpr uintptr_t structureHeapAddressSize = 1* GB;49 constexpr uintptr_t structureHeapAddressSize = 4 * GB; 50 50 #endif 51 51 -
trunk/Source/JavaScriptCore/tools/IntegrityInlines.h
r293710 r293746 79 79 UNUSED_PARAM(structureID); 80 80 #if CPU(ADDRESS64) && !ENABLE(STRUCTURE_ID_WITH_SHIFT) 81 ASSERT(st ructureID.bits() <= structureHeapAddressSize + StructureID::nukedStructureIDBit);81 ASSERT(static_cast<uintptr_t>(structureID.bits()) <= structureHeapAddressSize + StructureID::nukedStructureIDBit); 82 82 #endif 83 83 }
Note:
See TracChangeset
for help on using the changeset viewer.