blob: dcd8b2cbfdc4bf1020cc8a48ab2ea5dc6e1c3a58 [file] [log] [blame] [edit]
(module
(type $none_=>_none (func))
(type $i32_=>_i32 (func (param i32) (result i32)))
(type $none_=>_i32 (func (result i32)))
(type $ii (func (param i32 i32)))
(type $i32_=>_none (func (param i32)))
(type $f64_=>_none (func (param f64)))
(import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32))
(import "env" "segfault" (func $segfault (param i32)))
(global $stack_ptr (mut i32) (global.get $STACKTOP$asm2wasm$import))
(memory $0 10)
(table $0 1 1 funcref)
(elem (i32.const 0))
(func $nothing
(nop)
)
(func $not-alive
(local $x i32)
(local.set $x
(i32.const 1)
)
(call $nothing)
)
(func $spill
(local $x i32)
(local $1 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(block
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $1)
)
)
(func $ignore-non-pointers
(local $x i32)
(local $y i64)
(local $z f32)
(local $w f64)
(local $4 i32)
(local.set $4
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $4)
(i32.const 16)
)
)
(block
(local.set $x
(i32.const 1)
)
(local.set $y
(i64.const 1)
)
(local.set $z
(f32.const 1)
)
(local.set $w
(f64.const 1)
)
(block
(i32.store
(local.get $4)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(local.get $y)
)
(drop
(local.get $z)
)
(drop
(local.get $w)
)
)
(global.set $stack_ptr
(local.get $4)
)
)
(func $spill4
(local $x i32)
(local $y i32)
(local $z i32)
(local $w i32)
(local $4 i32)
(local.set $4
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $4)
(i32.const 16)
)
)
(block
(local.set $x
(i32.const 1)
)
(local.set $y
(i32.const 1)
)
(local.set $z
(i32.const 1)
)
(local.set $w
(i32.const 1)
)
(block
(i32.store
(local.get $4)
(local.get $x)
)
(i32.store offset=4
(local.get $4)
(local.get $y)
)
(i32.store offset=8
(local.get $4)
(local.get $z)
)
(i32.store offset=12
(local.get $4)
(local.get $w)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(local.get $y)
)
(drop
(local.get $z)
)
(drop
(local.get $w)
)
)
(global.set $stack_ptr
(local.get $4)
)
)
(func $spill5
(local $x i32)
(local $y i32)
(local $z i32)
(local $w i32)
(local $a i32)
(local $5 i32)
(local.set $5
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $5)
(i32.const 32)
)
)
(block
(local.set $x
(i32.const 1)
)
(local.set $y
(i32.const 1)
)
(local.set $z
(i32.const 1)
)
(local.set $w
(i32.const 1)
)
(local.set $a
(i32.const 1)
)
(block
(i32.store
(local.get $5)
(local.get $x)
)
(i32.store offset=4
(local.get $5)
(local.get $y)
)
(i32.store offset=8
(local.get $5)
(local.get $z)
)
(i32.store offset=12
(local.get $5)
(local.get $w)
)
(i32.store offset=16
(local.get $5)
(local.get $a)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(local.get $y)
)
(drop
(local.get $z)
)
(drop
(local.get $w)
)
(drop
(local.get $a)
)
)
(global.set $stack_ptr
(local.get $5)
)
)
(func $some-alive
(local $x i32)
(local $y i32)
(local $2 i32)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $2)
(i32.const 16)
)
)
(block
(block
(i32.store
(local.get $2)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $2)
)
)
(func $spill-args (param $p i32) (param $q i32)
(local $x i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local.set $3
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $3)
(i32.const 16)
)
)
(block
(block
(local.set $4
(i32.const 1)
)
(local.set $5
(i32.const 2)
)
(i32.store offset=8
(local.get $3)
(local.get $x)
)
(call $spill-args
(local.get $4)
(local.get $5)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $3)
)
)
(func $spill-ret (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(local.set $4
(block (result i32)
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(if
(i32.const 1)
(block
(local.set $2
(i32.const 2)
)
(global.set $stack_ptr
(local.get $1)
)
(return
(local.get $2)
)
)
(block
(local.set $3
(i32.const 3)
)
(global.set $stack_ptr
(local.get $1)
)
(return
(local.get $3)
)
)
)
(i32.const 4)
)
)
(global.set $stack_ptr
(local.get $1)
)
(local.get $4)
)
(func $spill-unreachable (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(local.set $2
(block (result i32)
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(unreachable)
)
)
(global.set $stack_ptr
(local.get $1)
)
(local.get $2)
)
(func $spill-call-call0 (param $p i32) (result i32)
(unreachable)
)
(func $spill-call-call1 (param $p i32) (result i32)
(local $x i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $2)
(i32.const 16)
)
)
(local.set $5
(block (result i32)
(drop
(block (result i32)
(local.set $3
(block (result i32)
(local.set $4
(i32.const 1)
)
(i32.store offset=4
(local.get $2)
(local.get $x)
)
(call $spill-call-call1
(local.get $4)
)
)
)
(i32.store offset=4
(local.get $2)
(local.get $x)
)
(call $spill-call-call0
(local.get $3)
)
)
)
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $2)
)
(local.get $5)
)
(func $spill-call-ret (param $p i32) (result i32)
(local $x i32)
(drop
(call $spill-call-call0
(return
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-call (param $p i32) (result i32)
(local $x i32)
(drop
(return
(call $spill-call-call0
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-ret (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(local.set $3
(block (result i32)
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(block
(global.set $stack_ptr
(local.get $1)
)
(return
(block
(local.set $2
(i32.const 1)
)
(global.set $stack_ptr
(local.get $1)
)
(return
(local.get $2)
)
)
)
)
)
(i32.const 0)
)
)
(global.set $stack_ptr
(local.get $1)
)
(local.get $3)
)
(func $spill-call-othertype (param $y f64)
(local $x i32)
(local $2 i32)
(local $3 f64)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $2)
(i32.const 16)
)
)
(block
(block
(local.set $3
(f64.const 1)
)
(i32.store
(local.get $2)
(local.get $x)
)
(call $spill-call-othertype
(local.get $3)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $2)
)
)
(func $spill-call_indirect
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(block
(block
(local.set $2
(i32.const 123)
)
(local.set $3
(i32.const 456)
)
(local.set $4
(i32.const 789)
)
(i32.store
(local.get $1)
(local.get $x)
)
(call_indirect (type $ii)
(local.get $2)
(local.get $3)
(local.get $4)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $1)
)
)
(func $spill-call_import
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(block
(block
(local.set $2
(i32.const 200)
)
(i32.store
(local.get $1)
(local.get $x)
)
(call $segfault
(local.get $2)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $1)
)
)
)
(module
(type $none_=>_none (func))
(type $none_=>_i32 (func (result i32)))
(type $i32_=>_i32 (func (param i32) (result i32)))
(type $ii (func (param i32 i32)))
(type $i32_=>_none (func (param i32)))
(type $f64_=>_none (func (param f64)))
(import "env" "segfault" (func $segfault (param i32)))
(global $stack_ptr (mut i32) (i32.const 1716592))
(memory $0 10)
(table $0 1 1 funcref)
(elem (i32.const 0))
(export "stackSave" (func $stack_save))
(func $stack_save (result i32)
(global.get $stack_ptr)
)
(func $nothing
(nop)
)
(func $not-alive
(local $x i32)
(local.set $x
(i32.const 1)
)
(call $nothing)
)
(func $spill
(local $x i32)
(local $1 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(block
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $1)
)
)
(func $ignore-non-pointers
(local $x i32)
(local $y i64)
(local $z f32)
(local $w f64)
(local $4 i32)
(local.set $4
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $4)
(i32.const 16)
)
)
(block
(local.set $x
(i32.const 1)
)
(local.set $y
(i64.const 1)
)
(local.set $z
(f32.const 1)
)
(local.set $w
(f64.const 1)
)
(block
(i32.store
(local.get $4)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(local.get $y)
)
(drop
(local.get $z)
)
(drop
(local.get $w)
)
)
(global.set $stack_ptr
(local.get $4)
)
)
(func $spill4
(local $x i32)
(local $y i32)
(local $z i32)
(local $w i32)
(local $4 i32)
(local.set $4
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $4)
(i32.const 16)
)
)
(block
(local.set $x
(i32.const 1)
)
(local.set $y
(i32.const 1)
)
(local.set $z
(i32.const 1)
)
(local.set $w
(i32.const 1)
)
(block
(i32.store
(local.get $4)
(local.get $x)
)
(i32.store offset=4
(local.get $4)
(local.get $y)
)
(i32.store offset=8
(local.get $4)
(local.get $z)
)
(i32.store offset=12
(local.get $4)
(local.get $w)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(local.get $y)
)
(drop
(local.get $z)
)
(drop
(local.get $w)
)
)
(global.set $stack_ptr
(local.get $4)
)
)
(func $spill5
(local $x i32)
(local $y i32)
(local $z i32)
(local $w i32)
(local $a i32)
(local $5 i32)
(local.set $5
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $5)
(i32.const 32)
)
)
(block
(local.set $x
(i32.const 1)
)
(local.set $y
(i32.const 1)
)
(local.set $z
(i32.const 1)
)
(local.set $w
(i32.const 1)
)
(local.set $a
(i32.const 1)
)
(block
(i32.store
(local.get $5)
(local.get $x)
)
(i32.store offset=4
(local.get $5)
(local.get $y)
)
(i32.store offset=8
(local.get $5)
(local.get $z)
)
(i32.store offset=12
(local.get $5)
(local.get $w)
)
(i32.store offset=16
(local.get $5)
(local.get $a)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(local.get $y)
)
(drop
(local.get $z)
)
(drop
(local.get $w)
)
(drop
(local.get $a)
)
)
(global.set $stack_ptr
(local.get $5)
)
)
(func $some-alive
(local $x i32)
(local $y i32)
(local $2 i32)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $2)
(i32.const 16)
)
)
(block
(block
(i32.store
(local.get $2)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $2)
)
)
(func $spill-args (param $p i32) (param $q i32)
(local $x i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local.set $3
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $3)
(i32.const 16)
)
)
(block
(block
(local.set $4
(i32.const 1)
)
(local.set $5
(i32.const 2)
)
(i32.store offset=8
(local.get $3)
(local.get $x)
)
(call $spill-args
(local.get $4)
(local.get $5)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $3)
)
)
(func $spill-ret (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(local.set $4
(block (result i32)
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(if
(i32.const 1)
(block
(local.set $2
(i32.const 2)
)
(global.set $stack_ptr
(local.get $1)
)
(return
(local.get $2)
)
)
(block
(local.set $3
(i32.const 3)
)
(global.set $stack_ptr
(local.get $1)
)
(return
(local.get $3)
)
)
)
(i32.const 4)
)
)
(global.set $stack_ptr
(local.get $1)
)
(local.get $4)
)
(func $spill-unreachable (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(local.set $2
(block (result i32)
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(unreachable)
)
)
(global.set $stack_ptr
(local.get $1)
)
(local.get $2)
)
(func $spill-call-call0 (param $p i32) (result i32)
(unreachable)
)
(func $spill-call-call1 (param $p i32) (result i32)
(local $x i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $2)
(i32.const 16)
)
)
(local.set $5
(block (result i32)
(drop
(block (result i32)
(local.set $3
(block (result i32)
(local.set $4
(i32.const 1)
)
(i32.store offset=4
(local.get $2)
(local.get $x)
)
(call $spill-call-call1
(local.get $4)
)
)
)
(i32.store offset=4
(local.get $2)
(local.get $x)
)
(call $spill-call-call0
(local.get $3)
)
)
)
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $2)
)
(local.get $5)
)
(func $spill-call-ret (param $p i32) (result i32)
(local $x i32)
(drop
(call $spill-call-call0
(return
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-call (param $p i32) (result i32)
(local $x i32)
(drop
(return
(call $spill-call-call0
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-ret (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(local.set $3
(block (result i32)
(block
(i32.store
(local.get $1)
(local.get $x)
)
(call $nothing)
)
(drop
(local.get $x)
)
(drop
(block
(global.set $stack_ptr
(local.get $1)
)
(return
(block
(local.set $2
(i32.const 1)
)
(global.set $stack_ptr
(local.get $1)
)
(return
(local.get $2)
)
)
)
)
)
(i32.const 0)
)
)
(global.set $stack_ptr
(local.get $1)
)
(local.get $3)
)
(func $spill-call-othertype (param $y f64)
(local $x i32)
(local $2 i32)
(local $3 f64)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $2)
(i32.const 16)
)
)
(block
(block
(local.set $3
(f64.const 1)
)
(i32.store
(local.get $2)
(local.get $x)
)
(call $spill-call-othertype
(local.get $3)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $2)
)
)
(func $spill-call_indirect
(local $x i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(block
(block
(local.set $2
(i32.const 123)
)
(local.set $3
(i32.const 456)
)
(local.set $4
(i32.const 789)
)
(i32.store
(local.get $1)
(local.get $x)
)
(call_indirect (type $ii)
(local.get $2)
(local.get $3)
(local.get $4)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $1)
)
)
(func $spill-call_import
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.sub
(local.get $1)
(i32.const 16)
)
)
(block
(block
(local.set $2
(i32.const 200)
)
(i32.store
(local.get $1)
(local.get $x)
)
(call $segfault
(local.get $2)
)
)
(drop
(local.get $x)
)
)
(global.set $stack_ptr
(local.get $1)
)
)
)