v8/test/unittests/wasm/wasm-disassembler-unittest-mvp.wat.inc
Daniel Lehmann 7c6f2cba36 [wasm] Test disassembler for Wasm GC
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}
2022-11-15 11:21:00 +00:00

489 lines
8.5 KiB
C++

;; expected = R"---(;; This is a polyglot C++/WAT file.
;; Comment lines are ignored and not expected in the disassembler output.
(module
;; Imports.
(global $env.imported_global (;0;) (import "env" "imported_global") i32)
(func $env.imported_function (;0;) (import "env" "imported_function"))
;; Table and memory sections.
(table $table0 4 funcref)
(memory $memory0 0 1)
;; Non-imported globals: mutable, non-mutable, exported.
(global $global1 (mut i32) (i32.const 0))
(global $global2 i32 (global.get $env.imported_global))
(global $exported_global (;3;) (export "exported_global") i64 (i64.const 0))
;; Element section for table initialization.
(elem $elem0 (i32.const 0) funcref (ref.func $env.imported_function) (ref.func $func1) (ref.func $func1) (ref.func $func3))
;; Instructions on globals, locals, parameters.
(func $func1 (param $var0 i32)
(local $var1 i64)
local.get $var0
local.tee $var0
local.set $var0
local.get $var1
local.tee $var1
local.set $var1
global.get $global1
global.set $global1
)
;; i32 operations.
(func $func2 (result i32)
;; Comparisons and constant literals.
i32.const 0
i32.eqz
i32.const 1
i32.eq
i32.const -1
i32.ne
i32.const 2147483647
i32.lt_s
i32.const -2147483648
i32.lt_u
i32.const 0
i32.gt_s
i32.const 0
i32.gt_u
i32.const 0
i32.le_s
i32.const 0
i32.le_u
i32.const 0
i32.ge_s
i32.const 0
i32.ge_u
;; Bitcounting.
i32.clz
i32.ctz
i32.popcnt
;; Arithmetic and logic.
i32.const 0
i32.add
i32.const 0
i32.sub
i32.const 0
i32.mul
i32.const 0
i32.div_s
i32.const 0
i32.div_u
i32.const 0
i32.rem_s
i32.const 0
i32.rem_u
i32.const 0
i32.and
i32.const 0
i32.or
i32.const 0
i32.xor
i32.const 0
i32.shl
i32.const 0
i32.shr_s
i32.const 0
i32.shr_u
i32.const 0
i32.rotl
i32.const 0
i32.rotr
drop
;; Conversions.
i64.const 0
i32.wrap_i64
drop
f32.const 0.0
i32.trunc_f32_s
drop
f32.const 0.0
i32.trunc_f32_u
drop
f64.const 0.0
i32.trunc_f64_s
drop
f64.const 0.0
i32.trunc_f64_u
drop
f32.const 0.0
i32.reinterpret_f32
i32.extend8_s
i32.extend16_s
)
;; i64 operations.
(func $func3 (result i64)
;; Comparisons and constant literals.
i64.const 0
i64.eqz
drop
i64.const 1
i64.const -1
i64.eq
drop
i64.const -9223372036854775808
i64.const 9223372036854775807
i64.ne
drop
i64.const 0
i64.const 0
i64.lt_s
drop
i64.const 0
i64.const 0
i64.lt_u
drop
i64.const 0
i64.const 0
i64.gt_s
drop
i64.const 0
i64.const 0
i64.gt_u
drop
i64.const 0
i64.const 0
i64.le_s
drop
i64.const 0
i64.const 0
i64.le_u
drop
i64.const 0
i64.const 0
i64.ge_s
drop
i64.const 0
i64.const 0
i64.ge_u
drop
;; Bitcounting.
i64.const 0
i64.clz
i64.ctz
i64.popcnt
;; Arithmetic and logic.
i64.const 0
i64.add
i64.const 0
i64.sub
i64.const 0
i64.mul
i64.const 0
i64.div_s
i64.const 0
i64.div_u
i64.const 0
i64.rem_s
i64.const 0
i64.rem_u
i64.const 0
i64.and
i64.const 0
i64.or
i64.const 0
i64.xor
i64.const 0
i64.shl
i64.const 0
i64.shr_s
i64.const 0
i64.shr_u
i64.const 0
i64.rotl
i64.const 0
i64.rotr
drop
;; Conversions.
i32.const 0
i64.extend_i32_s
drop
i32.const 0
i64.extend_i32_u
drop
f32.const 0.0
i64.trunc_f32_s
drop
f32.const 0.0
i64.trunc_f32_u
drop
f64.const 0.0
i64.trunc_f64_s
drop
f64.const 0.0
i64.trunc_f64_u
drop
f64.const 0.0
i64.reinterpret_f64
i64.extend8_s
i64.extend16_s
i64.extend32_s
)
;; f32 operations.
(func $func4 (result f32)
;; Comparisons and constant literals.
f32.const 0.0
f32.const -0.0
f32.eq
drop
f32.const 1
f32.const -1
f32.ne
drop
f32.const inf
f32.const -inf
f32.lt
drop
f32.const nan
f32.const -nan
f32.gt
drop
;; Non-canonical NaN encodings.
f32.const +nan:0x1
f32.const +nan:0xfffff
f32.le
drop
;; TODO(dlehmann): Change to `0.1`, once `ImmediatesPrinter` is improved to
;; print floats as shortest round-trippable decimal representation.
f32.const 0.100000001
f32.const 1234567.5
f32.ge
drop
;; Arithmetic.
f32.const 0.0
f32.abs
f32.neg
f32.ceil
f32.floor
f32.trunc
f32.nearest
f32.sqrt
f32.const 0.0
f32.add
f32.const 0.0
f32.sub
f32.const 0.0
f32.mul
f32.const 0.0
f32.div
f32.const 0.0
f32.min
f32.const 0.0
f32.max
f32.const 0.0
f32.copysign
drop
;; Conversions.
i32.const 0
f32.convert_i32_s
drop
i32.const 0
f32.convert_i32_u
drop
i64.const 0
f32.convert_i64_s
drop
i64.const 0
f32.convert_i64_u
drop
f64.const 0.0
f32.demote_f64
drop
i32.const 0
f32.reinterpret_i32
)
;; f64 operations.
(func $func5 (result f64)
;; Comparisons and constant literals.
f64.const 0.0
f64.const -0.0
f64.eq
drop
f64.const 1
f64.const -1
f64.ne
drop
f64.const inf
f64.const -inf
f64.lt
drop
f64.const nan
f64.const -nan
f64.gt
drop
;; Non-canonical NaN encodings.
f64.const +nan:0x1
f64.const +nan:0xfffffffffffff
f64.le
drop
f64.const 0.1
f64.const 1234567.5
f64.ge
drop
;; Arithmetic.
f64.const 0.0
f64.abs
f64.neg
f64.ceil
f64.floor
f64.trunc
f64.nearest
f64.sqrt
f64.const 0.0
f64.add
f64.const 0.0
f64.sub
f64.const 0.0
f64.mul
f64.const 0.0
f64.div
f64.const 0.0
f64.min
f64.const 0.0
f64.max
f64.const 0.0
f64.copysign
drop
;; Conversions.
i32.const 0
f64.convert_i32_s
drop
i32.const 0
f64.convert_i32_u
drop
i64.const 0
f64.convert_i64_s
drop
i64.const 0
f64.convert_i64_u
drop
f32.const 0.0
f64.promote_f32
drop
i64.const 0
f64.reinterpret_i64
)
;; Control-flow.
(func $func6
;; Calls and return.
call $func7
i64.const 0
i32.const 0
call_indirect (param i64) (result f64)
return
;; Blocks and loops, with and without block type.
block $label0
loop $label1
block (result i64)
loop $label2 (result i64)
;; Branches
br $label0
i32.const 0
br_if $label1
i32.const 0
br_table $label0 $label1 $label1 $label2
i64.const 0
end $label2
end
drop
end $label1
end $label0
;; Select and if.
i64.const 0
i64.const 1
i32.const 0
select
drop
i32.const 0
if (result i64)
i64.const 0
else
i64.const 1
end
drop
)
;; Memory operations.
(func $func7
;; Loads.
i32.const 0
i32.load
drop
i32.const 0
;; Non-default memargs.
i64.load offset=3
drop
i32.const 0
f32.load align=2
drop
i32.const 0
f64.load offset=3 align=4
drop
i32.const 0
i32.load8_s
drop
i32.const 0
i32.load8_u
drop
i32.const 0
i32.load16_s
drop
i32.const 0
i32.load16_u
drop
i32.const 0
i64.load8_s
drop
i32.const 0
i64.load8_u
drop
i32.const 0
i64.load16_s
drop
i32.const 0
i64.load16_u
drop
i32.const 0
i64.load32_s
drop
i32.const 0
i64.load32_u
drop
;; Stores.
i32.const 0
i32.const 0
i32.store
i32.const 0
i64.const 0
i64.store
i32.const 0
f32.const 0.0
f32.store
i32.const 0
f64.const 0.0
f64.store
i32.const 0
i32.const 0
i32.store8
i32.const 0
i32.const 0
i32.store16
i32.const 0
i64.const 0
i64.store8
i32.const 0
i64.const 0
i64.store16
i32.const 0
i64.const 0
i64.store32
;; Other memory instructions.
memory.size
memory.grow
drop
)
;; Other instructions. (Also an exported function.)
(func $exported_function (;8;) (export "exported_function")
nop
unreachable
)
;; Data and element sections.
(data (global.get $env.imported_global) "foo\0a\00")
)
;;)---";