Changelog
=========

This document describes changes between tagged Binaryen versions.

To browse or download snapshots of old tagged versions, visit
https://github.com/WebAssembly/binaryen/releases.

Not all changes are documented here. In particular, new features, user-oriented
fixes, options, command-line parameters, usage changes, deprecations,
significant internal modifications and optimizations etc. generally deserve a
mention. To examine the full set of changes between versions, visit the link to
full changeset diff at the end of each section.

Current Trunk
-------------
- The c api now has separate functions for `CallRef` and `ReturnCallRef` matching the semantics of `Call` and `ReturnCall`.

v125
----

 - Add a ReorderTypes pass (#7879).
 - C and JS APIs now assume RefFuncs are created after imported functions (non-
   imported functions can still be created later). This is necessary because
   imported function types can vary (due to Custom Descriptors), and we need to
   look up that type at RefFunc creation time. (#7993)
 - The --mod-asyncify-never-unwind and --mod-asyncify-always-and-only-unwind
   passed were deleted.  They only existed to support the lazy code loading
   support in emscripten that was removed. (#7893)
 - The cost modeling of calls was increased to a high number. That cost is
   usually not something you can notice (as calls have effects that make
   removing/replacing them impossible), but you may notice this when using
   call.without.effects (calls will no longer be assumed to be cheap enough to
   run unconditionally) or monomorphize (which inputs a cost factor as a
   number). (#8047)
 - Cross-module fuzzing: Add support generate and fuzz two linked files (#7947,
   #7949, etc.)

v124
----

 - Add Custom Descriptors support. (Fuzzing: #7796)
 - Add Stack Switching support. (Fuzzing: #7834)
 - Add Compilation Hints + Branch Hinting support. (Fuzzing #7704)
 - Build mimalloc with `MI_NO_OPT_ARCH` to fix Raspberry Pi 4 on Arm64. (#7837)
 - `wasm-split`'s `--multi-split` mode now supports more options:
   `--no-placeholders`, `--import-namespace`, `--emit-module-names`,
   `--emit-text`, `--symbolmap`, and `--placeholdermap`. Because
   `--no-placeholders` is false by default and until now `--multi-split` didn't
   use placeholders at all, this is a breaking change. If you want to continue
   to do multi-split without placeholders, you need to explicitly specify
   `--no-placeholders`. (#7781, #7789, #7792)
 - InstrumentMemory: Allow filtering by instruction, and instrument memory.grow.
   (#7388)
 - Add support for more source map fields, "sourcesContent", "file", and
   "sourceRoot". (#7473)
 - [GC] Add a TypeRefiningGUFA pass. (#7433)
 - [C/JS APIs] Allow JS and C to read the start function of a module (#7424)
 - Add a `--string-lifting` pass that raises imported string operations and
   constants into stringref in Binaryen IR (which can then be fully optimized,
   and typically lowered back down with `--string-lowering`). (#7389)
 - Fuzzer: Improve handling of small inputs and their debugging using a new
   `BINARYEN_FUZZER_MAX_BYTES` env var. (#7832)

v123
----

 - We now support "exact" references from the custom descriptors proposal,
   and emit such references when the feature is enabled. As a result, using
   `-all` will enable that feature (among all others), and cause GC-using
   binaries to use that feature, which most VMs do not yet support. To avoid
   such VM errors, either enable only the features you want, or disable it:
   `-all --disable-custom-descriptors`.
 - Use mimalloc allocator for Linux static builds, making our official release
   binaries a lot faster. (#7378)
 - Add an option to preserve imports and exports in the fuzzer (for fuzzer
   harnesses where they only want Binaryen to modify their given testcases, not
   generate new things in them). (#7300)
 - `string` is now a subtype of `ext` (rather than `any`). This allows better
   transformations for strings, like an inverse of StringLowering, but will
   error on codebases that depend on being able to pass strings into anyrefs.
   (#7373)
 - Require the type of RefFunc expressions to match the type of the referenced
   function. It is no longer valid to type them as funcref in the IR. (#7376)
 - The C and JS APIs for creating RefFunc expressions now take a HeapType
   instead of a Type.
 - MergeSimilarFunctions: Do a return_call when possible (necessary for
   correctness in wasm files that depend on calls for control flow). (#7350)

v122
----

 - The heap type associated with a tag is now preserved through optimization.
   (#7220)
 - The "typed-continuations" features is renamed "stack-switching" and the
   latest instructions are experimentally supported. (#7041)
 - WasmGC branches that send extra values can now be parsed via lowering to use
   scratch locals. (#7202)
 - Add experimental support for atomic struct get and set (#7155) and RMW
   (#7225) operations.

v121
----

 - BinaryenSelect no longer takes a type parameter. (#7097)
 - AutoDrop APIs have been removed. (#7106)
 - bulk-memory-opt and call-indirect-overlong features are added for parity with
   LLVM. (#7139)
 - WasmGC optimizations now run significantly faster and scale better with
   available threads. (#7142)
 - Binaryen now supports parsing control flow structures with parameter types by
   lowering them away in the parsers. (#7149)

v120
----

 - Remove closed world validation checks. These checks were causing more harm
   than good. All valid code will now validate with `--closed-world` (but also
   it now provides fewer warnings to users that enable closed world on code
   which does not conform to the requirements of that mode, which can lead to
   changes in runtime behavior; for the long-term plans, see #6965). (#7019)
 - Many compile time speedups were implemented (2x overall improvement), see
   https://github.com/WebAssembly/binaryen/issues/4165#issuecomment-2372548271
 - Several `exnref` (newest version of Wasm EH) optimizations: #7013, #6996,
   #6997, #6983, #6980
 - Source Maps: Support 5 segment mappings. (#6795)
 - [wasm-split] Add a multi-split mode. (#6943)
 - Add a `--preserve-type-order` option that minimizes text format changes in
   type ordering. (#6916)
 - Add a J2CL specific pass that moves itable entries to vtables. (#6888)

v119
----

 - Passes can now receive individual pass arguments, that is --foo=A --foo=B for
   a pass foo will run the pass twice (which was possible before) and will now
   run it first with argument A and second with B. --pass-arg=foo@BAR will now
   apply to the most recent --foo pass on the commandline, if foo is a pass
   (while global pass arguments - that are not the name of a pass - remain, as
   before, global for all passes). (#6687)
 - The Metrics pass now takes an optional argument to use as the title,
   `--metrics=text` will show that text before the metrics. Each instance of
   Metrics can have unique text, `--metrics=before -O3 --metrics=after`. (#6792)
 - Add C and JS APIs to control more pass options (trapsNeverHappen,
   closedWorld, generateStackIR, optimizeStackIR, and the list of skipped
   passes). (#6713)
 - A C APIs for getting/setting the type of Functions (#6721).
 - Allow using `--skip-pass` on the commandline multiple times (#6714).
 - The instructions relaxed_fma and relaxed_fnma have been renamed to
   relaxed_madd and relaxed_nmadd.
 - Add a new `--heap-store-optimization` pass. (#6882)
 - Add a pass for minimizing recursion groups. (#6832)


v118
----

 - StackIR is now handled entirely during binary writing (#6568). This is
   mostly not noticeable, except that:
   - Text output no longer notes `(; has Stack IR ;)` (as Stack IR only exists
     during binary writing).
   - `--generate-stack-ir`, `--optimize-stack-ir`, and `--print-stack-ir` are
     now flags and not passes. That means the order of operations may seem
     different, as they apply during binary writing (or, if no binary is written
     but we were still asked to print StackIR, `wasm-opt` does it at the very
     end).
   - Whether to generate, optimize, and print StackIR is now noted as part of
     the PassOptions. As a result `BinaryenModulePrintStackIR` and similar APIs
     do not receive an `optimize` flag, as they read the PassOption
     `optimizeStackIR` instead.
 - The new, standards-compliant text parser is now the default.
 - Source map comments on `else` branches must now be placed above the
   instruction inside the `else` branch rather than on the `else` branch itself.
 - Source map locations from instructions are no longer automatically propagated
   to function epilogues.
 - Add a new `BinaryenModuleReadWithFeatures` function to the C API that allows
   to configure which features to enable in the parser. (#6380)
 - The build-time option to use legacy WasmGC opcodes is removed. (#5874)
 - The strings in `string.const` instructions must now be valid WTF-8.
 - The `TraverseCalls` flag for `ExpressionRunner` is removed.
 - C API: Support adding data segments individually (#6346)
 - Add sourcemap support to wasm-metadce and wasm-merge (#6372).
 - Fix semantics of return calls (#6448, #6451, #6464, #6470, #6474).
 - Add table64 lowering pass (#6595).
 - Add TraceCalls instrumentation pass (#6619).

v117
----

 - Add a WebAssembly build to release (#6351)
 - Add Linux aarch64 build to release (#6334).
 - The text format for tuple instructions now requires immediates. For example,
   to make a tuple of two elements, use `tuple.make 2` (#6169) (#6172) (#6170).
 - The text format for `if` expressions now requires `then` and `else` to
   introduce the two branch arms, matching the spec (#6201).
 - Fuzzer: Remove --emit-js-shell logic and reuse fuzz_shell.js instead (#6310).
 - [EH] Add --experimental-new-eh option to wasm-opt (#6270) (#6210).
 - Add StringLowering pass, from stringref to imported-strings (#6271).
 - C API: Add BinaryenFunctionAppendVar (#6213).
 - Add J2CL optimization pass (#6151).
 - Add no-inline IR annotation, and passes to set it based on function name
   (#6146).
 - C API: Add BinaryenTableGetType and BinaryenTableSetType (#6137).
 - Add an Unsubtyping optimization (#5982).
 - Compute full transitive closure in GlobalEffects (#5992).
 - Add passes to finalize or unfinalize types (#5944).
 - Add a tuple optimization pass (#5937).

v116
----

 - "I31New" changed to "RefI31" everywhere it appears in the C API and similarly
   "i31.new" has been replaced with "ref.i31" in the JS API and in printed
   output (#5930, #3931).
 - The standard WasmGC opcodes are now on by default (#5873).

v115
----

- The nonstandard, experimental gc-nn-locals feature has been removed now that
  standard non-nullable locals are supported. (#5080)
- Print all debug annotations when `BINARYEN_PRINT_FULL`. (#5904)
- Use the standard text format for WasmGC now that things are stable there.
  (#5894, #5889, #5852, #5801)
- Rename multimemory flag to `--multimemory` to match its naming in LLVM.
  (#5890)
- Allow opting into standard GC encodings at compile time. (#5868)
- Remove legacy WasmGC instructions. (#5861)
- GUFA: Infer using TrapsNeverHappen. (#5850)
- Add a pass to reorder functions by name, which can be useful for debugging
  (e.g. comparisons after optimizations), `--reorder-functions-by-name`. (#5811)
- C API: Add `BinaryenAddFunctionWithHeapType` which is like
  `BinaryenAddFunction` but takes a heap type. The old function is kept for
  backwards compatibility and as a convenience. (#5829)
- Work on new optimization framework using lattices. (#5784, #5794, #5800,
  #5817, #5831, #5849)
- Heap types are now final by default and openness must be opted into both in
  the text and binary formats as well as in the TypeBuilder API. (#5918)

v114
----

- Fix a bug where e.g. -O3 -Oz ran the -O3 with the opt levels of -Oz, which
  could inhibit inlining, for example. While this is a bugfix, it affects how
  commandline options are interpreted, so if you depended on the old behavior
  this may be a breaking change. That is, the old behavior made -O3 -Oz run the
  first -O3 with -Oz's opt levels, and the new behavior is to run -O3 with the
  proper (-O3) opt levels. This is a followup to #5333 from a previous release.
  (#5787)
- Add pass to remove Exception Handling instructions (#5770).


v113
----

- Add a `wasm-merge` tool. This is a full rewrite of the previous `wasm-merge`
  tool that was removed from the tree in the past. The new version is much
  simpler after recent improvements to multi-memory and multi-table. The
  rewrite was motivated by new use cases for merging modules in the context of
  WasmGC.
- Some C and JS API functions now refer to data and element segments by name
  instead of index.
- The `--nominal` and `--hybrid` command line options and related API functions
  have been removed. The only supported type system is now the standard
  isorecursive (i.e. hybrid) type system. (#5672)
- Add a "mayNotReturn" effect (#5711).
- Disable the memory64 feature in Memory64Lowering.cpp (#5679).
- Disable sign extension in SignExtLowering.cpp (#5676).

v112
----

- Add AbstractTypeRefining pass (#5461)
- Add a mechanism to skip a pass by name (#5448)
- Add TypeMerging pass (#5321)
- Add TypeSSA pass  (#5299)
- Optimization sequences like `-O3 -Os` now do the expected thing and run `-O3`
  followed by `-Os`. Previously the last of them set the defaults that were used
  by all executions, so `-O3 -Os` was equivalent to `-Os -Os`. (There is no
  change to the default optimization level that other passes can see. For
  example, `--precompute-propagate -O2 -O1` will run `--precompute-propagate`
  at opt level `1`, as the global default is set to `2` and then overridden to
  `1`. The only change is that the passes run by `-O2` will actually run `-O2`
  now, while before they'd use the global default which made them do `-O1`.)
- Add `--closed-world` flag. This enables more optimizations in GC mode as it
  lets us assume that we can change types inside the module.
- The isorecursive WasmGC type system (i.e. --hybrid) is now the default to
  match the spec and the old default equirecursive (i.e. --structural) system
  has been removed.
- `ref.is_func`, `ref.is_data`, and `ref.is_i31` have been removed from the C
  and JS APIs and `RefIs` has been replaced with `RefIsNull`.
- Types `Data` and `Dataref` have been replaced with types `Struct` and
  `Structref` in the C and JS APIs.
* `BinaryenStringNew` now takes an additional last argument, `try_`, indicating
  whether the instruction is one of `string.new_utf8_try` respectively
  `string.new_utf8_array_try`.
* `BinaryenStringEq` now takes an additional second argument, `op`, that is
  either `BinaryenStringEqEqual()` if the instruction is `string.eq` or
  `BinaryenStringEqCompare()` if the instruction is `string.compare`.

v111
----

- Add extra `memory64` argument for `BinaryenSetMemory` and new
  `BinaryenMemoryIs64` C-API method to determine 64-bit memory. (#4963)
- `TypeBuilderSetSubType` now takes a supertype as the second argument.
- `call_ref` now takes a mandatory signature type immediate.
- If `THROW_ON_FATAL` is defined at compile-time, then fatal errors will throw a
  `std::runtime_error` instead of terminating the process. This may be used by
  embedders of Binaryen to recover from errors.
- Implemented bottom heap types: `none`, `nofunc`, and `noextern`. RefNull
  expressions and null `Literal`s must now have type `nullref`, `nullfuncref`,
  or `nullexternref`.
- The C-API's `BinaryenTypeI31ref` and `BinaryenTypeDataref` now return nullable
  types.
- The `sign-extension` and `mutable-globals` features are now both enabled by
  default in all tools. This is in order to match llvm's defaults (See
  https://reviews.llvm.org/D125728).
- Add a pass to lower sign-extension operations to MVP.

v110
----

- Add support for non-nullable locals in wasm GC. (#4959)
- Add support for multiple memories. (#4811)
- Add support for the wasm Strings proposal. (see PRs with [Strings] in name)
- Add a new flag to Directize, `--pass-arg=directize-initial-contents-immutable`
  which indicates the initial table contents are immutable. That is the case for
  LLVM, for example, and it allows us to optimize more indirect calls to direct
  ones. (#4942)
- Change constant values of some reference types in the C and JS APIs. This is
  only observable if you hardcode specific values instead of calling the
  relevant methods (like `BinaryenTypeDataref()`). (#4755)
- `BinaryenModulePrintStackIR`, `BinaryenModuleWriteStackIR` and
  `BinaryenModuleAllocateAndWriteStackIR` now have an extra boolean
  argument `optimize`. (#4832)
- Remove support for the `let` instruction that has been removed from the typed
  function references spec.
- HeapType::ext has been restored but is no longer a subtype of HeapType::any to
  match the latest updates in the GC spec. (#4898)
- `i31ref` and `dataref` are now nullable to match the latest GC spec. (#4843)
- Add support for `extern.externalize` and `extern.internalize`. (#4975)

v109
----

- Add Global Struct Inference pass (#4659) (#4714)
- Restore and fix SpillPointers pass (#4570)
- Update relaxed SIMD instructions to latest spec

v108
----

- Add CMake flag BUILD_TOOLS to control building tools (#4655)
- Add CMake flag JS_OF_OCAML for js_of_ocaml (#4637)
- Remove externref (#4633)

v107
----

- Update the wasm GC type section binary format (#4625, #4631)
- Lift the restriction in liveness-traversal.h on max 65535 locals (#4567)
- Switch to nominal fuzzing by default (#4610)
- Refactor Feature::All to match FeatureSet.setAll() (#4557)
- New Signature Pruning pass (#4545)
- Add support for extended-const proposal (#4529)
- Add BUILD_TESTS CMake option to make gtest dependency optional.
- Updated tests to use filecheck 0.0.22 (#4537). Updating is required to
  successfully run the lit tests. This can be done with
  `pip3 install -r requirements-dev.txt`.

v106
----

- [wasm2js] Support exports of Globals (#4523)
- MergeSimilarFunctions optimization pass (#4414)
- Various wasm-ctor-eval improvements, including support for GC.

v105
----

- This release contains binaries for ARM64 MacOS devices (#4397)
- Otherwise, mostly bug fixes and incremental optimization improvements.

v104
----

- Bugfixes only, release created due to incorrect github release artifacts in
  v103 release (#4398).

v103
----

- The EffectAnalyzer now takes advantage of immutability of globals. To achieve
  that it must have access to the module. That is already the case in the C++
  API, but the JS API allowed one to optionally not add a module when calling
  `getSideEffects()`. It is now mandatory to pass in the module.
- JS and Wasm builds now emit ECMAScript modules. New usage is:
  ```js
  import Binaryen from "path/to/binaryen.js";
  const binaryen = await Binaryen();
  ...
  ```
- CallIndirect changed from storing a Signature to storing a HeapType

v102
----

- Add `BinaryenUpdateMaps` to the C API.

- Adds a TrapsNeverHappen mode (#4059). This has many of the benefits of
  IgnoreImplicitTraps, but can be used safely in more cases. IgnoreImplicitTraps
  is now deprecated.

- Adds type argument for BinaryenAddTable method (#4107). For the binaryen.js api
  this parameter is optional and by default is set to funcref type.

- Replace `BinaryenExpressionGetSideEffects`'s features parameter with a module
  parameter.

- OptimizeInstructions now lifts identical code in `select`/`if` arms (#3828). This may cause direct `BinaryenTupleExtract(BinaryenTupleMake(...))` to [use multivalue types](https://github.com/grain-lang/grain/pull/1158).

v101
----

- `BinaryenSetFunctionTable` and `module.setFunctionTable` have been removed
  in favor of `BinaryenAddTable` and `module.addTable` respectively.
- `BinaryenIsFunctionTableImported` is removed.
- A new type `BinaryenElementSegmentRef` has been added to the C API with
  new apis in both C & JS:
  - `BinaryenAddActiveElementSegment`
  - `BinaryenAddPassiveElementSegment`
  - `BinaryenRemoveElementSegment`
  - `BinaryenGetElementSegment`
  - `BinaryenGetElementSegmentByIndex`
  - `BinaryenElementSegmentGetName`
  - `BinaryenElementSegmentSetName`
  - `BinaryenElementSegmentGetTable`
  - `BinaryenElementSegmentSetTable`
  - `BinayenElementSegmentIsPassive`
  - `module.addActiveElementSegment`
  - `module.addPassiveElementSegment`
  - `module.removeElementSegment`
  - `module.getElementSegment`
  - `module.getElementSegmentByIndex`
  - `module.getTableSegments`
  - `module.getNumElementSegments`
  - `binaryen.getElementSegmentInfo`
- `BinaryenAddTable` and `module.addTable` no longer take offset and function
    names.
- `BinaryenGetNumFunctionTableSegments` is replaced with
  `BinaryenGetNumElementSegments`.
- `BinaryenGetFunctionTableSegmentOffset` is replaced with
  `BinaryenElementSegmentGetOffset`.
- `BinaryenGetFunctionTableSegmentLength` is replaced with
  `BinaryenElementSegmentGetLength`.
- `BinaryenGetFunctionTableSegmentData` is replaced with
  `BinaryenElementSegmentGetData`.
- Boolean values in the C API now should use `bool` instead of `int`.
- Experimental SIMD instructions have been removed and the names and opcodes of
  the standard instructions have been updated to match the final spec.

v100
----

- `wasm-dis` now supports options to enable or disable Wasm features.
- Reference types support has been improved by allowing multiple tables in a
  module.
- `call_indirect` and `return_call_indirect` now take an additional table name
  parameter. This is necessary for reference types support.
- New getter/setter methods have been introduced for `call_indirect` table name:
  - `BinaryenCallIndirectGetTable`
  - `BinaryenCallIndirectSetTable`
  - JS API `CallIndirect.table`
- New APIs have been added to add and manipulate multiple tables in a module:
  - `BinaryenAddTable`
  - `BinaryenRemoveTable`
  - `BinaryenGetNumTables`
  - `BinaryenGetTable`
  - `BinaryenGetTableByIndex`
  - `BinaryenTableGetName`
  - `BinaryenTableGetInitial`
  - `BinaryenTableHasMax`
  - `BinaryenTableGetMax`
  - `BinaryenTableImportGetModule`
  - `BinaryenTableImportGetBase`
  - `module.addTable`
  - `module.removeTable`
  - `module.getTable`
  - `module.getTableByIndex`
  - `module.getNumTables`
  - `binaryen.getTableInfo`

v99
---

- Fix optimization behavior on assuming memory is zero-filled. We made that
  assumption before, but it is incorrect in general, which caused problems.
  The fixed behavior is to not assume it, but require the user to pass it in as
  a flag, `--zero-filled-memory`. Large binaries with lots of empty bytes in the
  data section may regress without that flag. Toolchains like Emscripten can
  pass the flag automatically for users if they know it is right to assume,
  which can avoid any regressions. (#3306)
- `RefFunc` C and JS API constructors (`BinaryenRefFunc` and `ref.func`
  respectively) now take an extra `type` parameter, similar to `RefNull`. This
  is necessary for typed function references support.
- JS API functions for atomic notify/wait instructions are renamed.
  - `module.atomic.notify` -> `module.memory.atomic.notify`
  - `module.i32.atomic.wait` -> `module.memory.atomic.wait32`
  - `module.i64.atomic.wait` -> `module.memory.atomic.wait64`
- Remove old/broken SpollPointers pass.  This pass: Spills values that might be
  pointers to the C stack. This allows Boehm-style GC to see them properly.
  This can be revived if needed from git history (#3261).
- Make `NUM_PARAMS` in `FuncCastEmulation` a runtime configuration option named
  `max-func-params`. This defaults to the original value of 16.
- `BinaryenGetFunction`, `BinaryenGetGlobal` and `BinaryenGetEvent` now return
  `NULL` instead of aborting when the respective element does not yet exist.

v98
---

- Add `--fast-math` mode. (#3155)
- Initial implementation of "Memory64" proposal (#3130)
- Lots of changes in support of GC proposal

v97
---

- Remove asm2wasm, which supported Emscripten's fastcomp backend, after fastcomp
  was removed.
- The new feature flag `--enable-anyref` enables just the `anyref` type incl.
  basic subtyping of `externref`, `funcref` and `exnref` (if enabled).
- Enabling the exception handling or anyref features without also enabling
  reference types is a validation error now.
- The `Host` expression and its respective APIs have been refactored into
  separate `MemorySize` and `MemoryGrow` expressions to align with other memory
  instructions.

v96
---

- Fuzzing: Compare wasm2js to the interpreter (#3026)
- Fix CountLeadingZeroes on MSVC, which lead to bad optimizations (#3028)
- Asyncify verbose option (#3022)
- wasm2js: Add an "Export" scope for name resolution, avoids annoying
  warnings (#2998)
- Extend the C- and JS-APIs (#2586)

v95
---

- Add Asyncify "add list" that adds to the list of functions to be instrumented.
  Rename old lists to be clearer and more consistent with that, so now there is
  "remove list" to remove, "add list" to add, and "only list" which if set means
  that only those functions should be instrumented and nothing else.
- Renamed various ambiguous C-API functions for consistency:
  - `BinaryenBlockGetChild` to `BinaryenBlockGetChildAt`
  - `BinaryenSwitchGetName` to `BinaryenSwitchGetNameAt`
  - `BinaryenCallGetOperand` to `BinaryenCallGetOperandAt`
  - `BinaryenCallIndirectGetOperand` to `BinaryenCallIndirectGetOperandAt`
  - `BinaryenHostGetOperand` to `BinaryenHostGetOperandAt`
  - `BinaryenThrowGetOperand` to `BinaryenThrowGetOperandAt`
  - `BinaryenTupleMakeGetOperand` to `BinaryenTupleMakeGetOperandAt`

v94
---

- The C-API's `BinaryenSetAPITracing` and the JS-API's `setAPITracing` have been
  removed because this feature was not very useful anymore and had a significant
  maintainance cost.
- wasm-emscripten-finalize will no longer generate `stackSave`, `stackAlloc`,
  `stackRestore` function.  It not expects them to be included in the input
  file.

v93
---

- First release with binaries built with github actions.


v92
---

- The `multivalue` feature has been added. It allows functions and control flow
  structures to return tuples and for locals and globals to have tuple types.
  Tuples are created with the new `tuple.make` pseudoinstruction and their
  elements are retrieved with the new `tuple.extract` pseudoinstruction.
- The internal type interner has been rewritten to avoid taking locks in far
  more situations. Depending on the workload, this may result in large speedups
  and increased parallelism.
- Represent the `dylink` section in Binaryen IR, so we can read, write, and
  update it.

v91
---

- `BinaryenExpressionGetSideEffects` (C API) and `getSideEffects` (JS API) now
  takes an additional `features` parameter.
- Reference type support is added. Supported instructions are `ref.null`,
  `ref.is_null`, `ref.func`, and typed `select`. Table instructions are not
  supported yet. For typed `select`, C/JS API can take an additional 'type'
  parameter.

v90
---

- `local.tee`'s C/Binaryen.js API now takes an additional type parameter for its
  local type, like `local.get`. This is required to handle subtypes.
- Added load_splat SIMD instructions
- Binaryen.js instruction API changes:
  - `notify` -> `atomic.notify`
  - `i32.wait` / `i64.wait` -> `i32.atomic.wait` / `i64.atomic.wait`
- Binaryen.js: `flags` argument in `setMemory` function is removed.
- `atomic.fence` instruction support is added.
- wasm-emscripten-finalize: Don't rely on name section being present in the
  input. Use the exported names for things instead.
- Added `mutable` parameter to BinaryenAddGlobalImport.
- Replace BinaryenSIMDBitselect* with BinaryenSIMDTernary* in the C API and add
  qfma/qfms instructions.
- Added `offset` parameter to BinaryenSetFunctionTable.
- Add the ability to create multivalue Types in the C and JS APIs.
- Remove named function types. They are replaced by `params` and `results` types
  local to each function.
- Binaryen.js can now be compiled to Wasm using the `binaryen_wasm` target.
  Unlike the JS variant, the Wasm variant requires asynchronously awaiting the
  Wasm blob's instantiation and initialization before being usable, using the
  `binaryen.ready` promise, e.g. `binaryen.ready.then(() => ...)`.
- Binaryen.js now uses `binaryen` (was `Binaryen`) as its global name to align
  with the npm package.
- Binaryen.js: The result of `getMemorySegmentInfoByIndex` now has the same
  structure as the respective inputs on creation (`byteOffset` -> `offset`).

v88
---

- wasm-emscripten-finalize: For -pie binaries that import a mutable stack
  pointer we internalize this an import it as immutable.
- The `tail-call` feature including the `return_call` and `return_call_indirect`
  instructions is ready to use.

v87
---

- Rename Bysyncify => Asyncify

v86
---

- The --initial-stack-pointer argument to wasm-emscripten-finalize no longer
  has any effect.  It will be removed completely in future release.

v85
---

- Wast file parsing rules now don't allow a few invalid formats for typeuses
  that were previously allowed. Typeuse entries should follow this format,
  meaning they should have (type) -> (param) -> (result) order if more than one
  of them exist.
  ```
  typeuse ::= (type index|name)+ |
              (type index|name)+ (param ..)* (result ..)* |
              (param ..)* (result ..)*
  ```
  Also, all (local) nodes in function definition should be after all typeuse
  elements.
- Removed APIs related to deprecated instruction names in Binaryen.js:
  - `get_local` / `getLocal`
  - `set_local` / `setLocal`
  - `tee_local` / `teeLocal`
  - `get_global` / `getGlobal`
  - `set_global` / `setGlobal`
  - `current_memory` / `currentMemory`
  - `grow_memory` / `growMemory`
  They are now available as their new instruction names:
  `local.get`, `local.set`, `local.tee`, `global.get`, `global.set`,
  `memory.size`, and `memory.grow`.
- Add feature handling to the C/JS API with no feature enabled by default.

v84
---

- Generate dynCall thunks for any signatures used in "invoke" calls.

v81
---

- Fix AsmConstWalker handling of string address in arg0 with -fPIC code

v80
---

- Change default feature set in the absence of a target features section from
  all features to MVP.

v79
---

- Improve support for side modules

v78
---

- Add `namedGlobals` to metadata output of wasm-emscripten-finalize
- Add support for llvm PIC code.
- Add --side-module option to wasm-emscripten-finalize.
- Add `segmentPassive` argument to `BinaryenSetMemory` for marking segments
  passive.
- Make `-o -` print to stdout instead of a file named "-".

v73
---

- Remove wasm-merge tool.

v73
---

- Remove jsCall generation from wasm-emscripten-finalize.  This is not needed
  as of https://github.com/emscripten-core/emscripten/pull/8255.

v55
---

- `RelooperCreate` in the C API now has a Module parameter, and
  `RelooperRenderAndDispose` does not.
  - The JS API now has the `Relooper` constructor receive the `Module`.
- Relooper: Condition properties on Branches must not have side effects.

older
-----

- `BinaryenSetFunctionTable` in the C API no longer accepts an array of
  functions, instead it accepts an array of function names, `const char**
  funcNames`. Previously, you could not include imported functions because they
  are of type `BinaryenImportRef` instead of `BinaryenFunctionRef`. #1650

- `BinaryenSetFunctionTable` in the C API now expects the initial and maximum
  table size as additional parameters, like `BinaryenSetMemory` does for pages,
  so tables can be grown dynamically. #1687

- Add `shared` parameters to `BinaryenAddMemoryImport` and `BinaryenSetMemory`,
  to support a shared memory. #1686
