7c6f2cba36
This adds a separate test module and output expectation for Wasm GC. This covers the new types and instructions from https://github.com/WebAssembly/gc/blob/main/proposals/gc/MVP.md Unlike the previous disassembler tests, one cannot easily create the module bytes with WABT's `wat2wasm` from the expected text output (at least right now), so I used Binaryen's `wasm-as` instead to generate the module from a separate input file (not included here, because it uses folded expressions, which the debugger doesn't.) Change-Id: Id0205b2788fd7be5ea7696242cbe8a74a4bca892 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/4013265 Reviewed-by: Jakob Kummerow <jkummerow@chromium.org> Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Auto-Submit: Daniel Lehmann <dlehmann@chromium.org> Cr-Commit-Position: refs/heads/main@{#84264}
136 lines
6.4 KiB
SQL
136 lines
6.4 KiB
SQL
0x00, 0x61, 0x73, 0x6d, // wasm magic
|
|
0x01, 0x00, 0x00, 0x00, // wasm version
|
|
|
|
0x01, // section kind: Type
|
|
0x3a, // section length 58
|
|
0x0b, // types count 11
|
|
0x5f, 0x00, // type #0 $type0 kind: struct, field count 0
|
|
0x5f, 0x01, 0x7f, 0x00, // type #1 $type1 kind: struct, field count 1: i32 immutable
|
|
0x5f, 0x02, // type #2 $type2 kind: struct, field count 2
|
|
0x7f, 0x01, // i32 mutable
|
|
0x7e, 0x01, // i64 mutable
|
|
0x5f, 0x02, // type #3 $type3 kind: struct, field count 2
|
|
0x7a, 0x00, // i8 immutable
|
|
0x79, 0x01, // i16 mutable
|
|
0x5e, 0x7e, 0x00, // type #4 $type4 kind: array i64 immutable
|
|
0x5e, 0x7e, 0x01, // type #5 $type5 kind: array i64 mutable
|
|
0x5e, 0x7a, 0x00, // type #6 $type6 kind: array i8 immutable
|
|
0x5f, 0x01, 0x6b, 0x00, 0x00, // type #7 $type7 kind: struct, field count 1: (ref $type0) immutable
|
|
0x4f, // rec. group definition
|
|
0x02, // recursive group size 2
|
|
0x5f, 0x01, 0x6b, 0x09, 0x00, // type #8 $type8 kind: struct, field count 1: (ref $type9) immutable
|
|
0x5f, 0x01, 0x6b, 0x08, 0x00, // type #9 $type9 kind: struct, field count 1: (ref $type8) immutable
|
|
0x50, 0x01, 0x00, // type #10 $type10 subtype, supertype count 1: supertype 0
|
|
0x5f, 0x01, 0x7f, 0x00, // kind: struct, field count 1: i32 immutable
|
|
0x60, // type #11 $type11 kind: func
|
|
0x02, // param count 2
|
|
0x6b, 0x01, 0x6d, // (ref $type1) eqref
|
|
0x00, // return count 0
|
|
|
|
0x02, // section kind: Import
|
|
0x30, // section length 48
|
|
0x02, // imports count 2
|
|
// import #0
|
|
0x03, // module name length: 3
|
|
0x65, 0x6e, 0x76, // module name: env
|
|
0x0f, // field name length: 15
|
|
0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,
|
|
0x5f, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
|
|
// field name: imported_global
|
|
0x03, 0x6b, 0x07, 0x00, // kind: global (ref $type7) immutable
|
|
// import #1
|
|
0x03, // module name length: 3
|
|
0x65, 0x6e, 0x76, // module name: env
|
|
0x0e, // field name length: 14
|
|
0x61, 0x6e, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x5f,
|
|
0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c,
|
|
// field name: another_global
|
|
0x03, 0x6b, 0x08, 0x00, // kind: global (ref $type8) immutable
|
|
|
|
0x03, // section kind: Function
|
|
0x02, // section length 2
|
|
0x01, 0x0b, // functions count 1: 0 $func0 (param (ref $type1) eqref)
|
|
|
|
0x06, // section kind: Global
|
|
0x0b, // section length 11
|
|
0x02, // globals count 2
|
|
0x6e, 0x00, // global #2: anyref immutable
|
|
0xd0, 0x65, 0x0b, // ref.null none
|
|
0x6d, 0x01, // global #3: eqref mutable
|
|
0xd0, 0x65, 0x0b, // ref.null none
|
|
|
|
0x0a, // section kind: Code
|
|
0x99, 0x01, // section length 153
|
|
0x01, // functions count 1
|
|
// function #0 $func0
|
|
0x96, 0x01, // body size 150
|
|
0x00, // 0 entries in locals list
|
|
0xfb, 0x08, 0x01, // struct.new_default $type1
|
|
0xfb, 0x03, 0x01, 0x00, // struct.get $type1 $field0
|
|
0x1a, // drop
|
|
0xfb, 0x08, 0x02, // struct.new_default $type2
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x06, 0x02, 0x00, // struct.set $type2 $field0
|
|
0xfb, 0x08, 0x03, // struct.new_default $type3
|
|
0xfb, 0x04, 0x03, 0x00, // struct.get_s $type3 $field0
|
|
0x1a, // drop
|
|
0xfb, 0x08, 0x03, // struct.new_default $type3
|
|
0xfb, 0x05, 0x03, 0x01, // struct.get_u $type3 $field1
|
|
0x1a, // drop
|
|
0xfb, 0x1a, 0x04, 0x00, // array.new_fixed $type4 0
|
|
0x1a, // drop
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x1c, 0x04, // array.new_default $type4
|
|
0xfb, 0x19, // array.len
|
|
0x1a, // drop
|
|
0x42, 0x00, // i64.const 0
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x1b, 0x04, // array.new $type4
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x13, 0x04, // array.get $type4
|
|
0x1a, // drop
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x1c, 0x05, // array.new_default $type5
|
|
0x41, 0x00, // i32.const 0
|
|
0x42, 0x00, // i64.const 0
|
|
0xfb, 0x16, 0x05, // array.set $type5
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x1c, 0x06, // array.new_default $type6
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x14, 0x06, // array.get_s $type6
|
|
0x1a, // drop
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x1c, 0x06, // array.new_default $type6
|
|
0x41, 0x00, // i32.const 0
|
|
0xfb, 0x15, 0x06, // array.get_u $type6
|
|
0x1a, // drop
|
|
0x20, 0x01, // local.get $var1
|
|
0x20, 0x01, // local.get $var1
|
|
0xd5, // ref.eq
|
|
0x1a, // drop
|
|
0x20, 0x01, // local.get $var1
|
|
0xfb, 0x44, 0x00, // ref.test $type0
|
|
0x1a, // drop
|
|
0x20, 0x00, // local.get $var0
|
|
0xfb, 0x45, 0x00, // ref.cast $type0
|
|
0x1a, // drop
|
|
0x20, 0x00, // local.get $var0
|
|
0xfb, 0x48, 0x00, // ref.test null $type0
|
|
0x1a, // drop
|
|
0x20, 0x00, // local.get $var0
|
|
0xfb, 0x49, 0x00, // ref.cast null $type0
|
|
0x1a, // drop
|
|
0x02, 0x6b, 0x01, // block (result (ref $type1)) $label0
|
|
0x20, 0x00, // local.get $var0
|
|
0xd6, 0x00, // br_on_non_null $label0
|
|
0x20, 0x00, // local.get $var0
|
|
0xfb, 0x46, 0x00, 0x01, // br_on_cast $label0 $type1
|
|
0x1a, // drop
|
|
0x20, 0x00, // local.get $var0
|
|
0xfb, 0x47, 0x00, 0x01, // br_on_cast_fail $label0 $type1
|
|
0x1a, // drop
|
|
0x20, 0x00, // local.get $var0
|
|
0x0b, // end $label0
|
|
0x1a, // drop
|
|
0x0b, // end
|