Skip to content

Inline mixed int/float arithmetic and fast-array reads in the interpreter - #1549

Merged
saghul merged 1 commit into
masterfrom
interp-float-fastpaths
Jun 29, 2026
Merged

saghul merged 1 commit into
masterfrom
interp-float-fastpaths

Conversation

@saghul

@saghul saghul commented Jun 27, 2026 •

Copy link
Copy Markdown
Contributor
Ported from bellard/quickjs:
- 8e97f24044102b5793524ab22b037ca75f536319 "faster add, sub and mul for mixed
  integer floating point operands" (extended here to OP_div; kept NG's direct
  BOTH_FLOAT fast path instead of replacing it).
- 8e8eefb922b205bb56de14e0279b4e42b5f3f460 "optimized array access by inlining
  get_array_el, get_array_el2, get_array_el3 and put_array_el" (applied to
  get_array_el/el2; NG already inlines put_array_el).

Octane (Release + static mimalloc, median of 3): overall score +6%,
NavierStokes +33%.

@saghul
saghul force-pushed the interp-float-fastpaths branch from 4c18093 to 2b357f8 Compare June 27, 2026 22:32
@saghul
saghul marked this pull request as draft June 27, 2026 22:32
…eter

Ported from bellard/quickjs:
- 8e97f24044102b5793524ab22b037ca75f536319 "faster add, sub and mul for mixed
  integer floating point operands" (extended here to OP_div; kept NG's direct
  BOTH_FLOAT fast path instead of replacing it).
- 8e8eefb "optimized array access by inlining
  get_array_el, get_array_el2, get_array_el3 and put_array_el" (applied to
  get_array_el/el2; NG already inlines put_array_el).

Octane (Release + static mimalloc, median of 3): overall score +6%,
NavierStokes +33%.
@saghul
saghul force-pushed the interp-float-fastpaths branch from 2b357f8 to fc6e06b Compare June 27, 2026 22:35
@saghul
saghul marked this pull request as ready for review June 27, 2026 22:47
@saghul
saghul merged commit 377a25e into master Jun 29, 2026
125 checks passed
@saghul
saghul deleted the interp-float-fastpaths branch June 29, 2026 07:36
social4hyq pushed a commit to social4hyq/homebrew-core that referenced this pull request Sep 20, 2026
quickjs-ng 0.16.0

Created-by: HarmonybrewBot
Commit-by: HarmonybrewBot
Merged-by: HarmonybrewBot
Description: Created by `brew bump`

---

Created with `brew bump-formula-pr`.<details>
  <summary>release notes</summary>
  <pre>## What's Changed
