A first take on imported built-ins

This commit is contained in:
dcodeIO
2017-12-12 01:35:48 +01:00
parent 09cbad6ede
commit ad1fbcf5b2
29 changed files with 127 additions and 37 deletions

View File

@ -41,6 +41,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
[program.exports]
;)

View File

@ -844,6 +844,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
binary/b
binary/i
binary/I

View File

@ -1,6 +1,6 @@
let b: bool;
// integer builtins
// integers
let i: i32;
@ -40,7 +40,7 @@ I = abs<i64>(-42); assert(I == 42);
I = max<i64>(1, 2); assert(I == 2);
I = min<i64>(1, 2); assert(i == 1);
// floating point builtins
// floats
let f: f32;
@ -104,7 +104,7 @@ F = trunc<f64>(1.25);
b = isNaN<f64>(1.25);
b = isFinite<f64>(1.25);
// load and store builtins
// load and store
i = load<i32>(8); store<i32>(8, i);
store<i32>(8, load<i32>(8));
@ -115,7 +115,7 @@ store<f32>(8, load<f32>(8));
F = load<f64>(8); store<f64>(8, F);
store<f64>(8, load<f64>(8));
// reinterpretation builtins
// reinterpretation
reinterpret<f32,i32>(1.25);
reinterpret<i32,f32>(25);
@ -127,7 +127,7 @@ f = reinterpret<i32,f32>(25);
I = reinterpret<f64,i64>(1.25);
F = reinterpret<i64,f64>(25);
// host builtins
// host
let s: usize;
@ -137,7 +137,7 @@ grow_memory(1);
s = current_memory();
s = grow_memory(1);
// other builtins
// other
select<i32>(10, 20, true);
select<i64>(100, 200, false);
@ -151,7 +151,7 @@ F = select<f64>(12.5, 25.0, false);
if (0) unreachable();
// AS specific builtins
// AS specific
sizeof<u8>();
sizeof<u16>();
@ -176,3 +176,11 @@ assert(!isFinite<f64>(NaN));
assert(!isFinite<f64>(Infinity));
assert(isFinite<f32>(0));
assert(isFinite<f64>(0));
// imported
// TODO: Can't be interpreted due to 'Fatal: callImport: unknown import: env.parseInt'
// parseInt(0);
// parseInt(0, 10);
// parseFloat(0);

View File

@ -1087,6 +1087,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
builtins/b
builtins/i
builtins/I

View File

@ -34,6 +34,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
declare/external
[program.exports]
declare/external

View File

@ -79,6 +79,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
do/loopDo
do/loopDoInDo
[program.exports]

View File

@ -64,6 +64,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
enum/Implicit
enum/Explicit
enum/Mixed

View File

@ -54,6 +54,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
export/add
export/sub
export/a

View File

@ -175,6 +175,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
for/i
[program.exports]

View File

@ -336,6 +336,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
game-of-life/w
game-of-life/h
game-of-life/s

View File

@ -22,8 +22,8 @@
(export "or" (func $i64/or))
(export "xor" (func $i64/xor))
(export "shl" (func $i64/shl))
(export "shr_u" (func $i64/shr_u))
(export "shr_s" (func $i64/shr_s))
(export "shr_u" (func $i64/shr_u))
(export "rotl" (func $i64/rotl_))
(export "rotr" (func $i64/rotr_))
(export "eq" (func $i64/eq))
@ -580,12 +580,12 @@
)
)
)
(func $i64/shr_u (; 17 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $i64/shr_s (; 17 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
(set_global $i64/lo
(i32.wrap/i64
(tee_local $4
(i64.shr_u
(i64.shr_s
(i64.or
(i64.extend_u/i32
(get_local $0)
@ -621,12 +621,12 @@
)
)
)
(func $i64/shr_s (; 18 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $i64/shr_u (; 18 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
(set_global $i64/lo
(i32.wrap/i64
(tee_local $4
(i64.shr_s
(i64.shr_u
(i64.or
(i64.extend_u/i32
(get_local $0)

View File

@ -102,14 +102,14 @@ export function shl(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void
hi = <u32>(ret >>> 32);
}
export function shr_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
const ret: u64 = (<u64>loLeft | <u64>hiLeft << 32) >> (<u64>loRight | <u64>hiRight << 32);
export function shr_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
const ret: u64 = <u64>(<i64>(<u64>loLeft | <u64>hiLeft << 32) >> <i64>(<u64>loRight | <u64>hiRight << 32));
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
export function shr_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
const ret: u64 = <u64>(<i64>(<u64>loLeft | <u64>hiLeft << 32) >> <i64>(<u64>loRight | <u64>hiRight << 32));
export function shr_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
const ret: u64 = (<u64>loLeft | <u64>hiLeft << 32) >> (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}

View File

@ -23,8 +23,8 @@
(export "or" (func $i64/or))
(export "xor" (func $i64/xor))
(export "shl" (func $i64/shl))
(export "shr_u" (func $i64/shr_u))
(export "shr_s" (func $i64/shr_s))
(export "shr_u" (func $i64/shr_u))
(export "rotl" (func $i64/rotl_))
(export "rotr" (func $i64/rotr_))
(export "eq" (func $i64/eq))
@ -642,11 +642,11 @@
)
)
)
(func $i64/shr_u (; 17 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $i64/shr_s (; 17 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
(block
(set_local $4
(i64.shr_u
(i64.shr_s
(i64.or
(i64.extend_u/i32
(get_local $0)
@ -686,11 +686,11 @@
)
)
)
(func $i64/shr_s (; 18 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(func $i64/shr_u (; 18 ;) (type $iiiiv) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
(block
(set_local $4
(i64.shr_s
(i64.shr_u
(i64.or
(i64.extend_u/i32
(get_local $0)
@ -1217,6 +1217,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
i64/lo
i64/hi
i64/getLo
@ -1236,8 +1238,8 @@
i64/or
i64/xor
i64/shl
i64/shr_u
i64/shr_s
i64/shr_u
i64/rotl_
i64/rotr_
i64/eq
@ -1268,8 +1270,8 @@
i64/or
i64/xor
i64/shl
i64/shr_u
i64/shr_s
i64/shr_u
i64/rotl
i64/rotr
i64/eq

View File

@ -74,6 +74,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
if/ifThenElse
if/ifThen
if/ifThenElseBlock

View File

@ -66,6 +66,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
export/add
export/sub
export/a

View File

@ -167,6 +167,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
[program.exports]
;)

View File

@ -295,6 +295,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
logical/i
logical/I
logical/f

View File

@ -2161,6 +2161,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
memcpy/memcpy
memcpy/base
memcpy/dest

View File

@ -72,6 +72,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
export/add
export/sub
export/a

View File

@ -173,6 +173,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
switch/doSwitch
switch/doSwitchDefaultFirst
switch/doSwitchDefaultOmitted

View File

@ -61,6 +61,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
ternary/a
[program.exports]

View File

@ -356,6 +356,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
tlsf/fls
tlsf/ffs
tlsf/ALIGN_SIZE_LOG2

View File

@ -661,6 +661,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
unary/i
unary/I
unary/f

View File

@ -88,6 +88,8 @@
isNaN
isFinite
assert
parseInt
parseFloat
while/loopWhile
while/loopWhileInWhile
[program.exports]