blob: 8ad136ee3079f33cf00fb412c9f514ff13b036a8 [file] [log] [blame] [edit]
(module
(type $ii (func (param i32 i32)))
(type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$v (func))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$vd (func (param f64)))
(import "env" "STACKTOP" (global $STACKTOP$asm2wasm$import i32))
(import "env" "segfault" (func $segfault (param i32)))
(memory $0 10)
(table $0 1 1 funcref)
(global $stack_ptr (mut i32) (global.get $STACKTOP$asm2wasm$import))
(func $nothing (; 1 ;) (type $FUNCSIG$v)
(nop)
)
(func $not-alive (; 2 ;) (type $FUNCSIG$v)
(local $x i32)
(local.set $x
(i32.const 1)
)
(call $nothing)
)
(func $spill (; 3 ;) (type $FUNCSIG$v)
(local $x i32)
(local $1 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 4 ;) (type $FUNCSIG$v)
(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.add
(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 (; 5 ;) (type $FUNCSIG$v)
(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.add
(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 (; 6 ;) (type $FUNCSIG$v)
(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.add
(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 (; 7 ;) (type $FUNCSIG$v)
(local $x i32)
(local $y i32)
(local $2 i32)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 8 ;) (type $ii) (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.add
(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 (; 9 ;) (type $FUNCSIG$i) (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.add
(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 (; 10 ;) (type $FUNCSIG$i) (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 11 ;) (type $FUNCSIG$ii) (param $p i32) (result i32)
(unreachable)
)
(func $spill-call-call1 (; 12 ;) (type $FUNCSIG$ii) (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.add
(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 (; 13 ;) (type $FUNCSIG$ii) (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 $FUNCSIG$ii) (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 $FUNCSIG$i) (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.add
(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 (; 16 ;) (type $FUNCSIG$vd) (param $y f64)
(local $x i32)
(local $2 i32)
(local $3 f64)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 17 ;) (type $FUNCSIG$v)
(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.add
(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 (; 18 ;) (type $FUNCSIG$v)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 $ii (func (param i32 i32)))
(type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$v (func))
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$vd (func (param f64)))
(import "env" "segfault" (func $segfault (param i32)))
(memory $0 10)
(table $0 1 1 funcref)
(global $stack_ptr (mut i32) (i32.const 1716592))
(export "stackSave" (func $stack_save))
(func $stack_save (; 1 ;) (type $FUNCSIG$i) (result i32)
(global.get $stack_ptr)
)
(func $nothing (; 2 ;) (type $FUNCSIG$v)
(nop)
)
(func $not-alive (; 3 ;) (type $FUNCSIG$v)
(local $x i32)
(local.set $x
(i32.const 1)
)
(call $nothing)
)
(func $spill (; 4 ;) (type $FUNCSIG$v)
(local $x i32)
(local $1 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 5 ;) (type $FUNCSIG$v)
(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.add
(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 (; 6 ;) (type $FUNCSIG$v)
(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.add
(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 (; 7 ;) (type $FUNCSIG$v)
(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.add
(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 (; 8 ;) (type $FUNCSIG$v)
(local $x i32)
(local $y i32)
(local $2 i32)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 9 ;) (type $ii) (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.add
(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 (; 10 ;) (type $FUNCSIG$i) (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.add
(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 (; 11 ;) (type $FUNCSIG$i) (result i32)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 12 ;) (type $FUNCSIG$ii) (param $p i32) (result i32)
(unreachable)
)
(func $spill-call-call1 (; 13 ;) (type $FUNCSIG$ii) (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.add
(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 (; 14 ;) (type $FUNCSIG$ii) (param $p i32) (result i32)
(local $x i32)
(drop
(call $spill-call-call0
(return
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-call (; 15 ;) (type $FUNCSIG$ii) (param $p i32) (result i32)
(local $x i32)
(drop
(return
(call $spill-call-call0
(i32.const 1)
)
)
)
(i32.const 0)
)
(func $spill-ret-ret (; 16 ;) (type $FUNCSIG$i) (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.add
(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 (; 17 ;) (type $FUNCSIG$vd) (param $y f64)
(local $x i32)
(local $2 i32)
(local $3 f64)
(local.set $2
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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 (; 18 ;) (type $FUNCSIG$v)
(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.add
(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 (; 19 ;) (type $FUNCSIG$v)
(local $x i32)
(local $1 i32)
(local $2 i32)
(local.set $1
(global.get $stack_ptr)
)
(global.set $stack_ptr
(i32.add
(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)
)
)
)