# Expression
# Block
(block $theName (result i32)
 (i32.const 0)
)

# If
(if (result i32)
 (i32.const 4)
 (then
  (i32.const 5)
 )
 (else
  (i32.const 6)
 )
)

(if (result i32)
 (i32.const 4)
 (then
  (i32.const 5)
 )
)

# Loop
(loop $theName
 (drop
  (i32.const 1)
 )
)

# Break
(br_if $theNewName
 (i32.const 4)
 (i32.const 3)
)

# Switch
(br_table $x $y $c
 (i32.const 4)
 (i32.const 3)
)

# Call
(call $bar
 (i32.const 7)
 (i32.const 6)
)

# CallIndirect
(call_indirect $0 (type $func.0)
 (i32.const 7)
 (i32.const 6)
 (i32.const 9000)
)

# LocalGet
(local.get $2)

# LocalSet
(local.set $2
 (i32.const 3)
)

# GlobalGet
(global.get $b)

# GlobalSet
(global.set $b
 (f64.const 3)
)

# MemorySize
(memory.size $0)

# MemoryGrow
(memory.grow $0
 (i32.const 2)
)

# Load
(i64.atomic.load $0 offset=32 align=4
 (i32.const 128)
)

# Store
(i64.atomic.store $0 offset=32 align=4
 (i32.const 128)
 (i32.const 2)
)

# Const
(v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)

# Unary
(i64.eqz
 (i64.const 2)
)

# Binary
(i64.add
 (i64.const 3)
 (i64.const 4)
)

# WideIntAddSub
(i64.sub128
 (i64.const 5)
 (i64.const 6)
 (i64.const 7)
 (i64.const 8)
)

# WideIntMul
(i64.mul_wide_u
 (i64.const 3)
 (i64.const 4)
)

# Select
(select
 (i64.const 5)
 (i64.const 6)
 (i32.const 4)
)

# Drop
(drop
 (i32.const 2)
)

# Return
(return
 (i32.const 2)
)

# AtomicRMW
(i64.atomic.rmw16.sub_u $0 offset=16
 (i32.const 4)
 (i64.const 5)
)

# AtomicCmpxchg
(i64.atomic.rmw16.cmpxchg_u $0 offset=16
 (i32.const 5)
 (i64.const 6)
 (i64.const 7)
)

# AtomicWait
(memory.atomic.wait64 $0
 (i32.const 5)
 (i32.const 6)
 (i64.const 7)
)

# AtomicNotify
(memory.atomic.notify $0
 (i32.const 3)
 (i32.const 4)
)

# AtomicFence
(atomic.fence acqrel)

# SIMDExtract
(i16x8.extract_lane_s 1
 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)
)

# SIMDReplace
(i16x8.replace_lane 1
 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)
 (i32.const 2)
)

# SIMDShuffle
(i8x16.shuffle 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)
 (v128.const i32x4 0x02020202 0x02020202 0x02020202 0x02020202)
)

# SIMDTernary
(v128.bitselect
 (v128.const i32x4 0x04030201 0x08070605 0x0c0b0a09 0x100f0e0d)
 (v128.const i32x4 0x05040302 0x09080706 0x0d0c0b0a 0x11100f0e)
 (v128.const i32x4 0x06050403 0x0a090807 0x0e0d0c0b 0x1211100f)
)


# SIMDShift
(i8x16.shr_s
 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)
 (i32.const 2)
)

# SIMDLoad
(v128.load8_splat $0 offset=32 align=4
 (i32.const 2)
)

# SIMDLoadStoreLane
(v128.load16_lane $0 offset=32 2
 (i32.const 2)
 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)
)

(v128.store16_lane $0 offset=32 2
 (i32.const 2)
 (v128.const i32x4 0x01010101 0x01010101 0x01010101 0x01010101)
)

# MemoryInit
(memory.init $0 $5
 (i32.const 6)
 (i32.const 7)
 (i32.const 8)
)

# DataDrop
(data.drop $2)

