reinterpret and select builtins

This commit is contained in:
dcodeIO
2017-12-04 22:47:08 +01:00
parent df3e34f2aa
commit b7030d4dea
19 changed files with 374 additions and 140 deletions

View File

@ -835,12 +835,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
binary/b
binary/i
binary/I

View File

@ -159,22 +159,6 @@
)
)
)
(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 8)
@ -211,6 +195,46 @@
(i32.const 8)
(get_global $builtins/F)
)
(set_global $builtins/i
(i32.const 1067450368)
)
(set_global $builtins/f
(f32.const 3.5032461608120427e-44)
)
(set_global $builtins/I
(i64.const 4608308318706860032)
)
(set_global $builtins/F
(f64.const 1.24e-322)
)
(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.const 10)
)
(set_global $builtins/I
(i64.const 200)
)
(set_global $builtins/f
(f32.const 1.25)
)
(set_global $builtins/F
(f64.const 25)
)
(if
(f32.eq
(tee_local $0

View File

@ -1,5 +1,7 @@
let b: bool;
// integer builtins
let i: i32;
clz<i32>(1);
@ -28,6 +30,8 @@ I = popcnt<i64>(1);
I = rotl<i64>(1, 1);
I = rotr<i64>(1, 1);
// floating point builtins
let f: f32;
<f32>NaN;
@ -39,7 +43,6 @@ floor<f32>(1.25);
max<f32>(1.25, 2.5);
min<f32>(1.25, 2.5);
nearest<f32>(1.25);
// reinterpret
sqrt<f32>(1.25);
trunc<f32>(1.25);
isNaN<f32>(1.25);
@ -54,7 +57,6 @@ f = floor<f32>(1.25);
f = max<f32>(1.25, 2.5);
f = min<f32>(1.25, 2.5);
f = nearest<f32>(1.25);
// reinterpret
f = sqrt<f32>(1.25);
f = trunc<f32>(1.25);
b = isNaN<f32>(1.25);
@ -73,7 +75,6 @@ floor<f64>(1.25);
max<f64>(1.25, 2.5);
min<f64>(1.25, 2.5);
nearest<f64>(1.25);
// reinterpret
sqrt<f64>(1.25);
trunc<f64>(1.25);
isNaN<f64>(1.25);
@ -88,12 +89,36 @@ F = floor<f64>(1.25);
F = max<f64>(1.25, 2.5);
F = min<f64>(1.25, 2.5);
F = nearest<f64>(1.25);
// reinterpret
F = sqrt<f64>(1.25);
F = trunc<f64>(1.25);
b = isNaN<f64>(1.25);
b = isFinite<f64>(1.25);
// load and store builtins
i = load<i32>(8);
store<i32>(8, i);
I = load<i64>(8);
store<i64>(8, I);
f = load<f32>(8);
store<f32>(8, f);
F = load<f64>(8);
store<f64>(8, F);
// reinterpretation builtins
reinterpret<f32,i32>(1.25);
reinterpret<i32,f32>(25);
reinterpret<f64,i64>(1.25);
reinterpret<i64,f64>(25);
i = reinterpret<f32,i32>(1.25);
f = reinterpret<i32,f32>(25);
I = reinterpret<f64,i64>(1.25);
F = reinterpret<i64,f64>(25);
// host builtins
let s: usize;
current_memory();
@ -101,8 +126,23 @@ grow_memory(1);
s = current_memory();
s = grow_memory(1);
// other builtins
select<i32>(10, 20, true);
select<i64>(100, 200, false);
select<f32>(1.25, 2.5, true);
select<f64>(12.5, 25.0, false);
i = select<i32>(10, 20, true);
I = select<i64>(100, 200, false);
f = select<f32>(1.25, 2.5, true);
F = select<f64>(12.5, 25.0, false);
if (0) unreachable();
// AS specific builtins
assert(true);
sizeof<u8>();
@ -119,15 +159,6 @@ sizeof<isize>();
sizeof<f32>();
sizeof<f64>();
i = load<i32>(8);
store<i32>(8, i);
I = load<i64>(8);
store<i64>(8, I);
f = load<f32>(8);
store<f32>(8, f);
F = load<f64>(8);
store<f64>(8, F);
if (NaN == NaN)
unreachable();
if (!isNaN<f32>(NaN))

View File

@ -453,6 +453,82 @@
)
)
)
(set_global $builtins/i
(i32.load
(i32.const 8)
)
)
(i32.store
(i32.const 8)
(get_global $builtins/i)
)
(set_global $builtins/I
(i64.load
(i32.const 8)
)
)
(i64.store
(i32.const 8)
(get_global $builtins/I)
)
(set_global $builtins/f
(f32.load
(i32.const 8)
)
)
(f32.store
(i32.const 8)
(get_global $builtins/f)
)
(set_global $builtins/F
(f64.load
(i32.const 8)
)
)
(f64.store
(i32.const 8)
(get_global $builtins/F)
)
(drop
(i32.reinterpret/f32
(f32.const 1.25)
)
)
(drop
(f32.reinterpret/i32
(i32.const 25)
)
)
(drop
(i64.reinterpret/f64
(f64.const 1.25)
)
)
(drop
(f64.reinterpret/i64
(i64.const 25)
)
)
(set_global $builtins/i
(i32.reinterpret/f32
(f32.const 1.25)
)
)
(set_global $builtins/f
(f32.reinterpret/i32
(i32.const 25)
)
)
(set_global $builtins/I
(i64.reinterpret/f64
(f64.const 1.25)
)
)
(set_global $builtins/F
(f64.reinterpret/i64
(i64.const 25)
)
)
(drop
(current_memory)
)
@ -469,6 +545,62 @@
(i32.const 1)
)
)
(drop
(select
(i32.const 10)
(i32.const 20)
(i32.const 1)
)
)
(drop
(select
(i64.const 100)
(i64.const 200)
(i32.const 0)
)
)
(drop
(select
(f32.const 1.25)
(f32.const 2.5)
(i32.const 1)
)
)
(drop
(select
(f64.const 12.5)
(f64.const 25)
(i32.const 0)
)
)
(set_global $builtins/i
(select
(i32.const 10)
(i32.const 20)
(i32.const 1)
)
)
(set_global $builtins/I
(select
(i64.const 100)
(i64.const 200)
(i32.const 0)
)
)
(set_global $builtins/f
(select
(f32.const 1.25)
(f32.const 2.5)
(i32.const 1)
)
)
(set_global $builtins/F
(select
(f64.const 12.5)
(f64.const 25)
(i32.const 0)
)
)
(if
(i32.const 0)
(unreachable)
@ -518,42 +650,6 @@
(drop
(i32.const 8)
)
(set_global $builtins/i
(i32.load
(i32.const 8)
)
)
(i32.store
(i32.const 8)
(get_global $builtins/i)
)
(set_global $builtins/I
(i64.load
(i32.const 8)
)
)
(i64.store
(i32.const 8)
(get_global $builtins/I)
)
(set_global $builtins/f
(f32.load
(i32.const 8)
)
)
(f32.store
(i32.const 8)
(get_global $builtins/f)
)
(set_global $builtins/F
(f64.load
(i32.const 8)
)
)
(f64.store
(i32.const 8)
(get_global $builtins/F)
)
(if
(f64.eq
(f64.const nan:0x8000000000000)
@ -649,12 +745,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
builtins/b
builtins/i
builtins/I

View File

@ -25,12 +25,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
declare/external
[program.exports]
declare/external

View File

@ -74,12 +74,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
do/loopDo
do/loopDoInDo
[program.exports]

View File

@ -43,12 +43,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
export/add
export/sub
export/a

View File

@ -65,12 +65,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
if/ifThenElse
if/ifThen
if/ifThenElseBlock

View File

@ -57,12 +57,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
export/add
export/sub
export/a

View File

@ -158,12 +158,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
[program.exports]
;)

View File

@ -270,12 +270,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
logical/i
logical/I
logical/f

View File

@ -59,12 +59,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
export/add
export/sub
export/a

View File

@ -164,12 +164,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
switch/doSwitch
switch/doSwitchDefaultFirst
switch/doSwitchDefaultOmitted

View File

@ -52,12 +52,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
ternary/a
[program.exports]

View File

@ -652,12 +652,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
unary/i
unary/I
unary/f

View File

@ -83,12 +83,14 @@
current_memory
grow_memory
unreachable
load
store
reinterpret
select
sizeof
isNaN
isFinite
assert
sizeof
load
store
while/loopWhile
while/loopWhileInWhile
[program.exports]