Move some stuff around, update README

This commit is contained in:
dcode
2019-06-03 03:59:30 +02:00
parent adc2f7e26a
commit 27d9ab6c2c
16 changed files with 259 additions and 299 deletions

View File

@ -1,132 +0,0 @@
@assemblyscript/i64
===================
Exposes WebAssembly's i64 operations to JavaScript using 32-bit integers (low and high bits).
Usage
-----
```
$> npm install @assemblyscript/i64
```
```ts
import * as i64 from "@assemblyscript/i64";
i64.div(10, 0, 2, 0);
console.log("result: lo=" + i64.getLo() + ", hi=" + i64.getHi());
```
API
---
**Note** that `u32` is just an alias of `number` in JavaScript with values in 32-bit integer range.
* **getLo**(): `u32`<br />
Gets the low 32 bits of the computed 64-bit value.
* **getHi**(): `u32`<br />
Gets the high 32 bits of the computed 64-bit value.
* **clz**(loLeft: `u32`, hiLeft: `u32`): `void`<br />
Performs the sign-agnostic count leading zero bits operation. All zero bits are considered leading if the value is zero.
* **ctz**(loLeft: `u32`, hiLeft: `u32`): `void`<br />
Performs the sign-agnostic count tailing zero bits operation. All zero bits are considered trailing if the value is zero.
* **popcnt**(loLeft: `u32`, hiLeft: `u32`): `void`<br />
Performs the sign-agnostic count number of one bits operation.
* **eqz**(loLeft: `u32`, hiLeft: `u32`): `void`<br />
Performs the sign-agnostic equals-zero operation.
* **add**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic addition operation.
* **sub**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic subtraction operation.
* **mul**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic multiplication operation.
* **div_s**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the signed division operation.
* **div_u**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the unsigned division operation.
* **rem_s**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the signed remainder operation.
* **rem_u**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the unsigned remainder operation.
* **and**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic bitwise and operation.
* **or**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic bitwise or operation.
* **xor**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic bitwise xor operation.
* **shl**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic bitwise shift left operation.
* **shr_s**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the signed bitwise shift right operation.
* **shr_u**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the unsigned bitwise shift right operation.
* **rotl**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic rotate left operation.
* **rotr**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic rotate right operation.
* **eq**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic compare equal operation.
* **ne**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the sign-agnostic compare unequal operation.
* **lt_s**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the signed less than operation.
* **lt_u**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the unsigned less than operation.
* **le_s**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the signed less than or equal operation.
* **le_u**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the unsigned less than or equal operation.
* **gt_s**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the signed greater than operation.
* **gt_u**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the unsigned greater than operation.
* **ge_s**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the signed greater than or equal operation.
* **ge_u**(loLeft: `u32`, hiLeft: `u32`, loRight: `u32`, hiRight: `u32`): `void`<br />
Performs the unsigned greater than or equal operation.
Building
--------
To build [assembly/i64.ts](./assembly/i64.ts) to an untouched and an optimized `.wasm` including their respective `.wat` representations, run:
```
$> npm run asbuild
```
Afterwards, to run the included [test](./tests/index.js):
```
$> npm test
```

View File

