summaryrefslogtreecommitdiff
path: root/src/wasm.h
Commit message (Collapse)AuthorAgeFilesLines
...
* Rename WasmType => Type (#1398)Alon Zakai2018-02-021-14/+14
| | | | * rename WasmType to Type. it's in the wasm:: namespace anyhow, and without Wasm- it fits in better alongside Index, Address, Expression, Module, etc.
* Atomic wait/wake fixes (#1383)Alon Zakai2018-01-221-0/+2
| | | | | | | | * fix wait and wake binary format support, they have alignments and offsets * don't emit unreachable parts of atomic operations, for simplicity and to avoid special handling * don't emit atomic waits by default in the fuzzer, they hang in native vm support
* Global optimization fixes (#1360)Alon Zakai2018-01-171-0/+1
| | | | | | | | | | | | | | | | * run dfe at the very end, as it may be more effective after inlining * optimize reorder-functions * do a final dfe in asm2wasm after all other opts * make inlining deterministic: std::atomic<T> values are not zero-initialized * do global post opts at the end of asm2wasm, and don't also do them in the module builder * fix function type removing * don't inline+optimize when preserving debug info
* Add Features enum to IR (#1250)Derek Schuff2017-10-271-0/+7
| | | | | | | | | | | | This enum describes which wasm features the IR is expected to include. The validator should reject operations which require excluded features, and passes should avoid producing IR which requires excluded features. This makes it easier to catch possible errors in Binaryen producers (e.g. emscripten). Asm2wasm has a flag to enable or disable atomics. Other tools currently just accept all features (as, dis and opt are just for inspecting or modifying existing modules, so it would be annoying to have to use flags with those tools and I expect the risk of accidentally introducing atomics to be low).
* fuzzing improvements:Alon Zakai2017-09-271-2/+2
| | | | | | | | * randomize initial memory * low chance to have tiny blocks * decent chance to have a branch back to the loop top
* Make localNames into a map (#1189)Thomas Lively2017-09-231-1/+1
|
* Update text syntax for shared memory limits (#1197)Derek Schuff2017-09-221-0/+2
| | | | Following WebAssembly/threads#58 e.g. (memory $0 23 256 shared) is now (memory $0 (shared 23 256))
* Add support for sign-extension operators from threading proposal (#1167)Derek Schuff2017-09-061-0/+4
| | | These are not atomic operations, but are added with the atomic operations to keep from having to define atomic versions of all the sign-extending loads (an atomic zero-extending load + signext operation can be used instead).
* wasm-reduce tool (#1139)Alon Zakai2017-09-011-0/+1
| | | Reduce an interesting wasm to a smaller still interesting wasm. This takes an arbitrary command to run, and reduces the wasm as much as it can while keeping the behavior of that command fixed. This can be used to reduce compiler bugs in an arbitrary VM, etc.
* i64 to i32 lowering for wasm2asm (#1134)Thomas Lively2017-09-011-1/+0
|
* Add support for atomic wait and wake operators (#1140)Derek Schuff2017-08-241-0/+26
| | | According to spec at https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md#wait-and-wake-operators
* Initial asm.js output for binaryen-c / binaryen.js (#1136)Daniel Wirtz2017-08-241-0/+1
| | | | * Added BinaryenModulePrintAsmjs (using wasm2asm) + Module#emitAsmjs JS binding
* fix Const finalization and use it properly in br finalization in PrecomputeAlon Zakai (kripken)2017-07-111-0/+2
|
* Add IR, parsing, printing, and binary for atomic cmpxchg (#1083)Derek Schuff2017-07-101-1/+10
|
* Add IR, parsing and binary support for AtomicRMW instructions from wasm ↵Derek Schuff2017-07-061-7/+24
| | | | | threads proposal (#1082) Also leave a stub (but valid) visitAtomicRMW in the visitor template so that not all visitors need to implement this function yet.
* Add atomic loads and stores (#1077)Derek Schuff2017-06-281-0/+10
| | | | | Add IR, wast and binary support for atomic loads and stores. Currently all IR generated by means other than parsing wast and binary files always generates non-atomic accesses, and optimizations have not yet been made aware of atomics, so they are certainly not ready to be used yet.
* Add shared memories (#1069)Derek Schuff2017-06-271-1/+2
| | | | | Begin to implement wasm threading proposal in https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md This PR just has shared memory attribute with wast and binary support.
* Update binaryen-c/binaryen.js, fixes #1028, fixes #1029 (#1030)Daniel Wirtz2017-06-071-0/+1
| | | This PR adds global variable support (addGlobal, getGlobal, setGlobal), host operations (currentMemory, growMemory), a few utility functions (removeImport, removeExport, getFunctionTypeBySignature with the latter being scheduled for removal once a better alternative is in place) and it introduces an additional argument to specify the result type in BinaryenBlock (effectively breaking the C-API but retaining previous behaviour by introducing the BinaryenUndefined() type for this purpose). Additionally, it enables compilation with exception support in build-js.sh as exceptions are thrown and caught when optimizing endless loops, intentionally resulting in an unreachable opcode. Affected test cases have been updated accordingly.
* Exporting/importing debug location information from .wast/.asm.js/.s formats ↵Yury Delendik2017-06-011-1/+3
| | | | | | | | (#1017) * Extends wasm-as, wasm-dis and s2wasm to consume debug locations. * Exports source map from asm2wasm
* Unreachable typing fixes (#1004)Alon Zakai2017-05-091-0/+14
| | | | | | | | | | | | * fix type of drop, set_local, set_global, load, etc: when operand is unreachable, so is the node itself * support binary tests properly in test/passes * fix unreachable typing of blocks with no name and an unreachable child * fix continue emitting in asm2wasm * properly handle emitting of unreachable load
* fix unreachable typing: for all nodes, if they are not reached - e.g., a ↵Alon Zakai (kripken)2017-05-021-0/+2
| | | | binary with either side unreachable - then they are unreachable. this makes our usage of the unreachable type consistent
* wasm-merge tool (#919)Alon Zakai2017-04-171-0/+1
| | | | wasm-merge tool: combines two wasm files into a larger one, handling collisions, and aware of the dynamic linking conventions. it does not do full static linking, but may eventually.
* Replace text annotations with explicit file/line for debug info (#967)Derek Schuff2017-04-131-2/+5
| | | Rather than storing debug info as text annotations, store explicit file and line information. This will make it easier to experiment with outputting other serializations or representations (e.g. source maps), and will allow outputting debug info for binaries as well.
* Wasm h to cpp (#926)jgravelle-google2017-03-101-987/+53
| | | | | | | | | | | | | | | | | | | | | | | | * Move WasmType function implementations to wasm.cpp * Move Literal methods to wasm.cpp * Reorder wasm.cpp shared constants back to top * Move expression functions to wasm.cpp * Finish moving things to wasm.cpp * Split out Literal into its own .h/.cpp. Also factor out common wasm-type module * Remove unneeded/transitive includes from wasm.h * Add comment to try/check methods * Rename tryX/checkX methods to getXOrNull * Add missing include that should fix appveyor build breakage * More appveyor
* Fully handle EM_ASM in s2wasm (#910)jgravelle-google2017-02-231-26/+1
| | | | | | | | | | | | * Fully handle EM_ASM in s2wasm * Iterate with size_ts, remember to erase from importsMap as well * Fix dot_s test EM_ASM signatures * Move Name out to its own file, support/name.h * Move removeImportsWithSubstring out of Module class
* read unknown users sections as binary data stored on the Module (#918)Alon Zakai2017-02-211-0/+10
|
* clean up raw pointer import->functionType, make it a Name like everything ↵Alon Zakai2017-02-171-2/+2
| | | | else (#915)
* asm2wasm debuginfo (#895)Alon Zakai2017-02-071-0/+3
| | | | | | | | | | | | * parse file/line comments in asm.js into debug intrinsics * convert debug intrinsics into annotations, and print them * ignore --debuginfo if not emitting text, as wasm binaries don't support that yet * emit full debug info when -g and emitting text; when -g and emitting binary, all we can do is the Names section * update wasm.js
* add a RemoveUnusedModuleElements pass, and make LegalizeJSInterface create ↵Alon Zakai2016-12-071-3/+19
| | | | TempRet0 if needed (otherwise we might remove it before we use it)
* more consistent placement of & and *, on the type (#848)Alon Zakai2016-11-281-28/+34
|
* Don't create a memory section for an imported memory; fixes #772 (#773)Benjamin Bouvier2016-10-131-1/+5
|
* Don't create table sections for imported tables (#756)Derek Schuff2016-10-111-1/+2
| | | Previously the Print pass searched the imports for a table import and skipped printing a local table declaration if found. Instead this refactors to make importation explicit, and also create importation records (previously we were inconsistent about whether such records were created in the IR depending on the wast syntax).
* More binary updates for 0xc (#733)Derek Schuff2016-10-031-1/+4
| | | | | | | | | | | | | | | Refine tables to explicitly exist or not. Previously they were printed or encoded if it had any segments, or an initial or max size. However tables can be defined but empty, so we had a special hack that defined an empty segment when we really just wanted an empty table. Now, just make the existence explicit. Update Function table encoding for 0xc (Table and Element sections) Add end opcodes after function bodies (these are consumed by getMaybeBlock with the same behavior that it had before when it reached the function end, so no explicit decode) Update call_indirect encoding for 0xc (no arity, call target is last)
* Refactor Import::Kind and Export::Kind into an ExternalKind enum class (#725)Alon Zakai2016-10-031-16/+9
|
* Type check block/loop/if sigs (#717)Alon Zakai2016-09-281-25/+17
| | | | | | * type check using block/loop/if types provided in text and binary formats. * print if and loop sigs which were missing. * remove dsl from OptimizeInstructions as after those changes it needs rethinking.
* refactor wasm.h to remove numericIndex hacks, and move indexing to the parsersAlon Zakai2016-09-211-37/+10
|
* global parsingAlon Zakai2016-09-191-0/+1
|
* br_if returns its valueAlon Zakai2016-09-161-1/+5
|
* fix if finalize()Alon Zakai2016-09-131-1/+2
|
* update br type when turning it into a br_if in remove-unused-brsAlon Zakai2016-09-131-0/+2
|
* new export syntax in spec repoAlon Zakai2016-09-071-4/+10
|
* get_global and set_global use a Name instead of an Index, to be more ↵Alon Zakai2016-09-071-2/+2
| | | | consistent with refering to other global objects; e.g. this avoids ordering issues with imported vs non-imported globals
* import type for globalsAlon Zakai2016-09-071-2/+3
|
* import kindsAlon Zakai2016-09-071-1/+9
|
* export kindsAlon Zakai2016-09-071-1/+8
|
* SetGlobal should not return a valueAlon Zakai2016-09-071-4/+0
|
* loops no longer have an out label and other upstream loop updatesAlon Zakai2016-09-071-1/+1
|
* add drop and tee expressionsAlon Zakai2016-09-071-6/+22
|
* offset support in tableAlon Zakai2016-08-151-1/+13
|
* support function table initial and max sizes, and new printing formatAlon Zakai2016-08-121-0/+5
|