[webkit-changes] [WebKit/WebKit] 03154b: Implement fundamentals of in-place interpreter

Daniel Liu noreply at github.com
Thu Jul 20 14:20:57 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 03154b1eb9203c3895556dc7dde41b6c3b090c5d
      https://github.com/WebKit/WebKit/commit/03154b1eb9203c3895556dc7dde41b6c3b090c5d
  Author: Daniel Liu <danlliu at umich.edu>
  Date:   2023-07-20 (Thu, 20 Jul 2023)

  Changed paths:
    A JSTests/wasm/ipint-tests/ipint-setup-stress-i32.js
    A JSTests/wasm/ipint-tests/ipint-setup-stress-loop.js
    A JSTests/wasm/ipint-tests/ipint-setup-stress.js
    A JSTests/wasm/ipint-tests/ipint-stress-i32.js
    A JSTests/wasm/ipint-tests/ipint-stress-i32.wasm
    A JSTests/wasm/ipint-tests/ipint-stress-loop.js
    A JSTests/wasm/ipint-tests/ipint-stress-loop.wasm
    A JSTests/wasm/ipint-tests/ipint-stress.wasm
    A JSTests/wasm/ipint-tests/ipint-test-add32.js
    A JSTests/wasm/ipint-tests/ipint-test-block-nopop.js
    A JSTests/wasm/ipint-tests/ipint-test-block.js
    A JSTests/wasm/ipint-tests/ipint-test-call-arg.js
    A JSTests/wasm/ipint-tests/ipint-test-call-noarg.js
    A JSTests/wasm/ipint-tests/ipint-test-f32-ops.js
    A JSTests/wasm/ipint-tests/ipint-test-f64-ops.js
    A JSTests/wasm/ipint-tests/ipint-test-fibonacci.js
    A JSTests/wasm/ipint-tests/ipint-test-i32-comparisons.js
    A JSTests/wasm/ipint-tests/ipint-test-i32-ops.js
    A JSTests/wasm/ipint-tests/ipint-test-i64-ops.js
    A JSTests/wasm/ipint-tests/ipint-test-if-else-multiret.js
    A JSTests/wasm/ipint-tests/ipint-test-if-else.js
    A JSTests/wasm/ipint-tests/ipint-test-local.js
    A JSTests/wasm/ipint-tests/ipint-test-loop-add.js
    A JSTests/wasm/ipint-tests/ipint-test-loop-nobr.js
    A JSTests/wasm/ipint-tests/ipint-test-loop.js
    A JSTests/wasm/ipint-tests/ipint-test-mixed-params.js
    A JSTests/wasm/ipint-tests/ipint-test-param.js
    A JSTests/wasm/ipint-tests/ipint-test-return32.js
    A JSTests/wasm/ipint-tests/ipint-test-return64.js
    A JSTests/wasm/ipint-tests/ipint-test-returnf32.js
    A JSTests/wasm/ipint-tests/ipint-test-returnf64.js
    A JSTests/wasm/ipint-tests/ipint-test-returnlarge32.js
    A JSTests/wasm/ipint-tests/ipint-test-stress.js
    A JSTests/wasm/ipint-tests/perf.py
    M Source/JavaScriptCore/CMakeLists.txt
    M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    M Source/JavaScriptCore/Sources.txt
    A Source/JavaScriptCore/llint/InPlaceInterpreter.asm
    A Source/JavaScriptCore/llint/InPlaceInterpreter.cpp
    A Source/JavaScriptCore/llint/InPlaceInterpreter.h
    M Source/JavaScriptCore/llint/LLIntThunks.cpp
    M Source/JavaScriptCore/llint/LLIntThunks.h
    M Source/JavaScriptCore/llint/LowLevelInterpreter.asm
    M Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
    M Source/JavaScriptCore/offlineasm/asm.rb
    M Source/JavaScriptCore/offlineasm/ast.rb
    M Source/JavaScriptCore/offlineasm/backends.rb
    M Source/JavaScriptCore/offlineasm/parser.rb
    M Source/JavaScriptCore/offlineasm/transform.rb
    M Source/JavaScriptCore/offlineasm/x86.rb
    M Source/JavaScriptCore/runtime/InitializeThreading.cpp
    M Source/JavaScriptCore/runtime/OptionsList.h
    M Source/JavaScriptCore/wasm/WasmCallee.cpp
    M Source/JavaScriptCore/wasm/WasmCallee.h
    M Source/JavaScriptCore/wasm/WasmCalleeGroup.cpp
    M Source/JavaScriptCore/wasm/WasmCalleeGroup.h
    M Source/JavaScriptCore/wasm/WasmCallingConvention.h
    M Source/JavaScriptCore/wasm/WasmCompilationMode.cpp
    M Source/JavaScriptCore/wasm/WasmCompilationMode.h
    A Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.cpp
    A Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h
    A Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp
    A Source/JavaScriptCore/wasm/WasmIPIntGenerator.h
    A Source/JavaScriptCore/wasm/WasmIPIntPlan.cpp
    A Source/JavaScriptCore/wasm/WasmIPIntPlan.h
    M Source/JavaScriptCore/wasm/WasmModule.cpp
    M Source/JavaScriptCore/wasm/WasmModule.h

  Log Message:
  -----------
  Implement fundamentals of in-place interpreter