# MemoryCopy
(memory.copy $0 $0
 (i32.const 4)
 (i32.const 5)
 (i32.const 6)
)

# MemoryFill
(memory.fill $0
 (i32.const 4)
 (i32.const 5)
 (i32.const 6)
)

# RefIsNull
(ref.is_null
 (local.get $2)
)

# RefAs
(ref.as_non_null
 (local.get $2)
)

# RefFunc
(ref.func $b)

# RefEq
(ref.eq
 (local.get $2)
 (local.get $3)
)

# RefTest
(ref.test externref
 (local.get $2)
)

# RefCast
(ref.cast externref
 (local.get $2)
)

# BrOn
(br_on_cast $br2 anyref i31ref
 (local.get $1)
)

# StructNew
(struct.new $struct.0
 (i32.const 7)
 (i32.const 6)
)

# StructGet
(struct.get $struct.0 1
 (local.get $1)
)

# StructSet
(struct.set $struct.0 1
 (local.get $2)
 (local.get $3)
)

# ArrayNew
(array.new $array.0
 (i32.const 3)
 (i32.const 4)
)

# ArrayNewFixed
(array.new_fixed $array.0 2
 (i32.const 7)
 (i32.const 6)
)

# ArrayNewData
(array.new_data $array.0 $3
 (i32.const 4)
 (i32.const 5)
)

# ArrayNewElem
(array.new_elem $array.0 $3
 (i32.const 4)
 (i32.const 5)
)

# ArrayGet
(array.get $array.0
 (local.get $1)
 (i32.const 1)
)

# ArraySet
(array.set $array.0
 (local.get $2)
 (i32.const 1)
 (local.get $3)
)

# ArrayLen
(array.len
 (local.get $1)
)

# ArrayFill
(array.fill $array.0
 (local.get $2)
 (i32.const 2)
 (local.get $3)
 (i32.const 3)
)

# ArrayCopy
(array.copy $array.0 $array.0
 (local.get $2)
 (i32.const 2)
 (local.get $3)
 (i32.const 3)
 (i32.const 2)
)

# ArrayInitData
(array.init_data $array.0 $1
 (local.get $1)
 (i32.const 3)
 (i32.const 4)
 (i32.const 5)
)

# ArrayInitElem
(array.init_elem $array.0 $1
 (local.get $1)
 (i32.const 3)
 (i32.const 4)
 (i32.const 5)
)

# Try
(try (result i32)
 (do
  (i32.const 1)
 )
 (catch $tag1
  (i32.const 2)
 )
 (catch_all
  (i32.const 3)
 )
)

(try (result i32)
 (do
  (i32.const 4)
 )
 (catch $tag1
  (i32.const 5)
 )
)

(try (result i32)
 (do
  (i32.const 4)
 )
 (catch $tag1
  (i32.const 6)
 )
 (catch $tag2
  (i32.const 5)
 )
)

(try (result i32)
 (do
  (i32.const 4)
 )
 (catch $tag1
  (i32.const 6)
 )
)

(try (result i32)
 (do
  (i32.const 4)
 )
 (catch $tag2
  (i32.const 8)
 )
 (catch $tag1
  (i32.const 10)
 )
)

(try (result i32)
 (do
  (i32.const 4)
 )
 (catch $tag2
  (i32.const 8)
 )
 (catch $tag1
  (i32.const 10)
 )
)

(try (result i32)
 (do
  (i32.const 4)
 )
 (delegate $try_outer)
)

# Throw
(throw $bar
 (i32.const 6)
 (i32.const 7)
)

# Rethrow
(rethrow $l1)

# TupleMake
(tuple.make 2
 (i32.const 6)
 (i32.const 7)
)

# TupleExtract
(tuple.extract 2 0
 (tuple.make 2
  (f64.const 3)
  (f64.const 4)
 )
)

# RefI31
(ref.i31
 (local.get $2)
)

# I31Get
(i31.get_u
 (local.get $2)
)

# CallRef
(call_ref $func.0
 (i32.const 6)
 (i32.const 7)
 (ref.func $tiny)
)