@ -1,193 +0,0 @@
var lo: u32, hi: u32;
export function getLo(): u32 {
return lo;
}
export function getHi(): u32 {
return hi;
}
import { clz as builtin_clz } from "builtins";
export function clz(loLeft: u32, hiLeft: u32): void {
var ret = builtin_clz<u64>(<u64>loLeft | <u64>hiLeft << 32);
lo = <u32>ret;
hi = 0;
}
import { ctz as builtin_ctz } from "builtins";
export function ctz(loLeft: u32, hiLeft: u32): void {
var ret = builtin_ctz<u64>(<u64>loLeft | <u64>hiLeft << 32);
lo = <u32>ret;
hi = 0;
}
import { popcnt as builtin_popcnt } from "builtins";
export function popcnt(loLeft: u32, hiLeft: u32): void {
var ret = builtin_popcnt<u64>(<u64>loLeft | <u64>hiLeft << 32);
lo = <u32>ret;
hi = 0;
}
export function eqz(loLeft: u32, hiLeft: u32): void {
var ret: bool = !(<u64>loLeft | <u64>hiLeft << 32);
lo = <u32>ret;
hi = 0;
}
export function add(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) + (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >> 32);
}
export function sub(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) - (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >> 32);
}
export function mul(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) * (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >> 32);
}
export function div_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = <u64>(<i64>(<u64>loLeft | <u64>hiLeft << 32) / <i64>(<u64>loRight | <u64>hiRight << 32));
lo = <u32>ret;
hi = <u32>(ret >> 32);
}
export function div_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) / (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >> 32);
}
export function rem_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = <u64>(<i64>(<u64>loLeft | <u64>hiLeft << 32) % <i64>(<u64>loRight | <u64>hiRight << 32));
lo = <u32>ret;
hi = <u32>(ret >> 32);
}
export function rem_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) % (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
export function and(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) & (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
export function or(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) | (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
export function xor(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) ^ (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
export function shl(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) << (<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 {
var ret = <u64>(<i64>(<u64>loLeft | <u64>hiLeft << 32) >> <i64>(<u64>loRight | <u64>hiRight << 32));
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
export function shr_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = (<u64>loLeft | <u64>hiLeft << 32) >> (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
import { rotl as builtin_rotl } from "builtins";
export function rotl(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = builtin_rotl<u64>(<u64>loLeft | <u64>hiLeft << 32, <u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
import { rotr as builtin_rotr } from "builtins";
export function rotr(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret = builtin_rotr<u64>(<u64>loLeft | <u64>hiLeft << 32, <u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = <u32>(ret >>> 32);
}
export function eq(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = (<u64>loLeft | <u64>hiLeft << 32) == (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function ne(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = (<u64>loLeft | <u64>hiLeft << 32) != (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function lt_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = <i64>(<u64>loLeft | <u64>hiLeft << 32) < <i64>(<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function lt_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = (<u64>loLeft | <u64>hiLeft << 32) < (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function le_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = <i64>(<u64>loLeft | <u64>hiLeft << 32) <= <i64>(<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function le_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = (<u64>loLeft | <u64>hiLeft << 32) <= (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function gt_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = <i64>(<u64>loLeft | <u64>hiLeft << 32) > <i64>(<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function gt_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = (<u64>loLeft | <u64>hiLeft << 32) > (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function ge_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = <i64>(<u64>loLeft | <u64>hiLeft << 32) >= <i64>(<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}
export function ge_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void {
var ret: bool = (<u64>loLeft | <u64>hiLeft << 32) >= (<u64>loRight | <u64>hiRight << 32);
lo = <u32>ret;
hi = 0;
}

View File

@ -1,6 +0,0 @@
{
"extends": "../../../std/assembly.json",
"include": [
"./**/*.ts"
]
}

View File

@ -1,3 +0,0 @@
*.wasm
*.wasm.map
*.asm.js

View File

@ -1,43 +0,0 @@
declare module ASModule {
type i8 = number;
type i16 = number;
type i32 = number;
type u8 = number;
type u16 = number;
type u32 = number;
type f32 = number;
type f64 = number;
type bool = any;
function getLo(): u32;
function getHi(): u32;
function clz(loLeft: u32, hiLeft: u32): void;
function ctz(loLeft: u32, hiLeft: u32): void;
function popcnt(loLeft: u32, hiLeft: u32): void;
function eqz(loLeft: u32, hiLeft: u32): void;
function add(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function sub(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function mul(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function div_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function div_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function rem_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function rem_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function and(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function or(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function xor(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function shl(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function shr_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function shr_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function rotl(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function rotr(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function eq(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function ne(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function lt_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function lt_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function le_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function le_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function gt_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function gt_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function ge_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
function ge_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
}
export default ASModule;

View File

@ -1,695 +0,0 @@
(module
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$v (func))
(memory $0 0)
(global $assembly/i64/lo (mut i32) (i32.const 0))
(global $assembly/i64/hi (mut i32) (i32.const 0))
(export "memory" (memory $0))
(export "getLo" (func $assembly/i64/getLo))
(export "getHi" (func $assembly/i64/getHi))
(export "clz" (func $assembly/i64/clz))
(export "ctz" (func $assembly/i64/ctz))
(export "popcnt" (func $assembly/i64/popcnt))
(export "eqz" (func $assembly/i64/eqz))
(export "add" (func $assembly/i64/add))
(export "sub" (func $assembly/i64/sub))
(export "mul" (func $assembly/i64/mul))
(export "div_s" (func $assembly/i64/div_s))
(export "div_u" (func $assembly/i64/div_u))
(export "rem_s" (func $assembly/i64/rem_s))
(export "rem_u" (func $assembly/i64/rem_u))
(export "and" (func $assembly/i64/and))
(export "or" (func $assembly/i64/or))
(export "xor" (func $assembly/i64/xor))
(export "shl" (func $assembly/i64/shl))
(export "shr_s" (func $assembly/i64/shr_s))
(export "shr_u" (func $assembly/i64/shr_u))
(export "rotl" (func $assembly/i64/rotl))
(export "rotr" (func $assembly/i64/rotr))
(export "eq" (func $assembly/i64/eq))
(export "ne" (func $assembly/i64/ne))
(export "lt_s" (func $assembly/i64/lt_s))
(export "lt_u" (func $assembly/i64/lt_u))
(export "le_s" (func $assembly/i64/le_s))
(export "le_u" (func $assembly/i64/le_u))
(export "gt_s" (func $assembly/i64/gt_s))
(export "gt_u" (func $assembly/i64/gt_u))
(export "ge_s" (func $assembly/i64/ge_s))
(export "ge_u" (func $assembly/i64/ge_u))
(func $assembly/i64/getLo (; 0 ;) (type $FUNCSIG$i) (result i32)
global.get $assembly/i64/lo
)
(func $assembly/i64/getHi (; 1 ;) (type $FUNCSIG$i) (result i32)
global.get $assembly/i64/hi
)
(func $assembly/i64/clz (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.clz
i32.wrap_i64
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ctz (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ctz
i32.wrap_i64
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/popcnt (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.popcnt
i32.wrap_i64
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/eqz (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.eqz
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/add (; 6 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.add
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/sub (; 7 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.sub
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/mul (; 8 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.mul
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/div_s (; 9 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.div_s
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/div_u (; 10 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.div_u
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rem_s (; 11 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rem_s
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rem_u (; 12 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rem_u
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/and (; 13 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.and
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/or (; 14 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.or
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/xor (; 15 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.xor
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/shl (; 16 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.shl
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/shr_s (; 17 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.shr_s
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/shr_u (; 18 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.shr_u
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rotl (; 19 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rotl
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rotr (; 20 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rotr
local.tee $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/eq (; 21 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.eq
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ne (; 22 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ne
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/lt_s (; 23 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.lt_s
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/lt_u (; 24 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.lt_u
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/le_s (; 25 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.le_s
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/le_u (; 26 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.le_u
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/gt_s (; 27 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.gt_s
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/gt_u (; 28 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.gt_u
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ge_s (; 29 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ge_s
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ge_u (; 30 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ge_u
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $null (; 31 ;) (type $FUNCSIG$v)
nop
)
)

View File

@ -1,753 +0,0 @@
(module
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$v (func))
(memory $0 0)
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $assembly/i64/lo (mut i32) (i32.const 0))
(global $assembly/i64/hi (mut i32) (i32.const 0))
(export "memory" (memory $0))
(export "getLo" (func $assembly/i64/getLo))
(export "getHi" (func $assembly/i64/getHi))
(export "clz" (func $assembly/i64/clz))
(export "ctz" (func $assembly/i64/ctz))
(export "popcnt" (func $assembly/i64/popcnt))
(export "eqz" (func $assembly/i64/eqz))
(export "add" (func $assembly/i64/add))
(export "sub" (func $assembly/i64/sub))
(export "mul" (func $assembly/i64/mul))
(export "div_s" (func $assembly/i64/div_s))
(export "div_u" (func $assembly/i64/div_u))
(export "rem_s" (func $assembly/i64/rem_s))
(export "rem_u" (func $assembly/i64/rem_u))
(export "and" (func $assembly/i64/and))
(export "or" (func $assembly/i64/or))
(export "xor" (func $assembly/i64/xor))
(export "shl" (func $assembly/i64/shl))
(export "shr_s" (func $assembly/i64/shr_s))
(export "shr_u" (func $assembly/i64/shr_u))
(export "rotl" (func $assembly/i64/rotl))
(export "rotr" (func $assembly/i64/rotr))
(export "eq" (func $assembly/i64/eq))
(export "ne" (func $assembly/i64/ne))
(export "lt_s" (func $assembly/i64/lt_s))
(export "lt_u" (func $assembly/i64/lt_u))
(export "le_s" (func $assembly/i64/le_s))
(export "le_u" (func $assembly/i64/le_u))
(export "gt_s" (func $assembly/i64/gt_s))
(export "gt_u" (func $assembly/i64/gt_u))
(export "ge_s" (func $assembly/i64/ge_s))
(export "ge_u" (func $assembly/i64/ge_u))
(func $assembly/i64/getLo (; 0 ;) (type $FUNCSIG$i) (result i32)
global.get $assembly/i64/lo
)
(func $assembly/i64/getHi (; 1 ;) (type $FUNCSIG$i) (result i32)
global.get $assembly/i64/hi
)
(func $assembly/i64/clz (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.clz
local.set $2
local.get $2
i32.wrap_i64
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ctz (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ctz
local.set $2
local.get $2
i32.wrap_i64
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/popcnt (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.popcnt
local.set $2
local.get $2
i32.wrap_i64
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/eqz (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.eqz
local.set $2
local.get $2
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/add (; 6 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.add
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/sub (; 7 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.sub
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/mul (; 8 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.mul
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/div_s (; 9 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.div_s
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/div_u (; 10 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.div_u
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rem_s (; 11 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rem_s
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rem_u (; 12 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rem_u
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/and (; 13 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.and
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/or (; 14 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.or
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/xor (; 15 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.xor
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/shl (; 16 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.shl
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/shr_s (; 17 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.shr_s
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/shr_u (; 18 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.shr_u
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rotl (; 19 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rotl
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/rotr (; 20 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i64)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.rotr
local.set $4
local.get $4
i32.wrap_i64
global.set $assembly/i64/lo
local.get $4
i64.const 32
i64.shr_u
i32.wrap_i64
global.set $assembly/i64/hi
)
(func $assembly/i64/eq (; 21 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.eq
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ne (; 22 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ne
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/lt_s (; 23 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.lt_s
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/lt_u (; 24 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.lt_u
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/le_s (; 25 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.le_s
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/le_u (; 26 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.le_u
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/gt_s (; 27 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.gt_s
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/gt_u (; 28 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.gt_u
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ge_s (; 29 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ge_s
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $assembly/i64/ge_u (; 30 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 i32)
local.get $0
i64.extend_i32_u
local.get $1
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
local.get $2
i64.extend_i32_u
local.get $3
i64.extend_i32_u
i64.const 32
i64.shl
i64.or
i64.ge_u
local.set $4
local.get $4
global.set $assembly/i64/lo
i32.const 0
global.set $assembly/i64/hi
)
(func $null (; 31 ;) (type $FUNCSIG$v)
)
)

View File

@ -1,63 +0,0 @@
type u32 = number;
/** Gets the low 32 bits of the computed 64-bit value. */
export function getLo(): u32;
/** Gets the high 32 bits of the computed 64-bit value. */
export function getHi(): u32;
/** Performs the sign-agnostic count leading zero bits operation. All zero bits are considered leading if the value is zero. */
export function clz(loLeft: u32, hiLeft: u32): void;
/** Performs the sign-agnostic count tailing zero bits operation. All zero bits are considered trailing if the value is zero. */
export function ctz(loLeft: u32, hiLeft: u32): void;
/** Performs the sign-agnostic count number of one bits operation. */
export function popcnt(loLeft: u32, hiLeft: u32): void;
/** Performs the sign-agnostic equals-zero operation. */
export function eqz(loLeft: u32, hiLeft: u32): void;
/** Performs the sign-agnostic addition operation. */
export function add(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic subtraction operation. */
export function sub(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic multiplication operation. */
export function mul(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the signed division operation. */
export function div_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the unsigned division operation. */
export function div_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the signed remainder operation. */
export function rem_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the unsigned remainder operation. */
export function rem_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic bitwise and operation. */
export function and(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic bitwise or operation. */
export function or(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic bitwise xor operation. */
export function xor(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic bitwise shift left operation. */
export function shl(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the signed bitwise shift right operation. */
export function shr_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the unsigned bitwise shift right operation. */
export function shr_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic rotate left operation. */
export function rotl(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic rotate right operation. */
export function rotr(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic compare equal operation. */
export function eq(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the sign-agnostic compare unequal operation. */
export function ne(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the signed less than operation. */
export function lt_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the unsigned less than operation. */
export function lt_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the signed less than or equal operation. */
export function le_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the unsigned less than or equal operation. */
export function le_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the signed greater than operation.*/
export function gt_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the unsigned greater than operation.*/
export function gt_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the signed greater than or equal operation. */
export function ge_s(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;
/** Performs the unsigned greater than or equal operation. */
export function ge_u(loLeft: u32, hiLeft: u32, loRight: u32, hiRight: u32): void;

View File

@ -1,8 +0,0 @@
var fs = require("fs");
// Instantiate the module
var mod = new WebAssembly.Module(fs.readFileSync(__dirname + "/build/optimized.wasm"));
var ins = new WebAssembly.Instance(mod, { /* no imports */ });
// Export its exports
module.exports = ins.exports;

View File

@ -1,32 +0,0 @@
{
"name": "@assemblyscript/i64",
"version": "1.0.0",
"author": "Daniel Wirtz <dcode+assemblyscript@dcode.io>",
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/AssemblyScript/assemblyscript.git"
},
"bugs": {
"url": "https://github.com/AssemblyScript/assemblyscript/issues"
},
"main": "index.js",
"types": "index.d.ts",
"engines": {
"node": ">=8"
},
"scripts": {
"asbuild": "npm run asbuild:untouched && npm run asbuild:optimized",
"asbuild:untouched": "asc assembly/i64.ts -t build/untouched.wat -b build/untouched.wasm --runtime none --validate --sourceMap --debug --measure",
"asbuild:optimized": "asc assembly/i64.ts -b build/optimized.wasm -t build/optimized.wat -d build/optimized.d.ts -O3 --runtime none --validate --sourceMap --measure",
"test": "node tests"
},
"files": [
"assembly/",
"build/optimized.wasm",
"build/optimized.wasm.map",
"index.d.ts",
"index.js",
"README.md"
]
}

View File

@ -1,42 +0,0 @@
var assert = require("assert");
function assertUnary(op, loLeft, hiLeft, loResult, hiResult) {
op(loLeft, hiLeft);
assert.strictEqual(i64.getLo(), loResult);
assert.strictEqual(i64.getHi(), hiResult);
}
function assertBinary(op, loLeft, hiLeft, loRight, hiRight, loResult, hiResult) {
op(loLeft, hiLeft, loLeft, loRight);
assert.strictEqual(i64.getLo(), loResult);
assert.strictEqual(i64.getHi(), hiResult);
}
var i64 = require("..");
assertUnary(i64.clz, 1, 0, 63, 0);
assertUnary(i64.clz, 0, 1, 31, 0);
assertUnary(i64.clz, 1, 1, 31, 0);
assertUnary(i64.clz, 0, 0, 64, 0);
assertUnary(i64.ctz, 0, 0x80000000, 63, 0);
assertUnary(i64.ctz, 0x80000000, 0x80000000, 31, 0);
assertUnary(i64.ctz, 0, 1, 32, 0);
assertUnary(i64.ctz, 1, 0, 0, 0);
assertUnary(i64.ctz, 0, 0, 64, 0);
assertUnary(i64.popcnt, 0x55555555, 0x55555555, 32, 0);
assertUnary(i64.popcnt, -1, -1, 64, 0);
assertUnary(i64.popcnt, 0, 0, 0, 0);
assertUnary(i64.popcnt, 0x55, 0, 4, 0);
assertUnary(i64.popcnt, 0, 0x55, 4, 0);
assertUnary(i64.popcnt, 0x55, 0x55, 8, 0);
assertUnary(i64.eqz, 0, 0, 1, 0);
assertUnary(i64.eqz, 0, 1, 0, 0);
assertUnary(i64.eqz, 1, 0, 0, 0);
assertUnary(i64.eqz, 1, 1, 0, 0);
// TODO...
console.log("ok");