blob: 30febbec667884d61d152ce134318b32660d2a98 [file] [edit]
(module
(type $ii (func (param i32 i32)))
(type $FUNCSIG$vi (func (param i32)))
(type $2 (func))
(type $3 (func (result i32)))
(type $4 (func (param i32) (result i32)))
(type $5 (func (param f64)))
(import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32))
(import "env" "segfault" (func $segfault (param i32)))
(global $stack_ptr (mut i32) (get_global $STACKTOP$asm2wasm$import))
(table 1 1 anyfunc)
(memory $0 10)
(func $nothing (; 1 ;) (type $2)
(nop)
)
(func $not-alive (; 2 ;) (type $2)
(local $x i32)
(set_local $x
(i32.const 1)
)
(call $nothing)
)
(func $spill (; 3 ;) (type $2)
(local $x i32)
(local $1 i32)
(set_local $1
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $1)
(i32.const 16)
)
)
(block
(block
(i32.store
(get_local $1)
(get_local $x)
)
(call $nothing)
)
(drop
(get_local $x)
)
)
(set_global $stack_ptr
(get_local $1)
)
)
(func $ignore-non-pointers (; 4 ;) (type $2)
(local $x i32)
(local $y i64)
(local $z f32)
(local $w f64)
(local $4 i32)
(set_local $4
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $4)
(i32.const 16)
)
)
(block
(set_local $x
(i32.const 1)
)
(set_local $y
(i64.const 1)
)
(set_local $z
(f32.const 1)
)
(set_local $w
(f64.const 1)
)
(block
(i32.store
(get_local $4)
(get_local $x)
)
(call $nothing)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
(drop
(get_local $z)
)
(drop
(get_local $w)
)
)
(set_global $stack_ptr
(get_local $4)
)
)
(func $spill4 (; 5 ;) (type $2)
(local $x i32)
(local $y i32)
(local $z i32)
(local $w i32)
(local $4 i32)
(set_local $4
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $4)
(i32.const 16)
)
)
(block
(set_local $x
(i32.const 1)
)
(set_local $y
(i32.const 1)
)
(set_local $z
(i32.const 1)
)
(set_local $w
(i32.const 1)
)
(block
(i32.store
(get_local $4)
(get_local $x)
)
(i32.store offset=4
(get_local $4)
(get_local $y)
)
(i32.store offset=8
(get_local $4)
(get_local $z)
)
(i32.store offset=12
(get_local $4)
(get_local $w)
)
(call $nothing)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
(drop
(get_local $z)
)
(drop
(get_local $w)
)
)
(set_global $stack_ptr
(get_local $4)
)
)
(func $spill5 (; 6 ;) (type $2)
(local $x i32)
(local $y i32)
(local $z i32)
(local $w i32)
(local $a i32)
(local $5 i32)
(set_local $5
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $5)
(i32.const 32)
)
)
(block
(set_local $x
(i32.const 1)
)
(set_local $y
(i32.const 1)
)
(set_local $z
(i32.const 1)
)
(set_local $w
(i32.const 1)
)
(set_local $a
(i32.const 1)
)
(block
(i32.store
(get_local $5)
(get_local $x)
)
(i32.store offset=4
(get_local $5)
(get_local $y)
)
(i32.store offset=8
(get_local $5)
(get_local $z)
)
(i32.store offset=12
(get_local $5)
(get_local $w)
)
(i32.store offset=16
(get_local $5)
(get_local $a)
)
(call $nothing)
)
(drop
(get_local $x)
)
(drop
(get_local $y)
)
(drop
(get_local $z)
)
(drop
(get_local $w)
)
(drop
(get_local $a)
)
)
(set_global $stack_ptr
(get_local $5)
)
)
(func $some-alive (; 7 ;) (type $2)
(local $x i32)
(local $y i32)
(local $2 i32)
(set_local $2
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $2)
(i32.const 16)
)
)
(block
(block
(i32.store
(get_local $2)
(get_local $x)
)
(call $nothing)
)
(drop
(get_local $x)
)
)
(set_global $stack_ptr
(get_local $2)
)
)
(func $spill-args (; 8 ;) (type $ii) (param $p i32) (param $q i32)
(local $x i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(set_local $3
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $3)
(i32.const 16)
)
)
(block
(block
(set_local $4
(i32.const 1)
)
(set_local $5
(i32.const 2)
)
(i32.store offset=8
(get_local $3)
(get_local $x)
)
(call $spill-args
(get_local $4)
(get_local $5)
)
)
(drop
(get_local $x)
)
)
(set_global $stack_ptr
(get_local $3)
)
)
(func $spill-ret (; 9 ;) (type $3) (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(set_local $1
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $1)
(i32.const 16)
)
)
(set_local $4
(block (result i32)
(block
(i32.store
(get_local $1)
(get_local $x)
)
(call $nothing)
)
(drop
(get_local $x)
)
(if
(i32.const 1)
(block
(set_local $2
(i32.const 2)
)
(set_global $stack_ptr
(get_local $1)
)
(return
(get_local $2)
)
)
(block
(set_local $3
(i32.const 3)
)
(set_global $stack_ptr
(get_local $1)
)
(return
(get_local $3)
)
)
)
(i32.const 4)
)
)
(set_global $stack_ptr
(get_local $1)
)
(get_local $4)
)
(func $spill-unreachable (; 10 ;) (type $3) (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(set_local $1
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $1)
(i32.const 16)
)
)
(set_local $2
(block (result i32)
(block
(i32.store
(get_local $1)
(get_local $x)
)
(call $nothing)
)
(drop
(get_local $x)
)
(unreachable)
)
)
(set_global $stack_ptr
(get_local $1)
)
(get_local $2)
)
(func $spill-call-call0 (; 11 ;) (type $4) (param $p i32) (result i32)
(unreachable)
)
(func $spill-call-call1 (; 12 ;) (type $4) (param $p i32) (result i32)
(local $x i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(set_local $2
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $2)
(i32.const 16)
)
)
(set_local $5
(block (result i32)
(drop
(block (result i32)
(set_local $3
(block (result i32)
(set_local $4
(i32.const 1)
)
(i32.store offset=4
(get_local $2)
(get_local $x)
)
(call $spill-call-call1
(get_local $4)
)
)
)
(i32.store offset=4
(get_local $2)
(get_local $x)
)
(call $spill-call-call0
(get_local $3)
)
)
)
(get_local $x)
)
)
(set_global $stack_ptr
(get_local $2)
)
(get_local $5)
)
(func $spill-call-ret (; 13 ;) (type $4) (param $p i32) (result i32)
(local $x i32)
(drop
(call $spill-call-call0
(return
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-call (; 14 ;) (type $4) (param $p i32) (result i32)
(local $x i32)
(drop
(return
(call $spill-call-call0
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-ret (; 15 ;) (type $3) (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(set_local $1
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $1)
(i32.const 16)
)
)
(set_local $3
(block (result i32)
(block
(i32.store
(get_local $1)
(get_local $x)
)
(call $nothing)
)
(drop
(get_local $x)
)
(drop
(block
(set_global $stack_ptr
(get_local $1)
)
(return
(block
(set_local $2
(i32.const 1)
)
(set_global $stack_ptr
(get_local $1)
)
(return
(get_local $2)
)
)
)
)
)
(i32.const 0)
)
)
(set_global $stack_ptr
(get_local $1)
)
(get_local $3)
)
(func $spill-call-othertype (; 16 ;) (type $5) (param $y f64)
(local $x i32)
(local $2 i32)
(local $3 f64)
(set_local $2
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $2)
(i32.const 16)
)
)
(block
(block
(set_local $3
(f64.const 1)
)
(i32.store
(get_local $2)
(get_local $x)
)
(call $spill-call-othertype
(get_local $3)
)
)
(drop
(get_local $x)
)
)
(set_global $stack_ptr
(get_local $2)
)
)
(func $spill-call_indirect (; 17 ;) (type $2)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(set_local $1
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $1)
(i32.const 16)
)
)
(block
(block
(set_local $2
(i32.const 123)
)
(set_local $3
(i32.const 456)
)
(set_local $4
(i32.const 789)
)
(i32.store
(get_local $1)
(get_local $x)
)
(call_indirect (type $ii)
(get_local $2)
(get_local $3)
(get_local $4)
)
)
(drop
(get_local $x)
)
)
(set_global $stack_ptr
(get_local $1)
)
)
(func $spill-call_import (; 18 ;) (type $2)
(local $x i32)
(local $1 i32)
(local $2 i32)
(set_local $1
(get_global $stack_ptr)
)
(set_global $stack_ptr
(i32.add
(get_local $1)
(i32.const 16)
)
)
(block
(block
(set_local $2
(i32.const 200)
)
(i32.store
(get_local $1)
(get_local $x)
)
(call $segfault
(get_local $2)
)
)
(drop
(get_local $x)
)
)
(set_global $stack_ptr
(get_local $1)
)
)
)