Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 0f34249dbaea992d1a2dd5aee7770350d81daddb https://github.com/WebKit/WebKit/commit/0f34249dbaea992d1a2dd5aee7770350d81daddb Author: Keith Miller <keith_mil...@apple.com> Date: 2025-03-28 (Fri, 28 Mar 2025)
Changed paths: M Source/JavaScriptCore/assembler/AbstractMacroAssembler.h M Source/JavaScriptCore/assembler/MacroAssemblerARM64.h M Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h M Source/JavaScriptCore/heap/CompleteSubspace.cpp M Source/JavaScriptCore/heap/CompleteSubspace.h M Source/JavaScriptCore/heap/Heap.h M Source/JavaScriptCore/jit/AssemblyHelpers.cpp M Source/JavaScriptCore/jit/AssemblyHelpers.h M Source/JavaScriptCore/jit/JITAllocator.h M Source/JavaScriptCore/runtime/JSObject.cpp M Source/JavaScriptCore/runtime/OptionsList.h M Source/JavaScriptCore/wasm/WasmBBQJIT.cpp M Source/JavaScriptCore/wasm/WasmBBQJIT.h M Source/JavaScriptCore/wasm/WasmBBQJIT32_64.h M Source/JavaScriptCore/wasm/WasmBBQJIT64.cpp M Source/JavaScriptCore/wasm/WasmBBQJIT64.h M Source/JavaScriptCore/wasm/WasmFormat.cpp M Source/JavaScriptCore/wasm/WasmFormat.h M Source/JavaScriptCore/wasm/WasmFunctionParser.h M Source/JavaScriptCore/wasm/WasmOperations.cpp M Source/JavaScriptCore/wasm/WasmOperationsInlines.h M Source/JavaScriptCore/wasm/WasmSectionParser.cpp M Source/JavaScriptCore/wasm/js/JSWebAssemblyArray.cpp M Source/JavaScriptCore/wasm/js/JSWebAssemblyArray.h M Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp M Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h M Source/JavaScriptCore/wasm/js/JSWebAssemblyStruct.cpp M Source/JavaScriptCore/wasm/js/JSWebAssemblyStruct.h M Tools/Scripts/run-jsc-stress-tests Log Message: ----------- [BBQ] Inline (most) Wasm GC object allocations https://bugs.webkit.org/show_bug.cgi?id=290400 rdar://147855601 Reviewed by Yusuke Suzuki. This patch adds support for inlining Wasm GC allocations in BBQ. To make this work/effecient a number of changes were made: 1) BBQ supports a mutator fence rather than doing a write barrier on any new allocations. 2) BBQ now supports slow paths which automatically spill and fill register state rather than force a flush in the basic block. This is distinct from late paths which are just out of line snippets of code but are assumed to preserve register state. 3) BBQ has better support for just getting some value to some other location via emitStore/emitMove taking an Address/BaseIndex destination. 4) BBQ also has a way to force a value into a register. 5) Added more MacroAssembler transfer sizes for 8 and 16 byte values. 6) CompleteSubspaces can prepare all the local allocators needed for every size class 7) AssemblyHelpers/JITAllocator can now handle a variable but non-null allocator (hence 6) 8) ModuleInformation knows if any types in the types section are GC types so we only allocate extra space for structures/completeSubspace allocators when there are GC types. Also, added a disableBBQConsts option that prevents BBQ from passing around const Values for values on the wasm stack. This greatly increases our test coverage for BBQ for e.g. spec tests where most values are passed as consts. * Source/JavaScriptCore/assembler/AbstractMacroAssembler.h: (JSC::AbstractMacroAssembler::Label::Label): (JSC::AbstractMacroAssembler::Jump::link const): (JSC::AbstractMacroAssembler::Jump::linkTo const): (JSC::AbstractMacroAssembler::JumpList::link const): * Source/JavaScriptCore/assembler/MacroAssemblerARM64.h: (JSC::MacroAssemblerARM64::transfer8): (JSC::MacroAssemblerARM64::transfer16): (JSC::MacroAssemblerARM64::transfer32): (JSC::MacroAssemblerARM64::transfer64): (JSC::MacroAssemblerARM64::transferPtr): (JSC::MacroAssemblerARM64::transferFloat): (JSC::MacroAssemblerARM64::transferDouble): (JSC::MacroAssemblerARM64::transferVector): * Source/JavaScriptCore/heap/CompleteSubspace.cpp: (JSC::CompleteSubspace::prepareAllAllocators): * Source/JavaScriptCore/heap/CompleteSubspace.h: * Source/JavaScriptCore/heap/Heap.h: * Source/JavaScriptCore/jit/AssemblyHelpers.cpp: (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator): (JSC::AssemblyHelpers::emitAllocate): (JSC::AssemblyHelpers::emitAllocateVariableSized): * Source/JavaScriptCore/jit/AssemblyHelpers.h: (JSC::AssemblyHelpers::store64FromReg): (JSC::AssemblyHelpers::store32FromReg): * Source/JavaScriptCore/jit/JITAllocator.h: (JSC::JITAllocator::constant): (JSC::JITAllocator::variable): (JSC::JITAllocator::variableNonNull): (JSC::JITAllocator::isVariable const): (JSC::JITAllocator::JITAllocator): * Source/JavaScriptCore/runtime/JSObject.cpp: (JSC::JSObject::visitButterflyImpl): * Source/JavaScriptCore/runtime/OptionsList.h: * Source/JavaScriptCore/wasm/WasmBBQJIT.cpp: (JSC::Wasm::BBQJITImpl::BBQJIT::BBQJIT): (JSC::Wasm::BBQJITImpl::BBQJIT::addConstant): (JSC::Wasm::BBQJITImpl::BBQJIT::emitMutatorFence): (JSC::Wasm::BBQJITImpl::BBQJIT::addLatePath): (JSC::Wasm::BBQJITImpl::BBQJIT::endTopLevel): (JSC::Wasm::BBQJITImpl::BBQJIT::flushRegistersForException): (JSC::Wasm::BBQJITImpl::BBQJIT::flushRegisters): (JSC::Wasm::BBQJITImpl::BBQJIT::slowPathSpillBindings): (JSC::Wasm::BBQJITImpl::BBQJIT::slowPathRestoreBindings): (JSC::Wasm::BBQJITImpl::BBQJIT::saveValuesAcrossCallAndPassArguments): (JSC::Wasm::BBQJITImpl::BBQJIT::returnValuesFromCall): (JSC::Wasm::BBQJITImpl::BBQJIT::addRTTSlowPathJump): (JSC::Wasm::BBQJITImpl::BBQJIT::materializeToRegister): (JSC::Wasm::BBQJITImpl::BBQJIT::bind): (JSC::Wasm::BBQJITImpl::BBQJIT::unbind): (JSC::Wasm::BBQJITImpl::BBQJIT::unbindAllRegisters): (JSC::Wasm::BBQJITImpl::BBQJIT::nextGPR): (JSC::Wasm::BBQJITImpl::BBQJIT::nextFPR): (JSC::Wasm::BBQJITImpl::BBQJIT::evictGPR): (JSC::Wasm::BBQJITImpl::BBQJIT::evictFPR): (JSC::Wasm::BBQJITImpl::BBQJIT::clobber): * Source/JavaScriptCore/wasm/WasmBBQJIT.h: (JSC::Wasm::BBQJITImpl::BBQJIT::Location::asReg const): (JSC::Wasm::BBQJITImpl::BBQJIT::gprBindings): (JSC::Wasm::BBQJITImpl::BBQJIT::fprBindings): (JSC::Wasm::BBQJITImpl::BBQJIT::ScratchScope::bindGPRToScratch): (JSC::Wasm::BBQJITImpl::BBQJIT::ScratchScope::bindFPRToScratch): (JSC::Wasm::BBQJITImpl::BBQJIT::ScratchScope::unbindGPRFromScratch): (JSC::Wasm::BBQJITImpl::BBQJIT::ScratchScope::unbindFPRFromScratch): * Source/JavaScriptCore/wasm/WasmBBQJIT32_64.h: (JSC::Wasm::BBQJITImpl::BBQJIT::emitCCall): * Source/JavaScriptCore/wasm/WasmBBQJIT64.cpp: (JSC::Wasm::BBQJITImpl::BBQJIT::emitAllocateGCArrayUninitialized): (JSC::Wasm::BBQJITImpl::BBQJIT::addArrayNew): (JSC::Wasm::BBQJITImpl::BBQJIT::addArrayNewFixed): (JSC::Wasm::BBQJITImpl::BBQJIT::emitArrayStoreElementUnchecked): (JSC::Wasm::BBQJITImpl::BBQJIT::emitArraySetUnchecked): (JSC::Wasm::BBQJITImpl::BBQJIT::emitStructSet): (JSC::Wasm::BBQJITImpl::BBQJIT::emitAllocateGCStructUninitialized): (JSC::Wasm::BBQJITImpl::BBQJIT::addStructNewDefault): (JSC::Wasm::BBQJITImpl::BBQJIT::addStructNew): (JSC::Wasm::BBQJITImpl::BBQJIT::emitStoreConst): (JSC::Wasm::BBQJITImpl::BBQJIT::emitStore): (JSC::Wasm::BBQJITImpl::BBQJIT::emitMoveMemory): (JSC::Wasm::BBQJITImpl::BBQJIT::emitMove): * Source/JavaScriptCore/wasm/WasmBBQJIT64.h: (JSC::Wasm::BBQJITImpl::BBQJIT::emitCCall): * Source/JavaScriptCore/wasm/WasmFormat.cpp: (JSC::Wasm::validateWasmValue): * Source/JavaScriptCore/wasm/WasmFormat.h: (JSC::Wasm::sizeOfType): * Source/JavaScriptCore/wasm/WasmOperations.cpp: (JSC::Wasm::JSC_DEFINE_NOEXCEPT_JIT_OPERATION): * Source/JavaScriptCore/wasm/WasmOperations.h: * Source/JavaScriptCore/wasm/WasmOperationsInlines.h: (JSC::Wasm::fillArray): (JSC::Wasm::arrayNew): (JSC::Wasm::copyElementsInReverse): (JSC::Wasm::createArrayFromDataSegment): (JSC::Wasm::arrayNewElem): * Source/JavaScriptCore/wasm/WasmSectionParser.cpp: (JSC::Wasm::SectionParser::parseStructType): (JSC::Wasm::SectionParser::parseArrayType): * Source/JavaScriptCore/wasm/js/JSWebAssemblyArray.cpp: (JSC::JSWebAssemblyArray::JSWebAssemblyArray): (JSC::JSWebAssemblyArray::tryCreateUninitializedRestricted): (JSC::JSWebAssemblyArray::tryCreate): (JSC::JSWebAssemblyArray::visitChildrenImpl): * Source/JavaScriptCore/wasm/js/JSWebAssemblyArray.h: * Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp: (JSC::JSWebAssemblyInstance::JSWebAssemblyInstance): (JSC::JSWebAssemblyInstance::visitChildrenImpl): (JSC::JSWebAssemblyInstance::allocationSize): (JSC::JSWebAssemblyInstance::tryCreate): * Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h: * Source/JavaScriptCore/wasm/js/JSWebAssemblyStruct.cpp: (JSC::JSWebAssemblyStruct::JSWebAssemblyStruct): (JSC::JSWebAssemblyStruct::tryCreateUninitializedRestricted): (JSC::JSWebAssemblyStruct::create): * Source/JavaScriptCore/wasm/js/JSWebAssemblyStruct.h: * Tools/Scripts/run-jsc-stress-tests: Canonical link: https://commits.webkit.org/292808@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes