From d29010807a376eb7ceb3283e1c6a6179213a2381 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 1 Nov 2022 19:22:21 +0100 Subject: [PATCH] [Wasm] Apply recent changes in TFR proposal and update v8 Type index immediate was added to call_ref and return_call_ref instructions. More details here https://github.com/WebAssembly/function-references/pull/76 --- .../jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt | 5 ++--- gradle/versions.properties | 2 +- .../jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt | 4 +++- wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Operators.kt | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt index 79e075760f2..7582b76176f 100644 --- a/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt +++ b/compiler/ir/backend.wasm/src/org/jetbrains/kotlin/backend/wasm/ir2wasm/BodyGenerator.kt @@ -396,7 +396,7 @@ class BodyGenerator( body.buildStructGet(context.referenceGcType(klass.symbol), WasmSymbol(0)) body.buildStructGet(context.referenceVTableGcType(klass.symbol), WasmSymbol(vfSlot)) - body.buildInstr(WasmOp.CALL_REF) + body.buildInstr(WasmOp.CALL_REF, WasmImmediate.TypeIdx(context.referenceFunctionType(function.symbol))) } else { val symbol = klass.symbol if (symbol in hierarchyDisjointUnions) { @@ -412,7 +412,7 @@ class BodyGenerator( .indexOfFirst { it.function == function } body.buildStructGet(context.referenceVTableGcType(symbol), WasmSymbol(vfSlot)) - body.buildInstr(WasmOp.CALL_REF) + body.buildInstr(WasmOp.CALL_REF, WasmImmediate.TypeIdx(context.referenceFunctionType(function.symbol))) } else { body.buildUnreachable() } @@ -877,4 +877,3 @@ class BodyGenerator( return false } } - diff --git a/gradle/versions.properties b/gradle/versions.properties index f08fbc8dcb1..c1e7d8f13e8 100644 --- a/gradle/versions.properties +++ b/gradle/versions.properties @@ -64,4 +64,4 @@ versions.protobuf-relocated=2.6.1-1 versions.r8=2.2.64 versions.robolectric=4.0 versions.nodejs=18.12.1 -versions.v8=10.7.157 +versions.v8=10.9.130 diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt index df5a6294a70..4cc3eef315b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/js/d8/D8RootExtension.kt @@ -25,7 +25,9 @@ open class D8RootExtension(@Transient val rootProject: Project) : ConfigurationP var installationPath by Property(gradleHome.resolve("d8")) var downloadBaseUrl by Property("https://storage.googleapis.com/chromium-v8/official/canary/") - var version by Property("10.2.9") + + // Latest version number could be found here https://storage.googleapis.com/chromium-v8/official/canary/v8-linux64-rel-latest.json + var version by Property("10.9.130") var edition by Property("rel") // rel or dbg val setupTaskProvider: TaskProvider diff --git a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Operators.kt b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Operators.kt index 853c41aaf13..f4f151805ab 100644 --- a/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Operators.kt +++ b/wasm/wasm.ir/src/org/jetbrains/kotlin/wasm/ir/Operators.kt @@ -338,8 +338,8 @@ enum class WasmOp( // ============================================================ // Typed Function References // WIP: https://github.com/WebAssembly/function-references - CALL_REF("call_ref", 0x14), - RETURN_CALL_REF("return_call_ref", 0x15), + CALL_REF("call_ref", 0x14, TYPE_IDX), + RETURN_CALL_REF("return_call_ref", 0x15, TYPE_IDX), REF_AS_NOT_NULL("ref.as_non_null", 0xD3), BR_ON_NULL("br_on_null", 0xD4, LABEL_IDX), BR_ON_NON_NULL("br_on_non_null", 0xD6, LABEL_IDX),