https://bugs.webkit.org/show_bug.cgi?id=258950
rdar://111932567

Reviewed by Yusuke Suzuki.

JSC has been looking to implement an in-place WebAssembly interpreter to improve startup time as well as memory usage. By avoiding converting Wasm bytecode to LLInt bytecode, and instead directly executing Wasm bytecode with a side table, we are able to reduce startup time by roughly 33%. This comes at roughly a 5% runtime regression.

Performance and memory on a 3 MB Wasm function:

IPInt: (BBQ+OMG disabled)
- average runtime: 1413.9  ms (N = 20)
- average startup time: 1608.55  ms (N = 20)
- average peak memory: 509.3 MB (N = 20)
LLInt: (BBQ+OMG disabled)
- average runtime: 1358.95  ms (N = 20)
- average startup time: 2436.3  ms (N = 20)
- average peak memory: 483.0 MB (N = 20)
BBQ: (LLInt disabled)
- average runtime: 905.95  ms (N = 20)
- average startup time: 2440.65  ms (N = 20)
- average peak memory: 480.5 MB (N = 20)
JSC:
- average runtime: 961.65  ms (N = 20)
- average startup time: 2443.7  ms (N = 20)
- average peak memory: 484.05 MB (N = 20)

* JSTests/wasm/ipint-tests/ipint-test-block-nopop.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.block.result.i32.i32.const.1.br.0.i32.const.2.i32.add.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-block.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.block.result.i32.i32.i32.const.1.block.result.i32.i32.const.1.i32.const.2.i32.const.3.br.1.drop.i32.const.2.i32.add.i32.const.2.i32.const.3.br.0.drop.drop.i32.const.2.i32.add.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-f32-ops.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.f32.f32.result.f32.local.0.local.1.f32.add.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-f64-ops.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.clz.return.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.ctz.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.add.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.sub.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.mul.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.div_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.div_u.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.and.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.or.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.xor.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-fibonacci.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.i32.i32.i32.const.1.local.1.loop.local.2.local.1.local.2.i32.add.local.2.local.1.local.0.i32.const.1.i32.sub.local.tee.0.i32.const.0.i32.gt_s.br_if.0.local.2.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-i32-comparisons.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.eqz.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.eq.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.ne.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.lt_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.lt_u.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.gt_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.gt_u.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.le_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.le_u.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.ge_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.ge_u.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-i32-ops.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.clz.return.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.ctz.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.add.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.sub.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.mul.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.div_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.div_u.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.and.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.or.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.xor.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.shl.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.shr_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.shr_u.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-i64-ops.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i64.result.i64.local.0.i64.clz.return.func.export.string_appeared_here.param.i64.result.i64.local.0.i64.ctz.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.add.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.sub.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.mul.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.div_s.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.div_u.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.and.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.or.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.xor.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.shl.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.shr_s.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.shr_u.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-if-else-multiret.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.i32.i32.result.i32.local.0.result.i32.i32.then.local.1.local.1.else.local.2.local.2.i32.add.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-if-else.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.i32.i32.result.i32.local.0.result.i32.then.local.1.else.local.2.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-local.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.i32.local.0.local.0.local.1.i32.add.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-loop-add.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.i32.loop.local.0.local.1.i32.add.local.1.local.0.i32.const.1.i32.sub.local.tee.0.i32.const.0.i32.gt_s.br_if.0.local.1.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-loop-nobr.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.loop.result.i32.i32.const.727.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-loop.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.0.loop.param.i32.result.i32.i32.const.1.i32.add.local.tee.0.local.0.i32.const.5.i32.sub.br_if.1.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-mixed-params.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.f32.i32.result.f32.local.0.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-param.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.local.0.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-return32.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.result.i32.i32.const.5.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-return64.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.result.i64.i64.const.8.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-returnf32.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.result.f32.f32.const.3.25.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-returnf64.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.result.f64.f64.const.2.125.return.async test):
* JSTests/wasm/ipint-tests/ipint-test-stress.js: Added.
(load.string_appeared_here.import.as.assert.from.string_appeared_here.let.prologue.module.func.export.string_appeared_here.param.i32.result.i32.local.i32.i32.let.wat.i32.const.1.local.1.loop.local.2.local.1.local.2.i32.add.local.2.local.1.local.0.i32.const.1.i32.sub.local.tee.0.i32.const.0.i32.gt_s.br_if.0.let.postlogue.local.2.return.async test):
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/Sources.txt:
* Source/JavaScriptCore/jit/RegisterSet.cpp:
(JSC::RegisterSetBuilder::ipintBaselineCalleeSaveRegisters):
* Source/JavaScriptCore/jit/RegisterSet.h:
* Source/JavaScriptCore/llint/InPlaceInterpreter.asm: Added.
* Source/JavaScriptCore/llint/InPlaceInterpreter.cpp: Copied from Source/JavaScriptCore/wasm/WasmCompilationMode.cpp.
(JSC::IPInt::initialize):
(JSC::IPInt::cIPIntDispatchProbe):
* Source/JavaScriptCore/llint/InPlaceInterpreter.h: Copied from Source/JavaScriptCore/wasm/WasmCompilationMode.cpp.
* Source/JavaScriptCore/llint/LLIntThunks.cpp:
(JSC::LLInt::inPlaceInterpreterEntryThunk):
* Source/JavaScriptCore/llint/LLIntThunks.h:
* Source/JavaScriptCore/llint/LowLevelInterpreter.asm:
* Source/JavaScriptCore/runtime/InitializeThreading.cpp:
(JSC::initialize):
* Source/JavaScriptCore/runtime/OptionsList.h:
* Source/JavaScriptCore/wasm/WasmCallee.cpp:
(JSC::Wasm::Callee::runWithDowncast):
(JSC::Wasm::IPIntCallee::IPIntCallee):
(JSC::Wasm::IPIntCallee::setEntrypoint):
(JSC::Wasm::IPIntCallee::calleeSaveRegistersImpl):
* Source/JavaScriptCore/wasm/WasmCallee.h:
* Source/JavaScriptCore/wasm/WasmCalleeGroup.cpp:
(JSC::Wasm::CalleeGroup::create):
(JSC::Wasm::CalleeGroup::CalleeGroup):
* Source/JavaScriptCore/wasm/WasmCalleeGroup.h:
* Source/JavaScriptCore/wasm/WasmCallingConvention.h:
* Source/JavaScriptCore/wasm/WasmCompilationMode.cpp:
(JSC::Wasm::makeString):
* Source/JavaScriptCore/wasm/WasmCompilationMode.h:
(JSC::Wasm::isOSREntry):
(JSC::Wasm::isAnyBBQ):
(JSC::Wasm::isAnyOMG):
* Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.cpp: Added.
(JSC::Wasm::sizeOfLEB128):
(JSC::Wasm::FunctionIPIntMetadataGenerator::addBlankSpace):
(JSC::Wasm::FunctionIPIntMetadataGenerator::addRawValue):
(JSC::Wasm::FunctionIPIntMetadataGenerator::addLEB128ConstantInt32):
(JSC::Wasm::FunctionIPIntMetadataGenerator::addLEB128ConstantInt32AndLengthOfOtherInt32):
(JSC::Wasm::FunctionIPIntMetadataGenerator::addLEB128ConstantAndLengthForType):
(JSC::Wasm::FunctionIPIntMetadataGenerator::addReturnData):
* Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h: Added.
(JSC::Wasm::FunctionIPIntMetadataGenerator::FunctionIPIntMetadataGenerator):
(JSC::Wasm::FunctionIPIntMetadataGenerator::functionIndex const):
(JSC::Wasm::FunctionIPIntMetadataGenerator::tailCallSuccessors const):
(JSC::Wasm::FunctionIPIntMetadataGenerator::tailCallClobbersInstance const):
(JSC::Wasm::FunctionIPIntMetadataGenerator::getBytecode const):
(JSC::Wasm::FunctionIPIntMetadataGenerator::getMetadata const):
* Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp: Added.
(JSC::Wasm::ControlType::ControlType):
(JSC::Wasm::ControlType::isIf):
(JSC::Wasm::ControlType::isTry):
(JSC::Wasm::ControlType::isAnyCatch):
(JSC::Wasm::ControlType::isTopLevel):
(JSC::Wasm::ControlType::isLoop):
(JSC::Wasm::ControlType::isBlock):
(JSC::Wasm::ControlType::isCatch):
(JSC::Wasm::ControlType::dump const):
(JSC::Wasm::ControlType::blockType const):
(JSC::Wasm::ControlType::catchKind const):
(JSC::Wasm::ControlType::signature const):
(JSC::Wasm::ControlType::branchTargetType const):
(JSC::Wasm::ControlType::branchTargetArity const):
(JSC::Wasm::IPIntGenerator::emptyExpression):
(JSC::Wasm::IPIntGenerator::fail const):
(JSC::Wasm::IPIntGenerator::notifyFunctionUsesSIMD):
(JSC::Wasm::IPIntGenerator::endTopLevel):
(JSC::Wasm::IPIntGenerator::setParser):
(JSC::Wasm::IPIntGenerator::didFinishParsingLocals):
(JSC::Wasm::IPIntGenerator::didPopValueFromStack):
(JSC::Wasm::IPIntGenerator::willParseOpcode):
(JSC::Wasm::IPIntGenerator::didParseOpcode):
(JSC::Wasm::IPIntGenerator::dump):
(JSC::Wasm::IPIntGenerator::addDrop):
(JSC::Wasm::IPIntGenerator::IPIntGenerator):
(JSC::Wasm::IPIntGenerator::addConstant):
(JSC::Wasm::IPIntGenerator::addSIMDLoad):
(JSC::Wasm::IPIntGenerator::addSIMDStore):
(JSC::Wasm::IPIntGenerator::addSIMDSplat):
(JSC::Wasm::IPIntGenerator::addSIMDShuffle):
(JSC::Wasm::IPIntGenerator::addSIMDShift):
(JSC::Wasm::IPIntGenerator::addSIMDExtmul):
(JSC::Wasm::IPIntGenerator::addSIMDLoadSplat):
(JSC::Wasm::IPIntGenerator::addSIMDLoadLane):
(JSC::Wasm::IPIntGenerator::addSIMDStoreLane):
(JSC::Wasm::IPIntGenerator::addSIMDLoadExtend):
(JSC::Wasm::IPIntGenerator::addSIMDLoadPad):
(JSC::Wasm::IPIntGenerator::addExtractLane):
(JSC::Wasm::IPIntGenerator::addReplaceLane):
(JSC::Wasm::IPIntGenerator::addSIMDI_V):
(JSC::Wasm::IPIntGenerator::addSIMDV_V):
(JSC::Wasm::IPIntGenerator::addSIMDBitwiseSelect):
(JSC::Wasm::IPIntGenerator::addSIMDRelOp):
(JSC::Wasm::IPIntGenerator::addSIMDV_VV):
(JSC::Wasm::IPIntGenerator::addRefIsNull):
(JSC::Wasm::IPIntGenerator::addRefFunc):
(JSC::Wasm::IPIntGenerator::addRefAsNonNull):
(JSC::Wasm::IPIntGenerator::addRefEq):
(JSC::Wasm::IPIntGenerator::addTableGet):
(JSC::Wasm::IPIntGenerator::addTableSet):
(JSC::Wasm::IPIntGenerator::addTableInit):
(JSC::Wasm::IPIntGenerator::addElemDrop):
(JSC::Wasm::IPIntGenerator::addTableSize):
(JSC::Wasm::IPIntGenerator::addTableGrow):
(JSC::Wasm::IPIntGenerator::addTableFill):
(JSC::Wasm::IPIntGenerator::addTableCopy):
(JSC::Wasm::IPIntGenerator::addArguments):
(JSC::Wasm::IPIntGenerator::addLocal):
(JSC::Wasm::IPIntGenerator::getLocal):
(JSC::Wasm::IPIntGenerator::setLocal):
(JSC::Wasm::IPIntGenerator::getGlobal):
(JSC::Wasm::IPIntGenerator::setGlobal):
(JSC::Wasm::IPIntGenerator::load):
(JSC::Wasm::IPIntGenerator::store):
(JSC::Wasm::IPIntGenerator::addGrowMemory):
(JSC::Wasm::IPIntGenerator::addCurrentMemory):
(JSC::Wasm::IPIntGenerator::addMemoryFill):
(JSC::Wasm::IPIntGenerator::addMemoryCopy):
(JSC::Wasm::IPIntGenerator::addMemoryInit):
(JSC::Wasm::IPIntGenerator::addDataDrop):
(JSC::Wasm::IPIntGenerator::atomicLoad):
(JSC::Wasm::IPIntGenerator::atomicStore):
(JSC::Wasm::IPIntGenerator::atomicBinaryRMW):
(JSC::Wasm::IPIntGenerator::atomicCompareExchange):
(JSC::Wasm::IPIntGenerator::atomicWait):
(JSC::Wasm::IPIntGenerator::atomicNotify):
(JSC::Wasm::IPIntGenerator::atomicFence):
(JSC::Wasm::IPIntGenerator::addI31New):
(JSC::Wasm::IPIntGenerator::addI31GetS):
(JSC::Wasm::IPIntGenerator::addI31GetU):
(JSC::Wasm::IPIntGenerator::addArrayNew):
(JSC::Wasm::IPIntGenerator::addArrayNewData):
(JSC::Wasm::IPIntGenerator::addArrayNewElem):
(JSC::Wasm::IPIntGenerator::addArrayNewFixed):
(JSC::Wasm::IPIntGenerator::addArrayNewDefault):
(JSC::Wasm::IPIntGenerator::addArrayGet):
(JSC::Wasm::IPIntGenerator::addArraySet):
(JSC::Wasm::IPIntGenerator::addArrayLen):
(JSC::Wasm::IPIntGenerator::addStructNew):
(JSC::Wasm::IPIntGenerator::addStructNewDefault):
(JSC::Wasm::IPIntGenerator::addStructGet):
(JSC::Wasm::IPIntGenerator::addStructSet):
(JSC::Wasm::IPIntGenerator::addRefTest):
(JSC::Wasm::IPIntGenerator::addRefCast):
(JSC::Wasm::IPIntGenerator::addExternInternalize):
(JSC::Wasm::IPIntGenerator::addExternExternalize):
(JSC::Wasm::IPIntGenerator::addI32Add):
(JSC::Wasm::IPIntGenerator::addI64Add):
(JSC::Wasm::IPIntGenerator::addI32Sub):
(JSC::Wasm::IPIntGenerator::addI64Sub):
(JSC::Wasm::IPIntGenerator::addI32Mul):
(JSC::Wasm::IPIntGenerator::addI64Mul):
(JSC::Wasm::IPIntGenerator::addI32DivS):
(JSC::Wasm::IPIntGenerator::addI32DivU):
(JSC::Wasm::IPIntGenerator::addI64DivS):
(JSC::Wasm::IPIntGenerator::addI64DivU):
(JSC::Wasm::IPIntGenerator::addI32RemS):
(JSC::Wasm::IPIntGenerator::addI32RemU):
(JSC::Wasm::IPIntGenerator::addI64RemS):
(JSC::Wasm::IPIntGenerator::addI64RemU):
(JSC::Wasm::IPIntGenerator::addI32And):
(JSC::Wasm::IPIntGenerator::addI64And):
(JSC::Wasm::IPIntGenerator::addI32Xor):
(JSC::Wasm::IPIntGenerator::addI64Xor):
(JSC::Wasm::IPIntGenerator::addI32Or):
(JSC::Wasm::IPIntGenerator::addI64Or):
(JSC::Wasm::IPIntGenerator::addI32Shl):
(JSC::Wasm::IPIntGenerator::addI32ShrU):
(JSC::Wasm::IPIntGenerator::addI32ShrS):
(JSC::Wasm::IPIntGenerator::addI64Shl):
(JSC::Wasm::IPIntGenerator::addI64ShrU):
(JSC::Wasm::IPIntGenerator::addI64ShrS):
(JSC::Wasm::IPIntGenerator::addI32Rotl):
(JSC::Wasm::IPIntGenerator::addI64Rotl):
(JSC::Wasm::IPIntGenerator::addI32Rotr):
(JSC::Wasm::IPIntGenerator::addI64Rotr):
(JSC::Wasm::IPIntGenerator::addI32Popcnt):
(JSC::Wasm::IPIntGenerator::addI64Popcnt):
(JSC::Wasm::IPIntGenerator::addI32Clz):
(JSC::Wasm::IPIntGenerator::addI64Clz):
(JSC::Wasm::IPIntGenerator::addI32Ctz):
(JSC::Wasm::IPIntGenerator::addI64Ctz):
(JSC::Wasm::IPIntGenerator::addF32Add):
(JSC::Wasm::IPIntGenerator::addF64Add):
(JSC::Wasm::IPIntGenerator::addF32Sub):
(JSC::Wasm::IPIntGenerator::addF64Sub):
(JSC::Wasm::IPIntGenerator::addF32Mul):
(JSC::Wasm::IPIntGenerator::addF64Mul):
(JSC::Wasm::IPIntGenerator::addF32Div):
(JSC::Wasm::IPIntGenerator::addF64Div):
(JSC::Wasm::IPIntGenerator::addF32Min):
(JSC::Wasm::IPIntGenerator::addF32Max):
(JSC::Wasm::IPIntGenerator::addF64Min):
(JSC::Wasm::IPIntGenerator::addF64Max):
(JSC::Wasm::IPIntGenerator::addF32Nearest):
(JSC::Wasm::IPIntGenerator::addF64Nearest):
(JSC::Wasm::IPIntGenerator::addF32Floor):
(JSC::Wasm::IPIntGenerator::addF64Floor):
(JSC::Wasm::IPIntGenerator::addF32Ceil):
(JSC::Wasm::IPIntGenerator::addF64Ceil):
(JSC::Wasm::IPIntGenerator::addF32Copysign):
(JSC::Wasm::IPIntGenerator::addF64Copysign):
(JSC::Wasm::IPIntGenerator::addF32Sqrt):
(JSC::Wasm::IPIntGenerator::addF64Sqrt):
(JSC::Wasm::IPIntGenerator::addF32Neg):
(JSC::Wasm::IPIntGenerator::addF64Neg):
(JSC::Wasm::IPIntGenerator::addF32Abs):
(JSC::Wasm::IPIntGenerator::addF64Abs):
(JSC::Wasm::IPIntGenerator::addI32Eq):
(JSC::Wasm::IPIntGenerator::addI32Ne):
(JSC::Wasm::IPIntGenerator::addI32LtS):
(JSC::Wasm::IPIntGenerator::addI32LtU):
(JSC::Wasm::IPIntGenerator::addI32LeS):
(JSC::Wasm::IPIntGenerator::addI32LeU):
(JSC::Wasm::IPIntGenerator::addI32GtS):
(JSC::Wasm::IPIntGenerator::addI32GtU):
(JSC::Wasm::IPIntGenerator::addI32GeU):
(JSC::Wasm::IPIntGenerator::addI32GeS):
(JSC::Wasm::IPIntGenerator::addI32Eqz):
(JSC::Wasm::IPIntGenerator::addI64Eq):
(JSC::Wasm::IPIntGenerator::addI64Ne):
(JSC::Wasm::IPIntGenerator::addI64GtS):
(JSC::Wasm::IPIntGenerator::addI64GtU):
(JSC::Wasm::IPIntGenerator::addI64GeS):
(JSC::Wasm::IPIntGenerator::addI64GeU):
(JSC::Wasm::IPIntGenerator::addI64LtS):
(JSC::Wasm::IPIntGenerator::addI64LtU):
(JSC::Wasm::IPIntGenerator::addI64LeS):
(JSC::Wasm::IPIntGenerator::addI64LeU):
(JSC::Wasm::IPIntGenerator::addI64Eqz):
(JSC::Wasm::IPIntGenerator::addF32Eq):
(JSC::Wasm::IPIntGenerator::addF32Ne):
(JSC::Wasm::IPIntGenerator::addF32Lt):
(JSC::Wasm::IPIntGenerator::addF32Le):
(JSC::Wasm::IPIntGenerator::addF32Gt):
(JSC::Wasm::IPIntGenerator::addF32Ge):
(JSC::Wasm::IPIntGenerator::addF64Eq):
(JSC::Wasm::IPIntGenerator::addF64Ne):
(JSC::Wasm::IPIntGenerator::addF64Lt):
(JSC::Wasm::IPIntGenerator::addF64Le):
(JSC::Wasm::IPIntGenerator::addF64Gt):
(JSC::Wasm::IPIntGenerator::addF64Ge):
(JSC::Wasm::IPIntGenerator::addI64ExtendSI32):
(JSC::Wasm::IPIntGenerator::addI64ExtendUI32):
(JSC::Wasm::IPIntGenerator::addI32Extend8S):
(JSC::Wasm::IPIntGenerator::addI32Extend16S):
(JSC::Wasm::IPIntGenerator::addI64Extend8S):
(JSC::Wasm::IPIntGenerator::addI64Extend16S):
(JSC::Wasm::IPIntGenerator::addI64Extend32S):
(JSC::Wasm::IPIntGenerator::addF64Trunc):
(JSC::Wasm::IPIntGenerator::addF32Trunc):
(JSC::Wasm::IPIntGenerator::addI32TruncSF64):
(JSC::Wasm::IPIntGenerator::addI32TruncSF32):
(JSC::Wasm::IPIntGenerator::addI32TruncUF64):
(JSC::Wasm::IPIntGenerator::addI32TruncUF32):
(JSC::Wasm::IPIntGenerator::addI64TruncSF64):
(JSC::Wasm::IPIntGenerator::addI64TruncSF32):
(JSC::Wasm::IPIntGenerator::addI64TruncUF64):
(JSC::Wasm::IPIntGenerator::addI64TruncUF32):
(JSC::Wasm::IPIntGenerator::truncSaturated):
(JSC::Wasm::IPIntGenerator::addI32WrapI64):
(JSC::Wasm::IPIntGenerator::addF32DemoteF64):
(JSC::Wasm::IPIntGenerator::addF64PromoteF32):
(JSC::Wasm::IPIntGenerator::addF32ReinterpretI32):
(JSC::Wasm::IPIntGenerator::addI32ReinterpretF32):
(JSC::Wasm::IPIntGenerator::addF64ReinterpretI64):
(JSC::Wasm::IPIntGenerator::addI64ReinterpretF64):
(JSC::Wasm::IPIntGenerator::addF32ConvertSI32):
(JSC::Wasm::IPIntGenerator::addF32ConvertUI32):
(JSC::Wasm::IPIntGenerator::addF32ConvertSI64):
(JSC::Wasm::IPIntGenerator::addF32ConvertUI64):
(JSC::Wasm::IPIntGenerator::addF64ConvertSI32):
(JSC::Wasm::IPIntGenerator::addF64ConvertUI32):
(JSC::Wasm::IPIntGenerator::addF64ConvertSI64):
(JSC::Wasm::IPIntGenerator::addF64ConvertUI64):
(JSC::Wasm::IPIntGenerator::addTopLevel):
(JSC::Wasm::IPIntGenerator::addSelect):
(JSC::Wasm::IPIntGenerator::addBlock):
(JSC::Wasm::IPIntGenerator::addLoop):
(JSC::Wasm::IPIntGenerator::addIf):
(JSC::Wasm::IPIntGenerator::addElse):
(JSC::Wasm::IPIntGenerator::addElseToUnreachable):
(JSC::Wasm::IPIntGenerator::addTry):
(JSC::Wasm::IPIntGenerator::addCatch):
(JSC::Wasm::IPIntGenerator::addCatchToUnreachable):
(JSC::Wasm::IPIntGenerator::addCatchAll):
(JSC::Wasm::IPIntGenerator::addCatchAllToUnreachable):
(JSC::Wasm::IPIntGenerator::addDelegate):
(JSC::Wasm::IPIntGenerator::addDelegateToUnreachable):
(JSC::Wasm::IPIntGenerator::addThrow):
(JSC::Wasm::IPIntGenerator::addRethrow):
(JSC::Wasm::IPIntGenerator::addReturn):
(JSC::Wasm::IPIntGenerator::addBranch):
(JSC::Wasm::IPIntGenerator::addSwitch):
(JSC::Wasm::IPIntGenerator::endBlock):
(JSC::Wasm::IPIntGenerator::addEndToUnreachable):
(JSC::Wasm::IPIntGenerator::addCall):
(JSC::Wasm::IPIntGenerator::addCallIndirect):
(JSC::Wasm::IPIntGenerator::addCallRef):
(JSC::Wasm::IPIntGenerator::addUnreachable):
(JSC::Wasm::IPIntGenerator::addCrash):
(JSC::Wasm::IPIntGenerator::finalize):
(JSC::Wasm::parseAndCompileMetadata):
* Source/JavaScriptCore/wasm/WasmIPIntGenerator.h: Copied from Source/JavaScriptCore/wasm/WasmCompilationMode.cpp.
* Source/JavaScriptCore/wasm/WasmIPIntPlan.cpp: Added.
(JSC::Wasm::IPIntPlan::IPIntPlan):
(JSC::Wasm::IPIntPlan::prepareImpl):
(JSC::Wasm::IPIntPlan::compileFunction):
(JSC::Wasm::IPIntPlan::didCompleteCompilation):
(JSC::Wasm::IPIntPlan::completeInStreaming):
(JSC::Wasm::IPIntPlan::didCompileFunctionInStreaming):
(JSC::Wasm::IPIntPlan::didFailInStreaming):
(JSC::Wasm::IPIntPlan::work):
(JSC::Wasm::IPIntPlan::didReceiveFunctionData):
(JSC::Wasm::IPIntPlan::addTailCallEdge):
(JSC::Wasm::IPIntPlan::computeTransitiveTailCalls const):
* Source/JavaScriptCore/wasm/WasmIPIntPlan.h: Added.
* Source/JavaScriptCore/wasm/WasmLLIntGenerator.cpp:
(JSC::Wasm::parseAndCompileBytecode):
* Source/JavaScriptCore/wasm/WasmModule.cpp:
(JSC::Wasm::Module::Module):
(JSC::Wasm::makeValidationResult):
(JSC::Wasm::Module::validateSync):
(JSC::Wasm::Module::validateAsync):
(JSC::Wasm::Module::getOrCreateCalleeGroup):
* Source/JavaScriptCore/wasm/WasmModule.h:
(JSC::Wasm::Module::create):

Canonical link: https://commits.webkit.org/266186@main




More information about the webkit-changes mailing list