Skip to content

deps: V8: cherry-pick 67507b2a88f4#61825

Open
rmagrin wants to merge 2 commits intonodejs:mainfrom
rmagrin:v8-backport-highway-ascii
Open

deps: V8: cherry-pick 67507b2a88f4#61825
rmagrin wants to merge 2 commits intonodejs:mainfrom
rmagrin:v8-backport-highway-ascii

Conversation

@rmagrin
Copy link
Contributor

@rmagrin rmagrin commented Feb 14, 2026

Summary

Cherry-picks two V8 commits to add Highway-based WriteLeadingAscii and fix its GCC build:

  • 67507b2a88f4Reland "use highway to check and copy leading ascii" (Dan Carney)
    Replaces IsAsciiOneByteString + memcpy with Highway WriteLeadingAscii in Utf8::Encode, providing a faster ASCII fast path for WriteUtf8V2.
    CL: https://chromium-review.googlesource.com/c/v8/v8/+/7184338

  • ee2873a6303dFix GCC Build (Abdirahim Musse)
    Moves WriteLeadingAscii explicit template specializations to namespace scope — C++ forbids them inside class scope, and GCC rejects it.
    CL: https://chromium-review.googlesource.com/c/v8/v8/+/7138905

    Note: only the unicode.h portion of this commit is included; the test file changes (heap-unittest.cc, module-decoder-unittest.cc) do not apply cleanly to Node.js's V8 copy and are unrelated to the WriteLeadingAscii fix.

This patch addresses part of the remaining ~30-40% performance gap in WriteUtf8V2 vs v22 after #61712 landed the initial simdutf + memcpy fast path.

Refs: #60719

Test plan

  • CI: V8 CI + Node.js CI

@nodejs-github-bot
Copy link
Collaborator

Review requested:

  • @nodejs/gyp
  • @nodejs/security-wg
  • @nodejs/v8-update

@nodejs-github-bot nodejs-github-bot added build Issues and PRs related to build files or the CI. needs-ci PRs that need a full CI run. v8 engine Issues and PRs related to the V8 dependency. labels Feb 14, 2026
Copy link
Member

@Renegade334 Renegade334 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs the unicode.h aspects of v8/v8@ee2873a to unblock gcc builds.

@rmagrin rmagrin force-pushed the v8-backport-highway-ascii branch from 9acf475 to eb0d45c Compare February 15, 2026 16:23
@rmagrin rmagrin changed the title deps: V8: cherry-pick Highway string performance patches deps: V8: cherry-pick 67507b2a88f4 Feb 15, 2026
@rmagrin rmagrin force-pushed the v8-backport-highway-ascii branch from eb0d45c to a215fe8 Compare February 15, 2026 16:48
Original commit message:

    Reland "use highway to check and copy leading ascii"

    This is a reland of commit a3e84e5f01540cec142f4d4f41f1921373c220e5

    Original change's description:
    > use highway to check and copy leading ascii
    >
    > Change-Id: I065532aeeee95273821aa1f25b5ffc5c5c23cbf1
    > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7172479
    > Reviewed-by: Patrick Thier <pthier@chromium.org>
    > Reviewed-by: Toon Verwaest <verwaest@chromium.org>
    > Commit-Queue: Dan Carney <dcarney@chromium.org>
    > Cr-Commit-Position: refs/heads/main@{#103820}

    Change-Id: I43b4ad18817eb52b701e112d2d0a5f685374ae1f
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7184338
    Reviewed-by: Toon Verwaest <verwaest@chromium.org>
    Reviewed-by: Patrick Thier <pthier@chromium.org>
    Commit-Queue: Dan Carney <dcarney@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#103865}

Refs: v8/v8@67507b2
@rmagrin rmagrin force-pushed the v8-backport-highway-ascii branch from a215fe8 to 883bf5e Compare February 16, 2026 22:51
Original commit message:

    Fix GCC Build

    Move explicit specializations of Utf8::IsAsciiOneByteString to namespace
    scope

    C++ forbids explicit template specializations inside class scope.
    The specializations for IsAsciiOneByteString<uint8_t> and
    IsAsciiOneByteString<uint16_t> were defined inside class unibrow::Utf8,
    riggering "explicit specialization in non-namespace scope"
    compile errors.

    Fix type mismatch in EXPECT_EQ comparisons for std::pair values

    The tests failed because EXPECT_EQ was comparing pairs with mismatched
    template parameters — std::pair<int, unsigned int> vs.
    std::pair<unsigned int, unsigned char> — which have no valid operator==.
    I corrected the expected values to use the same unsigned types as the
    actual data, ensuring the pair comparison compiles cleanly.

    Fix build failure on GCC 12 by replacing std::format with ostringstream

    GCC 12's libstdc++ does not implement <format>, causing compile errors
    when using std::format. Replaced all std::format calls with equivalent

    Change-Id: I5c31f91065eccf6f4c14172902ffcd99863ebbb9
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/7138905
    Commit-Queue: Clemens Backes <clemensb@chromium.org>
    Reviewed-by: Jakob Kummerow <jkummerow@chromium.org>
    Reviewed-by: Clemens Backes <clemensb@chromium.org>
    Commit-Queue: Jakob Kummerow <jkummerow@chromium.org>
    Cr-Commit-Position: refs/heads/main@{#104280}

Refs: v8/v8@ee2873a
@rmagrin rmagrin force-pushed the v8-backport-highway-ascii branch from 883bf5e to ad11612 Compare February 17, 2026 05:15
@rmagrin
Copy link
Contributor Author

rmagrin commented Feb 17, 2026

I decide to keep only one backport on this PR and the Fix GCC Build (ee2873a6303d).

I will open another PR once this is merged with the backport for https://chromium-review.googlesource.com/c/v8/v8/+/7159233

Copy link
Member

@Renegade334 Renegade334 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe this violates the commit-rebase policy, as each individual commit needs to (in principle) independently pass CI, which isn't the case here. I would just edit the backport commit to include the small change to the header, don't know what you reckon @targos?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

build Issues and PRs related to build files or the CI. needs-ci PRs that need a full CI run. v8 engine Issues and PRs related to the V8 dependency.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants