Refactor number and string utils out of builtins, fixes #608

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

View File

@ -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.",

View File

@ -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).

View File

@ -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;

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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