[Wasm] Update Wasm GC to final codes 🎉

#KT-59720 Fixed
This commit is contained in:
Zalim Bashorov
2023-08-08 16:21:17 +02:00
committed by Space Team
parent 64f0e1e742
commit 9ec6fea9d5
3 changed files with 45 additions and 45 deletions
@@ -343,50 +343,50 @@ enum class WasmOp(
// WIP: https://github.com/WebAssembly/function-references // WIP: https://github.com/WebAssembly/function-references
CALL_REF("call_ref", 0x14, TYPE_IDX), CALL_REF("call_ref", 0x14, TYPE_IDX),
RETURN_CALL_REF("return_call_ref", 0x15, TYPE_IDX), RETURN_CALL_REF("return_call_ref", 0x15, TYPE_IDX),
REF_AS_NOT_NULL("ref.as_non_null", 0xD3), REF_AS_NOT_NULL("ref.as_non_null", 0xD4),
BR_ON_NULL("br_on_null", 0xD4, LABEL_IDX), BR_ON_NULL("br_on_null", 0xD5, LABEL_IDX),
BR_ON_NON_NULL("br_on_non_null", 0xD6, LABEL_IDX), BR_ON_NON_NULL("br_on_non_null", 0xD6, LABEL_IDX),
// ============================================================ // ============================================================
// GC // GC
// WIP: https://github.com/WebAssembly/gc // WIP: https://github.com/WebAssembly/gc
STRUCT_NEW("struct.new", 0xFB_07, STRUCT_TYPE_IDX), STRUCT_NEW("struct.new", 0xFB_00, STRUCT_TYPE_IDX),
STRUCT_NEW_DEFAULT("struct.new_default", 0xFB_08, STRUCT_TYPE_IDX), STRUCT_NEW_DEFAULT("struct.new_default", 0xFB_01, STRUCT_TYPE_IDX),
STRUCT_GET("struct.get", 0xFB_03, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)), STRUCT_GET("struct.get", 0xFB_02, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)),
STRUCT_GET_S("struct.get_s", 0xFB_04, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)), STRUCT_GET_S("struct.get_s", 0xFB_03, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)),
STRUCT_GET_U("struct.get_u", 0xFB_05, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)), STRUCT_GET_U("struct.get_u", 0xFB_04, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)),
STRUCT_SET("struct.set", 0xFB_06, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)), STRUCT_SET("struct.set", 0xFB_05, listOf(STRUCT_TYPE_IDX, STRUCT_FIELD_IDX)),
ARRAY_NEW("array.new", 0xFB_1B, STRUCT_TYPE_IDX), ARRAY_NEW("array.new", 0xFB_06, STRUCT_TYPE_IDX),
ARRAY_NEW_DEFAULT("array.new_default", 0xFB_1C, STRUCT_TYPE_IDX), ARRAY_NEW_DEFAULT("array.new_default", 0xFB_07, STRUCT_TYPE_IDX),
ARRAY_GET("array.get", 0xFB_13, listOf(STRUCT_TYPE_IDX)), ARRAY_GET("array.get", 0xFB_0B, listOf(STRUCT_TYPE_IDX)),
ARRAY_GET_S("array.get_s", 0xFB_14, listOf(STRUCT_TYPE_IDX)), ARRAY_GET_S("array.get_s", 0xFB_0C, listOf(STRUCT_TYPE_IDX)),
ARRAY_GET_U("array.get_u", 0xFB_15, listOf(STRUCT_TYPE_IDX)), ARRAY_GET_U("array.get_u", 0xFB_0D, listOf(STRUCT_TYPE_IDX)),
ARRAY_SET("array.set", 0xFB_16, listOf(STRUCT_TYPE_IDX)), ARRAY_SET("array.set", 0xFB_0E, listOf(STRUCT_TYPE_IDX)),
ARRAY_LEN("array.len", 0xFB_19), ARRAY_LEN("array.len", 0xFB_0F),
ARRAY_COPY("array.copy", 0xFB_18, listOf(STRUCT_TYPE_IDX, STRUCT_TYPE_IDX)), // ARRAY_FILL,
ARRAY_NEW_DATA("array.new_data", 0xFB_1D, listOf(STRUCT_TYPE_IDX, DATA_IDX)), ARRAY_COPY("array.copy", 0xFB_11, listOf(STRUCT_TYPE_IDX, STRUCT_TYPE_IDX)),
ARRAY_NEW_FIXED("array.new_fixed", 0xFB_1A, listOf(STRUCT_TYPE_IDX, CONST_I32)), ARRAY_NEW_DATA("array.new_data", 0xFB_09, listOf(STRUCT_TYPE_IDX, DATA_IDX)),
// Not yet supported by Binaryen (supported as 0xFB_10) ARRAY_NEW_FIXED("array.new_fixed", 0xFB_08, listOf(STRUCT_TYPE_IDX, CONST_I32)),
// ARRAY_NEW_ELEM("array.new_elem", 0xFB_1F, listOf(STRUCT_TYPE_IDX, DATA_IDX)), // ARRAY_NEW_ELEM("array.new_elem", 0xFB_0A, listOf(STRUCT_TYPE_IDX, ELEM_IDX)),
I31_NEW("i31.new", 0xFB_20), I31_NEW("i31.new", 0xFB_1C),
I31_GET_S("i31.get_s", 0xFB_21), I31_GET_S("i31.get_s", 0xFB_1D),
I31_GET_U("i31.get_u", 0xFB_22), I31_GET_U("i31.get_u", 0xFB_1E),
REF_EQ("ref.eq", 0xD5), REF_EQ("ref.eq", 0xD3),
REF_TEST("ref.test", 0xFB_40, HEAP_TYPE), REF_TEST("ref.test", 0xFB_14, HEAP_TYPE),
REF_TEST_NULL("ref.test null", 0xFB_48, HEAP_TYPE), REF_TEST_NULL("ref.test null", 0xFB_15, HEAP_TYPE),
REF_CAST("ref.cast", 0xFB_41, HEAP_TYPE), REF_CAST("ref.cast", 0xFB_16, HEAP_TYPE),
REF_CAST_NULL("ref.cast null", 0xFB_49, HEAP_TYPE), REF_CAST_NULL("ref.cast null", 0xFB_17, HEAP_TYPE),
// TODO: KT-60828 Return br_on_cast_fail usages when it's possible // TODO: KT-60828 Return br_on_cast_fail usages when it's possible
// BR_ON_CAST("br_on_cast", 0xFB_4E, listOf(CONST_U8, LABEL_IDX, HEAP_TYPE, HEAP_TYPE)), // BR_ON_CAST("br_on_cast", 0xFB_18, listOf(CONST_U8, LABEL_IDX, HEAP_TYPE, HEAP_TYPE)),
// BR_ON_CAST_FAIL("br_on_cast_fail", 0xFB_4F, listOf(CONST_U8, LABEL_IDX, HEAP_TYPE, HEAP_TYPE)), // BR_ON_CAST_FAIL("br_on_cast_fail", 0xFB_19, listOf(CONST_U8, LABEL_IDX, HEAP_TYPE, HEAP_TYPE)),
EXTERN_INTERNALIZE("extern.internalize", 0xfb70), // externref -> anyref EXTERN_INTERNALIZE("extern.internalize", 0xFB_1A), // externref -> anyref
EXTERN_EXTERNALIZE("extern.externalize", 0xfb71), // anyref -> externref EXTERN_EXTERNALIZE("extern.externalize", 0xFB_1B), // anyref -> externref
// ============================================================ // ============================================================
PSEUDO_COMMENT_PREVIOUS_INSTR("<comment-single>", WASM_OP_PSEUDO_OPCODE), PSEUDO_COMMENT_PREVIOUS_INSTR("<comment-single>", WASM_OP_PSEUDO_OPCODE),
@@ -19,23 +19,23 @@ object WasmI64 : WasmType("i64", -0x2)
object WasmF32 : WasmType("f32", -0x3) object WasmF32 : WasmType("f32", -0x3)
object WasmF64 : WasmType("f64", -0x4) object WasmF64 : WasmType("f64", -0x4)
object WasmV128 : WasmType("v128", -0x5) object WasmV128 : WasmType("v128", -0x5)
object WasmI8 : WasmType("i8", -0x6) object WasmI8 : WasmType("i8", -0x8)
object WasmI16 : WasmType("i16", -0x7) object WasmI16 : WasmType("i16", -0x9)
object WasmFuncRef : WasmType("funcref", -0x10) object WasmFuncRef : WasmType("funcref", -0x10)
object WasmExternRef : WasmType("externref", -0x11) object WasmExternRef : WasmType("externref", -0x11)
object WasmAnyRef : WasmType("anyref", -0x12) object WasmAnyRef : WasmType("anyref", -0x12)
object WasmEqRef : WasmType("eqref", -0x13) object WasmEqRef : WasmType("eqref", -0x13)
object WasmRefNullrefType : WasmType("nullref", -0x1b) // Shorthand for (ref null none) object WasmRefNullrefType : WasmType("nullref", -0x0F) // Shorthand for (ref null none)
object WasmRefNullExternrefType : WasmType("nullexternref", -0x17) // Shorthand for (ref null noextern) object WasmRefNullExternrefType : WasmType("nullexternref", -0x0E) // Shorthand for (ref null noextern)
data class WasmRefNullType(val heapType: WasmHeapType) : WasmType("ref null", -0x14) data class WasmRefNullType(val heapType: WasmHeapType) : WasmType("ref null", -0x1D)
data class WasmRefType(val heapType: WasmHeapType) : WasmType("ref", -0x15) data class WasmRefType(val heapType: WasmHeapType) : WasmType("ref", -0x1C)
@Suppress("unused") @Suppress("unused")
object WasmI31Ref : WasmType("i31ref", -0x16) object WasmI31Ref : WasmType("i31ref", -0x14)
@Suppress("unused") @Suppress("unused")
object WasmStructRef : WasmType("structref", -0x19) object WasmStructRef : WasmType("structref", -0x15)
sealed class WasmHeapType { sealed class WasmHeapType {
data class Type(val type: WasmSymbolReadOnly<WasmTypeDeclaration>) : WasmHeapType() { data class Type(val type: WasmSymbolReadOnly<WasmTypeDeclaration>) : WasmHeapType() {
@@ -49,9 +49,9 @@ sealed class WasmHeapType {
object Extern : Simple("extern", -0x11) object Extern : Simple("extern", -0x11)
object Any : Simple("any", -0x12) object Any : Simple("any", -0x12)
object Eq : Simple("eq", -0x13) object Eq : Simple("eq", -0x13)
object Struct : Simple("struct", -0x19) object Struct : Simple("struct", -0x15)
object None : Simple("none", -0x1b) object None : Simple("none", -0x0F)
object NoExtern : Simple("noextern", -0x17) object NoExtern : Simple("noextern", -0x0E)
override fun toString(): String { override fun toString(): String {
return "Simple:$name(${code.toString(16)})" return "Simple:$name(${code.toString(16)})"
@@ -26,8 +26,8 @@ private object WasmBinary {
const val STRUCT_TYPE: Byte = -0x21 // 0x5F const val STRUCT_TYPE: Byte = -0x21 // 0x5F
const val ARRAY_TYPE: Byte = -0x22 // 0x5E const val ARRAY_TYPE: Byte = -0x22 // 0x5E
const val SUB_TYPE: Byte = -0x30 // 0x50 const val SUB_TYPE: Byte = -0x30 // 0x50
const val SUB_FINAL_TYPE: Byte = -0x32 // 0x4E const val SUB_FINAL_TYPE: Byte = -0x31 // 0x4F
const val REC_GROUP: Byte = -0x31 // 0x4F const val REC_GROUP: Byte = -0x32 // 0x4E
@JvmInline @JvmInline
value class Section private constructor(val id: UShort) { value class Section private constructor(val id: UShort) {