* Add new project by @qr243vbi in quickjs-ng/quickjs#1529
* Disable standalone executable support under WASM / Emscripten by @saghul in quickjs-ng/quickjs#1528
* Only export API symbols for shared builds by @dannote in quickjs-ng/quickjs#1525
* Update CI configuration to use Visual Studio 18 by @saghul in quickjs-ng/quickjs#1533
* Update test262 by @saghul in quickjs-ng/quickjs#1539
* Fix -Wmaybe-uninitialized warning in js_binary_logic_slow by @sdrsdr in quickjs-ng/quickjs#1530
* Implement Error.prototype.stack accessor proposal by @saghul in quickjs-ng/quickjs#1536
* Enforce immutability on TypedArray write paths by @saghul in quickjs-ng/quickjs#1537
* Fix ArrayBuffer immutable-method semantics by @saghul in quickjs-ng/quickjs#1538
* Implement nonextensible-applies-to-private proposal by @saghul in quickjs-ng/quickjs#1540
* Bump actions/checkout from 6 to 7 by @dependabot[bot] in quickjs-ng/quickjs#1542
* Default to release builds in Meson by @saghul in quickjs-ng/quickjs#1544
* JS_Free*: public vararg macros by @vitawrap in quickjs-ng/quickjs#1535
* Build release binaries with static mimalloc by @saghul in quickjs-ng/quickjs#1545
* Add Unicode license to libunicode-table.h by @bnoordhuis in quickjs-ng/quickjs#1547
* Port Bellard's register-based regexp engine by @saghul in quickjs-ng/quickjs#1548
* Fix build with strict C compilers on x86-32 by @trufae in quickjs-ng/quickjs#1550
* Inline mixed int/float arithmetic and fast-array reads in the interpreter by @saghul in quickjs-ng/quickjs#1549
* Add arena allocator by @saghul in quickjs-ng/quickjs#1551
* Fix `set Iterator.prototype.constructor` for non-object values by @saghul in quickjs-ng/quickjs#1553
* Fix reference leak in `Iterator.prototype.filter` by @saghul in quickjs-ng/quickjs#1561
* Fix Iterator Helper close when the source iterator has no `return` by @saghul in quickjs-ng/quickjs#1558
* Set module internal promise rejection as handled when appropriate by @xim in quickjs-ng/quickjs#1554
* Add a GC-stress CI job by @saghul in quickjs-ng/quickjs#1568
* Fix memory leak in Set.prototype.union / symmetricDifference by @saghul in quickjs-ng/quickjs#1567
* Fix use-after-free in DisposableStack disposal by @saghul in quickjs-ng/quickjs#1566
* Fix type confusion in RegExp.escape with rope strings by @saghul in quickjs-ng/quickjs#1574
* Fix use-after-free from Array `.length` grow + `push` by @saghul in quickjs-ng/quickjs#1563
* Fix reference leak in Iterator.prototype.find by @saghul in quickjs-ng/quickjs#1573
* Fix BigInt.asUintN of negatives when width is limb-aligned by @littledivy in quickjs-ng/quickjs#1575
* Fix missing module exports for array destructuring by @littledivy in quickjs-ng/quickjs#1576
* Fix double free of a detached ArrayBuffer's backing store by @littledivy in quickjs-ng/quickjs#1578
* Fix for-await-of calling return() on normal completion by @littledivy in quickjs-ng/quickjs#1577
* Await async iterator return() when a for-await loop breaks by @littledivy in quickjs-ng/quickjs#1580
* Make Array.fromAsync elements enumerable by @littledivy in quickjs-ng/quickjs#1581
* Report the correct column number for syntax errors by @littledivy in quickjs-ng/quickjs#1582
* Implement CallSite.prototype.isConstructor() by @littledivy in quickjs-ng/quickjs#1584
* Fix crash on cyclic re-export of an imported binding by @littledivy in quickjs-ng/quickjs#1583
* Name the re-exported module when a re-export is missing by @littledivy in quickjs-ng/quickjs#1586
* Report the correct column for an undefined global reference by @littledivy in quickjs-ng/quickjs#1585
* docs: add RongJS to projects by @butterflyfish in quickjs-ng/quickjs#1589
* Limit named group scopes to 256 by @saghul in quickjs-ng/quickjs#1592
* Bump actions/setup-node from 6 to 7 by @dependabot[bot] in quickjs-ng/quickjs#1593
* Harden against hash collisions by @bnoordhuis in quickjs-ng/quickjs#1590
* Add man pages by @suve in quickjs-ng/quickjs#1595
* Return null from CallSite position getters for native frames by @littledivy in quickjs-ng/quickjs#1597
* Fix subarray species constructor arguments by @littledivy in quickjs-ng/quickjs#1600
* Continue the TypedArray lastIndexOf scan after a shrink by @littledivy in quickjs-ng/quickjs#1602
* Copy bytes in increasing order in TypedArray slice by @littledivy in quickjs-ng/quickjs#1601
* Key module identity by specifier and import attributes by @littledivy in quickjs-ng/quickjs#1603
* Add JS_PromiseMarkAsHandled by @littledivy in quickjs-ng/quickjs#1604
* Do not coerce the value on a TypedArray out-of-bounds write with a foreign receiver by @littledivy in quickjs-ng/quickjs#1599
* Add JS_PromiseThen by @littledivy in quickjs-ng/quickjs#1605
* Fix UAF of a suspended coroutine referenced only via a closure by @saghul in quickjs-ng/quickjs#1569
* Fix double free of a CallSite when the backtrace array insertion fails by @saghul in quickjs-ng/quickjs#1614
* Fix use-after-free when creating the promise resolving functions OOMs by @saghul in quickjs-ng/quickjs#1613
* Fix leak in JSON.stringify() when space is a rope by @saghul in quickjs-ng/quickjs#1612
* Fix integer overflow in the TypedArray sort index array allocation by @saghul in quickjs-ng/quickjs#1611
* Fix reference leak in Atomics.store() on an invalidated buffer by @saghul in quickjs-ng/quickjs#1610
* Fix integer overflow in the Proxy ownKeys() property enumeration by @saghul in quickjs-ng/quickjs#1609
* Fix integer multiplication result cast to unsigned long in js_realloc_array() by @Nidrax in quickjs-ng/quickjs#1608
* Drop js_realloc2 and its allocation-slack feedback by @saghul in quickjs-ng/quickjs#1616
* lre: Do not patch a jump offset that could not be emitted by @saghul in quickjs-ng/quickjs#1615
* Reject out-of-range limits in Iterator.prototype.take/drop by @saghul in quickjs-ng/quickjs#1618
* Implement the Iterator.prototype.join() proposal by @saghul in quickjs-ng/quickjs#1620
* Implement the iterator includes proposal by @saghul in quickjs-ng/quickjs#1619
* Support resizable externally managed ArrayBuffers by @saghul in quickjs-ng/quickjs#1594
* Implement the iterator chunking proposal by @saghul in quickjs-ng/quickjs#1621
* Iterator helper fixes by @saghul in quickjs-ng/quickjs#1622
* Iterator.contact fixes by @saghul in quickjs-ng/quickjs#1623

## New Contributors
* @dannote made their first contribution in quickjs-ng/quickjs#1525
* @sdrsdr made their first contribution in quickjs-ng/quickjs#1530
* @vitawrap made their first contribution in quickjs-ng/quickjs#1535
* @xim made their first contribution in quickjs-ng/quickjs#1554
* @butterflyfish made their first contribution in quickjs-ng/quickjs#1589
* @suve made their first contribution in quickjs-ng/quickjs#1595
* @Nidrax made their first contribution in quickjs-ng/quickjs#1608

**Full Changelog**: https://github.com/quickjs-ng/quickjs/compare/v0.15.1...v0.16.0</pre>
  <p>View the full release notes at <a href="https://github.com/quickjs-ng/quickjs/releases/tag/v0.16.0">https://github.com/quickjs-ng/quickjs/releases/tag/v0.16.0</a>.</p>
</details>
<hr>

See merge request: Harmonybrew/homebrew-core!15602
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant