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

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

(if (result i32)
 (i32.const 4)
 (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 $i32_i32_=>_i32)
 (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)
)

# 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)

# 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)
)

# RefIs
(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)
)

# 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
 (i32.const 6)
 (i32.const 7)
)

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

# I31New
(i31.new
 (local.get $2)
)

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

