summaryrefslogtreecommitdiff
path: root/src
Commit message (Collapse)AuthorAgeFilesLines
...
* Use early return in wasm-opt.cpp. NFC (#2387)Sam Clegg2019-10-151-22/+23
|
* Don't add __wasm_call_ctors to startup function list in wasm standalone mode ↵Sam Clegg2019-10-141-2/+6
| | | | | (#2384) In this mode crt1 takes care of calling it.
* Add BinaryenAddCustomSection API (#2381)Daniel Wirtz2019-10-113-0/+45
| | | | This adds a new BinaryenAddCustomSection API so a generator can add arbitrary custom sections to a module.
* Add offset parameter to BinaryenSetFunctionTable (#2380)Daniel Wirtz2019-10-113-7/+10
| | | | | | This PR adds an offset parameter to BinaryenSetFunctionTable so table elements can start at the value of an (imported constant) global. Previously, the offset was fixed to zero. As usual this is a breaking change to the C-API but backwards compatible when using the JS-API.
* Enable exnref instrumentation when EH is enabled (#2379)Heejin Ahn2019-10-111-1/+3
| | | | `exnref` is enabled by not reference type feature but exception handling feature. Sorry that I missed this in #2377.
* Don't instrument pops in InstrumentLocals (#2378)Heejin Ahn2019-10-101-0/+7
| | | | | `pop` is not a real instruction and automatically generated when reading binary and deleted when writing binary, so this does not work with instrumentation.
* Only add instrumentation to reftypes when the featureset supports it (#2377)Jacob Gravelle2019-10-101-4/+7
|
* Add support for reftypes in InstrumentLocals pass (#2375)Heejin Ahn2019-10-101-4/+16
| | | This adds support for anyref and exnref types in InstrumentLocals pass.
* Add push/pop support for anyref (#2376)Heejin Ahn2019-10-102-5/+19
| | | | This adds push/pop support for anyref. This also adds missing C API tests for push/pop.
* Make try body with multiple instructions roundtrip (#2374)Heejin Ahn2019-10-092-2/+2
| | | | | | | | | Previously we didn't print an additional block when there are multiple instructions within a `try` body, so those wast files cannot be parsed correctly, because the wast parser assumes there are two bodies within a `try` scope: a try body and a catch body. We don't need to print an additional block for a `catch` body because `(catch ...)` itself serves as a scope.
* Fix case of `windows.h` include (#2372)Mike J Innes2019-10-091-1/+1
| | | | The capitalisation causes issues on case-sensitive file systems, for example when cross-compiling binaryen for windows.
* MAIN_THREAD_EM_ASM support (#2367)Jacob Gravelle2019-10-071-71/+113
| | | | | | | | | | | | * Support for sync and async main-thread EM_ASM * Fix up import names as well * update test * fix whitespace * clang-format
* v8x16.swizzle (#2368)Thomas Lively2019-10-0315-5/+56
| | | | As specified at https://github.com/WebAssembly/simd/blob/master/proposals/simd/SIMD.md#swizzling-using-variable-indices.
* Apply the sbrk/brk value at compile time (#2366)Alon Zakai2019-09-302-2/+38
| | | | | We've had an option to set the location of the sbrk ptr, but not the value. Applying the value as well is necessary for standalone wasm, as otherwise we set it in JS.
* Add feature flags and validation to wasm-metadce (#2364)Thomas Lively2019-09-271-2/+12
| | | | | | Sometimes wasm-metadce is the last tool to run over a binary in Emscripten, and in that case it needs to know what features are enabled in order to emit a valid binary. For example it needs to know whether to emit a data count section.
* Only create `_start` if it doesn't already exist (#2363)Sam Clegg2019-09-271-0/+3
|
* SIMD load and extend instructions (#2353)Thomas Lively2019-09-2415-10/+278
| | | | | | Adds support for the new load and extend instructions. Also updates from C++11 to C++17 in order to use generic lambdas in the interpreter implementation.
* v128.andnot instruction (#2355)Thomas Lively2019-09-2413-10/+42
| | | | | As specified at https://github.com/WebAssembly/simd/pull/102. Also fixes bugs in the JS API for other SIMD bitwise operators.
* vNxM.load_splat instructions (#2350)Thomas Lively2019-09-2325-56/+479
| | | | | | | Introduces a new instruction class, `SIMDLoad`. Implements encoding, decoding, parsing, printing, and interpretation of the load and splat instructions, including in the C and JS APIs. `v128.load` remains in the `Load` instruction class for now because the interpreter code expects a `Load` to be able to load any memory value type.
* Show the unescaped name in Asyncify pattern warnings (#2351)Alon Zakai2019-09-231-3/+5
| | | | | | | | | This is part of the fix for https://logs.chromium.org/logs/emscripten-releases/buildbucket/cr-buildbucket.appspot.com/8901492015302662960/+/steps/Emscripten_testsuite__upstream__other_/0/stdout Specifically it fixes that the name shown there should not be escaped. Followup for #2344
* wasm-emscripten-finalize: Add more checking of __data_end global (#2352)Sam Clegg2019-09-231-0/+3
|
* asyncify: support *-matching in whitelist and blacklist (#2344)Beuc2019-09-232-37/+76
| | | See emscripten-core/emscripten#9381 for rationale.
* Revert part of #2281 to allow the possiblity of building under python2 (#2349)Sam Clegg2019-09-231-1/+1
| | | | | | | | Even though we do support python3 and if the python in your path happens to be python3 that will work just fine, we also want to continue to support those users who still only have python2 (i.e. mac users who are relying on the default system python). See https://github.com/emscripten-core/emsdk/issues/356
* Mark C API as dllexports on Windows (#2342)Michal Strehovský2019-09-211-905/+1022
| | | | | On Windows, symbols have to be explicitly exported to make them visible/accessible in a shared library. Binaryen.dll currently doesn't export any symbols as a result. Marking all exported methods as `BINARYEN_API` that is defined as `__declspec(dllexport)` on Windows, unless building a static library.
* Fix typo in Asyncify (#2346)Beuc2019-09-191-2/+2
|
* Add a --standalone-wasm flag to wasm-emscripten-finalize (#2333)Alon Zakai2019-09-183-1/+38
| | | The flag indicates that we want to run the wasm by itself, without JS support. In that case we don't emit JS dynCalls etc., and we also emit a wasi _start if there is a main, i.e., we try to use the current conventions in the wasm-only space.
* SIMD narrowing and widening operations (#2341)Thomas Lively2019-09-1416-25/+542
|
* SimplifyGlobals: Apply known constant values in linear traces (#2340)Alon Zakai2019-09-133-14/+83
| | | | | | | | | | | | | This optimizes stuff like (global.set $x (i32.const 123)) (global.get $x) into (global.set $x (i32.const 123)) (i32.const 123) This doesn't help much with LLVM output as it's rare to use globals (except for the stack pointer, and that's already well optimized), but it may help on general wasm. It can also help with Asyncify that does use globals extensively.
* Add asserts in Asyncify (#2338)Alon Zakai2019-09-131-7/+84
| | | | | With the optional asserts, we throw if we see an unwind begin in code that we thought could never unwind (say, because the user incorrectly blacklisted it). Helps with emscripten-core/emscripten#9389
* Replace python command with python3 (#2281)Markus Koschany2019-09-131-1/+1
|
* Fix bitselect operation in C/JS APIs (#2336)Daniel Wirtz2019-09-112-1/+3
| | | In #2328 the SIMDBitselect API has been replaced with SIMDTernary that now has Bitselect as one of multiple operations, which is currently not exposed, unlike the new QFMA/QFMS operations which are exposed. This PR adds it.
* More response file support in asyncify: whitelist/blacklist (#2335)Alon Zakai2019-09-081-2/+10
|
* Properly handle fastcomp *wasm* safe heap (#2334)Alon Zakai2019-09-061-1/+6
| | | | | Properly handle fastcomp wasm safe heap: emscripten_get_sbrk_ptr is an asm.js library function, which means it is inside the wasm after asm2wasm, and exported. Find it via the export.
* Handle sbrk import by emscripten+upstream in SafeHeap (#2332)Alon Zakai2019-09-061-10/+20
| | | | | To allow #2331 to roll, I forgot that upstream and fastcomp handle sbrk differently. This fixes that, and handles the upstream case where we import sbrk itself from JS. We can simplify this after emscripten-core/emscripten#9397 lands, however, it may also be nice to keep the backwards compatibility for running on existing wasm files in the wild.
* Print custom section contents if printable (#2326)Ingvar Stepanyan2019-09-061-0/+19
| | | This helps with debugging human-readable sections like sourceMappingURL.
* SafeHeap: Prepare for emscripten_get_sbrk_ptr (#2331)Alon Zakai2019-09-051-8/+22
| | | | | | | Currently emscripten links the wasm, then links the JS, then computes the final static allocations and in particular the location of the sbrk ptr (i.e. the location in memory of the brk location). Emscripten then imports that into the asm.js or wasm as env.DYNAMICTOP_PTR. However, this didn't work in the wasm backend where we didn't have support for importing globals from JS, so we implement sbrk in JS. I am proposing that we change this model to allow us to write sbrk in C and compile it to wasm. To do so, that C code can import an extern C function, emscripten_get_sbrk_ptr(), which basically just returns that location. The PostEmscripten pass can even apply that value at compile time, so we avoid the function call, and end up in the optimal place, see #2325 and emscripten PRs will be opened once other stuff lands. However, the SafeHeap pass must be updated to handle this, or our CI will break in the middle. This PR fixes that, basically making it check if env.DYNAMICTOP_PTR exists, or if not then looking for env.emscripten_get_sbrk_ptr, so that it can handle both.
* [wasm2js] Fix memory.size (#2330)Alon Zakai2019-09-051-11/+19
| | | | | | | We emitted the __wasm_memory_size function only when memory growth was enabled, but it can be used without that too. In theory we could only emit it if either memory growth or memory.size is used, but I think we can expect JS minifiers to do that later. Also fix a test suite bug - the check/auto_update script didn't run all the wasm2js tests when you run it with argument wasm2js (it used that as the list of tests, instead of the list of files, which confused me here for a while...).
* Add an option for the PostEmscripten pass to set the sbrk ptr location ↵Alon Zakai2019-09-041-2/+29
| | | | | | | (which is called DYNAMICTOP_PTR in emscripten) (#2325) The assumption is that an import env.emscripten_get_sbrk_ptr exists, and we replace the value returned from there with a constant. (We can't do all this in wasm-emscripten-finalize, as it happens before the JS compiler runs, which can add more static allocations; we only know where the sbrk ptr is later in compilation.) This just replaces the import with a function returning the constant; inlining etc. can help more later. By setting this at compile time we can reduce code size and avoid importing it at runtime, which makes us more compatible with wasi (less special imports).
* Wasi followups to #2323 (#2329)Alon Zakai2019-09-033-6/+3
| | | | | Remove wasi, as only wasi_unstable makes sense. Also remove shared constant for wasi as we don't know yet if it'll be needed later.
* QFMA/QFMS instructions (#2328)Thomas Lively2019-09-0325-136/+275
| | | | | | | | | Renames the SIMDBitselect class to SIMDTernary and adds the new {f32x4,f64x2}.qfm{a,s} ternary instructions. Because the SIMDBitselect class is no more, this is a backwards-incompatible change to the C interface. The new instructions are not yet used in the fuzzer because they are not yet implemented in V8. The corresponding LLVM commit is https://reviews.llvm.org/rL370556.
* Add mutable parameter to global imports in C/JS API (#2317)Daniel Wirtz2019-09-033-5/+8
|
* Minify wasi imports and exports, and not just "env" (#2323)Alon Zakai2019-09-013-5/+17
| | | This makes the minification pass aware of "wasi_unstable" and "wasi" as well.
* Support response files, and use that in Asyncify (#2319)Alon Zakai2019-08-304-2/+34
| | | See emscripten-core/emscripten#9206, the asyncify names can need complex escaping, so this provides an escape hatch.
* Followup to workaround for minification of wasm2js mem init (#2318)Brion Vibber2019-08-301-3/+3
| | | | | | | | | | | | | Emscripten's minifier mis-minifies a couple bits in the memory init function that's used with wasm2js when not using an external memory init file: https://github.com/emscripten-core/emscripten/issues/8886 Previous fix worked around the bug in one place but failed to account for another. Have now confirmed that it works with this change in place. Updated test cases to match.
* Add missing new features to the C and JS APIs (#2312)Daniel Wirtz2019-08-283-0/+10
|
* Allow all features on wasm2js and add atomic tests (#2311)Heejin Ahn2019-08-282-11/+7
| | | | | | This adds `-all` argument to wasm2js testing and fixes wasm2js to actually take that argument (currently it doesn't, when it takes a wast file). This also adds a wasm2js test for `atomic.fence` instruction that was added in #2307.
* Add atomic.fence instruction (#2307)Heejin Ahn2019-08-2726-17/+186
| | | | | | | This adds `atomic.fence` instruction: https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md#fence-operator This also fix bugs in `atomic.wait` and `atomic.notify` instructions in binaryen.js and adds tests for them.
* Do not hoist truncation of wasm2js divisions (#2305)Thomas Lively2019-08-261-2/+4
| | | | | | It is not valid to defer the truncation of divisions because accumulated non-integral results can produce different values when they are combined before truncation. This was causing a test failure in the Rust test suite.
* Remove test output from source tree (#2114)Sam Clegg2019-08-211-1/+1
|
* Support --version argument in command line tools (#2304)Sam Clegg2019-08-201-0/+9
|