Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 34f187fe40afbd66733d33ebb514da0ae2a40177
https://github.com/WebKit/WebKit/commit/34f187fe40afbd66733d33ebb514da0ae2a40177
Author: Daniel Liu <[email protected]>
Date: 2024-11-20 (Wed, 20 Nov 2024)
Changed paths:
A JSTests/wasm/ipint-tests/ipint-test-call-indirect-arg.js
A JSTests/wasm/ipint-tests/ipint-test-tail-call-indirect-simple.js
A JSTests/wasm/ipint-tests/ipint-test-tail-call-simple.js
A JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-bigchange.js
A JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-params-less.js
A JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-params-more.js
A JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-params-same.js
M Source/JavaScriptCore/bytecode/BytecodeList.rb
M Source/JavaScriptCore/llint/InPlaceInterpreter.h
M Source/JavaScriptCore/llint/InPlaceInterpreter32_64.asm
M Source/JavaScriptCore/llint/InPlaceInterpreter64.asm
M Source/JavaScriptCore/llint/LLIntData.cpp
M Source/JavaScriptCore/llint/LowLevelInterpreter.asm
M Source/JavaScriptCore/runtime/Gate.h
M Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.cpp
M Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp
M Source/JavaScriptCore/wasm/WasmIPIntGenerator.h
M Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.cpp
M Source/JavaScriptCore/wasm/WasmIPIntSlowPaths.h
M Tools/lldb/debug_ipint.py
Log Message:
-----------
Implement Wasm tail calls in IPInt
https://bugs.webkit.org/show_bug.cgi?id=281785
rdar://138213801
Reviewed by Keith Miller.
This patch implements `return_call` and `return_call_indirect` in IPInt,
bringing
us closer to feature parity with LLInt.
* JSTests/wasm/ipint-tests/ipint-test-call-indirect-arg.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.type.i2i.func.param.i32.result.i32.table.table.export.string_appeared_here.1.funcref.elem.i32.const.0.inc.func.inc.export.string_appeared_here.param.i32.result.i32.local.0.i32.const.1.i32.add.return.func.export.string_appeared_here.param.i32.result.i32.i32.const.1094795585.local.0.i32.const.0.call_indirect.table.type.i2i.i32.const.0.call_indirect.table.type.i2i.return.async
test):
* JSTests/wasm/ipint-tests/ipint-test-tail-call-indirect-simple.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.type.sig.func.param.i64.param.i64.result.i64.table.table.export.string_appeared_here.1.funcref.elem.i32.const.0.fac_aux.func.fac.export.string_appeared_here.param.x.i64.result.i64.return_call.fac_aux.local.x.i64.const.1.func.fac_aux.param.x.i64.param.r.i64.result.i64.result.i64.i64.eqz.local.x.then.return.local.r.else.i64.sub.local.x.i64.const.1.i64.mul.local.x.local.r.i32.const.0.return_call_indirect.table.type.sig.async
test):
* JSTests/wasm/ipint-tests/ipint-test-tail-call-simple.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.fac.export.string_appeared_here.param.x.i64.result.i64.return_call.fac_aux.local.x.i64.const.1.func.fac_aux.param.x.i64.param.r.i64.result.i64.result.i64.i64.eqz.local.x.then.return.local.r.else.i64.sub.local.x.i64.const.1.i64.mul.local.x.local.r.return_call.fac_aux.async
test):
* JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-bigchange.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.test.export.string_appeared_here.param.i32.result.i32.i32.const.1.i32.const.2.i32.const.3.i32.const.4.i32.const.5.i32.const.6.i32.const.7.i32.const.8.i32.const.9.i32.const.10.i32.const.11.i32.const.12.call.caller.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.func.caller.result.i32.return_call.callee.i32.const.21.i32.const.22.i32.const.23.i32.const.24.i32.const.25.i32.const.26.i32.const.27.i32.const.28.i32.const.29.i32.const.30.i32.const.31.i32.const.32.i32.const.33.i32.const.34.i32.const.35.i32.const.36.func.callee.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.result.i32.i32.sub.local.15.local.0.async
test):
* JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-params-less.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.test.export.string_appeared_here.param.i32.result.i32.i32.const.1.i32.const.2.i32.const.3.i32.const.4.i32.const.5.i32.const.6.i32.const.7.i32.const.8.i32.const.9.i32.const.10.i32.const.11.i32.const.12.call.caller.i32.const.20.i32.const.21.i32.const.22.i32.const.23.i32.const.24.i32.const.25.i32.const.26.i32.const.27.i32.const.28.i32.const.29.i32.const.30.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.func.caller.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.result.i32.return_call.callee.local.0.local.1.local.2.local.3.local.4.local.5.local.6.local.7.local.8.func.callee.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.result.i32.i32.const.40.async
test):
* JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-params-more.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.test.export.string_appeared_here.param.i32.result.i32.i32.const.1.i32.const.2.i32.const.3.i32.const.4.i32.const.5.i32.const.6.i32.const.7.i32.const.8.i32.const.9.i32.const.10.i32.const.11.i32.const.12.call.caller.i32.const.20.i32.const.21.i32.const.22.i32.const.23.i32.const.24.i32.const.25.i32.const.26.i32.const.27.i32.const.28.i32.const.29.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.func.caller.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.result.i32.return_call.callee.i32.const.30.i32.const.31.i32.const.32.i32.const.33.i32.const.34.i32.const.35.i32.const.36.i32.const.37.i32.const.38.i32.const.39.i32.const.40.i32.const.41.func.callee.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.result.i32.i32.const.50.async
test):
* JSTests/wasm/ipint-tests/ipint-test-tail-call-stack-params-same.js: Added.
(from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.test.export.string_appeared_here.param.i32.result.i32.i32.const.1.i32.const.2.i32.const.3.i32.const.4.i32.const.5.i32.const.6.i32.const.7.i32.const.8.i32.const.9.i32.const.10.i32.const.11.i32.const.12.call.caller.i32.const.20.i32.const.21.i32.const.22.i32.const.23.i32.const.24.i32.const.25.i32.const.26.i32.const.27.i32.const.28.i32.const.29.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.i32.add.func.caller.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.result.i32.return_call.callee.local.0.local.1.local.2.local.3.local.4.local.5.local.6.local.7.local.8.local.9.func.callee.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.param.i32.result.i32.i32.const.30.async
test):
* Source/JavaScriptCore/bytecode/BytecodeList.rb:
* Source/JavaScriptCore/llint/InPlaceInterpreter.h:
* Source/JavaScriptCore/llint/InPlaceInterpreter64.asm:
* Source/JavaScriptCore/llint/LLIntData.cpp:
(JSC::LLInt::initialize):
* Source/JavaScriptCore/runtime/Gate.h:
* Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp:
(JSC::Wasm::IPIntGenerator::IPIntGenerator):
(JSC::Wasm::IPIntGenerator::addCallCommonData):
(JSC::Wasm::IPIntGenerator::addTailCallCommonData):
(JSC::Wasm::IPIntGenerator::addCall):
(JSC::Wasm::IPIntGenerator::addCallIndirect):
* Source/JavaScriptCore/wasm/WasmIPIntGenerator.h:
* Tools/lldb/debug_ipint.py:
Canonical link: https://commits.webkit.org/286874@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes