| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Adds command-line argument to build-js.sh for specifying the location of Emscripten. Also spreads out program arguments on separate lines
* Exposes WasmBinaryWriter and BufferWithRandomAccess in the JS API to allow writing WASM modules and access the produced bytes via the JS API
* Updates bin/binaryen.js and bin/wasm.js from changes to build-js.sh
* Adds exclude patterns to .gitignore for some files generated by build-js.sh and .DS_Store for macOS
* Changes build-js.sh to use EMSCRIPTEN env var instead of a command-line argument to provide the path to emscripten
* Improvements to JS builds
- Adds -g flag to build-js.sh that will build unoptimized and unmangled versions of binaryen.js and wasm.js (output has a "-g.js" suffix to allow co-existence with regular optimized builds).
- Enables closure compiler for non-debug builds
- Adds browser test for s-expression parser + WASM code gen (requires wasm to be enabled in the browser.)
- Adds iterator interface to BufferWithRandomAccess (when Symbol.iterator is available)
- Adds toArrayBuffer to BufferWithRandomAccess (when TypedArray is available)
- Adds compileWast(sourceText :string) :ArrayBuffer to the module, parsing & compiling s-expression code to a WASM module
- Changes the way binaryen.js is exported to allow usage in CommonJS, AMD and UMD envionments.
* Expose "Binaryen" global in a better way to work with a.js generated by check.py
* Fix to binaryen.js to only export a global variable when running the test (a.js) while inside a module (avoids polluting global in e.g. nodejs). Also fixes a spelling mistake.
* Better "no WASM detected" message in test/binaryen.js/browser.html
* Small change to error message in build-js.sh where $EMSCRIPTEN does not point to a directory
* Changes emcc args in build-js.sh after investingating a large number of argument combinations. Also adds a browser benchmark. The result of emcc arguments and the effect on performance is summarized in this doc: https://gist.github.com/rsms/e33c61a25a31c08260161a087be03169
* Enable inferring emscripten path by looking in PATH when EMSCRIPTEN is not set in env
|
|
|
|
|
|
|
| |
This brings in LLVM changes up to r28025, which includes a fix for
PR29127 and includes disabling the store-result optimization.
* remove extraneous wasm-interpreter.h change
|
|
|
|
| |
emscripten_longjmp_jmpbuf name
|
|
|
|
|
|
|
| |
This needs to export realloc as well, in addition to malloc and free
handled in #4469. To support asm.js style setjmp/longjmp, wasm
needs to export realloc as well, in addition to malloc and free
handled in #4469. saveSetjmp() uses realloc within it, and realloc is
not implemented in JS glue code.
|
|\
| |
| | |
Fix asm2wasm dead lock caused by empty module
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This commit fixes an asm2wasm dead lock when asm2wasm is compiling an
empty module, i.e. a module without any functions.
Without this commit, worker threads are likely to leave `workerMain()`
and decrease `liveWorkers` early. Consequently, `waitUntilAllReady()`
will never observe `liveWorkers == numWorkers`.
|
|/
|
|
|
|
|
|
|
|
|
|
| |
When parsing .lcomm directives, s2wasm does not parse the alignment
number and skip it. This causes alignment bugs in some cases. (In the
test case attached, 'buf' should be 4 bytes aligned, but it does not
align it properly, so this code was generated:
```
(call $foo
(i32.const 13)
)
```
13 is not 4-bytes aligned. This patch fixes this bug.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Implement asm.js style exception handling for Wasm
Converts invoke wrapper names generated by LLVM backend to real invoke wrapper
names that are expected by JavaScript glue code.
This is required to support wasm exception handling (asm.js style).
LLVM backend lowers
invoke @func(arg1, arg2) to label %invoke.cont unwind label %lpad
into
... (some code)
call @invoke_SIG(func, arg1, arg2)
... (some code)
SIG is a mangled string generated based on the LLVM IR-level function
signature. In LLVM IR, types are not lowered yet, so this mangling scheme
simply takes LLVM's string representtion of parameter types and concatenate
them with '_'. For example, the name of an invoke wrapper for function void
foo(struct mystruct*, int) will be "__invoke_void_%struct.mystruct*_int". This
function converts the names of invoke wrappers based on their lowered argument
types and a return type. In the example above, the resulting new wrapper name
becomes "invoke_vii".
* Address comments
Change variable names to camelcase
Add a small (semi-)handwritten test case
* Export malloc and free from wasm when available
* Add a test case for exporting malloc/free feature
+ cosmetic 'file' name change in text_before_type.s
* fixInvokeWrapper -> fixEmExceptionInvoke
* Add a TODO
|
|
|
|
|
| |
(#665)
and update spec tests
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Name lhs = getStrToSep();
if (!skipEqual()){
s = strchr(s, '\n');
if (!s) break;
continue;
}
The above code snippet introduced by #615 has a bug when there is only
one word (e.g. ".text") in a line. If there is only one word in a line,
skipEqual() also skips the newline character at the end of the line, and
strchr(s, '\n') moves the cursor to the end of the next line,
effectively skipping the whole next line.
|
|
|
| |
Includes torture tests and new expected passes
|
|
|
| |
Resolves WebAssembly/spec#312
|
|
|
| |
This patch adds support for an ".indidx" primitive that pre-assigns table indexes for functions that are called indirectly. It is used by the upstream LLVM WebAssembly backend to support fine-grained control-flow integrity for indirect function calls by emitting instrumentation at each indirect call site to check that the destination index is within certain ranges that correspond to disjoint equivalence classes of indirect call targets. The reason that this primitive is necessary is because the layout of the table section isn't determined until the WebAssembly linker is executed, but indirect function to table index mappings need to be known when opt is executed to generate the correct range checking in the LLVM IR.
|
| |
|
|\
| |
| | |
Relooper improvements
|
| |
| |
| |
| | |
merging based on their names
|
| | |
|
| |
| |
| |
| | |
stack of blocks for them. after this change, only irreducible control flow should cause label variable usage
|
| | |
|
|/
|
| |
Also update torture test .s files
|
| |
|
| |
|
|
|
|
| |
testing
|
| |
|
| |
|
|
|
|
| |
can trap (#637)
|
|
|
| |
This brings in the updates for the renaming of the binaries from 5936f05
|
|\
| |
| | |
Tool renaming and refactoring
|
| |
| |
| |
| | |
tests
|
|/
|
|
| |
* don't emit empty array literals in trace output
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
api calls
|
|
|
| |
Adds support for aliases to objects, to go along with the existing support for aliases to functions.
|
|
|
|
| |
helper var use
|
| |
|
| |
|