Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: de71f3ac024b267bee64cf3a0e405171c5a4519d https://github.com/WebKit/WebKit/commit/de71f3ac024b267bee64cf3a0e405171c5a4519d Author: Daniel Liu <danl...@umich.edu> Date: 2023-08-03 (Thu, 03 Aug 2023)
Changed paths: M JSTests/wasm/ipint-tests/ipint-error-check-call-null.js M JSTests/wasm/ipint-tests/ipint-error-check-call-sig.js A JSTests/wasm/ipint-tests/ipint-error-check-div-0.js M JSTests/wasm/ipint-tests/ipint-error-check-mem-outofbounds.js M JSTests/wasm/ipint-tests/ipint-error-check-trunc-outofbounds.js A JSTests/wasm/ipint-tests/ipint-error-check-unreachable.js A JSTests/wasm/ipint-tests/ipint-test-block-nobr.js A JSTests/wasm/ipint-tests/ipint-test-branch-table.js A JSTests/wasm/ipint-tests/ipint-test-call-add12.js A JSTests/wasm/ipint-tests/ipint-test-call-arg-order.js A JSTests/wasm/ipint-tests/ipint-test-call-empty.js A JSTests/wasm/ipint-tests/ipint-test-call-stack-arg.js A JSTests/wasm/ipint-tests/ipint-test-data-drop.js A JSTests/wasm/ipint-tests/ipint-test-elem-drop.js M JSTests/wasm/ipint-tests/ipint-test-i32-ops.js M JSTests/wasm/ipint-tests/ipint-test-i64-ops.js A JSTests/wasm/ipint-tests/ipint-test-if-emptyelse.js A JSTests/wasm/ipint-tests/ipint-test-if.js M JSTests/wasm/ipint-tests/ipint-test-loop.js A JSTests/wasm/ipint-tests/ipint-test-memory-copy.js A JSTests/wasm/ipint-tests/ipint-test-memory-fill.js A JSTests/wasm/ipint-tests/ipint-test-memory-init.js A JSTests/wasm/ipint-tests/ipint-test-memory-size.js A JSTests/wasm/ipint-tests/ipint-test-select.js A JSTests/wasm/ipint-tests/ipint-test-table-copy.js A JSTests/wasm/ipint-tests/ipint-test-table-fill.js A JSTests/wasm/ipint-tests/ipint-test-table-grow.js A JSTests/wasm/ipint-tests/ipint-test-table-init.js A JSTests/wasm/ipint-tests/ipint-test-trunc-sat.js A JSTests/wasm/ipint-tests/ipint-test-typed-select.js M Source/JavaScriptCore/llint/InPlaceInterpreter.asm M Source/JavaScriptCore/llint/InPlaceInterpreter.cpp M Source/JavaScriptCore/llint/InPlaceInterpreter.h M Source/JavaScriptCore/llint/LowLevelInterpreter.cpp M Source/JavaScriptCore/runtime/InitializeThreading.cpp M Source/JavaScriptCore/wasm/WasmCallee.cpp M Source/JavaScriptCore/wasm/WasmCallee.h M Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.cpp M Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h M Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp M Source/JavaScriptCore/wasm/WasmModule.cpp M Source/JavaScriptCore/wasm/WasmSlowPaths.cpp M Source/JavaScriptCore/wasm/WasmSlowPaths.h Log Message: ----------- Implement saturating truncation, remaining memory and table operations, and update call to pass stack parameters https://bugs.webkit.org/show_bug.cgi?id=259665 rdar://113166666 Reviewed by Yusuke Suzuki. Added implementations for all saturating truncation instructions, as well as the remaining memory and table operations. Fixed bugs with regards to handling call parameter ordering, and allowed calls to pass arguments on stack. * JSTests/wasm/ipint-tests/ipint-test-branch-table.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.block.block.block.local.0.br_table.0.1.2.3.i32.const.2.return.i32.const.3.return.i32.const.5.return.i32.const.7.return.async test): * JSTests/wasm/ipint-tests/ipint-test-call-add12.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.add.export.string_appeared_here.param.i32.i32.i32.i32.i32.i32.i32.i32.i32.i32.i32.i32.result.i32.local.0.local.1.i32.add.local.2.i32.add.local.3.i32.add.local.4.i32.add.local.5.i32.add.local.6.i32.add.local.7.i32.add.local.8.i32.add.local.9.i32.add.local.10.i32.add.local.11.i32.add.return.func.export.string_appeared_here.param.i32.result.i32.local.0.local.0.local.0.local.0.local.0.local.0.local.0.local.0.local.0.local.0.local.0.local.0.call.add.return.async test): * JSTests/wasm/ipint-tests/ipint-test-call-arg-order.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.r2.param.i32.i32.result.i32.local.0.return.func.export.string_appeared_here.result.i32.i32.const.1.i32.const.2.call.r2.return.async test): * JSTests/wasm/ipint-tests/ipint-test-call-stack-arg.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.r9.param.i32.i32.i32.i32.i32.i32.i32.i32.i32.i32.result.i32.local.8.return.func.export.string_appeared_here.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.call.r9.return.async test): * JSTests/wasm/ipint-tests/ipint-test-data-drop.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.memory.export.string_appeared_here.1.10.data.string_appeared_here.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.memory.init.0.func.export.string_appeared_here.data.drop.0.decodeString): (async test): * JSTests/wasm/ipint-tests/ipint-test-elem-drop.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.3.funcref.elem.3.3.3.elem.elems.4.4.4.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.table.init.0.elems.func.export.string_appeared_here.result.i32.i32.const.0.table.table.ref.is_null.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.const.0.call_indirect.table.type.i2i.func.null.param.i32.result.i32.local.0.func.inc.export.string_appeared_here.param.i32.result.i32.local.0.i32.const.1.i32.add.func.drop.export.string_appeared_here.elem.drop.elems.async test): * JSTests/wasm/ipint-tests/ipint-test-i32-ops.js: (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.result.i32.local.0.i32.popcnt.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.rem_s.return.func.export.string_appeared_here.param.i32.i32.result.i32.local.0.local.1.i32.rem_u.return.func.export.string_appeared_here.param.i32.i32.r (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.i * JSTests/wasm/ipint-tests/ipint-test-i64-ops.js: (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.result.i64.local.0.i64.popcnt.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.rem_s.return.func.export.string_appeared_here.param.i64.i64.result.i64.local.0.local.1.i64.rem_u.return.func.export.string_appeared_here.param.i64.i64.r (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.i * JSTests/wasm/ipint-tests/ipint-test-if.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.then.local.1.return.local.2.return.async test): * JSTests/wasm/ipint-tests/ipint-test-loop.js: (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): Deleted. * JSTests/wasm/ipint-tests/ipint-test-memory-copy.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.memory.export.string_appeared_here.1.10.data.i32.const.0x0.string_appeared_here.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.memory.copy.decodeString): (async test): * JSTests/wasm/ipint-tests/ipint-test-memory-fill.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.memory.export.string_appeared_here.1.10.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.memory.fill.decodeString): (async test): * JSTests/wasm/ipint-tests/ipint-test-memory-init.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.memory.export.string_appeared_here.1.10.data.string_appeared_here.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.memory.init.0.decodeString): (async test): * JSTests/wasm/ipint-tests/ipint-test-memory-size.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.memory.export.string_appeared_here.1.10.func.export.string_appeared_here.result.i32.memory.size.func.export.string_appeared_here.param.i32.result.i32.local.0.memory.grow.async test): * JSTests/wasm/ipint-tests/ipint-test-select.js: Copied from JSTests/wasm/ipint-tests/ipint-test-loop.js. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.i32.const.2.i32.const.1.local.0.select.async test): * JSTests/wasm/ipint-tests/ipint-test-table-copy.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.3.funcref.table.table2.3.funcref.elem.3.3.3.elem.elems.4.4.4.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.table.init.table.elems.func.export.string_appeared_here.result.i32.i32.const.0.table.table.ref.is_null.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.const.0.call_indirect.table2.type.i2i.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.table.copy.table2.table.func.inc.export.string_appeared_here.param.i32.result.i32.local.0.i32.const.1.i32.add.async test): * JSTests/wasm/ipint-tests/ipint-test-table-fill.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.5.funcref.elem.i32.const.0.0.0.0.0.0.func.export.string_appeared_here.result.i32.table.size.table.func.export.string_appeared_here.param.i32.i32.local.0.ref.null.func.local.1.table.fill.table.func.export.string_appeared_here.param.i32.result.i32.local.0.table.table.ref.is_null.async test): * JSTests/wasm/ipint-tests/ipint-test-table-grow.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.3.funcref.elem.i32.const.0.0.0.0.func.export.string_appeared_here.result.i32.table.size.table.func.export.string_appeared_here.param.i32.result.i32.ref.null.func.local.0.table.grow.table.async test): * JSTests/wasm/ipint-tests/ipint-test-table-init.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.3.funcref.elem.3.3.3.elem.elems.4.4.4.func.export.string_appeared_here.param.i32.i32.i32.local.0.local.1.local.2.table.init.0.elems.func.export.string_appeared_here.result.i32.i32.const.0.table.table.ref.is_null.func.export.string_appeared_here.param.i32.result.i32.local.0.i32.const.0.call_indirect.table.type.i2i.func.null.param.i32.result.i32.local.0.func.inc.export.string_appeared_here.param.i32.result.i32.local.0.i32.const.1.i32.add.async test): * JSTests/wasm/ipint-tests/ipint-test-trunc-sat.js: Added. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.f32.result.i32.local.0.i32.trunc_sat_f32_s.func.export.string_appeared_here.param.f32.result.i32.local.0.i32.trunc_sat_f32_u.func.export.string_appeared_here.param.f64.result.i32.local.0.i32.trunc_sat_f64_s.func.export.string_appeared_here.param.f64.result.i32.local.0.i32.trunc_sat_f64_u.func.export.string_appeared_here.param.f32.result.i64.local.0.i64.trunc_sat_f32_s.func.export.string_appeared_here.param.f32.result.i64.local.0.i64.trunc_sat_f32_u.func.export.string_appeared_here.param.f64.result.i64.local.0.i64.trunc_sat_f64_s.func.export.string_appeared_here.param.f64.result.i64.local.0.i64.trunc_sat_f64_u.async test): * JSTests/wasm/ipint-tests/ipint-test-typed-select.js: Copied from JSTests/wasm/ipint-tests/ipint-test-loop.js. (from.string_appeared_here.import.as.assert.from.string_appeared_here.let.wat.module.func.export.string_appeared_here.param.i32.result.i32.i32.const.2.i32.const.1.local.0.select.result.i32.async test): * Source/JavaScriptCore/llint/InPlaceInterpreter.asm: * Source/JavaScriptCore/llint/InPlaceInterpreter.cpp: (JSC::IPInt::initialize): * Source/JavaScriptCore/llint/InPlaceInterpreter.h: * Source/JavaScriptCore/wasm/WasmCallee.cpp: (JSC::Wasm::IPIntCallee::IPIntCallee): * Source/JavaScriptCore/wasm/WasmCallee.h: * Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.cpp: (JSC::Wasm::FunctionIPIntMetadataGenerator::addReturnData): * Source/JavaScriptCore/wasm/WasmFunctionIPIntMetadataGenerator.h: * Source/JavaScriptCore/wasm/WasmIPIntGenerator.cpp: (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::addMemoryInit): (JSC::Wasm::IPIntGenerator::addDataDrop): (JSC::Wasm::IPIntGenerator::addSelect): (JSC::Wasm::IPIntGenerator::addElse): (JSC::Wasm::IPIntGenerator::addElseToUnreachable): (JSC::Wasm::IPIntGenerator::addSwitch): (JSC::Wasm::IPIntGenerator::addEndToUnreachable): (JSC::Wasm::IPIntGenerator::addCallCommonData): * Source/JavaScriptCore/wasm/WasmModule.cpp: (JSC::Wasm::makeValidationCallback): * Source/JavaScriptCore/wasm/WasmSlowPaths.cpp: (JSC::LLInt::WASM_IPINT_EXTERN_CPP_DECL): (JSC::LLInt::WASM_IPINT_EXTERN_CPP_DECL_1P): * Source/JavaScriptCore/wasm/WasmSlowPaths.h: Canonical link: https://commits.webkit.org/266545@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes