1
0
mirror of https://github.com/fluencelabs/assemblyscript synced 2025-07-20 00:32:16 +00:00

Refactor number and string utils out of builtins, fixes

This commit is contained in:
dcode
2019-06-06 16:19:10 +02:00
parent 0484a6b740
commit 4680b530fb
23 changed files with 988 additions and 979 deletions

@@ -83,7 +83,7 @@
},
"runtime": {
"description": [
"Specifies the runtime implementation to include in the program.",
"Specifies the runtime variant to include in the program.",
"",
" full Default runtime based on TLSF and reference counting.",
" half Same as 'full', but not exported to the host.",

@@ -1,5 +1,4 @@
@assemblyscript/i64
===================
# ![AS](https://avatars1.githubusercontent.com/u/28916798?s=48) i64
Exposes WebAssembly's i64 operations to JavaScript using 32-bit integers (low and high bits).

@@ -1,11 +1,3 @@
// @ts-ignore: decorator
@builtin @inline
export const NaN: f64 = 0 / 0;
// @ts-ignore: decorator
@builtin @inline
export const Infinity: f64 = 1 / 0;
// @ts-ignore: decorator
@builtin
export declare function isInteger<T>(value?: T): bool;
@@ -58,20 +50,6 @@ export declare function isConstant(expression: void): bool;
@builtin
export declare function isManaged<T>(value?: T): bool;
export function isNaN<T extends number>(value: T): bool {
if (!isFloat<T>()) {
if (!isInteger<T>()) ERROR("numeric type expected");
}
return value != value;
}
export function isFinite<T extends number>(value: T): bool {
if (!isFloat<T>()) {
if (!isInteger<T>()) ERROR("numeric type expected");
}
return value - value == 0;
}
// @ts-ignore: decorator
@builtin
export declare function clz<T>(value: T): T;

@@ -1,5 +1,26 @@
import { itoa, dtoa } from "./util/number";
import { isNaN as builtin_isNaN, isFinite as builtin_isFinite } from "./builtins";
// @ts-ignore: decorator
@builtin @inline
export const NaN: f64 = 0 / 0;
// @ts-ignore: decorator
@builtin @inline
export const Infinity: f64 = 1 / 0;
export function isNaN<T extends number>(value: T): bool {
if (!isFloat<T>()) {
if (!isInteger<T>()) ERROR("numeric type expected");
}
return value != value;
}
export function isFinite<T extends number>(value: T): bool {
if (!isFloat<T>()) {
if (!isInteger<T>()) ERROR("numeric type expected");
}
return value - value == 0;
}
@sealed @unmanaged
export abstract class I8 {
@@ -331,11 +352,11 @@ export abstract class F64 {
static readonly NaN: f64 = NaN;
static isNaN(value: f64): bool {
return builtin_isNaN<f64>(value);
return isNaN<f64>(value);
}
static isFinite(value: f64): bool {
return builtin_isFinite<f64>(value);
return isFinite<f64>(value);
}
static isSafeInteger(value: f64): bool {
@@ -343,7 +364,7 @@ export abstract class F64 {
}
static isInteger(value: f64): bool {
return builtin_isFinite<f64>(value) && trunc<f64>(value) == value;
return isFinite<f64>(value) && trunc<f64>(value) == value;
}
static parseInt(value: string, radix: i32 = 0): f64 {
@@ -354,7 +375,7 @@ export abstract class F64 {
return parseFloat(value);
}
toString(this: f64): String {
toString(this: f64, radix: i32 = 0): String {
// TODO: radix
return dtoa(this);
}

@@ -1,7 +1,7 @@
/// <reference path="./rt/index.d.ts" />
import { BLOCK, BLOCK_OVERHEAD, BLOCK_MAXSIZE } from "./rt/common";
import { compareImpl, parse, CharCode, isWhiteSpaceOrLineTerminator } from "./util/string";
import { compareImpl, strtol, strtod, isWhiteSpaceOrLineTerminator } from "./util/string";
import { E_INVALIDLENGTH } from "./util/error";
import { ArrayBufferView } from "./arraybuffer";
import { idof } from "./builtins";
@@ -522,72 +522,10 @@ import { idof } from "./builtins";
// @ts-ignore: nolib
export type string = String;
export function parseInt(str: String, radix: i32 = 0): f64 {
// @ts-ignore: string <-> String
return parse<f64>(str, radix);
export function parseInt(str: string, radix: i32 = 0): f64 {
return strtol<f64>(str, radix);
}
export function parseI32(str: String, radix: i32 = 0): i32 {
// @ts-ignore: string <-> String
return parse<i32>(str, radix);
}
export function parseI64(str: String, radix: i32 = 0): i64 {
// @ts-ignore: string <-> String
return parse<i64>(str, radix);
}
// FIXME: naive implementation
export function parseFloat(str: String): f64 {
var len: i32 = str.length;
if (!len) return NaN;
var ptr = changetype<usize>(str);
var code = <i32>load<u16>(ptr);
// determine sign
var sign: f64;
// trim white spaces
while (isWhiteSpaceOrLineTerminator(code)) {
code = <i32>load<u16>(ptr += 2);
--len;
}
if (code == CharCode.MINUS) {
if (!--len) return NaN;
code = <i32>load<u16>(ptr += 2);
sign = -1;
} else if (code == CharCode.PLUS) {
if (!--len) return NaN;
code = <i32>load<u16>(ptr += 2);
sign = 1;
} else {
sign = 1;
}
// calculate value
var num: f64 = 0;
while (len--) {
code = <i32>load<u16>(ptr);
if (code == CharCode.DOT) {
ptr += 2;
let fac: f64 = 0.1; // precision :(
while (len--) {
code = <i32>load<u16>(ptr);
if (code == CharCode.E || code == CharCode.e) {
assert(false); // TODO
}
code -= CharCode._0;
if (<u32>code > 9) break;
num += <f64>code * fac;
fac *= 0.1;
ptr += 2;
}
break;
}
code -= CharCode._0;
if (<u32>code >= 10) break;
num = (num * 10) + code;
ptr += 2;
}
return sign * num;
export function parseFloat(str: string): f64 {
return strtod(str);
}

@@ -57,7 +57,7 @@ export function isWhiteSpaceOrLineTerminator(c: i32): bool {
}
/** Parses a string to an integer (usually), using the specified radix. */
export function parse<T>(str: string, radix: i32 = 0): T {
export function strtol<T>(str: string, radix: i32 = 0): T {
var len: i32 = str.length;
// @ts-ignore: cast
if (!len) return <T>NaN;
@@ -139,3 +139,58 @@ export function parse<T>(str: string, radix: i32 = 0): T {
// @ts-ignore: type
return sign * num;
}
// FIXME: naive implementation
export function strtod(str: string): f64 {
var len: i32 = str.length;
if (!len) return NaN;
var ptr = changetype<usize>(str);
var code = <i32>load<u16>(ptr);
// determine sign
var sign: f64;
// trim white spaces
while (isWhiteSpaceOrLineTerminator(code)) {
code = <i32>load<u16>(ptr += 2);
--len;
}
if (code == CharCode.MINUS) {
if (!--len) return NaN;
code = <i32>load<u16>(ptr += 2);
sign = -1;
} else if (code == CharCode.PLUS) {
if (!--len) return NaN;
code = <i32>load<u16>(ptr += 2);
sign = 1;
} else {
sign = 1;
}
// calculate value
var num: f64 = 0;
while (len--) {
code = <i32>load<u16>(ptr);
if (code == CharCode.DOT) {
ptr += 2;
let fac: f64 = 0.1; // precision :(
while (len--) {
code = <i32>load<u16>(ptr);
if (code == CharCode.E || code == CharCode.e) {
assert(false); // TODO
}
code -= CharCode._0;
if (<u32>code > 9) break;
num += <f64>code * fac;
fac *= 0.1;
ptr += 2;
}
break;
}
code -= CharCode._0;
if (<u32>code >= 10) break;
num = (num * 10) + code;
ptr += 2;
}
return sign * num;
}

@@ -1188,7 +1188,7 @@
local.get $16
f64.mul
)
(func $~lib/builtins/isNaN<f32> (; 2 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 2 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -1243,7 +1243,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -2464,7 +2464,7 @@
local.get $11
f32.mul
)
(func $~lib/builtins/isNaN<f64> (; 6 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 6 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -2519,7 +2519,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0

@@ -23,24 +23,24 @@
(export "memory" (memory $0))
(export "test" (func $builtins/test))
(start $start)
(func $~lib/builtins/isNaN<f32> (; 1 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 1 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
)
(func $~lib/builtins/isFinite<f32> (; 2 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isFinite<f32> (; 2 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.sub
f32.const 0
f32.eq
)
(func $~lib/builtins/isNaN<f64> (; 3 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 3 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
)
(func $~lib/builtins/isFinite<f64> (; 4 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 4 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -150,7 +150,7 @@
unreachable
end
f32.const 1.25
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
i32.const 0
i32.const 24
@@ -160,7 +160,7 @@
unreachable
end
f32.const nan:0x400000
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.const 1
i32.ne
if
@@ -172,7 +172,7 @@
unreachable
end
f32.const 1.25
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.const 1
i32.ne
if
@@ -184,7 +184,7 @@
unreachable
end
f32.const inf
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
if
i32.const 0
i32.const 24
@@ -194,7 +194,7 @@
unreachable
end
f32.const -inf
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
if
i32.const 0
i32.const 24
@@ -204,7 +204,7 @@
unreachable
end
f32.const nan:0x400000
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
if
i32.const 0
i32.const 24
@@ -236,13 +236,13 @@
f32.const 1
global.set $builtins/f
f32.const 1.25
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
global.set $builtins/b
f32.const 1.25
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
global.set $builtins/b
f64.const 1.25
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
i32.const 0
i32.const 24
@@ -252,7 +252,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.const 1
i32.ne
if
@@ -264,7 +264,7 @@
unreachable
end
f64.const 1.25
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.const 1
i32.ne
if
@@ -276,7 +276,7 @@
unreachable
end
f64.const inf
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
if
i32.const 0
i32.const 24
@@ -286,7 +286,7 @@
unreachable
end
f64.const -inf
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
if
i32.const 0
i32.const 24
@@ -296,7 +296,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
if
i32.const 0
i32.const 24
@@ -328,10 +328,10 @@
f64.const 1
global.set $builtins/F
f64.const 1.25
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
global.set $builtins/b
f64.const 1.25
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
global.set $builtins/b
i32.const 8
i32.load
@@ -533,7 +533,7 @@
global.get $builtins/fn
call_indirect (type $FUNCSIG$vii)
f32.const nan:0x400000
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -544,7 +544,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0
@@ -555,7 +555,7 @@
unreachable
end
f32.const nan:0x400000
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
if
i32.const 0
i32.const 24
@@ -565,7 +565,7 @@
unreachable
end
f32.const inf
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
if
i32.const 0
i32.const 24
@@ -575,7 +575,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
if
i32.const 0
i32.const 24
@@ -585,7 +585,7 @@
unreachable
end
f64.const inf
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
if
i32.const 0
i32.const 24
@@ -595,7 +595,7 @@
unreachable
end
f32.const 0
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
if
i32.const 0
@@ -606,7 +606,7 @@
unreachable
end
f64.const 0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
i32.const 0
@@ -685,9 +685,6 @@
i32.const 8
f64.const 1
f64.store
f64.const 1
call $~lib/builtins/isNaN<f64>
drop
)
(func $builtins/test (; 7 ;) (type $FUNCSIG$v)
nop

@@ -418,7 +418,3 @@ f64.store(8, 1.0);
f32.trunc(1.0);
f64.trunc(1.0);
// should be importable
import { isNaN as isItNaN } from "builtins";
isItNaN<f64>(1);

@@ -54,24 +54,24 @@
(export "memory" (memory $0))
(export "test" (func $builtins/test))
(start $start)
(func $~lib/builtins/isNaN<f32> (; 1 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 1 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
)
(func $~lib/builtins/isFinite<f32> (; 2 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isFinite<f32> (; 2 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.sub
f32.const 0
f32.eq
)
(func $~lib/builtins/isNaN<f64> (; 3 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 3 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
)
(func $~lib/builtins/isFinite<f64> (; 4 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 4 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -751,7 +751,7 @@
f32.trunc
drop
f32.const 1.25
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.const 0
i32.eq
i32.eqz
@@ -764,7 +764,7 @@
unreachable
end
f32.const nan:0x400000
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.const 1
i32.eq
i32.eqz
@@ -777,7 +777,7 @@
unreachable
end
f32.const 1.25
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.const 1
i32.eq
i32.eqz
@@ -790,7 +790,7 @@
unreachable
end
f32.const inf
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.const 0
i32.eq
i32.eqz
@@ -804,7 +804,7 @@
end
f32.const inf
f32.neg
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.const 0
i32.eq
i32.eqz
@@ -817,7 +817,7 @@
unreachable
end
f32.const nan:0x400000
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.const 0
i32.eq
i32.eqz
@@ -864,10 +864,10 @@
f32.trunc
global.set $builtins/f
f32.const 1.25
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
global.set $builtins/b
f32.const 1.25
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
global.set $builtins/b
f64.const nan:0x8000000000000
drop
@@ -908,7 +908,7 @@
f64.trunc
drop
f64.const 1.25
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.const 0
i32.eq
i32.eqz
@@ -921,7 +921,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.const 1
i32.eq
i32.eqz
@@ -934,7 +934,7 @@
unreachable
end
f64.const 1.25
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.const 1
i32.eq
i32.eqz
@@ -947,7 +947,7 @@
unreachable
end
f64.const inf
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.const 0
i32.eq
i32.eqz
@@ -961,7 +961,7 @@
end
f64.const inf
f64.neg
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.const 0
i32.eq
i32.eqz
@@ -974,7 +974,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.const 0
i32.eq
i32.eqz
@@ -1021,10 +1021,10 @@
f64.trunc
global.set $builtins/F
f64.const 1.25
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
global.set $builtins/b
f64.const 1.25
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
global.set $builtins/b
i32.const 8
i32.load
@@ -1555,7 +1555,7 @@
unreachable
end
f32.const nan:0x400000
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -1566,7 +1566,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0
@@ -1577,7 +1577,7 @@
unreachable
end
f32.const nan:0x400000
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
i32.eqz
if
@@ -1589,7 +1589,7 @@
unreachable
end
f32.const inf
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
i32.eqz
if
@@ -1601,7 +1601,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
i32.eqz
if
@@ -1613,7 +1613,7 @@
unreachable
end
f64.const inf
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
i32.eqz
if
@@ -1625,7 +1625,7 @@
unreachable
end
f32.const 0
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
if
i32.const 0
@@ -1636,7 +1636,7 @@
unreachable
end
f64.const 0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
i32.const 0
@@ -2213,9 +2213,6 @@
f64.const 1
f64.trunc
drop
f64.const 1
call $~lib/builtins/isNaN<f64>
drop
)
(func $builtins/test (; 7 ;) (type $FUNCSIG$v)
nop

@@ -305,14 +305,14 @@
end
i32.const 0
)
(func $~lib/builtins/isFinite<f64> (; 8 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 8 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
f64.const 0
f64.eq
)
(func $~lib/builtins/isNaN<f64> (; 9 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 9 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -1407,11 +1407,11 @@
(local $0 i32)
(local $1 i32)
f64.const 2
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 2
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
i32.const 136
return
@@ -1479,7 +1479,7 @@
)
(func $~lib/number/F64.isInteger (; 20 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
if (result i32)
local.get $0
f64.trunc
@@ -1876,7 +1876,7 @@
unreachable
end
f64.const nan:0x8000000000000
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0

@@ -5,6 +5,7 @@
(type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$idi (func (param f64 i32) (result i32)))
(type $FUNCSIG$id (func (param f64) (result i32)))
(type $FUNCSIG$iid (func (param i32 f64) (result i32)))
(type $FUNCSIG$jii (func (param i32 i32) (result i64)))
@@ -588,14 +589,14 @@
call $~lib/rt/stub/__release
local.get $2
)
(func $~lib/builtins/isFinite<f64> (; 12 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 12 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
f64.const 0
f64.eq
)
(func $~lib/builtins/isNaN<f64> (; 13 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 13 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -3495,11 +3496,11 @@
return
end
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
i32.const 584
call $~lib/rt/stub/__retain
@@ -3541,7 +3542,7 @@
call $~lib/rt/stub/__free
local.get $3
)
(func $~lib/number/F64#toString (; 24 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/F64#toString (; 24 ;) (type $FUNCSIG$idi) (param $0 f64) (param $1 i32) (result i32)
local.get $0
call $~lib/util/number/dtoa
)
@@ -3560,7 +3561,7 @@
end
call $~lib/rt/stub/__retain
)
(func $~lib/builtins/isNaN<f32> (; 26 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 26 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -3579,7 +3580,7 @@
i32.const 0
end
)
(func $~lib/builtins/isFinite<f32> (; 28 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isFinite<f32> (; 28 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.sub
@@ -3588,7 +3589,7 @@
)
(func $~lib/number/F32.isInteger (; 29 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
if (result i32)
local.get $0
f32.trunc
@@ -3614,7 +3615,7 @@
)
(func $~lib/number/F64.isInteger (; 31 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
if (result i32)
local.get $0
f64.trunc
@@ -3661,6 +3662,7 @@
unreachable
end
f64.const 2
i32.const 0
call $~lib/number/F64#toString
local.tee $1
i32.const 1800
@@ -3829,7 +3831,7 @@
unreachable
end
global.get $~lib/number/F32.NaN
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -4104,7 +4106,7 @@
unreachable
end
global.get $~lib/number/F64.NaN
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0

@@ -4584,7 +4584,7 @@
i32.lt_s
i32.sub
)
(func $~lib/builtins/isNaN<f32> (; 102 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 102 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -4619,11 +4619,11 @@
local.get $0
local.get $2
call $~lib/array/Array<f32>#__get
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
local.get $1
local.get $2
call $~lib/array/Array<f32>#__get
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.ne
if
local.get $0
@@ -5117,7 +5117,7 @@
i32.add
f64.load
)
(func $~lib/builtins/isNaN<f64> (; 109 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 109 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -5152,11 +5152,11 @@
local.get $0
local.get $2
call $~lib/array/Array<f64>#__get
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
local.get $1
local.get $2
call $~lib/array/Array<f64>#__get
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.ne
if
local.get $0
@@ -7693,7 +7693,7 @@
call $~lib/rt/pure/__release
local.get $0
)
(func $~lib/builtins/isFinite<f64> (; 165 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 165 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -8652,11 +8652,11 @@
return
end
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
i32.const 4944
call $~lib/rt/pure/__retain
@@ -8718,11 +8718,11 @@
return
end
local.get $2
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
local.get $2
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
i32.const 78

@@ -7311,7 +7311,7 @@
local.get $1
call $~lib/array/Array<f32>#sort
)
(func $~lib/builtins/isNaN<f32> (; 135 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 135 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -7372,11 +7372,11 @@
local.get $0
local.get $3
call $~lib/array/Array<f32>#__get
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
local.get $1
local.get $3
call $~lib/array/Array<f32>#__get
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eq
if
br $continue|0
@@ -7966,7 +7966,7 @@
local.get $1
call $~lib/array/Array<f64>#__unchecked_get
)
(func $~lib/builtins/isNaN<f64> (; 145 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 145 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -8027,11 +8027,11 @@
local.get $0
local.get $3
call $~lib/array/Array<f64>#__get
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
local.get $1
local.get $3
call $~lib/array/Array<f64>#__get
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eq
if
br $continue|0
@@ -12880,7 +12880,7 @@
local.get $2
return
)
(func $~lib/builtins/isFinite<f64> (; 240 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 240 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -14242,11 +14242,11 @@
return
end
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
i32.const 5392
call $~lib/rt/pure/__retain
@@ -14314,11 +14314,11 @@
return
end
local.get $2
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
local.get $2
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
i32.const 78

@@ -936,7 +936,7 @@
local.get $0
call $~lib/math/NativeMath.asinh
)
(func $~lib/builtins/isNaN<f64> (; 15 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 15 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -960,7 +960,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -1239,12 +1239,12 @@
(local $6 i32)
(local $7 i32)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $1
@@ -1614,7 +1614,7 @@
local.get $0
f64.ceil
)
(func $~lib/builtins/isFinite<f64> (; 25 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 25 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -1623,7 +1623,7 @@
)
(func $~lib/math/NativeMath.clz32 (; 26 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64)
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 32
@@ -1677,7 +1677,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -2024,7 +2024,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -2418,7 +2418,7 @@
local.get $0
local.get $1
f64.add
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 0
@@ -4651,7 +4651,7 @@
local.get $0
call $~lib/math/NativeMathf.asinh
)
(func $~lib/builtins/isNaN<f32> (; 74 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 74 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -4672,7 +4672,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
return
@@ -4917,12 +4917,12 @@
(local $3 i32)
(local $4 i32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $1
@@ -5248,7 +5248,7 @@
local.get $0
f32.ceil
)
(func $~lib/builtins/isFinite<f32> (; 84 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isFinite<f32> (; 84 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.sub
@@ -5257,7 +5257,7 @@
)
(func $~lib/math/NativeMathf.clz32 (; 85 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32)
local.get $0
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
if
f32.const 32
@@ -6217,7 +6217,7 @@
local.get $0
local.get $1
f32.add
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
br_if $~lib/math/NativeMathf.imul|inlined.0
drop

@@ -1108,7 +1108,7 @@
local.get $0
call $~lib/math/NativeMath.asinh
)
(func $~lib/builtins/isNaN<f64> (; 15 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 15 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -1140,7 +1140,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -1472,12 +1472,12 @@
(local $8 i32)
(local $9 f64)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $1
@@ -1962,7 +1962,7 @@
local.get $1
f64.ceil
)
(func $~lib/builtins/isFinite<f64> (; 25 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 25 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -1971,7 +1971,7 @@
)
(func $~lib/math/NativeMath.clz32 (; 26 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64)
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 32
@@ -2042,7 +2042,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -2436,7 +2436,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -2894,7 +2894,7 @@
local.get $0
local.get $1
f64.add
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 0
@@ -5611,7 +5611,7 @@
local.get $0
call $~lib/math/NativeMathf.asinh
)
(func $~lib/builtins/isNaN<f32> (; 77 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 77 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -5640,7 +5640,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
return
@@ -5930,12 +5930,12 @@
(local $5 i32)
(local $6 f32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $1
@@ -6368,7 +6368,7 @@
local.get $1
f32.ceil
)
(func $~lib/builtins/isFinite<f32> (; 87 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isFinite<f32> (; 87 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.sub
@@ -6377,7 +6377,7 @@
)
(func $~lib/math/NativeMathf.clz32 (; 88 ;) (type $FUNCSIG$ff) (param $0 f32) (result f32)
local.get $0
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
if
f32.const 32
@@ -7812,7 +7812,7 @@
local.get $3
local.get $2
f32.add
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
if
f32.const 0

@@ -77,12 +77,12 @@
(global $~lib/math/random_state1_32 (mut i32) (i32.const 0))
(export "memory" (memory $0))
(start $start)
(func $~lib/builtins/isNaN<f64> (; 30 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 30 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
)
(func $~lib/builtins/isFinite<f64> (; 31 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 31 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -169,10 +169,10 @@
(func $std/math/ulperr (; 33 ;) (type $FUNCSIG$dddd) (param $0 f64) (param $1 f64) (param $2 f64) (result f64)
(local $3 i32)
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if (result i32)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
else
i32.const 0
end
@@ -215,7 +215,7 @@
return
end
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
local.get $1
@@ -265,10 +265,10 @@
return
end
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
return
end
local.get $0
@@ -284,7 +284,7 @@
end
i32.const 1
)
(func $~lib/builtins/isNaN<f32> (; 35 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 35 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -368,10 +368,10 @@
(func $std/math/ulperrf (; 37 ;) (type $FUNCSIG$ffff) (param $0 f32) (param $1 f32) (param $2 f32) (result f32)
(local $3 i32)
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if (result i32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
else
i32.const 0
end
@@ -463,10 +463,10 @@
return
end
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
return
end
local.get $0
@@ -2065,7 +2065,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -2303,7 +2303,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
return
@@ -2630,12 +2630,12 @@
(local $6 i32)
(local $7 i32)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $1
@@ -2893,12 +2893,12 @@
(local $3 i32)
(local $4 i32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $1
@@ -3702,7 +3702,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -3972,7 +3972,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -5898,7 +5898,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0
@@ -6117,7 +6117,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -8277,7 +8277,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0
@@ -8539,7 +8539,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -9699,7 +9699,7 @@
local.get $0
local.get $1
f64.add
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 0
@@ -9730,7 +9730,7 @@
)
(func $~lib/math/NativeMath.clz32 (; 158 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64)
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 32
@@ -39511,7 +39511,7 @@
f32.const nan:0x400000
i32.const 1
call $~lib/math/ipow32f
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -39524,7 +39524,7 @@
f32.const nan:0x400000
i32.const -1
call $~lib/math/ipow32f
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -39537,7 +39537,7 @@
f32.const nan:0x400000
i32.const 2
call $~lib/math/ipow32f
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -39719,7 +39719,7 @@
f64.const nan:0x8000000000000
i32.const 1
call $~lib/math/ipow64f
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0
@@ -39732,7 +39732,7 @@
f64.const nan:0x8000000000000
i32.const -1
call $~lib/math/ipow64f
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0
@@ -39745,7 +39745,7 @@
f64.const nan:0x8000000000000
i32.const 2
call $~lib/math/ipow64f
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0

@@ -105,12 +105,12 @@
(global $~lib/builtins/f32.MIN_VALUE f32 (f32.const 1.401298464324817e-45))
(export "memory" (memory $0))
(start $start)
(func $~lib/builtins/isNaN<f64> (; 30 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 30 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
)
(func $~lib/builtins/isFinite<f64> (; 31 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isFinite<f64> (; 31 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.sub
@@ -238,10 +238,10 @@
(func $std/math/ulperr (; 34 ;) (type $FUNCSIG$dddd) (param $0 f64) (param $1 f64) (param $2 f64) (result f64)
(local $3 f64)
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if (result i32)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
else
i32.const 0
end
@@ -292,7 +292,7 @@
return
end
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 8988465674311579538646525e283
@@ -325,10 +325,10 @@
return
end
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
return
end
local.get $0
@@ -346,12 +346,12 @@
end
i32.const 1
)
(func $~lib/builtins/isNaN<f32> (; 36 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 36 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
)
(func $~lib/builtins/isFinite<f32> (; 37 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isFinite<f32> (; 37 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.sub
@@ -477,10 +477,10 @@
(func $std/math/ulperrf (; 40 ;) (type $FUNCSIG$ffff) (param $0 f32) (param $1 f32) (param $2 f32) (result f32)
(local $3 f32)
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if (result i32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
else
i32.const 0
end
@@ -529,7 +529,7 @@
return
end
local.get $0
call $~lib/builtins/isFinite<f32>
call $~lib/number/isFinite<f32>
i32.eqz
if
f32.const 1701411834604692317316873e14
@@ -562,10 +562,10 @@
return
end
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
return
end
local.get $0
@@ -2505,7 +2505,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -2799,7 +2799,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
return
@@ -3192,12 +3192,12 @@
(local $8 i32)
(local $9 f64)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $1
@@ -3555,12 +3555,12 @@
(local $5 i32)
(local $6 f32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if (result i32)
i32.const 1
else
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $1
@@ -4892,7 +4892,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -5195,7 +5195,7 @@
i32.ge_u
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
return
@@ -7611,7 +7611,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0
@@ -7885,7 +7885,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -10500,7 +10500,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0
@@ -10823,7 +10823,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -12930,7 +12930,7 @@
local.get $0
local.get $1
f64.add
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 0
@@ -12961,7 +12961,7 @@
)
(func $~lib/math/NativeMath.clz32 (; 161 ;) (type $FUNCSIG$dd) (param $0 f64) (result f64)
local.get $0
call $~lib/builtins/isFinite<f64>
call $~lib/number/isFinite<f64>
i32.eqz
if
f64.const 32
@@ -47130,7 +47130,7 @@
f32.const nan:0x400000
i32.const 1
call $~lib/math/ipow32f
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -47143,7 +47143,7 @@
f32.const nan:0x400000
i32.const -1
call $~lib/math/ipow32f
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -47156,7 +47156,7 @@
f32.const nan:0x400000
i32.const 2
call $~lib/math/ipow32f
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
i32.eqz
if
i32.const 0
@@ -47355,7 +47355,7 @@
f64.const nan:0x8000000000000
i32.const 1
call $~lib/math/ipow64f
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0
@@ -47368,7 +47368,7 @@
f64.const nan:0x8000000000000
i32.const -1
call $~lib/math/ipow64f
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0
@@ -47381,7 +47381,7 @@
f64.const nan:0x8000000000000
i32.const 2
call $~lib/math/ipow64f
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
i32.eqz
if
i32.const 0

@@ -16,7 +16,7 @@
(export "memory" (memory $0))
(export "mod" (func $std/mod/mod))
(start $start)
(func $~lib/builtins/isNaN<f64> (; 2 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 2 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -66,7 +66,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0
@@ -226,10 +226,10 @@
)
(func $std/mod/check<f64> (; 4 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
return
end
local.get $1
@@ -265,7 +265,7 @@
i32.const 0
end
)
(func $~lib/builtins/isNaN<f32> (; 6 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 6 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -313,7 +313,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -463,10 +463,10 @@
)
(func $std/mod/check<f32> (; 8 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
return
end
local.get $1

@@ -19,7 +19,7 @@
(export "memory" (memory $0))
(export "mod" (func $std/mod/mod))
(start $start)
(func $~lib/builtins/isNaN<f64> (; 2 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 2 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -74,7 +74,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0
@@ -274,10 +274,10 @@
)
(func $std/mod/check<f64> (; 4 ;) (type $FUNCSIG$idd) (param $0 f64) (param $1 f64) (result i32)
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
if
local.get $0
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
return
end
local.get $1
@@ -320,7 +320,7 @@
i32.const 0
end
)
(func $~lib/builtins/isNaN<f32> (; 6 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 6 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -375,7 +375,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -573,10 +573,10 @@
)
(func $std/mod/check<f32> (; 8 ;) (type $FUNCSIG$iff) (param $0 f32) (param $1 f32) (result i32)
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
if
local.get $0
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
return
end
local.get $1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@@ -15506,7 +15506,7 @@
local.get $1
call $~lib/rt/pure/__release
)
(func $~lib/builtins/isNaN<f32> (; 317 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
(func $~lib/number/isNaN<f32> (; 317 ;) (type $FUNCSIG$if) (param $0 f32) (result i32)
local.get $0
local.get $0
f32.ne
@@ -15561,7 +15561,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f32>
call $~lib/number/isNaN<f32>
end
if
local.get $0
@@ -15917,7 +15917,7 @@
local.get $1
call $~lib/rt/pure/__release
)
(func $~lib/builtins/isNaN<f64> (; 323 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/number/isNaN<f64> (; 323 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
local.get $0
local.get $0
f64.ne
@@ -15972,7 +15972,7 @@
i32.const 1
else
local.get $1
call $~lib/builtins/isNaN<f64>
call $~lib/number/isNaN<f64>
end
if
local.get $0