mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-06-17 08:51:34 +00:00
reinterpret and select builtins
This commit is contained in:
@ -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
|
||||
|
@ -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
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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]
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -158,12 +158,14 @@
|
||||
current_memory
|
||||
grow_memory
|
||||
unreachable
|
||||
load
|
||||
store
|
||||
reinterpret
|
||||
select
|
||||
sizeof
|
||||
isNaN
|
||||
isFinite
|
||||
assert
|
||||
sizeof
|
||||
load
|
||||
store
|
||||
[program.exports]
|
||||
|
||||
;)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -52,12 +52,14 @@
|
||||
current_memory
|
||||
grow_memory
|
||||
unreachable
|
||||
load
|
||||
store
|
||||
reinterpret
|
||||
select
|
||||
sizeof
|
||||
isNaN
|
||||
isFinite
|
||||
assert
|
||||
sizeof
|
||||
load
|
||||
store
|
||||
ternary/a
|
||||
[program.exports]
|
||||
|
||||
|
@ -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
|
||||
|
@ -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]
|
||||
|
Reference in New Issue
Block a user