mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-18 09:21:35 +00:00
optimize logical and/or, initial null checking in flows
This commit is contained in:
@ -15,55 +15,42 @@
|
||||
(local $2 i64)
|
||||
(local $3 i32)
|
||||
(local $4 i32)
|
||||
(local $5 i32)
|
||||
local.get $0
|
||||
i64.reinterpret_f64
|
||||
local.tee $2
|
||||
i32.wrap_i64
|
||||
local.set $3
|
||||
block (result i32)
|
||||
block (result i32)
|
||||
block (result i32)
|
||||
local.get $2
|
||||
i64.const 32
|
||||
i64.shr_u
|
||||
i32.wrap_i64
|
||||
local.tee $4
|
||||
i32.const 2147483647
|
||||
i32.and
|
||||
local.tee $5
|
||||
i32.const 2146435072
|
||||
i32.gt_s
|
||||
local.tee $1
|
||||
i32.eqz
|
||||
if
|
||||
local.get $5
|
||||
i32.const 2146435072
|
||||
i32.eq
|
||||
local.tee $1
|
||||
if
|
||||
local.get $3
|
||||
i32.const 0
|
||||
i32.ne
|
||||
local.set $1
|
||||
end
|
||||
end
|
||||
local.get $1
|
||||
i32.eqz
|
||||
end
|
||||
if
|
||||
i32.const 0
|
||||
local.set $1
|
||||
end
|
||||
local.get $1
|
||||
i32.eqz
|
||||
end
|
||||
if
|
||||
i32.const 0
|
||||
local.set $1
|
||||
end
|
||||
local.set $1
|
||||
i32.const 1
|
||||
i32.const 0
|
||||
local.get $2
|
||||
i64.const 32
|
||||
i64.shr_u
|
||||
i32.wrap_i64
|
||||
local.tee $3
|
||||
i32.const 2147483647
|
||||
i32.and
|
||||
local.tee $4
|
||||
i32.const 2146435072
|
||||
i32.gt_s
|
||||
if (result i32)
|
||||
i32.const 1
|
||||
else
|
||||
local.get $1
|
||||
i32.const 0
|
||||
i32.ne
|
||||
i32.const 0
|
||||
local.get $4
|
||||
i32.const 2146435072
|
||||
i32.eq
|
||||
select
|
||||
end
|
||||
select
|
||||
if (result i32)
|
||||
i32.const 1
|
||||
else
|
||||
i32.const 0
|
||||
end
|
||||
local.tee $1
|
||||
if
|
||||
local.get $0
|
||||
f64.const 1
|
||||
@ -79,25 +66,23 @@
|
||||
(local $4 i32)
|
||||
local.get $0
|
||||
i32.reinterpret_f32
|
||||
local.tee $3
|
||||
local.tee $2
|
||||
i32.const -2147483648
|
||||
i32.and
|
||||
local.set $4
|
||||
local.get $3
|
||||
local.get $2
|
||||
i32.const 23
|
||||
i32.shr_u
|
||||
i32.const 255
|
||||
i32.and
|
||||
local.tee $2
|
||||
local.tee $3
|
||||
i32.const 255
|
||||
i32.eq
|
||||
local.tee $1
|
||||
i32.eqz
|
||||
if
|
||||
if (result i32)
|
||||
i32.const 1
|
||||
else
|
||||
i32.const 0
|
||||
local.set $1
|
||||
end
|
||||
local.get $1
|
||||
if
|
||||
local.get $0
|
||||
local.get $0
|
||||
@ -105,7 +90,7 @@
|
||||
return
|
||||
end
|
||||
block $folding-inner0
|
||||
local.get $3
|
||||
local.get $2
|
||||
i32.const 1
|
||||
i32.shl
|
||||
local.tee $1
|
||||
@ -119,29 +104,29 @@
|
||||
local.get $0
|
||||
return
|
||||
end
|
||||
local.get $2
|
||||
local.get $3
|
||||
if (result i32)
|
||||
local.get $3
|
||||
local.get $2
|
||||
i32.const 8388607
|
||||
i32.and
|
||||
i32.const 8388608
|
||||
i32.or
|
||||
else
|
||||
local.get $3
|
||||
i32.const 1
|
||||
local.get $2
|
||||
i32.const 1
|
||||
local.get $3
|
||||
local.get $2
|
||||
i32.const 9
|
||||
i32.shl
|
||||
i32.clz
|
||||
i32.sub
|
||||
local.tee $2
|
||||
local.tee $3
|
||||
i32.sub
|
||||
i32.shl
|
||||
end
|
||||
local.set $1
|
||||
loop $continue|0
|
||||
local.get $2
|
||||
local.get $3
|
||||
i32.const 127
|
||||
i32.gt_s
|
||||
if
|
||||
@ -162,10 +147,10 @@
|
||||
i32.const 1
|
||||
i32.shl
|
||||
local.set $1
|
||||
local.get $2
|
||||
local.get $3
|
||||
i32.const 1
|
||||
i32.sub
|
||||
local.set $2
|
||||
local.set $3
|
||||
br $continue|0
|
||||
end
|
||||
end
|
||||
@ -187,27 +172,27 @@
|
||||
i32.const 8
|
||||
i32.shl
|
||||
i32.clz
|
||||
local.tee $3
|
||||
local.tee $1
|
||||
i32.shl
|
||||
local.set $1
|
||||
local.get $2
|
||||
local.set $2
|
||||
local.get $3
|
||||
local.get $1
|
||||
i32.sub
|
||||
local.tee $2
|
||||
local.tee $1
|
||||
i32.const 0
|
||||
i32.gt_s
|
||||
if (result i32)
|
||||
local.get $1
|
||||
local.get $2
|
||||
i32.const 8388608
|
||||
i32.sub
|
||||
local.get $2
|
||||
local.get $1
|
||||
i32.const 23
|
||||
i32.shl
|
||||
i32.or
|
||||
else
|
||||
local.get $1
|
||||
i32.const 1
|
||||
local.get $2
|
||||
i32.const 1
|
||||
local.get $1
|
||||
i32.sub
|
||||
i32.shr_u
|
||||
end
|
||||
@ -220,60 +205,30 @@
|
||||
local.get $0
|
||||
f32.mul
|
||||
)
|
||||
(func $~lib/math/NativeMathf.pow (; 2 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32)
|
||||
(local $1 i32)
|
||||
(local $2 i32)
|
||||
block (result i32)
|
||||
local.get $0
|
||||
i32.reinterpret_f32
|
||||
local.tee $2
|
||||
i32.const 2147483647
|
||||
i32.and
|
||||
i32.const 2139095040
|
||||
i32.gt_s
|
||||
local.tee $1
|
||||
i32.eqz
|
||||
if
|
||||
i32.const 0
|
||||
local.set $1
|
||||
end
|
||||
local.get $1
|
||||
end
|
||||
if
|
||||
local.get $0
|
||||
f32.const 1
|
||||
f32.add
|
||||
return
|
||||
end
|
||||
local.get $0
|
||||
)
|
||||
(func $~lib/math/NativeMath.mod (; 3 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64)
|
||||
(func $~lib/math/NativeMath.mod (; 2 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64)
|
||||
(local $1 i64)
|
||||
(local $2 i64)
|
||||
(local $3 i64)
|
||||
(local $4 i32)
|
||||
(local $5 i64)
|
||||
(local $4 i64)
|
||||
local.get $0
|
||||
i64.reinterpret_f64
|
||||
local.tee $1
|
||||
local.tee $2
|
||||
i64.const 63
|
||||
i64.shr_u
|
||||
local.set $5
|
||||
local.get $1
|
||||
local.set $4
|
||||
local.get $2
|
||||
i64.const 52
|
||||
i64.shr_u
|
||||
i64.const 2047
|
||||
i64.and
|
||||
local.tee $2
|
||||
local.tee $3
|
||||
i64.const 2047
|
||||
i64.eq
|
||||
local.tee $4
|
||||
i32.eqz
|
||||
if
|
||||
if (result i32)
|
||||
i32.const 1
|
||||
else
|
||||
i32.const 0
|
||||
local.set $4
|
||||
end
|
||||
local.get $4
|
||||
if
|
||||
local.get $0
|
||||
local.get $0
|
||||
@ -281,38 +236,38 @@
|
||||
return
|
||||
end
|
||||
block $folding-inner0
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 1
|
||||
i64.shl
|
||||
local.tee $3
|
||||
local.tee $1
|
||||
i64.const 9214364837600034816
|
||||
i64.le_u
|
||||
if
|
||||
local.get $3
|
||||
local.get $1
|
||||
i64.const 9214364837600034816
|
||||
i64.eq
|
||||
br_if $folding-inner0
|
||||
local.get $0
|
||||
return
|
||||
end
|
||||
local.get $2
|
||||
local.get $3
|
||||
i64.eqz
|
||||
if (result i64)
|
||||
local.get $1
|
||||
i64.const 0
|
||||
local.get $2
|
||||
local.get $1
|
||||
i64.const 0
|
||||
local.get $3
|
||||
local.get $2
|
||||
i64.const 12
|
||||
i64.shl
|
||||
i64.clz
|
||||
i64.sub
|
||||
local.tee $2
|
||||
local.tee $3
|
||||
i64.sub
|
||||
i64.const 1
|
||||
i64.add
|
||||
i64.shl
|
||||
else
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 4503599627370495
|
||||
i64.and
|
||||
i64.const 4503599627370496
|
||||
@ -320,7 +275,7 @@
|
||||
end
|
||||
local.set $1
|
||||
loop $continue|0
|
||||
local.get $2
|
||||
local.get $3
|
||||
i64.const 1023
|
||||
i64.gt_s
|
||||
if
|
||||
@ -341,10 +296,10 @@
|
||||
i64.const 1
|
||||
i64.shl
|
||||
local.set $1
|
||||
local.get $2
|
||||
local.get $3
|
||||
i64.const 1
|
||||
i64.sub
|
||||
local.set $2
|
||||
local.set $3
|
||||
br $continue|0
|
||||
end
|
||||
end
|
||||
@ -366,33 +321,33 @@
|
||||
i64.const 11
|
||||
i64.shl
|
||||
i64.clz
|
||||
local.tee $3
|
||||
local.tee $1
|
||||
i64.shl
|
||||
local.set $1
|
||||
local.get $2
|
||||
local.set $2
|
||||
local.get $3
|
||||
local.get $1
|
||||
i64.sub
|
||||
local.tee $2
|
||||
local.tee $1
|
||||
i64.const 0
|
||||
i64.gt_s
|
||||
if (result i64)
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 4503599627370496
|
||||
i64.sub
|
||||
local.get $2
|
||||
local.get $1
|
||||
i64.const 52
|
||||
i64.shl
|
||||
i64.or
|
||||
else
|
||||
local.get $1
|
||||
i64.const 0
|
||||
local.get $2
|
||||
i64.const 0
|
||||
local.get $1
|
||||
i64.sub
|
||||
i64.const 1
|
||||
i64.add
|
||||
i64.shr_u
|
||||
end
|
||||
local.get $5
|
||||
local.get $4
|
||||
i64.const 63
|
||||
i64.shl
|
||||
i64.or
|
||||
@ -403,10 +358,10 @@
|
||||
local.get $0
|
||||
f64.mul
|
||||
)
|
||||
(func $start:binary (; 4 ;) (type $FUNCSIG$v)
|
||||
(func $start:binary (; 3 ;) (type $FUNCSIG$v)
|
||||
(local $0 i32)
|
||||
(local $1 i64)
|
||||
(local $2 f32)
|
||||
(local $1 f32)
|
||||
(local $2 i64)
|
||||
(local $3 f64)
|
||||
(local $4 i32)
|
||||
global.get $binary/i
|
||||
@ -520,39 +475,39 @@
|
||||
i32.xor
|
||||
global.set $binary/i
|
||||
global.get $binary/I
|
||||
local.tee $1
|
||||
local.tee $2
|
||||
i64.const 1
|
||||
i64.rem_s
|
||||
drop
|
||||
local.get $1
|
||||
local.get $2
|
||||
f64.convert_i64_s
|
||||
call $~lib/math/NativeMath.pow
|
||||
drop
|
||||
global.get $binary/I
|
||||
local.tee $1
|
||||
local.tee $2
|
||||
i64.const 1
|
||||
i64.lt_s
|
||||
global.set $binary/b
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 1
|
||||
i64.gt_s
|
||||
global.set $binary/b
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 1
|
||||
i64.le_s
|
||||
global.set $binary/b
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 1
|
||||
i64.ge_s
|
||||
global.set $binary/b
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 1
|
||||
i64.eq
|
||||
local.tee $0
|
||||
global.set $binary/b
|
||||
local.get $0
|
||||
global.set $binary/b
|
||||
local.get $1
|
||||
local.get $2
|
||||
i64.const 1
|
||||
i64.add
|
||||
global.set $binary/I
|
||||
@ -632,34 +587,43 @@
|
||||
global.get $binary/f
|
||||
call $~lib/math/NativeMathf.mod
|
||||
drop
|
||||
block $__inlined_func$~lib/math/NativeMathf.pow
|
||||
i32.const 1
|
||||
i32.const 0
|
||||
global.get $binary/f
|
||||
i32.reinterpret_f32
|
||||
i32.const 2147483647
|
||||
i32.and
|
||||
i32.const 2139095040
|
||||
i32.gt_s
|
||||
select
|
||||
br_if $__inlined_func$~lib/math/NativeMathf.pow
|
||||
end
|
||||
global.get $binary/f
|
||||
call $~lib/math/NativeMathf.pow
|
||||
drop
|
||||
global.get $binary/f
|
||||
local.tee $2
|
||||
local.tee $1
|
||||
f32.const 1
|
||||
f32.lt
|
||||
global.set $binary/b
|
||||
local.get $2
|
||||
local.get $1
|
||||
f32.const 1
|
||||
f32.gt
|
||||
global.set $binary/b
|
||||
local.get $2
|
||||
local.get $1
|
||||
f32.const 1
|
||||
f32.le
|
||||
global.set $binary/b
|
||||
local.get $2
|
||||
local.get $1
|
||||
f32.const 1
|
||||
f32.ge
|
||||
global.set $binary/b
|
||||
local.get $2
|
||||
local.get $1
|
||||
f32.const 1
|
||||
f32.eq
|
||||
local.tee $0
|
||||
global.set $binary/b
|
||||
local.get $0
|
||||
global.set $binary/b
|
||||
local.get $2
|
||||
local.get $1
|
||||
f32.const 1
|
||||
f32.add
|
||||
global.set $binary/f
|
||||
@ -670,8 +634,23 @@
|
||||
global.get $binary/f
|
||||
call $~lib/math/NativeMathf.mod
|
||||
global.set $binary/f
|
||||
i32.const 1
|
||||
i32.const 0
|
||||
global.get $binary/f
|
||||
call $~lib/math/NativeMathf.pow
|
||||
local.tee $1
|
||||
i32.reinterpret_f32
|
||||
i32.const 2147483647
|
||||
i32.and
|
||||
i32.const 2139095040
|
||||
i32.gt_s
|
||||
select
|
||||
if
|
||||
local.get $1
|
||||
f32.const 1
|
||||
f32.add
|
||||
local.set $1
|
||||
end
|
||||
local.get $1
|
||||
global.set $binary/f
|
||||
global.get $binary/f
|
||||
f32.const 1
|
||||
@ -684,8 +663,23 @@
|
||||
global.get $binary/f
|
||||
call $~lib/math/NativeMathf.mod
|
||||
global.set $binary/f
|
||||
i32.const 1
|
||||
i32.const 0
|
||||
global.get $binary/f
|
||||
call $~lib/math/NativeMathf.pow
|
||||
local.tee $1
|
||||
i32.reinterpret_f32
|
||||
i32.const 2147483647
|
||||
i32.and
|
||||
i32.const 2139095040
|
||||
i32.gt_s
|
||||
select
|
||||
if
|
||||
local.get $1
|
||||
f32.const 1
|
||||
f32.add
|
||||
local.set $1
|
||||
end
|
||||
local.get $1
|
||||
global.set $binary/f
|
||||
global.get $binary/F
|
||||
call $~lib/math/NativeMath.mod
|
||||
@ -746,10 +740,10 @@
|
||||
call $~lib/math/NativeMath.pow
|
||||
global.set $binary/F
|
||||
)
|
||||
(func $start (; 5 ;) (type $FUNCSIG$v)
|
||||
(func $start (; 4 ;) (type $FUNCSIG$v)
|
||||
call $start:binary
|
||||
)
|
||||
(func $null (; 6 ;) (type $FUNCSIG$v)
|
||||
(func $null (; 5 ;) (type $FUNCSIG$v)
|
||||
nop
|
||||
)
|
||||
)
|
||||
|
Reference in New Issue
Block a user