General cleanup (#525)

* Cleans up and trims the overly large builtins file by ~1600 lines
* Properly propagate inline assembler-like argument types
* Use https in examples
* Reformat README
This commit is contained in:
Daniel Wirtz 2019-03-08 14:24:48 +01:00 committed by GitHub
parent 5f547131ab
commit 252b843c4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 2516 additions and 4170 deletions

View File

@ -26,5 +26,6 @@ jobs:
script: script:
- npm run clean && npm run test:compiler - npm run clean && npm run test:compiler
env: env:
- ASC_FEATURES="simd" - Runs experimental tests on node.js v8-canary using
- ASC_FEATURES="simd,threads"
- NVM_NODEJS_ORG_MIRROR="https://nodejs.org/download/v8-canary/" - NVM_NODEJS_ORG_MIRROR="https://nodejs.org/download/v8-canary/"

View File

@ -2,17 +2,40 @@
================= =================
[![Build Status](https://travis-ci.org/AssemblyScript/assemblyscript.svg?branch=master)](https://travis-ci.org/AssemblyScript/assemblyscript) [![Build Status](https://travis-ci.org/AssemblyScript/assemblyscript.svg?branch=master)](https://travis-ci.org/AssemblyScript/assemblyscript)
[![Backers on Open Collective](https://opencollective.com/assemblyscript/tiers/backer/badge.svg)](#backers)
[![Sponsors on Open Collective](https://opencollective.com/assemblyscript/tiers/sponsor/badge.svg)](#sponsors)
**AssemblyScript** compiles strictly typed [TypeScript](http://www.typescriptlang.org) (basically JavaScript with types) to [WebAssembly](http://webassembly.org) using [Binaryen](https://github.com/WebAssembly/binaryen). It generates lean and mean WebAssembly modules while being just an `npm install` away. **AssemblyScript** compiles strictly typed [TypeScript](http://www.typescriptlang.org) (basically JavaScript with types) to [WebAssembly](http://webassembly.org) using [Binaryen](https://github.com/WebAssembly/binaryen). It generates lean and mean WebAssembly modules while being just an `npm install` away.
Try it out in [WebAssembly Studio](https://webassembly.studio)! Try it out in [WebAssembly Studio](https://webassembly.studio)!
---
<h3 align="center">Our Sponsors</h2>
<p align="center">
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/0/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/1/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/2/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/3/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/4/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/5/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/6/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/7/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/8/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/9/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/9/avatar.svg"></a>
</p>
<br />
<h3 align="center">Our Backers</h2>
<p align="center">
<a href="https://opencollective.com/assemblyscript#backers" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/backer.svg?avatarHeight=44" /></a>
</p>
The core team members and most contributors do this open source work in their free time. If you use AssemblyScript for a serious task or plan to do so, and you'd like us to invest more time on it, [please donate to our OpenCollective](https://opencollective.com/assemblyscript). By sponsoring this project, your logo will show up above. Thank you so much for your support!
---
Motivation Motivation
---------- ----------
> Being able to write C-performance code in TypeScript feels so good Ari on [Slack](https://assemblyscript.slack.com) (Apr 19, 2018) > AssemblyScript was frictionless. Not only does it allow you to use TypeScript to write WebAssembly, [...] it also produces glue-free WebAssembly modules that are very small with decent performance. Surma, [Replacing a hot path in your app's JavaScript with WebAssembly](https://developers.google.com/web/updates/2019/02/hotpath-with-wasm) (Feb 16, 2019)
> Perhaps the fundamental issue [to get a small .wasm file] is that JavaScript is the only language for which the Web runtime is a perfect fit. Close relatives that were designed to compile to it, like TypeScript, can be very efficient as well. But languages like C, C++, Rust, and so forth were not originally designed for that purpose. Alon Zakai, [Small WebAssembly Binaries with Rust + Emscripten](https://kripken.github.io/blog/binaryen/2018/04/18/rust-emscripten.html) (Apr 18, 2018) > Perhaps the fundamental issue [to get a small .wasm file] is that JavaScript is the only language for which the Web runtime is a perfect fit. Close relatives that were designed to compile to it, like TypeScript, can be very efficient as well. But languages like C, C++, Rust, and so forth were not originally designed for that purpose. Alon Zakai, [Small WebAssembly Binaries with Rust + Emscripten](https://kripken.github.io/blog/binaryen/2018/04/18/rust-emscripten.html) (Apr 18, 2018)
@ -20,8 +43,6 @@ Motivation
> I do think [compiling TypeScript into WASM] is tremendously useful. It allows JavaScript developers to create WASM modules without having to learn C. Colin Eberhardt, [Exploring different approaches to building WebAssembly modules](http://blog.scottlogic.com/2017/10/17/wasm-mandelbrot.html) (Oct 17, 2017) > I do think [compiling TypeScript into WASM] is tremendously useful. It allows JavaScript developers to create WASM modules without having to learn C. Colin Eberhardt, [Exploring different approaches to building WebAssembly modules](http://blog.scottlogic.com/2017/10/17/wasm-mandelbrot.html) (Oct 17, 2017)
> AssemblyScript was frictionless. Not only does it allow you to use TypeScript to write WebAssembly, [...] it also produces glue-free WebAssembly modules that are very small with decent performance. Surma, [Replacing a hot path in your app's JavaScript with WebAssembly](https://developers.google.com/web/updates/2019/02/hotpath-with-wasm) (Feb 16, 2019)
Getting started Getting started
--------------- ---------------
@ -109,45 +130,3 @@ Running everything in order (lint, clean, test, build, test):
``` ```
$> npm run all $> npm run all
``` ```
Contributing
------------
This project exists thanks to all the people who [contribute](CONTRIBUTING.md).
<a href="https://github.com/AssemblyScript/assemblyscript/graphs/contributors"><img src="https://opencollective.com/assemblyscript/contributors.svg?width=890&button=false" /></a>
Sponsoring
----------
The core team members and most contributors do this open source work in their free time. If you use AssemblyScript for a serious task or plan to do so, and you'd like us to invest more time on it, [please donate](https://opencollective.com/assemblyscript).
This is how we use the donations:
* Allow the core team to work on AssemblyScript
* Thank contributors if they invested a large amount of time in contributing
* Support projects in the ecosystem that are of great value for us or users
* Fees for money handling
### Sponsors
[Become a sponsor](https://opencollective.com/assemblyscript#sponsor) and get your logo on our README on Github with a link to your site.
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/0/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/1/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/2/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/3/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/4/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/5/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/6/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/7/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/8/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/assemblyscript/tiers/sponsor/9/website" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/sponsor/9/avatar.svg"></a>
### Backers
[Become a backer](https://opencollective.com/assemblyscript#backer) and get your image on our README on Github with a link to your site.
<a href="https://opencollective.com/assemblyscript#backers" target="_blank"><img src="https://opencollective.com/assemblyscript/tiers/backer.svg?width=890"></a>
Thank you for your support!

View File

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<title>Conway's Game of Life - AssemblyScript</title> <title>Conway's Game of Life - AssemblyScript</title>
<link rel="icon" href="http://assemblyscript.org/favicon.ico" type="image/x-icon" /> <link rel="icon" href="https://assemblyscript.org/favicon.ico" type="image/x-icon" />
<meta name="viewport" content="user-scalable=0" /> <meta name="viewport" content="user-scalable=0" />
<style> <style>
html, body { height: 100%; margin: 0; overflow: hidden; color: #111; background: #fff; font-family: sans-serif; } html, body { height: 100%; margin: 0; overflow: hidden; color: #111; background: #fff; font-family: sans-serif; }

View File

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<title>Mandelbrot set - AssemblyScript</title> <title>Mandelbrot set - AssemblyScript</title>
<link rel="icon" href="http://assemblyscript.org/favicon.ico" type="image/x-icon" /> <link rel="icon" href="https://assemblyscript.org/favicon.ico" type="image/x-icon" />
<style> <style>
html, body { height: 100%; margin: 0; overflow: hidden; color: #111; background: #fff; font-family: sans-serif; } html, body { height: 100%; margin: 0; overflow: hidden; color: #111; background: #fff; font-family: sans-serif; }
h1 { padding: 20px; font-size: 12pt; margin: 0; } h1 { padding: 20px; font-size: 12pt; margin: 0; }

View File

@ -2,7 +2,7 @@
<html> <html>
<head> <head>
<title>N-body system - AssemblyScript</title> <title>N-body system - AssemblyScript</title>
<link rel="icon" href="http://assemblyscript.org/favicon.ico" type="image/x-icon" /> <link rel="icon" href="https://assemblyscript.org/favicon.ico" type="image/x-icon" />
<meta name="viewport" content="user-scalable=0" /> <meta name="viewport" content="user-scalable=0" />
<style> <style>
html, body { height: 100%; margin: 0; overflow: hidden; color: #111; background: #fff; font-family: sans-serif; } html, body { height: 100%; margin: 0; overflow: hidden; color: #111; background: #fff; font-family: sans-serif; }

5
package-lock.json generated
View File

@ -3055,6 +3055,11 @@
"wrappy": "1" "wrappy": "1"
} }
}, },
"opencollective-postinstall": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
"integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw=="
},
"optimist": { "optimist": {
"version": "0.6.1", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",

View File

@ -15,7 +15,8 @@
"binaryen": "69.0.0-nightly.20190228", "binaryen": "69.0.0-nightly.20190228",
"glob": "^7.1.3", "glob": "^7.1.3",
"long": "^4.0.0", "long": "^4.0.0",
"source-map-support": "^0.5.10" "source-map-support": "^0.5.10",
"opencollective-postinstall": "^2.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^11.9.5", "@types/node": "^11.9.5",
@ -51,7 +52,8 @@
"test:compiler": "node tests/compiler", "test:compiler": "node tests/compiler",
"make": "npm run clean && npm test && npm run build && npm test", "make": "npm run clean && npm test && npm run build && npm test",
"all": "npm run check && npm run make", "all": "npm run check && npm run make",
"docs": "typedoc --tsconfig tsconfig-docs.json --mode modules --name \"AssemblyScript Compiler API\" --out ./docs/api --ignoreCompilerErrors --excludeNotExported --excludePrivate --excludeExternals --exclude **/std/** --includeDeclarations --readme src/README.md" "docs": "typedoc --tsconfig tsconfig-docs.json --mode modules --name \"AssemblyScript Compiler API\" --out ./docs/api --ignoreCompilerErrors --excludeNotExported --excludePrivate --excludeExternals --exclude **/std/** --includeDeclarations --readme src/README.md",
"postinstall": "opencollective-postinstall"
}, },
"files": [ "files": [
"lib/loader/index.d.ts", "lib/loader/index.d.ts",
@ -70,5 +72,9 @@
"src/", "src/",
"std/", "std/",
"tsconfig-base.json" "tsconfig-base.json"
] ],
"collective": {
"type": "opencollective",
"url": "https://opencollective.com/assemblyscript"
}
} }

File diff suppressed because it is too large Load Diff

View File

@ -330,10 +330,6 @@ export enum BinaryOp {
export enum HostOp { export enum HostOp {
CurrentMemory = _BinaryenCurrentMemory(), CurrentMemory = _BinaryenCurrentMemory(),
GrowMemory = _BinaryenGrowMemory(), GrowMemory = _BinaryenGrowMemory(),
// see: https://github.com/WebAssembly/bulk-memory-operations
// MoveMemory
// SetMemory
} }
export enum AtomicRMWOp { export enum AtomicRMWOp {
@ -365,19 +361,19 @@ export enum SIMDReplaceOp {
ReplaceLaneVecF64x2 = _BinaryenReplaceLaneVecF64x2() ReplaceLaneVecF64x2 = _BinaryenReplaceLaneVecF64x2()
} }
export enum SIMDShiftOp { // FIXME: seems to be missing in binaryen-c.h export enum SIMDShiftOp {
ShlVecI8x16, ShlVecI8x16 = _BinaryenShlVecI8x16(),
ShrSVecI8x16, ShrSVecI8x16 = _BinaryenShrSVecI8x16(),
ShrUVecI8x16, ShrUVecI8x16 = _BinaryenShrUVecI8x16(),
ShlVecI16x8, ShlVecI16x8 = _BinaryenShlVecI16x8(),
ShrSVecI16x8, ShrSVecI16x8 = _BinaryenShrSVecI16x8(),
ShrUVecI16x8, ShrUVecI16x8 = _BinaryenShrUVecI16x8(),
ShlVecI32x4, ShlVecI32x4 = _BinaryenShlVecI32x4(),
ShrSVecI32x4, ShrSVecI32x4 = _BinaryenShrSVecI32x4(),
ShrUVecI32x4, ShrUVecI32x4 = _BinaryenShrUVecI32x4(),
ShlVecI64x2, ShlVecI64x2 = _BinaryenShlVecI64x2(),
ShrSVecI64x2, ShrSVecI64x2 = _BinaryenShrSVecI64x2(),
ShrUVecI64x2 ShrUVecI64x2 = _BinaryenShrUVecI64x2()
} }
export class MemorySegment { export class MemorySegment {
@ -482,7 +478,6 @@ export class Module {
createV128(bytes: Uint8Array): ExpressionRef { createV128(bytes: Uint8Array): ExpressionRef {
assert(bytes.length == 16); assert(bytes.length == 16);
var out = this.lit; var out = this.lit;
// FIXME: does this work or do we need to malloc?
for (let i = 0; i < 16; ++i) store<u8>(out + i, bytes[i]); for (let i = 0; i < 16; ++i) store<u8>(out + i, bytes[i]);
_BinaryenLiteralVec128(out, out); _BinaryenLiteralVec128(out, out);
return _BinaryenConst(this.ref, out); return _BinaryenConst(this.ref, out);
@ -1196,6 +1191,10 @@ export class Module {
case NativeType.F64: { case NativeType.F64: {
return this.createF64(_BinaryenConstGetValueF64(expr)); return this.createF64(_BinaryenConstGetValueF64(expr));
} }
case NativeType.V128: {
// TODO
return 0;
}
default: { default: {
throw new Error("concrete type expected"); throw new Error("concrete type expected");
} }
@ -1751,7 +1750,8 @@ export function needsExplicitUnreachable(expr: ExpressionRef): bool {
case NativeType.I32: case NativeType.I32:
case NativeType.I64: case NativeType.I64:
case NativeType.F32: case NativeType.F32:
case NativeType.F64: return false; case NativeType.F64:
case NativeType.V128: return false;
} }
switch (_BinaryenExpressionGetId(expr)) { switch (_BinaryenExpressionGetId(expr)) {
case ExpressionId.Unreachable: case ExpressionId.Unreachable:

View File

@ -57,7 +57,7 @@ export namespace atomic {
@builtin export declare function xchg<T>(ptr: usize, value: T, immOffset?: usize): T; @builtin export declare function xchg<T>(ptr: usize, value: T, immOffset?: usize): T;
@builtin export declare function cmpxchg<T>(ptr: usize, expected: T, replacement: T, immOffset?: usize): T; @builtin export declare function cmpxchg<T>(ptr: usize, expected: T, replacement: T, immOffset?: usize): T;
@builtin export declare function wait<T>(ptr: usize, expected: T, timeout: i64): AtomicWaitResult; @builtin export declare function wait<T>(ptr: usize, expected: T, timeout: i64): AtomicWaitResult;
@builtin export declare function notify<T>(ptr: usize, count: u32): u32; @builtin export declare function notify<T>(ptr: usize, count: i32): i32;
} }
@lazy export const enum AtomicWaitResult { @lazy export const enum AtomicWaitResult {

View File

@ -186,7 +186,7 @@ declare namespace atomic {
/** Performs a wait operation on an integer value in memory suspending this agent if the condition is met. */ /** Performs a wait operation on an integer value in memory suspending this agent if the condition is met. */
export function wait<T>(ptr: usize, expected: T, timeout: i64): AtomicWaitResult; export function wait<T>(ptr: usize, expected: T, timeout: i64): AtomicWaitResult;
/** Performs a notify operation on an integer value in memory waking up suspended agents. */ /** Performs a notify operation on an integer value in memory waking up suspended agents. */
export function notify<T>(ptr: usize, count: u32): i32; export function notify<T>(ptr: usize, count: i32): i32;
} }
/** Describes the result of an atomic wait operation. */ /** Describes the result of an atomic wait operation. */

View File

@ -426,14 +426,14 @@
i32.const 1 i32.const 1
i32.store i32.store
i32.const 8 i32.const 8
i32.const 1 i64.const 1
i32.store8 i64.store8
i32.const 8 i32.const 8
i32.const 1 i64.const 1
i32.store16 i64.store16
i32.const 8 i32.const 8
i32.const 1 i64.const 1
i32.store i64.store32
i32.const 8 i32.const 8
i64.const 1 i64.const 1
i64.store i64.store

View File

@ -274,6 +274,12 @@ sizeof<isize>();
assert(sizeof<f32>() == 4); assert(sizeof<f32>() == 4);
assert(sizeof<f64>() == 8); assert(sizeof<f64>() == 8);
assert(alignof<u8>() == 0);
assert(alignof<u16>() == 1);
assert(alignof<u32>() == 2);
assert(alignof<u64>() == 3);
assert(alignof<bool>() == 0);
class Foo<T> { a: T; b: T; } class Foo<T> { a: T; b: T; }
assert(offsetof<Foo<i32>>("a") == 0); assert(offsetof<Foo<i32>>("a") == 0);
assert(offsetof<Foo<i32>>("b") == 4); assert(offsetof<Foo<i32>>("b") == 4);

View File

@ -1513,6 +1513,18 @@
i32.const 0 i32.const 0
i32.eq i32.eq
i32.eqz i32.eqz
if
i32.const 0
i32.const 8
i32.const 277
i32.const 0
call $~lib/env/abort
unreachable
end
i32.const 1
i32.const 1
i32.eq
i32.eqz
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
@ -1521,8 +1533,8 @@
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
i32.const 4 i32.const 2
i32.const 4 i32.const 2
i32.eq i32.eq
i32.eqz i32.eqz
if if
@ -1533,8 +1545,8 @@
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
i32.const 0 i32.const 3
i32.const 0 i32.const 3
i32.eq i32.eq
i32.eqz i32.eqz
if if
@ -1545,8 +1557,8 @@
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
i32.const 2 i32.const 0
i32.const 2 i32.const 0
i32.eq i32.eq
i32.eqz i32.eqz
if if
@ -1564,7 +1576,55 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 283 i32.const 284
i32.const 0
call $~lib/env/abort
unreachable
end
i32.const 4
i32.const 4
i32.eq
i32.eqz
if
i32.const 0
i32.const 8
i32.const 285
i32.const 0
call $~lib/env/abort
unreachable
end
i32.const 0
i32.const 0
i32.eq
i32.eqz
if
i32.const 0
i32.const 8
i32.const 286
i32.const 0
call $~lib/env/abort
unreachable
end
i32.const 2
i32.const 2
i32.eq
i32.eqz
if
i32.const 0
i32.const 8
i32.const 287
i32.const 0
call $~lib/env/abort
unreachable
end
i32.const 0
i32.const 0
i32.eq
i32.eqz
if
i32.const 0
i32.const 8
i32.const 289
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1576,7 +1636,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 284 i32.const 290
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1588,7 +1648,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 286 i32.const 292
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1606,7 +1666,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 287 i32.const 293
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1624,7 +1684,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 288 i32.const 294
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1645,7 +1705,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 289 i32.const 295
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1666,7 +1726,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 290 i32.const 296
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1687,7 +1747,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 291 i32.const 297
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1708,7 +1768,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 292 i32.const 298
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1728,7 +1788,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 293 i32.const 299
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1748,7 +1808,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 294 i32.const 300
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1764,7 +1824,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 307 i32.const 313
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1776,7 +1836,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 308 i32.const 314
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1792,7 +1852,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 309 i32.const 315
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1804,7 +1864,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 310 i32.const 316
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1816,7 +1876,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 311 i32.const 317
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1828,7 +1888,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 312 i32.const 318
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1840,7 +1900,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 313 i32.const 319
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1852,7 +1912,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 314 i32.const 320
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1864,7 +1924,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 316 i32.const 322
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1876,7 +1936,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 317 i32.const 323
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1888,7 +1948,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 318 i32.const 324
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1900,7 +1960,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 319 i32.const 325
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1912,7 +1972,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 320 i32.const 326
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1924,7 +1984,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 321 i32.const 327
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1936,7 +1996,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 322 i32.const 328
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1948,7 +2008,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 323 i32.const 329
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1960,7 +2020,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 324 i32.const 330
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1972,7 +2032,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 324 i32.const 330
i32.const 29 i32.const 29
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1984,7 +2044,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 325 i32.const 331
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1996,7 +2056,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 325 i32.const 331
i32.const 29 i32.const 29
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2008,7 +2068,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 327 i32.const 333
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2020,7 +2080,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 328 i32.const 334
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2032,7 +2092,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 329 i32.const 335
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2044,7 +2104,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 330 i32.const 336
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2056,7 +2116,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 331 i32.const 337
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2068,7 +2128,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 332 i32.const 338
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2080,7 +2140,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 334 i32.const 340
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2092,7 +2152,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 335 i32.const 341
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2104,7 +2164,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 336 i32.const 342
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2116,7 +2176,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 337 i32.const 343
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2128,7 +2188,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 338 i32.const 344
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2140,7 +2200,7 @@
if if
i32.const 0 i32.const 0
i32.const 8 i32.const 8
i32.const 339 i32.const 345
i32.const 0 i32.const 0
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -2297,14 +2357,14 @@
i32.const 1 i32.const 1
i32.store i32.store
i32.const 8 i32.const 8
i32.const 1 i64.const 1
i32.store8 i64.store8
i32.const 8 i32.const 8
i32.const 1 i64.const 1
i32.store16 i64.store16
i32.const 8 i32.const 8
i32.const 1 i64.const 1
i32.store i64.store32
i32.const 8 i32.const 8
i64.const 1 i64.const 1
i64.store i64.store

View File

@ -99,65 +99,65 @@ function testAtomicAsm(): void {
i32.atomic.store8(0, 1); i32.atomic.store8(0, 1);
i32.atomic.store16(0, 1); i32.atomic.store16(0, 1);
i32.atomic.store(0, 1); i32.atomic.store(0, 1);
i64.atomic.store8(0, <i64>1); i64.atomic.store8(0, 1);
i64.atomic.store16(0, <i64>1); i64.atomic.store16(0, 1);
i64.atomic.store32(0, <i64>1); i64.atomic.store32(0, 1);
i64.atomic.store(0, 1); i64.atomic.store(0, 1);
i32.atomic.rmw8.add_u(0, 1); i32.atomic.rmw8.add_u(0, 1);
i32.atomic.rmw16.add_u(0, 1); i32.atomic.rmw16.add_u(0, 1);
i32.atomic.rmw.add(0, 1); i32.atomic.rmw.add(0, 1);
i64.atomic.rmw8.add_u(0, <i64>1); i64.atomic.rmw8.add_u(0, 1);
i64.atomic.rmw16.add_u(0, <i64>1); i64.atomic.rmw16.add_u(0, 1);
i64.atomic.rmw32.add_u(0, <i64>1); i64.atomic.rmw32.add_u(0, 1);
i64.atomic.rmw.add(0, 1); i64.atomic.rmw.add(0, 1);
i32.atomic.rmw8.sub_u(0, 1); i32.atomic.rmw8.sub_u(0, 1);
i32.atomic.rmw16.sub_u(0, 1); i32.atomic.rmw16.sub_u(0, 1);
i32.atomic.rmw.sub(0, 1); i32.atomic.rmw.sub(0, 1);
i64.atomic.rmw8.sub_u(0, <i64>1); i64.atomic.rmw8.sub_u(0, 1);
i64.atomic.rmw16.sub_u(0, <i64>1); i64.atomic.rmw16.sub_u(0, 1);
i64.atomic.rmw32.sub_u(0, <i64>1); i64.atomic.rmw32.sub_u(0, 1);
i64.atomic.rmw.sub(0, 1); i64.atomic.rmw.sub(0, 1);
i32.atomic.rmw8.and_u(0, 1); i32.atomic.rmw8.and_u(0, 1);
i32.atomic.rmw16.and_u(0, 1); i32.atomic.rmw16.and_u(0, 1);
i32.atomic.rmw.and(0, 1); i32.atomic.rmw.and(0, 1);
i64.atomic.rmw8.and_u(0, <i64>1); i64.atomic.rmw8.and_u(0, 1);
i64.atomic.rmw16.and_u(0, <i64>1); i64.atomic.rmw16.and_u(0, 1);
i64.atomic.rmw32.and_u(0, <i64>1); i64.atomic.rmw32.and_u(0, 1);
i64.atomic.rmw.and(0, 1); i64.atomic.rmw.and(0, 1);
i32.atomic.rmw8.or_u(0, 1); i32.atomic.rmw8.or_u(0, 1);
i32.atomic.rmw16.or_u(0, 1); i32.atomic.rmw16.or_u(0, 1);
i32.atomic.rmw.or(0, 1); i32.atomic.rmw.or(0, 1);
i64.atomic.rmw8.or_u(0, <i64>1); i64.atomic.rmw8.or_u(0, 1);
i64.atomic.rmw16.or_u(0, <i64>1); i64.atomic.rmw16.or_u(0, 1);
i64.atomic.rmw32.or_u(0, <i64>1); i64.atomic.rmw32.or_u(0, 1);
i64.atomic.rmw.or(0, 1); i64.atomic.rmw.or(0, 1);
i32.atomic.rmw8.xor_u(0, 1); i32.atomic.rmw8.xor_u(0, 1);
i32.atomic.rmw16.xor_u(0, 1); i32.atomic.rmw16.xor_u(0, 1);
i32.atomic.rmw.xor(0, 1); i32.atomic.rmw.xor(0, 1);
i64.atomic.rmw8.xor_u(0, <i64>1); i64.atomic.rmw8.xor_u(0, 1);
i64.atomic.rmw16.xor_u(0, <i64>1); i64.atomic.rmw16.xor_u(0, 1);
i64.atomic.rmw32.xor_u(0, <i64>1); i64.atomic.rmw32.xor_u(0, 1);
i64.atomic.rmw.xor(0, 1); i64.atomic.rmw.xor(0, 1);
i32.atomic.rmw8.xchg_u(0, 1); i32.atomic.rmw8.xchg_u(0, 1);
i32.atomic.rmw16.xchg_u(0, 1); i32.atomic.rmw16.xchg_u(0, 1);
i32.atomic.rmw.xchg(0, 1); i32.atomic.rmw.xchg(0, 1);
i64.atomic.rmw8.xchg_u(0, <i64>1); i64.atomic.rmw8.xchg_u(0, 1);
i64.atomic.rmw16.xchg_u(0, <i64>1); i64.atomic.rmw16.xchg_u(0, 1);
i64.atomic.rmw32.xchg_u(0, <i64>1); i64.atomic.rmw32.xchg_u(0, 1);
i64.atomic.rmw.xchg(0, 1); i64.atomic.rmw.xchg(0, 1);
i32.atomic.rmw8.cmpxchg_u(0, 1, 2); i32.atomic.rmw8.cmpxchg_u(0, 1, 2);
i32.atomic.rmw16.cmpxchg_u(0, 1, 2); i32.atomic.rmw16.cmpxchg_u(0, 1, 2);
i32.atomic.rmw.cmpxchg(0, 1, 2); i32.atomic.rmw.cmpxchg(0, 1, 2);
i64.atomic.rmw8.cmpxchg_u(0, <i64>1, 2); i64.atomic.rmw8.cmpxchg_u(0, 1, 2);
i64.atomic.rmw16.cmpxchg_u(0, <i64>1, 2); i64.atomic.rmw16.cmpxchg_u(0, 1, 2);
i64.atomic.rmw32.cmpxchg_u(0, <i64>1, 2); i64.atomic.rmw32.cmpxchg_u(0, 1, 2);
i64.atomic.rmw.cmpxchg(0, 1, 2); i64.atomic.rmw.cmpxchg(0, 1, 2);
// i32.atomic.wait(0, 0, -1); // i32.atomic.wait(0, 0, -1);