summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* Include FuncCastEmulation pass in build-js.sh (#1473)Daniel Wirtz2018-03-141-1/+3
|
* fix liveness-traversal: an action can be either a get, a set, or an other, ↵Alon Zakai2018-03-141-2/+4
| | | | and we assumed a non-get is a set (caught by valgrind) (#1472)
* Function pointer cast emulation (#1468)Alon Zakai2018-03-1317-23/+623
| | | | | | | | | | | This adds a pass that implements "function pointer cast emulation" - allows indirect calls to go through even if the number of arguments or their types is incorrect. That is undefined behavior in C/C++ but in practice somehow works in native archs. It is even relied upon in e.g. Python. Emscripten already has such emulation for asm.js, which also worked for asm2wasm. This implements something like it in binaryen which also allows the wasm backend to use it. As a result, Python should now be portable using the wasm backend. The mechanism used for the emulation is to make all indirect calls use a fixed number of arguments, all of type i64, and a return type of also i64. Thunks are then placed in the table which translate the arguments properly for the target, basically by reinterpreting to i64 and back. As a result, receiving an i64 when an i32 is sent will have the upper bits all zero, and the reverse would truncate the upper bits, etc. (Note that this is different than emscripten's existing emulation, which converts (as signed) to a double. That makes sense for JS where double's can contain all numeric values, but in wasm we have i64s. Also, bitwise conversion may be more like what native archs do anyhow. It is enough for Python.) Also adds validation for a function's type matching the function's actual params and result (surprised we didn't have that before, but we didn't, and there was even a place in the test suite where that was wrong). Also simplifies the build script by moving two cpp files into the wasm/ subdir, so they can be built once and shared between the various tools.
* Fuzz fix: fix copying of host node operands (#1464)Alon Zakai2018-03-081-2/+6
|
* asm2wasm warning improvement (#1463)Alon Zakai2018-03-081-0/+14
| | | | | | * limit the amount of asm2wasm warnings on arguments added/removed in flexible argument handling (e.g. in Python there can be many thousands of such warnings, flooding the output...) * also lock, because those warnings can come from multiple threads
* Let s2wasm emit binary output (#1465)Jacob Gravelle2018-03-0899-108/+177
| | | | | | | | | | | | | | | | | | | | * Emit invokeFuncs list as metadata * Refactor s2wasm to use ModuleWriter * Fix wasm-emscripten-finalize metadata output for binary output * Add a flag to emit binary from s2wasm NOTE: I chose to emit text by default, and binary behind a flag. This mismatches with asm2wasm (and the expectations of users of a "2wasm" tool), but doesn't break any existing users of s2wasm. If s2wasm is deprecated in favor of lld, this will be the least disruptive change, and we won't have to live with awkward defaults for too long. * Emit source maps in the binary output of s2wasm * Only emit binary with an outfile specified
* Fuzz fix: if global does not exist, report error and don't run the rest of ↵Alon Zakai2018-03-071-37/+38
| | | | the checks (#1461)
* afl-fuzz fixes for table/memory instantiation (#1460)Alon Zakai2018-03-062-19/+27
| | | | | | | | | | * replace assert with a proper trap for an invalid offset in table initialization * fix offset handling in initial table size computation: it is an unsigned value * handle traps in fuzz-exec when creating instance * optimization may remove imports - and imported table init may trap, so opts may remove that trap. check for result comparisons in the right order, so we don't get bothered by that
* wasm-reduce improvement: while function removal works, keep doing it (#1459)Alon Zakai2018-03-061-2/+6
|
* Allow small names in test/passes (#1450)Alon Zakai2018-03-055-2/+8
| | | | | * allow tests in test/passes/ to have a numeric name, in which case there is a name.passes file with the names instead of the name containing the passes (which might be long, see #1020)
* better asm2wasm error handling and reporting (#1456)Alon Zakai2018-03-051-5/+5
|
* eliminate multiple return statements for wasm2asm functions (#1448)Nathan Froyd2018-03-0118-240/+145
| | | | This change eliminates one issue that prevents asm.js validation of the generated code, see #1443.
* Drop 'start' in RemoveUnusedModuleElements if the function is empty (#1449)Daniel Wirtz2018-02-285-84/+111
| | | | | | * Drop start function in RemoveUnusedModuleElements if empty * Update tests and dist files
* Fuzz parameter improvements: more params&vars (#1451)Alon Zakai2018-02-282-981/+1038
|
* Allow disabling `-Werror`. (#1445)Richard Diamond2018-02-271-1/+6
| | | `-Werror` and the warnings provided by any specific toolchain/compiler are not standard.
* Flexible param numbers in asm2wasm (#1439)Alon Zakai2018-02-2713-93/+311
| | | | | | | | | | * refactor BINARYEN_PASS_DEBUG code for writing byn-* files, make it easy to emit binaries instead of text * fix up bad argument numbers in asm2wasm. This can be caused by undefined behavior on the LLVM side, which happens to work natively. it's nicer to fix it up like it would be in a native build, and give a warning, instead of failing to compile * update build-js.sh * updated builds
* EM_JS binaryen support (#1410)Jacob Gravelle2018-02-264-62/+216
| | | | | | | | | | | * Emit EM_JS metadata * Include s2wasm-style em_js support * Change em_js metadata to be keyed on name * Add testcase for em_js, don't always emit emJsFuncs metadata * Better error handling for unexpectedly-formatted __em_js__ functions
* fix and implement more unary ops (#1442)Nathan Froyd2018-02-263-8/+433
| | | | | | | | | | | | | | | | | | * add tests for i32.popcnt * lower i64.popcnt * add tests for i64.extend_u/i32 * lower i64.extend_s/i32 * fix lowering i64.eqz * lower i64.eqz more efficiently * add tests for i32.clz/i32.ctz * lower i64.clz/i64.ctz
* Generate all s2wasm metadata in binaryen (#1440)Jacob Gravelle2018-02-2696-106/+150
| | | | | | | | | * Extract comma-handling logic into a lambda function * Start emitting all metadata from binaryen - handle declares and externs * Add implementedFunctions and exports metadata * Remove EM_ASM calls from declares
* Say "wat" instead of "wast". (#1430)Dan Gohman2018-02-231-4/+4
| | | | | | | | | | http://webassembly.org/docs/text-format/ says: > The recommended file extension for WebAssembly code in textual format > is .wat. > Note: The .wast format understood by some of the listed tools is a > superset of the .wat format that is intended for writing test scripts.
* Fix #1437 by limiting -mfpu= to 32bit ARM targets (#1438)Jan Beich2018-02-221-40/+2
|
* fix an ssa bug: we can't assume that even if all set locations assign to the ↵Alon Zakai2018-02-224-69/+154
| | | | same local that it is ok to read that local, as locals may also be written elsewhere (#1423)
* ensure unique import names for each type, by giving them a prefix, avoiding ↵Alon Zakai2018-02-229-58/+64
| | | | collisions between say a global import and a function with a name from the name section that happens to match it (#1424)
* Add i64 high bits (tempRet0) helper funcs when legalizing JS interface (#1428)Alon Zakai2018-02-2215-0/+208
| | | | * add tempRet0 helpers when necessary in legalize-js-interface
* Use -mfpu=vfpv3 instead of -march=native (#1192)Robert Flack2018-02-211-2/+1
|
* Improve name mangling of asm.js identifiers (#1433)Daniel Wirtz2018-02-2121-979/+1257
| | | | | | Also refactors mangling to its own file so it can be reused by generators and consumers, i.e., where it is important to know that an import must be named 'switch_' where it otherwise would be 'switch'. * Update tests and JS dist files
* wasm2asm fixes (#1436)Alon Zakai2018-02-203-26/+16
| | | | | | * don't look for asm.js compilation message if almost asm * fix wasm2asm f32 operations
* Add global initializers to wasm2asm (#1434)Daniel Wirtz2018-02-201-0/+38
| | | | Adds support for (constant i32/f32/f64) global variable initializers, which were previously ignored though get_global/set_global are supported.
* determinism fix: hash results may differ between runs (#1431)Alon Zakai2018-02-161-17/+16
| | | Hash results may differ between runs, as they can depend on pointers. In remove-duplicate-functions, that shouldn't matter, except that we only considered the first item in each hash group vs the others (to avoid O(N^2)), which is fine except for hash collisions (collisions mean 2 groups are merged into one, and considering just the first item vs the rest we miss out on the other duplicates in that single group). And hash collisions do occur (rarely) in practice. Instead, consider all comparisons in each hash group, which should be fine unless we have large amounts of hash collisions.
* better handling of float ops in wasm2asm (#1427)Nathan Froyd2018-02-153-101/+554
| | | | | | | | | | | | | | | | | | | | * explicitly handle binary float operations in processFunctionBody We weren't handling them before, but it wasn't obvious. Make the (non-) handling of them explicit in the code. We'll add handlers for them shortly. * add handling for simple binary float operations min, max, and copysign will require more sophisticated handling. * add handling for float comparisons * move float min/max handling to the correct place It was previously grouped with the i32 ops. * handle float promotion and demotion
* implement lowering for i64 subtraction (#1429)Nathan Froyd2018-02-143-8/+227
| | | | | | | | | * fix lowering of i64 adds We're not permitted to reuse the input as temporary variables for the results. Weird things happen otherwise. * add support for lowering i64 subtraction
* adjust test scripts to cope with out-of-tree builds (#1420)Nathan Froyd2018-02-142-22/+31
| | | | | | Many places assume that test/blah is valid, but that's only valid if you're executing scripts from the binaryen source directory. The binaryen_test option is more general, and enables out-of-tree testing, so that's what we should be using instead.
* Fix flake8 (#1426)Jacob Gravelle2018-02-141-1/+0
|
* add wasm2asm lowering for 64-bit signed comparisons (#1421)Nathan Froyd2018-02-143-1/+535
| | | Plus some tests, to make sure we implemented things correctly.
* fix some comment typos (#1425)Nathan Froyd2018-02-141-2/+2
|
* Fold wasm-link-metadata into wasm-emscripten-finalize (#1408)Jacob Gravelle2018-02-1432-314/+197
| | | | | | | * wasm-link-metadata: Use `__data_end` symbol. * Add --global-base param to emscripten-wasm-finalize to compute staticBump properly * Let ModuleWriter write to a provided Output object
* More simple math opts (#1414)Alon Zakai2018-02-1414-258/+523
| | | | | | | | * optimize more simple math operations: mul of 0, or of 0, and of 0, mul of 1, mul of a power of 2, urem of a power of 2 * fix asm2wasm callImport parsing: the optimizer may get rid of the added offset to a function table * update js builds
* Add .clang-format (#1407)Heejin Ahn2018-02-131-0/+7
|
* Support multiple extensions in lld test generation (#1417)Heejin Ahn2018-02-121-9/+22
|
* Fix safe-heap bounds checking (#1415)Alon Zakai2018-02-122-189/+189
| | | | | * fix safe heap check for load/store of fewer bytes than the type
* wasm-reduce tweaks and improvements (#1405)Alon Zakai2018-02-112-13/+53
| | | | | * wasm-reduce tweaks and improvements: better error messages, better validation, better function removal, etc.
* remove recursion-avoiding code in fuzzer, now that we have hang prevention ↵Alon Zakai2018-02-111-5/+0
| | | | it's useful to test infinite loops (#1404)
* Travis: Remove build for ppc64le, it takes more than 50 minutes (#1413)Jakub Jirutka2018-02-091-4/+3
|
* Link to binaryen.js API docs in the wiki instead (#1412)Daniel Wirtz2018-02-092-247/+2
|
* Merge pull request #1409 from jirutka/travis-5Alon Zakai2018-02-081-15/+10
|\ | | | | Travis: Fix failures, update alpine-chroot-install to 0.7.0
| * Travis: Replace hack for conditional build stage with proper methodJakub Jirutka2018-02-091-14/+9
| | | | | | | | | | | | Travis finally implemented conditional stages/jobs, yay! See: https://docs.travis-ci.com/user/conditional-builds-stages-jobs/
| * Travis: Fix failures, update alpine-chroot-install to 0.7.0Jakub Jirutka2018-02-091-2/+2
|/ | | | | Ubuntu has apparently deleted qemu-user-static packages for Zesty... The script uses packages from Artful since 0.7.0.
* Emscripten addFunction support for Wasm backend (#1395)Heejin Ahn2018-02-0718-30/+1289
| | | This adds necessary command line options for addFunction support, and generates required jsCall imports and generates jsCall thunk functions.
* Dedupe function names when reading a binary (#1396)Jacob Gravelle2018-02-065-8/+35
| | | | | | | | * Dedupe function names when reading a binary * More robust name deduplication, use .s instead of _s * Add name-duplicated wasm binaries
* Update wasm2asm to generate "almost asm" if grow_memory is used (#1340)Kris Selden2018-02-068-8/+406
| | | | | | | | | | * Allow wasm2asm to generate "almost asm" If grow_memory, current_memory or export memory is used then generate "almost asm" with memory growth support. * Log reason for "almost asm" to stderr