Type-aware && and ||

This commit is contained in:
dcodeIO
2017-12-04 16:26:34 +01:00
parent c6af2d1454
commit 0e6bfa45f8
18 changed files with 1795 additions and 3 deletions

View File

@ -0,0 +1,518 @@
(module
(type $v (func))
(global $binary/i (mut i32) (i32.const 0))
(global $binary/b (mut i32) (i32.const 0))
(global $binary/I (mut i64) (i64.const 0))
(global $binary/f (mut f32) (f32.const 0))
(global $binary/F (mut f64) (f64.const 0))
(memory $0 1)
(data (i32.const 4) "\08")
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(drop
(i32.div_s
(get_global $binary/i)
(i32.const 1)
)
)
(drop
(i32.rem_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/b
(i32.lt_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/b
(i32.gt_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/b
(i32.le_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/b
(i32.ge_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/b
(i32.eq
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/b
(i32.eq
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.add
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.sub
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.mul
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.div_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.rem_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.shl
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.shr_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.shr_u
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.and
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.or
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.xor
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.add
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.sub
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.mul
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.rem_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.shl
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.shr_s
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.shr_u
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.and
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.or
(get_global $binary/i)
(i32.const 1)
)
)
(set_global $binary/i
(i32.xor
(get_global $binary/i)
(i32.const 1)
)
)
(drop
(i64.div_s
(get_global $binary/I)
(i64.const 1)
)
)
(drop
(i64.rem_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/b
(i64.lt_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/b
(i64.gt_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/b
(i64.le_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/b
(i64.ge_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/b
(i64.eq
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/b
(i64.eq
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.add
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.sub
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.mul
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.div_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.rem_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.shl
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.shr_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.shr_u
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.and
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.or
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.xor
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.add
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.sub
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.mul
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.rem_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.shl
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.shr_s
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.shr_u
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.and
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.or
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/I
(i64.xor
(get_global $binary/I)
(i64.const 1)
)
)
(set_global $binary/b
(f32.lt
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/b
(f32.gt
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/b
(f32.le
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/b
(f32.ge
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/b
(f32.eq
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/b
(f32.eq
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/f
(f32.add
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/f
(f32.sub
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/f
(f32.mul
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/f
(f32.div
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/f
(f32.add
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/f
(f32.sub
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/f
(f32.mul
(get_global $binary/f)
(f32.const 1)
)
)
(set_global $binary/b
(f64.lt
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/b
(f64.gt
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/b
(f64.le
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/b
(f64.ge
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/b
(f64.eq
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/b
(f64.eq
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/F
(f64.add
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/F
(f64.sub
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/F
(f64.mul
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/F
(f64.div
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/F
(f64.add
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/F
(f64.sub
(get_global $binary/F)
(f64.const 1)
)
)
(set_global $binary/F
(f64.mul
(get_global $binary/F)
(f64.const 1)
)
)
)
)

View File

@ -0,0 +1,253 @@
(module
(type $v (func))
(global $builtins/i (mut i32) (i32.const 0))
(global $builtins/I (mut i64) (i64.const 0))
(global $builtins/f (mut f32) (f32.const 0))
(global $builtins/b (mut i32) (i32.const 0))
(global $builtins/F (mut f64) (f64.const 0))
(global $builtins/s (mut i32) (i32.const 0))
(memory $0 1)
(data (i32.const 4) "\08")
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(local $0 f32)
(local $1 f64)
(set_global $builtins/i
(i32.const 31)
)
(set_global $builtins/i
(i32.const 0)
)
(set_global $builtins/i
(i32.const 1)
)
(set_global $builtins/i
(i32.const 2)
)
(set_global $builtins/i
(i32.const -2147483648)
)
(set_global $builtins/I
(i64.const 63)
)
(set_global $builtins/I
(i64.const 0)
)
(set_global $builtins/I
(i64.const 1)
)
(set_global $builtins/I
(i64.const 2)
)
(set_global $builtins/I
(i64.const -9223372036854775808)
)
(set_global $builtins/f
(f32.const nan:0x400000)
)
(set_global $builtins/f
(f32.const inf)
)
(set_global $builtins/f
(f32.const 1.25)
)
(set_global $builtins/f
(f32.const 2)
)
(set_global $builtins/f
(f32.const 1.25)
)
(set_global $builtins/f
(f32.const 1)
)
(set_global $builtins/f
(f32.const 2.5)
)
(set_global $builtins/f
(f32.const 1.25)
)
(set_global $builtins/f
(f32.const 1.25)
)
(set_global $builtins/f
(f32.const 1.1180340051651)
)
(set_global $builtins/f
(f32.const 1)
)
(set_global $builtins/b
(f32.ne
(tee_local $0
(f32.const 1.25)
)
(get_local $0)
)
)
(set_global $builtins/b
(select
(f32.ne
(f32.abs
(tee_local $0
(f32.const 1.25)
)
)
(f32.const inf)
)
(i32.const 0)
(f32.eq
(get_local $0)
(get_local $0)
)
)
)
(set_global $builtins/F
(f64.const nan:0x8000000000000)
)
(set_global $builtins/F
(f64.const inf)
)
(set_global $builtins/F
(f64.const 1.25)
)
(set_global $builtins/F
(f64.const 2)
)
(set_global $builtins/F
(f64.const 1.25)
)
(set_global $builtins/F
(f64.const 1)
)
(set_global $builtins/F
(f64.const 2.5)
)
(set_global $builtins/F
(f64.const 1.25)
)
(set_global $builtins/F
(f64.const 1)
)
(set_global $builtins/F
(f64.const 1.118033988749895)
)
(set_global $builtins/F
(f64.const 1)
)
(set_global $builtins/b
(f64.ne
(tee_local $1
(f64.const 1.25)
)
(get_local $1)
)
)
(set_global $builtins/b
(select
(f64.ne
(f64.abs
(tee_local $1
(f64.const 1.25)
)
)
(f64.const inf)
)
(i32.const 0)
(f64.eq
(get_local $1)
(get_local $1)
)
)
)
(drop
(current_memory)
)
(drop
(grow_memory
(i32.const 1)
)
)
(set_global $builtins/s
(current_memory)
)
(set_global $builtins/s
(grow_memory
(i32.const 1)
)
)
(set_global $builtins/i
(i32.load
(i32.const 4)
)
)
(i32.store
(i32.const 4)
(get_global $builtins/i)
)
(if
(f32.eq
(tee_local $0
(f32.const nan:0x400000)
)
(get_local $0)
)
(unreachable)
)
(if
(select
(f32.ne
(f32.abs
(tee_local $0
(f32.const nan:0x400000)
)
)
(f32.const inf)
)
(i32.const 0)
(f32.eq
(get_local $0)
(get_local $0)
)
)
(unreachable)
)
(if
(select
(f32.ne
(f32.abs
(tee_local $0
(f32.const inf)
)
)
(f32.const inf)
)
(i32.const 0)
(f32.eq
(get_local $0)
(get_local $0)
)
)
(unreachable)
)
(if
(i32.eqz
(select
(f64.ne
(f64.abs
(tee_local $1
(f64.const 0)
)
)
(f64.const inf)
)
(i32.const 0)
(f64.eq
(get_local $1)
(get_local $1)
)
)
)
(unreachable)
)
)
)

View File

@ -0,0 +1,43 @@
(module
(type $iv (func (param i32)))
(memory $0 1)
(data (i32.const 4) "\08")
(export "loopDo" (func $do/loopDo))
(export "loopDoInDo" (func $do/loopDoInDo))
(export "memory" (memory $0))
(func $do/loopDo (; 0 ;) (type $iv) (param $0 i32)
(loop $continue$1.1
(br_if $continue$1.1
(tee_local $0
(i32.sub
(get_local $0)
(i32.const 1)
)
)
)
)
)
(func $do/loopDoInDo (; 1 ;) (type $iv) (param $0 i32)
(loop $continue$1.1
(set_local $0
(i32.sub
(get_local $0)
(i32.const 1)
)
)
(loop $continue$1.2
(br_if $continue$1.2
(tee_local $0
(i32.sub
(get_local $0)
(i32.const 1)
)
)
)
)
(br_if $continue$1.1
(get_local $0)
)
)
)
)

View File

@ -0,0 +1,20 @@
(module
(type $iii (func (param i32 i32) (result i32)))
(memory $0 1)
(data (i32.const 4) "\08")
(export "add" (func $export/add))
(export "renamed_sub" (func $export/sub))
(export "memory" (memory $0))
(func $export/add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.add
(get_local $0)
(get_local $1)
)
)
(func $export/sub (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.sub
(get_local $0)
(get_local $1)
)
)
)

View File

@ -0,0 +1,25 @@
(module
(type $ii (func (param i32) (result i32)))
(memory $0 1)
(data (i32.const 4) "\08")
(export "ifThenElse" (func $if/ifThenElse))
(export "ifThen" (func $if/ifThen))
(export "ifThenElseBlock" (func $if/ifThenElse))
(export "memory" (memory $0))
(func $if/ifThenElse (; 0 ;) (type $ii) (param $0 i32) (result i32)
(if (result i32)
(get_local $0)
(i32.const 1)
(i32.const 0)
)
)
(func $if/ifThen (; 1 ;) (type $ii) (param $0 i32) (result i32)
(if
(get_local $0)
(return
(i32.const 1)
)
)
(i32.const 0)
)
)

View File

@ -0,0 +1,36 @@
(module
(type $iii (func (param i32 i32) (result i32)))
(type $v (func))
(global $export/a (mut i32) (i32.const 1))
(global $export/b (mut i32) (i32.const 2))
(memory $0 1)
(data (i32.const 4) "\08")
(export "memory" (memory $0))
(start $start)
(func $export/add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.add
(get_local $0)
(get_local $1)
)
)
(func $export/sub (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.sub
(get_local $0)
(get_local $1)
)
)
(func $start (; 2 ;) (type $v)
(drop
(i32.add
(call $export/add
(get_global $export/a)
(get_global $export/b)
)
(call $export/sub
(get_global $export/b)
(get_global $export/a)
)
)
)
)
)

View File

@ -0,0 +1,10 @@
(module
(type $v (func))
(memory $0 1)
(data (i32.const 4) "\08")
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(nop)
)
)

View File

@ -0,0 +1,75 @@
(module
(type $v (func))
(memory $0 1)
(data (i32.const 4) "\08")
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(local $0 i32)
(local $1 f64)
(if
(tee_local $0
(i32.const 0)
)
(unreachable)
)
(if
(f64.ne
(tee_local $1
(f64.const 0)
)
(f64.const 0)
)
(unreachable)
)
(if
(i32.eqz
(tee_local $0
(i32.const 1)
)
)
(unreachable)
)
(if
(f64.eq
(tee_local $1
(f64.const 1)
)
(f64.const 0)
)
(unreachable)
)
(if
(i32.eqz
(if (result i32)
(tee_local $0
(i32.const 1)
)
(tee_local $0
(i32.const 2)
)
(get_local $0)
)
)
(unreachable)
)
(if
(f64.eq
(if (result f64)
(f64.ne
(tee_local $1
(f64.const 1)
)
(f64.const 0)
)
(tee_local $1
(f64.const 2)
)
(get_local $1)
)
(f64.const 0)
)
(unreachable)
)
)
)

View File

@ -0,0 +1,7 @@
0 && unreachable();
0.0 && unreachable();
1 || unreachable();
1.0 || unreachable();
1 && 2 || unreachable();
1.0 && 2.0 || unreachable();

123
tests/compiler/logical.wast Normal file
View File

@ -0,0 +1,123 @@
(module
(type $v (func))
(memory $0 1)
(data (i32.const 4) "\08\00\00\00")
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(local $0 i32)
(local $1 f64)
(local $2 i32)
(local $3 f64)
(local $4 i32)
(local $5 i32)
(local $6 f64)
(local $7 f64)
(drop
(if (result i32)
(tee_local $0
(i32.const 0)
)
(unreachable)
(get_local $0)
)
)
(drop
(if (result f64)
(f64.ne
(tee_local $1
(f64.const 0)
)
(f64.const 0)
)
(unreachable)
(get_local $1)
)
)
(drop
(if (result i32)
(tee_local $2
(i32.const 1)
)
(get_local $2)
(unreachable)
)
)
(drop
(if (result f64)
(f64.ne
(tee_local $3
(f64.const 1)
)
(f64.const 0)
)
(get_local $3)
(unreachable)
)
)
(drop
(if (result i32)
(tee_local $5
(if (result i32)
(tee_local $4
(i32.const 1)
)
(i32.const 2)
(get_local $4)
)
)
(get_local $5)
(unreachable)
)
)
(drop
(if (result f64)
(f64.ne
(tee_local $7
(if (result f64)
(f64.ne
(tee_local $6
(f64.const 1)
)
(f64.const 0)
)
(f64.const 2)
(get_local $6)
)
)
(f64.const 0)
)
(get_local $7)
(unreachable)
)
)
)
)
(;
[program.elements]
clz
ctz
popcnt
rotl
rotr
abs
ceil
copysign
floor
max
min
nearest
sqrt
trunc
current_memory
grow_memory
unreachable
isNaN
isFinite
assert
sizeof
load
store
[program.exports]
;)

View File

@ -0,0 +1,38 @@
(module
(type $iii (func (param i32 i32) (result i32)))
(type $v (func))
(memory $0 1)
(data (i32.const 4) "\08")
(export "add" (func $export/add))
(export "renamed_sub" (func $export/sub))
(export "renamed_add" (func $export/add))
(export "rerenamed_sub" (func $export/sub))
(export "memory" (memory $0))
(start $start)
(func $export/add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.add
(get_local $0)
(get_local $1)
)
)
(func $export/sub (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.sub
(get_local $0)
(get_local $1)
)
)
(func $start (; 2 ;) (type $v)
(drop
(i32.add
(call $export/add
(i32.const 1)
(i32.const 2)
)
(call $export/sub
(i32.const 3)
(i32.const 4)
)
)
)
)
)

View File

@ -0,0 +1,122 @@
(module
(type $ii (func (param i32) (result i32)))
(memory $0 1)
(data (i32.const 4) "\08")
(export "doSwitch" (func $switch/doSwitch))
(export "doSwitchDefaultFirst" (func $switch/doSwitchDefaultFirst))
(export "doSwitchDefaultOmitted" (func $switch/doSwitchDefaultOmitted))
(export "memory" (memory $0))
(func $switch/doSwitch (; 0 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(block $case4$1.1
(block $case2$1.1
(if
(i32.ne
(tee_local $1
(get_local $0)
)
(i32.const 1)
)
(block
(br_if $case2$1.1
(i32.eqz
(get_local $1)
)
)
(br_if $case4$1.1
(i32.eq
(get_local $1)
(i32.const 2)
)
)
(br_if $case4$1.1
(i32.eq
(get_local $1)
(i32.const 3)
)
)
(br $case2$1.1)
)
)
(return
(i32.const 1)
)
)
(return
(i32.const 0)
)
)
(i32.const 23)
)
(func $switch/doSwitchDefaultFirst (; 1 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(block $case3$1.1
(if
(i32.ne
(tee_local $1
(get_local $0)
)
(i32.const 1)
)
(block
(br_if $case3$1.1
(i32.eq
(get_local $1)
(i32.const 2)
)
)
(br_if $case3$1.1
(i32.eq
(get_local $1)
(i32.const 3)
)
)
(return
(i32.const 0)
)
)
)
(return
(i32.const 1)
)
)
(i32.const 23)
)
(func $switch/doSwitchDefaultOmitted (; 2 ;) (type $ii) (param $0 i32) (result i32)
(local $1 i32)
(block $break$1.1
(block $case2$1.1
(if
(i32.ne
(tee_local $1
(get_local $0)
)
(i32.const 1)
)
(block
(br_if $case2$1.1
(i32.eq
(get_local $1)
(i32.const 2)
)
)
(br_if $case2$1.1
(i32.eq
(get_local $1)
(i32.const 3)
)
)
(br $break$1.1)
)
)
(return
(i32.const 1)
)
)
(return
(i32.const 23)
)
)
(i32.const 0)
)
)

View File

@ -0,0 +1,19 @@
(module
(type $v (func))
(global $ternary/a (mut i32) (i32.const 0))
(memory $0 1)
(data (i32.const 4) "\08")
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(set_global $ternary/a
(i32.const 1)
)
(set_global $ternary/a
(i32.const 1)
)
(set_global $ternary/a
(i32.const 1)
)
)
)

View File

@ -0,0 +1,407 @@
(module
(type $v (func))
(global $unary/i (mut i32) (i32.const 0))
(global $unary/I (mut i64) (i64.const 0))
(global $unary/f (mut f32) (f32.const 0))
(global $unary/F (mut f64) (f64.const 0))
(memory $0 1)
(data (i32.const 4) "\08")
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(local $0 i32)
(local $1 i64)
(local $2 f32)
(local $3 f64)
(set_global $unary/i
(i32.add
(get_global $unary/i)
(i32.const 1)
)
)
(set_global $unary/i
(i32.sub
(get_global $unary/i)
(i32.const 1)
)
)
(set_global $unary/i
(i32.add
(get_global $unary/i)
(i32.const 1)
)
)
(set_global $unary/i
(i32.sub
(get_global $unary/i)
(i32.const 1)
)
)
(set_global $unary/i
(i32.const 1)
)
(set_global $unary/i
(i32.const -1)
)
(set_global $unary/i
(i32.const 0)
)
(set_global $unary/i
(i32.const -2)
)
(set_global $unary/i
(i32.sub
(i32.const 0)
(get_global $unary/i)
)
)
(set_global $unary/i
(i32.eqz
(get_global $unary/i)
)
)
(set_global $unary/i
(i32.xor
(get_global $unary/i)
(i32.const -1)
)
)
(set_global $unary/i
(block (result i32)
(set_global $unary/i
(i32.add
(get_global $unary/i)
(i32.const 1)
)
)
(get_global $unary/i)
)
)
(set_global $unary/i
(block (result i32)
(set_global $unary/i
(i32.sub
(get_global $unary/i)
(i32.const 1)
)
)
(get_global $unary/i)
)
)
(set_global $unary/i
(block (result i32)
(set_global $unary/i
(i32.add
(tee_local $0
(get_global $unary/i)
)
(i32.const 1)
)
)
(get_local $0)
)
)
(set_global $unary/i
(block (result i32)
(set_global $unary/i
(i32.sub
(tee_local $0
(get_global $unary/i)
)
(i32.const 1)
)
)
(get_local $0)
)
)
(set_global $unary/I
(i64.add
(get_global $unary/I)
(i64.const 1)
)
)
(set_global $unary/I
(i64.sub
(get_global $unary/I)
(i64.const 1)
)
)
(set_global $unary/I
(i64.add
(get_global $unary/I)
(i64.const 1)
)
)
(set_global $unary/I
(i64.sub
(get_global $unary/I)
(i64.const 1)
)
)
(set_global $unary/I
(i64.const 1)
)
(set_global $unary/I
(i64.const -1)
)
(set_global $unary/I
(i64.const 0)
)
(set_global $unary/I
(i64.const -2)
)
(set_global $unary/I
(i64.sub
(i64.const 0)
(get_global $unary/I)
)
)
(set_global $unary/I
(i64.extend_s/i32
(i64.eqz
(get_global $unary/I)
)
)
)
(set_global $unary/I
(i64.xor
(get_global $unary/I)
(i64.const -1)
)
)
(set_global $unary/I
(block (result i64)
(set_global $unary/I
(i64.add
(get_global $unary/I)
(i64.const 1)
)
)
(get_global $unary/I)
)
)
(set_global $unary/I
(block (result i64)
(set_global $unary/I
(i64.sub
(get_global $unary/I)
(i64.const 1)
)
)
(get_global $unary/I)
)
)
(set_global $unary/I
(block (result i64)
(set_global $unary/I
(i64.add
(tee_local $1
(get_global $unary/I)
)
(i64.const 1)
)
)
(get_local $1)
)
)
(set_global $unary/I
(block (result i64)
(set_global $unary/I
(i64.sub
(tee_local $1
(get_global $unary/I)
)
(i64.const 1)
)
)
(get_local $1)
)
)
(set_global $unary/f
(f32.add
(get_global $unary/f)
(f32.const 1)
)
)
(set_global $unary/f
(f32.sub
(get_global $unary/f)
(f32.const 1)
)
)
(set_global $unary/f
(f32.add
(get_global $unary/f)
(f32.const 1)
)
)
(set_global $unary/f
(f32.sub
(get_global $unary/f)
(f32.const 1)
)
)
(set_global $unary/f
(f32.const 1.25)
)
(set_global $unary/f
(f32.const -1.25)
)
(set_global $unary/i
(i32.const 0)
)
(set_global $unary/f
(f32.neg
(get_global $unary/f)
)
)
(set_global $unary/i
(f32.eq
(get_global $unary/f)
(f32.const 0)
)
)
(set_global $unary/f
(block (result f32)
(set_global $unary/f
(f32.add
(get_global $unary/f)
(f32.const 1)
)
)
(get_global $unary/f)
)
)
(set_global $unary/f
(block (result f32)
(set_global $unary/f
(f32.sub
(get_global $unary/f)
(f32.const 1)
)
)
(get_global $unary/f)
)
)
(set_global $unary/f
(block (result f32)
(set_global $unary/f
(f32.add
(tee_local $2
(get_global $unary/f)
)
(f32.const 1)
)
)
(get_local $2)
)
)
(set_global $unary/f
(block (result f32)
(set_global $unary/f
(f32.sub
(tee_local $2
(get_global $unary/f)
)
(f32.const 1)
)
)
(get_local $2)
)
)
(set_global $unary/F
(f64.add
(get_global $unary/F)
(f64.const 1)
)
)
(set_global $unary/F
(f64.sub
(get_global $unary/F)
(f64.const 1)
)
)
(set_global $unary/F
(f64.add
(get_global $unary/F)
(f64.const 1)
)
)
(set_global $unary/F
(f64.sub
(get_global $unary/F)
(f64.const 1)
)
)
(set_global $unary/F
(f64.const 1.25)
)
(set_global $unary/F
(f64.const -1.25)
)
(set_global $unary/I
(i64.const 0)
)
(set_global $unary/F
(f64.neg
(get_global $unary/F)
)
)
(set_global $unary/I
(i64.extend_s/i32
(f64.eq
(get_global $unary/F)
(f64.const 0)
)
)
)
(set_global $unary/F
(block (result f64)
(set_global $unary/F
(f64.add
(get_global $unary/F)
(f64.const 1)
)
)
(get_global $unary/F)
)
)
(set_global $unary/F
(block (result f64)
(set_global $unary/F
(f64.sub
(get_global $unary/F)
(f64.const 1)
)
)
(get_global $unary/F)
)
)
(set_global $unary/F
(block (result f64)
(set_global $unary/F
(f64.add
(tee_local $3
(get_global $unary/F)
)
(f64.const 1)
)
)
(get_local $3)
)
)
(set_global $unary/F
(block (result f64)
(set_global $unary/F
(f64.sub
(tee_local $3
(get_global $unary/F)
)
(f64.const 1)
)
)
(get_local $3)
)
)
)
)

View File

@ -0,0 +1,54 @@
(module
(type $iv (func (param i32)))
(memory $0 1)
(data (i32.const 4) "\08")
(export "loopWhile" (func $while/loopWhile))
(export "loopWhileInWhile" (func $while/loopWhileInWhile))
(export "memory" (memory $0))
(func $while/loopWhile (; 0 ;) (type $iv) (param $0 i32)
(loop $continue$1.1
(if
(get_local $0)
(block
(set_local $0
(i32.sub
(get_local $0)
(i32.const 1)
)
)
(br $continue$1.1)
)
)
)
)
(func $while/loopWhileInWhile (; 1 ;) (type $iv) (param $0 i32)
(loop $continue$1.1
(if
(get_local $0)
(block
(set_local $0
(i32.sub
(get_local $0)
(i32.const 1)
)
)
(loop $continue$1.2
(if
(get_local $0)
(block
(set_local $0
(i32.sub
(get_local $0)
(i32.const 1)
)
)
(br $continue$1.2)
)
)
)
(br $continue$1.1)
)
)
)
)
)