Repository: WebKit/WebKit
Pull request #45527: [JSC] Switch from Shewchuk’s Algorithm to xsum Algorithm to Optimize `Math.sumPrecise`
Author: login: Gumichocopengin8
Labels: name: JavaScriptCore
description: For bugs in JavaScriptCore, the JS engine used by WebKit, other than kxmlcore issues.
Created: 2025-05-17T00:00:46Z | Merged: 2025-05-21T22:59:05Z

#### 2682d2ab17a40851f7e6bcff35126e810b0646fd
<pre>
[JSC] Switch from Shewchuk’s Algorithm to xsum Algorithm to Optimize `Math.sumPrecise`
<a href="https://bugs.webkit.org/show_bug.cgi?id=293158">https://bugs.webkit.org/show_bug.cgi?id=293158</a>

Reviewed by Yusuke Suzuki.

Previously, Shewchuk&apos;s algorithm was used [1], but it became slow with large arrays.
Improving the performance of Math.sumPrecise is important because it may be used in
scientific calculations, charting, and statistical analysis of large data sets,
where both high precision and fast speed are essential.
This patch switches to Radford M. Neal&apos;s xsum algorithm [2],
which improves the performance of Math.sumPrecise.
The original implementation is in C [3]; a C++ translation was referenced for integration [4].

                                TipOfTree              Patched                Ratio
math-sumPrecise-10              3.4638+-0.0681         2.6122+-0.0922         1.2338x faster
math-sumPrecise-100             27.2897+-0.115         17.9712+-0.0483        1.5185x faster
math-sumPrecise-1000            283.2722+-4.3743       171.4865+-2.4889       1.6518x faster
math-sumPrecise-10000           2922.8715+-9.1500      1709.5876+-4.2845      1.7096x faster

[1]: <a href="https://github.com/WebKit/WebKit/commit/f49d6a41fb8d93f9c7e6758d87a06a9eea3e9698">https://github.com/WebKit/WebKit/commit/f49d6a41fb8d93f9c7e6758d87a06a9eea3e9698</a>
[2]: <a href="https://arxiv.org/abs/1505.05571">https://arxiv.org/abs/1505.05571</a>
[3]: <a href="https://gitlab.com/radfordneal/xsum">https://gitlab.com/radfordneal/xsum</a>
[4]: <a href="https://github.com/Gumichocopengin8/xsum.cpp">https://github.com/Gumichocopengin8/xsum.cpp</a>

* JSTests/microbenchmarks/math-sumPrecise-10.js: Added.
* JSTests/microbenchmarks/math-sumPrecise-100.js: Added.
* JSTests/microbenchmarks/math-sumPrecise-1000.js: Added.
* JSTests/microbenchmarks/math-sumPrecise-10000.js: Added.
* Source/WTF/wtf/PreciseSum.cpp:
(WTF::XsumSmallAccumulator::XsumSmallAccumulator):
(WTF::PreciseSum::PreciseSum):
(WTF::PreciseSum::addList):
(WTF::PreciseSum::add):
(WTF::PreciseSum::compute):
(WTF::PreciseSum::xsumSmallAddInfNan):
(WTF::PreciseSum::xsumAdd1NoCarry):
(WTF::PreciseSum::xsumCarryPropagate):
(WTF::PreciseSum::incrementWhenValueAdded):
(WTF::twosum): Deleted.
* Source/WTF/wtf/PreciseSum.h:

Canonical link: <a href="https://commits.webkit.org/295242@main">https://commits.webkit.org/295242@main</a>
</pre>
<!--EWS-Status-Bubble-Start-->
https://github.com/WebKit/WebKit/commit/4021da2cae8422231f852b94a32d2df8394566fa

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104168 "Passed style check") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23872 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14192 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109364 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54836 "Built successfully") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24240 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32416 "Built successfully") | [✅ 🧪 wpe-wk2](https://ews-build.webkit.org/#/builders/34/builds/79122 "Passed tests") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107174 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18830 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93974 "Passed tests") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59449 "Passed tests") | 
| | [✅ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/133/builds/18642 "Passed tests") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/12013 "Passed tests") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54196 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96843 "Built successfully and passed tests") | [✅ 🧪 api-ios](https://ews-build.webkit.org/#/builders/13/builds/88349 "Passed tests") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/12071 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111750 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102779 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31324 "Built successfully") | [✅ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/122/builds/23096 "Passed tests") | [✅ 🧪 gtk-wk2](https://ews-build.webkit.org/#/builders/1/builds/88145 "Passed tests") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31688 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/90162 "Passed tests") | [✅ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87805 "Passed tests") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32690 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10442 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25788 "The change is no longer eligible for processing.") | 
| [✅ 🛠 🧪 unsafe-merge](https://ews-build.webkit.org/#/builders/22/builds/16962 "Built successfully and passed tests") | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31253 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36566 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126413 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/31047 "Built successfully") | | [✅ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34955 "Passed tests") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34383 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32607 "Built successfully") | | | 
<!--EWS-Status-Bubble-End-->


Diff:
diff --git a/JSTests/microbenchmarks/math-sumPrecise-10.js b/JSTests/microbenchmarks/math-sumPrecise-10.js
new file mode 100644
index 000000000000..0b089d58bd15
--- /dev/null
+++ b/JSTests/microbenchmarks/math-sumPrecise-10.js
@@ -0,0 +1,9 @@
+//@ requireOptions("--useMathSumPreciseMethod=1")
+(function () {
+  var result = 0;
+  var values = Array(10).fill([1e20, 0.1, -1e20]).flat();
+  for (var i = 0; i < testLoopCount; ++i) {
+    if (Math.sumPrecise(values) === 1) result++;
+  }
+  if (result !== testLoopCount * 1) throw 'Error: bad: ' + result;
+})();
diff --git a/JSTests/microbenchmarks/math-sumPrecise-100.js b/JSTests/microbenchmarks/math-sumPrecise-100.js
new file mode 100644
index 000000000000..6d5aec695f21
--- /dev/null
+++ b/JSTests/microbenchmarks/math-sumPrecise-100.js
@@ -0,0 +1,9 @@
+//@ requireOptions("--useMathSumPreciseMethod=1")
+(function () {
+  var result = 0;
+  var values = Array(100).fill([1e20, 0.1, -1e20]).flat();
+  for (var i = 0; i < testLoopCount; ++i) {
+    if (Math.sumPrecise(values) === 10) result++;
+  }
+  if (result !== testLoopCount * 1) throw 'Error: bad: ' + result;
+})();
diff --git a/JSTests/microbenchmarks/math-sumPrecise-1000.js b/JSTests/microbenchmarks/math-sumPrecise-1000.js
new file mode 100644
index 000000000000..30c1f1bcc2ea
--- /dev/null
+++ b/JSTests/microbenchmarks/math-sumPrecise-1000.js
@@ -0,0 +1,9 @@
+//@ requireOptions("--useMathSumPreciseMethod=1")
+(function () {
+  var result = 0;
+  var values = Array(1_000).fill([1e20, 0.1, -1e20]).flat();
+  for (var i = 0; i < testLoopCount; ++i) {
+    if (Math.sumPrecise(values) === 100) result++;
+  }
+  if (result !== testLoopCount * 1) throw 'Error: bad: ' + result;
+})();
diff --git a/JSTests/microbenchmarks/math-sumPrecise-10000.js b/JSTests/microbenchmarks/math-sumPrecise-10000.js
new file mode 100644
index 000000000000..5ac7d9473241
--- /dev/null
+++ b/JSTests/microbenchmarks/math-sumPrecise-10000.js
@@ -0,0 +1,9 @@
+//@ requireOptions("--useMathSumPreciseMethod=1")
+(function () {
+  var result = 0;
+  var values = Array(10_000).fill([1e20, 0.1, -1e20]).flat();
+  for (var i = 0; i < testLoopCount; ++i) {
+    if (Math.sumPrecise(values) === 1_000) result++;
+  }
+  if (result !== testLoopCount * 1) throw 'Error: bad: ' + result;
+})();
diff --git a/Source/WTF/wtf/PreciseSum.cpp b/Source/WTF/wtf/PreciseSum.cpp
index eb0c4a82c312..d7b37e89f6a6 100644
--- a/Source/WTF/wtf/PreciseSum.cpp
+++ b/Source/WTF/wtf/PreciseSum.cpp
@@ -24,32 +24,38 @@
  */
 
 /*
- * This is the Math.sumPrecise() polyfill by Kevin Gibbons, ported to C++. Original LICENSE is as follows:
- *
- * BSD 3-Clause License
- * 
- * Copyright (c) 2024 Kevin Gibbons
+ * This is a C++ port of the xsum implementation, 
+ * originally invented by Radford M. Neal, and ported by Keita Nonaka.
  * 
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
+ * The original C implementation is from https://gitlab.com/radfordneal/xsum
+ * The C++ implementation is from https://github.com/Gumichocopengin8/xsum.cpp
+ *
+ * The LICENSE is as follows:
+ *
+ * This software for exact summation of floating-point values is licensed
+ * under the "MIT license", included here.
  * 
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
+ * Copyright 2015, 2018, 2021, 2024 Radford M. Neal
+ * Copyright 2025 Keita Nonaka
  * 
- * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
- * and the following disclaimer in the documentation and/or other materials provided with the distribution.
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
  * 
- * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse
- * or promote products derived from this software without specific prior written permission.
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
  * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
- * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
 #include "config.h"
@@ -59,123 +65,358 @@
 
 namespace WTF {
 
-static constexpr double MAX_DOUBLE = 1.79769313486231570815e+308;
-static constexpr double PENULTIMATE_DOUBLE = 1.79769313486231550856e+308;
-static constexpr double MAX_ULP = MAX_DOUBLE - PENULTIMATE_DOUBLE;
-static constexpr double TWO_POW_1023 = 8.98846567431158e+307;
+namespace {
+
+constexpr int64_t XSUM_MANTISSA_BITS = 52; // Bits in fp mantissa, excludes implict 1
+constexpr int64_t XSUM_EXP_BITS = 11; // Bits in fp exponent
+constexpr int64_t XSUM_MANTISSA_MASK = (static_cast<int64_t>(1) << XSUM_MANTISSA_BITS) - 1; // Mask for mantissa bits
+constexpr int64_t XSUM_EXP_MASK = (1 << XSUM_EXP_BITS) - 1; // Mask for exponent
+constexpr int64_t XSUM_EXP_BIAS = (1 << (XSUM_EXP_BITS - 1)) - 1; // Bias added to signed exponent
+constexpr int64_t XSUM_SIGN_BIT = XSUM_MANTISSA_BITS + XSUM_EXP_BITS; // Position of sign bit
+constexpr uint64_t XSUM_SIGN_MASK = static_cast<uint64_t>(1) << XSUM_SIGN_BIT; // Mask for sign bit
+constexpr int64_t XSUM_SCHUNK_BITS = 64; // Bits in chunk of the small accumulator
+constexpr int64_t XSUM_LOW_EXP_BITS = 5; // # of low bits of exponent, in one chunk
+constexpr int64_t XSUM_LOW_EXP_MASK = (1 << XSUM_LOW_EXP_BITS) - 1; // Mask for low-order exponent bits
+constexpr int64_t XSUM_HIGH_EXP_BITS = XSUM_EXP_BITS - XSUM_LOW_EXP_BITS; // # of high exponent bits for index
+constexpr int64_t XSUM_SCHUNKS = (1 << XSUM_HIGH_EXP_BITS) + 3; // # of chunks in small accumulator
+constexpr int64_t XSUM_LOW_MANTISSA_BITS = 1 << XSUM_LOW_EXP_BITS; // Bits in low part of mantissa
+constexpr int64_t XSUM_LOW_MANTISSA_MASK = (static_cast<int64_t>(1) << XSUM_LOW_MANTISSA_BITS) - 1; // Mask for low bits
+constexpr int64_t XSUM_SMALL_CARRY_BITS = (XSUM_SCHUNK_BITS - 1) - XSUM_MANTISSA_BITS; // Bits sums can carry into
+constexpr int64_t XSUM_SMALL_CARRY_TERMS = (1 << XSUM_SMALL_CARRY_BITS) - 1; // # terms can add before need prop.
+
+} // anonymous namespace
+
+namespace Xsum {
+
+SmallAccumulator::SmallAccumulator(
+    int addsUntilPropagate,
+    int64_t inf,
+    int64_t nan
+) : chunk(XSUM_SCHUNKS, 0LL), addsUntilPropagate { addsUntilPropagate }, inf { inf }, nan { nan } { }
 
-ALWAYS_INLINE std::pair<double, double> twosum(double x, double y)
+} // namespace Xsum
+
+PreciseSum::PreciseSum()
+: m_smallAccumulator { XSUM_SMALL_CARRY_TERMS, 0, 0 }, m_sizeCount { 0 }, m_hasPosNumber { false } { }
+
+/*
+ADD A VECTOR OF FLOATING-POINT NUMBERS TO A SMALL ACCUMULATOR. Mixes
+calls of xsumCarryPropagate with calls of xsumAdd1NoCarry.
+*/
+void PreciseSum::addList(const std::span<const double> vec)
 {
-    double hi = x + y;
-    double lo = y - (hi - x);
-    return std::make_pair(hi, lo);
+    size_t offset = 0;
+    size_t n = vec.size();
+
+    while (0 < n) {
+        if (!m_smallAccumulator.addsUntilPropagate)
+            xsumCarryPropagate();
+        size_t m = std::min(static_cast<int>(n), m_smallAccumulator.addsUntilPropagate);
+        for (size_t i = 0; i < m; i++) {
+            const double value = vec[offset + i];
+            incrementWhenValueAdded(value);
+            xsumAdd1NoCarry(value);
+        }
+        m_smallAccumulator.addsUntilPropagate -= m;
+        offset += m;
+        n -= m;
+    }
 }
 
-void PreciseSum::add(double x)
+/*
+ADD ONE DOUBLE TO A SMALL ACCUMULATOR. This is equivalent to, but
+somewhat faster than, calling xsum_small_addv with a vector of one
+value.
+*/
+void PreciseSum::add(double value)
 {
-    if (!(!x && std::signbit(x)))
-        m_everyValueIsNegativeZero = false;
+    incrementWhenValueAdded(value);
+    if (!m_smallAccumulator.addsUntilPropagate)
+        xsumCarryPropagate();
+    xsumAdd1NoCarry(value);
+    m_smallAccumulator.addsUntilPropagate -= 1;
+}
 
-    unsigned actuallyUsedPartials = 0;
+/*
+RETURN THE RESULT OF ROUNDING A SMALL ACCUMULATOR. The rounding mode
+is to nearest, with ties to even. The small accumulator may be modified
+by this operation (by carry propagation being done), but the value it
+represents should not change.
+*/
+double PreciseSum::compute()
+{
+    if (m_smallAccumulator.nan)
+        return std::bit_cast<double>(m_smallAccumulator.nan);
+    if (m_smallAccumulator.inf)
+        return std::bit_cast<double>(m_smallAccumulator.inf);
+    if (!m_sizeCount)
+        return -0.0;
 
-    for (double y : m_partials) {
-        if (std::fabs(x) < std::fabs(y))
-            std::swap(x, y);
+    const int i = xsumCarryPropagate();
+    int64_t ivalue = m_smallAccumulator.chunk[i];
+    int64_t intv = 0;
+    if (i <= 1) {
+        if (!ivalue)
+            return !m_hasPosNumber ? -0.0 : 0.0;
+        if (!i) {
+            intv = 0 <= ivalue ? ivalue : -ivalue;
+            intv >>= 1;
+            if (ivalue < 0)
+                intv |= XSUM_SIGN_MASK;
+            return std::bit_cast<double>(intv);
+        }
+        int64_t intv = ivalue * (static_cast<int64_t>(1) << (XSUM_LOW_MANTISSA_BITS - 1)) + (m_smallAccumulator.chunk[0] >> 1);
+        if (intv < 0) {
+            if (intv > -(static_cast<int64_t>(1) << XSUM_MANTISSA_BITS)) {
+                intv = (-intv) | XSUM_SIGN_MASK;
+                return std::bit_cast<double>(intv);
+            }
+        } else if (static_cast<uint64_t>(intv) < static_cast<uint64_t>(1) << XSUM_MANTISSA_BITS)
+            return std::bit_cast<double>(intv);
+    }
 
-        auto pair = twosum(x, y);
-        if (std::isinf(std::fabs(pair.first))) {
-            double sign = pair.first < 0 ? -1 : 1;
-            m_overflow += sign;
+    const double fltv = static_cast<double>(ivalue);
+    intv = std::bit_cast<int64_t>(fltv);
+    int e = (intv >> XSUM_MANTISSA_BITS) & XSUM_EXP_MASK;
+    int more = 2 + XSUM_MANTISSA_BITS + XSUM_EXP_BIAS - e;
 
-            x = (x - sign * TWO_POW_1023) - sign * TWO_POW_1023;
-            if (std::fabs(x) < std::fabs(y))
-                std::swap(x, y);
+    ivalue *= static_cast<int64_t>(1) << more;
+    int j = i - 1;
+    int64_t lower = m_smallAccumulator.chunk[j];
+    if (more >= XSUM_LOW_MANTISSA_BITS) {
+        more -= XSUM_LOW_MANTISSA_BITS;
+        ivalue += lower << more;
+        j -= 1;
+        lower = j < 0 ? 0 : m_smallAccumulator.chunk[j];
+    }
+    ivalue += lower >> (XSUM_LOW_MANTISSA_BITS - more);
+    lower &= (static_cast<int64_t>(1) << (XSUM_LOW_MANTISSA_BITS - more)) - 1;
 
-            pair = twosum(x, y);
+    bool shouldRoundAwayFromZero = false;
+    if (0 <= ivalue) {
+        intv = 0;
+        if (!(ivalue & 2)) {
+            // this is not required,
+            // but removing the branch would change the logic
+            // leave it as it is
+            shouldRoundAwayFromZero = false;
+        } else if ((ivalue & 1))
+            shouldRoundAwayFromZero = true;
+        else if ((ivalue & 4))
+            shouldRoundAwayFromZero = true;
+        else {
+            if (!lower) {
+                while (j > 0) {
+                    j -= 1;
+                    if (m_smallAccumulator.chunk[j]) {
+                        lower = 1;
+                        break;
+                    }
+                }
+            }
+            if (lower)
+                shouldRoundAwayFromZero = true;
+        }
+    } else {
+        if (!((-ivalue) & (static_cast<int64_t>(1) << (XSUM_MANTISSA_BITS + 2)))) {
+            int pos = (int64_t)1 << (XSUM_LOW_MANTISSA_BITS - 1 - more);
+            ivalue *= 2;
+            if (lower & pos) {
+                ivalue += 1;
+                lower &= ~pos;
+            }
+            e -= 1;
         }
 
-        if (auto lo = pair.second) {
-            m_partials[actuallyUsedPartials] = lo;
-            ++actuallyUsedPartials;
+        intv = XSUM_SIGN_MASK;
+        ivalue = -ivalue;
+        if ((ivalue & 3) == 3)
+            shouldRoundAwayFromZero = true;
+        if (!lower) {
+            while (j > 0) {
+                j -= 1;
+                if (m_smallAccumulator.chunk[j]) {
+                    lower = 1;
+                    break;
+                }
+            }
         }
+        if (!lower)
+            shouldRoundAwayFromZero = true;
+    }
 
-        x = pair.first;
+    if (shouldRoundAwayFromZero) {
+        ivalue += 4;
+        if (ivalue & (static_cast<int64_t>(1) << (XSUM_MANTISSA_BITS + 3))) {
+            ivalue >>= 1;
+            e += 1;
+        }
     }
 
-    m_partials.shrink(actuallyUsedPartials);
+    ivalue >>= 2;
+    e += (i << XSUM_LOW_EXP_BITS) - XSUM_EXP_BIAS - XSUM_MANTISSA_BITS;
+    if (e >= XSUM_EXP_MASK) {
+        intv |= static_cast<int64_t>(XSUM_EXP_MASK) << XSUM_MANTISSA_BITS;
+        return std::bit_cast<double>(intv);
+    }
+    intv += (static_cast<int64_t>(e) << XSUM_MANTISSA_BITS) + (ivalue & XSUM_MANTISSA_MASK);
+    return std::bit_cast<double>(intv);
+}
 
-    if (x)
-        m_partials.append(x);
+/*
+ADD AN INF OR NAN TO A SMALL ACCUMULATOR. This only changes the flags,
+not the chunks in the accumulator, which retains the sum of the finite
+terms (which is perhaps sometimes useful to access, though no function
+to do so is defined at present). A nan with larger payload (seen as a
+52-bit unsigned integer) takes precedence, with the sign of the nan always
+being positive. This ensures that the order of summing nan values doesn't
+matter.
+*/
+void PreciseSum::xsumSmallAddInfNan(int64_t ivalue)
+{
+    const int64_t mantissa = ivalue & XSUM_MANTISSA_MASK;
+    if (!mantissa) {
+        if (!m_smallAccumulator.inf)
+            m_smallAccumulator.inf = ivalue;
+        else if (m_smallAccumulator.inf != ivalue) {
+            double fltv = std::bit_cast<double>(ivalue);
+            fltv = fltv - fltv;
+            m_smallAccumulator.inf = std::bit_cast<int64_t>(fltv);
+        }
+    } else {
+        if ((m_smallAccumulator.nan & XSUM_MANTISSA_MASK) <= mantissa)
+            m_smallAccumulator.nan = ivalue & ~XSUM_SIGN_MASK;
+    }
 }
 
-double PreciseSum::compute()
+/*
+ADD ONE NUMBER TO A SMALL ACCUMULATOR ASSUMING NO CARRY PROPAGATION REQ'D.
+This function is declared INLINE regardless of the setting of INLINE_SMALL
+and for good performance it must be inlined by the compiler (otherwise the
+procedure call overhead will result in substantial inefficiency).
+*/
+inline void PreciseSum::xsumAdd1NoCarry(double value)
 {
-    if (m_everyValueIsNegativeZero)
-        return -0.0;
+    const int64_t ivalue = std::bit_cast<int64_t>(value);
+    int_fast16_t exp = (ivalue >> XSUM_MANTISSA_BITS) & XSUM_EXP_MASK;
+    int64_t mantissa = ivalue & XSUM_MANTISSA_MASK;
+    const int_fast16_t highExp = exp >> XSUM_LOW_EXP_BITS;
+    int_fast16_t lowExp = exp & XSUM_LOW_EXP_MASK;
 
-    int32_t n = m_partials.size() - 1;
-    double hi = 0;
-    double lo = 0;
-
-    if (m_overflow) {
-        double next = n >= 0 ? m_partials[n] : 0;
-        --n;
-        if (std::fabs(m_overflow) > 1 || (m_overflow > 0 && next > 0) || (m_overflow < 0 && next < 0))
-            return m_overflow > 0 ? std::numeric_limits<double>::infinity() : -std::numeric_limits<double>::infinity();
-
-        auto pair = twosum(m_overflow * TWO_POW_1023, next / 2);
-        hi = pair.first;
-        lo = pair.second * 2;
-
-        if (std::isinf(std::fabs(hi * 2))) {
-            // silly edge case: rounding to the maximum value
-            // MAX_DOUBLE has a 1 in the last place of its significand, so if we subtract exactly half a ULP from 2**1024, the result rounds away from it (i.e. to infinity) under ties-to-even
-            // but if the next partial has the opposite sign of the current value, we need to round towards MAX_DOUBLE instead
-            // this is the same as the "handle rounding" case below, but there's only one potentially-finite case we need to worry about, so we just hardcode that one
-            if (hi > 0) {
-                if (hi == TWO_POW_1023 && lo == -(MAX_ULP / 2) && n >= 0 && m_partials[n] < 0)
-                    return MAX_DOUBLE;
-                return std::numeric_limits<double>::infinity();
-            }
+    if (!exp) {
+        if (!mantissa)
+            return;
+        exp = lowExp = 1;
+    } else if (exp == XSUM_EXP_MASK) {
+        xsumSmallAddInfNan(ivalue);
+        return;
+    } else
+        mantissa |= static_cast<int64_t>(1) << XSUM_MANTISSA_BITS;
+
+    const std::array<int64_t, 2> splitMantissa {
+        static_cast<int64_t>((static_cast<uint64_t>(mantissa) << lowExp) & XSUM_LOW_MANTISSA_MASK),
+        mantissa >> (XSUM_LOW_MANTISSA_BITS - lowExp)
+    };
+
+    if (ivalue < 0) {
+        m_smallAccumulator.chunk[highExp] -= splitMantissa[0];
+        m_smallAccumulator.chunk[highExp + 1] -= splitMantissa[1];
+    } else {
+        m_smallAccumulator.chunk[highExp] += splitMantissa[0];
+        m_smallAccumulator.chunk[highExp + 1] += splitMantissa[1];
+    }
+}
 
-            if (hi == -TWO_POW_1023 && lo == (MAX_ULP / 2) && n >= 0 && m_partials[n] > 0)
-                return -MAX_DOUBLE;
-            return -std::numeric_limits<double>::infinity();
+/*
+PROPAGATE CARRIES TO NEXT CHUNK IN A SMALL ACCUMULATOR. Needs to
+be called often enough that accumulated carries don't overflow out
+the top, as indicated by m_smallAccumulator.addsUntilPropagate.  
+Returns the index of the uppermost non-zero chunk (0 if number is zero).
+
+After carry propagation, the uppermost non-zero chunk will indicate
+the sign of the number, and will not be -1 (all 1s). It will be in
+the range -2^XSUM_LOW_MANTISSA_BITS to 2^XSUM_LOW_MANTISSA_BITS - 1.
+Lower chunks will be non-negative, and in the range from 0 up to
+2^XSUM_LOW_MANTISSA_BITS - 1.
+*/
+int PreciseSum::xsumCarryPropagate()
+{
+    int u = XSUM_SCHUNKS - 1;
+    while (0 <= u && !m_smallAccumulator.chunk[u]) {
+        if (!u) {
+            m_smallAccumulator.addsUntilPropagate = XSUM_SMALL_CARRY_TERMS - 1;
+            return 0;
         }
+        --u;
+    }
+
+    int i = 0;
+    int uix = -1;
+    do {
+        int64_t c;
+        int64_t clow;
+        int64_t chigh;
+        do {
+            c = m_smallAccumulator.chunk[i];
+            if (c)
+                break;
+            i += 1;
+        } while (i <= u);
+
+        if (i > u)
+            break;
 
-        if (lo) {
-            m_partials[n + 1] = lo;
-            ++n;
-            lo = 0;
+        chigh = c >> XSUM_LOW_MANTISSA_BITS;
+        if (!chigh) {
+            uix = i;
+            i += 1;
+            continue;
         }
 
-        hi *= 2;
-    }
+        if (u == i) {
+            if (chigh == -1) {
+                uix = i;
+                break;
+            }
+            u = i + 1;
+        }
 
-    while (n >= 0) {
-        double x = hi;
-        double y = m_partials[n];
-        --n;
+        clow = c & XSUM_LOW_MANTISSA_MASK;
+        if (clow)
+            uix = i;
 
-        auto pair = twosum(x, y);
-        hi = pair.first;
-        lo = pair.second;
+        m_smallAccumulator.chunk[i] = clow;
+        if (i + 1 >= XSUM_SCHUNKS) {
+            xsumSmallAddInfNan((static_cast<int64_t>(XSUM_EXP_MASK) << XSUM_MANTISSA_BITS) | XSUM_MANTISSA_MASK);
+            u = i;
+        } else
+            m_smallAccumulator.chunk[i + 1] += chigh;
+        i += 1;
+    } while (i <= u);
 
-        if (lo)
-            break;
+    if (uix < 0) {
+        uix = 0;
+        m_smallAccumulator.addsUntilPropagate = XSUM_SMALL_CARRY_TERMS - 1;
+        return uix;
     }
 
-    // handle rounding
-    // when the roundoff error is exactly half of the ULP for the result, we need to check one more partial to know which way to round
-    if (n >= 0 && ((lo < 0 && m_partials[n] < 0) || (lo > 0 && m_partials[n] > 0))) {
-        double y = lo * 2;
-        double x = hi + y;
-        double yr = x - hi;
-        if (y == yr)
-            hi = x;
+    while (m_smallAccumulator.chunk[uix] == -1 && uix > 0) {
+        m_smallAccumulator.chunk[uix - 1] += static_cast<int64_t>(-1) * (static_cast<int64_t>(1) << XSUM_LOW_MANTISSA_BITS);
+        m_smallAccumulator.chunk[uix] = 0;
+        uix -= 1;
     }
+    m_smallAccumulator.addsUntilPropagate = XSUM_SMALL_CARRY_TERMS - 1;
+    return uix;
+}
 
-    return hi;
+/*
+Increment m_sizeCount and check positive value every time when value is added.
+This is needed to return -0 (negative zero) if applicable.
+*/
+ALWAYS_INLINE void PreciseSum::incrementWhenValueAdded(double value)
+{
+    m_sizeCount++;
+    m_hasPosNumber = m_hasPosNumber || !std::signbit(value);
 }
 
 } // namespace WTF
diff --git a/Source/WTF/wtf/PreciseSum.h b/Source/WTF/wtf/PreciseSum.h
index 030fefea36ab..30186d434ade 100644
--- a/Source/WTF/wtf/PreciseSum.h
+++ b/Source/WTF/wtf/PreciseSum.h
@@ -29,15 +29,38 @@
 
 namespace WTF {
 
-class PreciseSum {
+namespace Xsum {
+
+struct SmallAccumulator final {
+    explicit SmallAccumulator(const int addsUntilPropagate, const int64_t inf, const int64_t nan);
+    ~SmallAccumulator() = default;
+
+    Vector<int64_t> chunk; // Chunks making up small accumulator
+    int addsUntilPropagate; // Number of remaining adds before carry
+    int64_t inf; // If non-zero, +Inf, -Inf, or NaN
+    int64_t nan; // If non-zero, a NaN value with payload
+};
+
+} // namespace Xsum
+
+class PreciseSum final {
 public:
-    WTF_EXPORT_PRIVATE void add(double);
+    explicit PreciseSum();
+    ~PreciseSum() = default;
+
+    WTF_EXPORT_PRIVATE void addList(const std::span<const double> vec);
+    WTF_EXPORT_PRIVATE void add(double value);
     WTF_EXPORT_PRIVATE double compute();
 
 private:
-    bool m_everyValueIsNegativeZero { true };
-    Vector<double> m_partials;
-    double m_overflow { 0 };
+    Xsum::SmallAccumulator m_smallAccumulator;
+    size_t m_sizeCount;
+    bool m_hasPosNumber;
+
+    void xsumSmallAddInfNan(int64_t ivalue);
+    inline void xsumAdd1NoCarry(double value);
+    int xsumCarryPropagate();
+    ALWAYS_INLINE void incrementWhenValueAdded(double value);
 };
 
 } // namespace WTF


Reviews:
user: login: Constellation
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-19T22:29:28Z
user: login: Constellation
state: APPROVED
author_association: MEMBER
submitted_at: 2025-05-19T22:30:31Z
user: login: Gumichocopengin8
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-05-19T22:44:57Z

Review comments:
diff_hunk: @@ -59,123 +65,358 @@
 
 namespace WTF {
 
-static constexpr double MAX_DOUBLE = 1.79769313486231570815e+308;
-static constexpr double PENULTIMATE_DOUBLE = 1.79769313486231550856e+308;
-static constexpr double MAX_ULP = MAX_DOUBLE - PENULTIMATE_DOUBLE;
-static constexpr double TWO_POW_1023 = 8.98846567431158e+307;
+namespace {
+
+constexpr int64_t XSUM_MANTISSA_BITS = 52; // Bits in fp mantissa, excludes implict 1
+constexpr int64_t XSUM_EXP_BITS = 11; // Bits in fp exponent
+constexpr int64_t XSUM_MANTISSA_MASK = (static_cast<int64_t>(1) << XSUM_MANTISSA_BITS) - 1; // Mask for mantissa bits
+constexpr int64_t XSUM_EXP_MASK = (1 << XSUM_EXP_BITS) - 1; // Mask for exponent
+constexpr int64_t XSUM_EXP_BIAS = (1 << (XSUM_EXP_BITS - 1)) - 1; // Bias added to signed exponent
+constexpr int64_t XSUM_SIGN_BIT = XSUM_MANTISSA_BITS + XSUM_EXP_BITS; // Position of sign bit
+constexpr uint64_t XSUM_SIGN_MASK = static_cast<uint64_t>(1) << XSUM_SIGN_BIT; // Mask for sign bit
+constexpr int64_t XSUM_SCHUNK_BITS = 64; // Bits in chunk of the small accumulator
+constexpr int64_t XSUM_LOW_EXP_BITS = 5; // # of low bits of exponent, in one chunk
+constexpr int64_t XSUM_LOW_EXP_MASK = (1 << XSUM_LOW_EXP_BITS) - 1; // Mask for low-order exponent bits
+constexpr int64_t XSUM_HIGH_EXP_BITS = XSUM_EXP_BITS - XSUM_LOW_EXP_BITS; // # of high exponent bits for index
+constexpr int64_t XSUM_SCHUNKS = (1 << XSUM_HIGH_EXP_BITS) + 3; // # of chunks in small accumulator
+constexpr int64_t XSUM_LOW_MANTISSA_BITS = 1 << XSUM_LOW_EXP_BITS; // Bits in low part of mantissa
+constexpr int64_t XSUM_LOW_MANTISSA_MASK = (static_cast<int64_t>(1) << XSUM_LOW_MANTISSA_BITS) - 1; // Mask for low bits
+constexpr int64_t XSUM_SMALL_CARRY_BITS = (XSUM_SCHUNK_BITS - 1) - XSUM_MANTISSA_BITS; // Bits sums can carry into
+constexpr int64_t XSUM_SMALL_CARRY_TERMS = (1 << XSUM_SMALL_CARRY_BITS) - 1; // # terms can add before need prop.
+
+} // anonymous namespace
+
+namespace Xsum {
+
+SmallAccumulator::SmallAccumulator(
+    int addsUntilPropagate,
+    int64_t inf,
+    int64_t nan
+) : chunk(XSUM_SCHUNKS, 0LL), addsUntilPropagate { addsUntilPropagate }, inf { inf }, nan { nan } { }
 
-ALWAYS_INLINE std::pair<double, double> twosum(double x, double y)
+} // namespace Xsum
+
+PreciseSum::PreciseSum()
+: m_smallAccumulator { XSUM_SMALL_CARRY_TERMS, 0, 0 }, m_sizeCount { 0 }, m_hasPosNumber { false } { }
+
+/*
+ADD A VECTOR OF FLOATING-POINT NUMBERS TO A SMALL ACCUMULATOR. Mixes
+calls of xsumCarryPropagate with calls of xsumAdd1NoCarry.
+*/
+void PreciseSum::addList(const std::span<const double> vec)
 {
-    double hi = x + y;
-    double lo = y - (hi - x);
-    return std::make_pair(hi, lo);
+    size_t offset = 01;
path: Source/WTF/wtf/PreciseSum.cpp
user: login: Constellation
body: Is this `01` right? If it is, then use `1`.
created_at: 2025-05-19T22:29:28Z
author_association: MEMBER
diff_hunk: @@ -59,123 +65,358 @@
 
 namespace WTF {
 
-static constexpr double MAX_DOUBLE = 1.79769313486231570815e+308;
-static constexpr double PENULTIMATE_DOUBLE = 1.79769313486231550856e+308;
-static constexpr double MAX_ULP = MAX_DOUBLE - PENULTIMATE_DOUBLE;
-static constexpr double TWO_POW_1023 = 8.98846567431158e+307;
+namespace {
+
+constexpr int64_t XSUM_MANTISSA_BITS = 52; // Bits in fp mantissa, excludes implict 1
+constexpr int64_t XSUM_EXP_BITS = 11; // Bits in fp exponent
+constexpr int64_t XSUM_MANTISSA_MASK = (static_cast<int64_t>(1) << XSUM_MANTISSA_BITS) - 1; // Mask for mantissa bits
+constexpr int64_t XSUM_EXP_MASK = (1 << XSUM_EXP_BITS) - 1; // Mask for exponent
+constexpr int64_t XSUM_EXP_BIAS = (1 << (XSUM_EXP_BITS - 1)) - 1; // Bias added to signed exponent
+constexpr int64_t XSUM_SIGN_BIT = XSUM_MANTISSA_BITS + XSUM_EXP_BITS; // Position of sign bit
+constexpr uint64_t XSUM_SIGN_MASK = static_cast<uint64_t>(1) << XSUM_SIGN_BIT; // Mask for sign bit
+constexpr int64_t XSUM_SCHUNK_BITS = 64; // Bits in chunk of the small accumulator
+constexpr int64_t XSUM_LOW_EXP_BITS = 5; // # of low bits of exponent, in one chunk
+constexpr int64_t XSUM_LOW_EXP_MASK = (1 << XSUM_LOW_EXP_BITS) - 1; // Mask for low-order exponent bits
+constexpr int64_t XSUM_HIGH_EXP_BITS = XSUM_EXP_BITS - XSUM_LOW_EXP_BITS; // # of high exponent bits for index
+constexpr int64_t XSUM_SCHUNKS = (1 << XSUM_HIGH_EXP_BITS) + 3; // # of chunks in small accumulator
+constexpr int64_t XSUM_LOW_MANTISSA_BITS = 1 << XSUM_LOW_EXP_BITS; // Bits in low part of mantissa
+constexpr int64_t XSUM_LOW_MANTISSA_MASK = (static_cast<int64_t>(1) << XSUM_LOW_MANTISSA_BITS) - 1; // Mask for low bits
+constexpr int64_t XSUM_SMALL_CARRY_BITS = (XSUM_SCHUNK_BITS - 1) - XSUM_MANTISSA_BITS; // Bits sums can carry into
+constexpr int64_t XSUM_SMALL_CARRY_TERMS = (1 << XSUM_SMALL_CARRY_BITS) - 1; // # terms can add before need prop.
+
+} // anonymous namespace
+
+namespace Xsum {
+
+SmallAccumulator::SmallAccumulator(
+    int addsUntilPropagate,
+    int64_t inf,
+    int64_t nan
+) : chunk(XSUM_SCHUNKS, 0LL), addsUntilPropagate { addsUntilPropagate }, inf { inf }, nan { nan } { }
 
-ALWAYS_INLINE std::pair<double, double> twosum(double x, double y)
+} // namespace Xsum
+
+PreciseSum::PreciseSum()
+: m_smallAccumulator { XSUM_SMALL_CARRY_TERMS, 0, 0 }, m_sizeCount { 0 }, m_hasPosNumber { false } { }
+
+/*
+ADD A VECTOR OF FLOATING-POINT NUMBERS TO A SMALL ACCUMULATOR. Mixes
+calls of xsumCarryPropagate with calls of xsumAdd1NoCarry.
+*/
+void PreciseSum::addList(const std::span<const double> vec)
 {
-    double hi = x + y;
-    double lo = y - (hi - x);
-    return std::make_pair(hi, lo);
+    size_t offset = 01;
path: Source/WTF/wtf/PreciseSum.cpp
user: login: Gumichocopengin8
body: it should be `0`. Thanks for reviewing code and finding a typo. 
So far `addList` function isn't used, but planning to use it in a different PR for speed improvement.
created_at: 2025-05-19T22:44:57Z
author_association: MEMBER

PR comments:
user: login: webkit-early-warning-system
created_at: 2025-05-17T00:00:55Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/a22c067dae8f6b5c313f6e13a423546845ff2713)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [❌ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/103908 "1 style error") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23611 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/13932 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109101 "Built successfully") | [  ~~🛠 win~~](https://ews-build.webkit.org/#/builders/59/builds/54569 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/23966 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32156 "Built successfully") | [  ~~🧪 wpe-wk2~~](https://ews-build.webkit.org/#/builders/34/builds/78932 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 win-tests~~](https://ews-build.webkit.org/#/builders/59/builds/54569 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/106914 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18607 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93730 "Passed tests") | [  ~~🧪 api-wpe~~](https://ews-build.webkit.org/#/builders/41/builds/59260 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [⏳ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/iOS-18-Simulator-WPT-WK2-Tests-EWS "Waiting to run tests") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/11781 "Passed tests") | [  ~~🛠 wpe-cairo~~](https://ews-build.webkit.org/#/builders/65/builds/53936 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96583 "Built successfully and passed tests") | [⏳ 🧪 api-ios](https://ews-build.webkit.org/#/builders/API-Tests-iOS-Simulator-EWS "Waiting to run tests") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/11840 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111488 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102519 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31064 "Built successfully") | [⏳ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/macOS-Sequoia-Debug-WK2-Tests-EWS "Waiting to run tests") | [  ~~🧪 gtk-wk2~~](https://ews-build.webkit.org/#/builders/1/builds/87944 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31427 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/89931 "Passed tests") | [✅ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87598 "Passed tests") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32483 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10218 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25430 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/30993 "Built successfully") | [  ~~🛠 mac-safer-cpp~~](https://ews-build.webkit.org/#/builders/120/builds/36303 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126152 "Built successfully") | 
| | [  ~~🛠 tv-sim~~](https://ews-build.webkit.org/#/builders/125/builds/30786 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | | [❌ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34908 "Found 50 new JSC stress test failures: microbenchmarks/math-sumPrecise-10.js.bytecode-cache, microbenchmarks/math-sumPrecise-10.js.default, microbenchmarks/math-sumPrecise-10.js.dfg-eager, microbenchmarks/math-sumPrecise-10.js.dfg-eager-no-cjit-validate, microbenchmarks/math-sumPrecise-10.js.eager-jettison-no-cjit, microbenchmarks/math-sumPrecise-10.js.lockdown, microbenchmarks/math-sumPrecise-10.js.mini-mode, microbenchmarks/math-sumPrecise-10.js.no-cjit-collect-continuously, microbenchmarks/math-sumPrecise-10.js.no-cjit-validate-phases, microbenchmarks/math-sumPrecise-10.js.no-llint ... (failure)") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34123 "Built successfully") | | | 
| | [  ~~🛠 watch-sim~~](https://ews-build.webkit.org/#/builders/124/builds/32347 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | | | </details>
author_association: COLLABORATOR
user: login: webkit-early-warning-system
created_at: 2025-05-17T01:03:25Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/7057c031363c2090e38c74b1f9a66602fe9f0a4e)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [❌ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/103914 "1 style error") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23617 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/13938 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109107 "Built successfully") | [❌ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54575 "") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/23972 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32162 "Built successfully") | [✅ 🧪 wpe-wk2](https://ews-build.webkit.org/#/builders/34/builds/78939 "Passed tests") | [❌ 🧪 win-tests](https://ews-build.webkit.org/#/builders/59/builds/54575 "") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/106920 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18614 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93735 "Passed tests") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59267 "Passed tests") | 
| | [✅ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/133/builds/18410 "Passed tests") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/11786 "Passed tests") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/53942 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96589 "Built successfully and passed tests") | [✅ 🧪 api-ios](https://ews-build.webkit.org/#/builders/13/builds/88162 "Passed tests") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/11845 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111494 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102525 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31070 "Built successfully") | [✅ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/122/builds/22901 "Passed tests") | [✅ 🧪 gtk-wk2](https://ews-build.webkit.org/#/builders/1/builds/87947 "Passed tests") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31433 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/89936 "Passed tests") | [✅ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87601 "Passed tests") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32489 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10223 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25436 "The change is no longer eligible for processing.") | 
| | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/30999 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36309 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126158 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30792 "Built successfully") | | [❌ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34911 "Found 50 new JSC stress test failures: microbenchmarks/math-sumPrecise-10.js.bytecode-cache, microbenchmarks/math-sumPrecise-10.js.default, microbenchmarks/math-sumPrecise-10.js.dfg-eager, microbenchmarks/math-sumPrecise-10.js.dfg-eager-no-cjit-validate, microbenchmarks/math-sumPrecise-10.js.eager-jettison-no-cjit, microbenchmarks/math-sumPrecise-10.js.lockdown, microbenchmarks/math-sumPrecise-10.js.mini-mode, microbenchmarks/math-sumPrecise-10.js.no-cjit-collect-continuously, microbenchmarks/math-sumPrecise-10.js.no-cjit-validate-phases, microbenchmarks/math-sumPrecise-10.js.no-llint ... (failure)") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34129 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32353 "Built successfully") | | | </details>
author_association: COLLABORATOR
user: login: Constellation
created_at: 2025-05-17T02:57:49Z
body: I think it produces different precision and we observed test262 failure. Is xsum better or is that having an issue?
author_association: MEMBER
user: login: Gumichocopengin8
created_at: 2025-05-17T08:57:07Z
body: @Constellation
Based on [xsum paper](https://gitlab.com/radfordneal/xsum/-/blob/master/xsum-paper.pdf?ref_type=heads), xsum calculates the exact summation, so xsum provides better precision (and speed).

> I think it produces different precision and we observed test262 failure.

Could you clarify where the precision difference and test262 failure are observed?
I wasn't able to find any failed test262 cases on EWS (I found failed microbenchmarks in  `jsc-armv7-tests`). All tests related to the Math object pass locally for macOS. Used this command `test262-runner --release -o test/built-ins/Math` for local run.

author_association: MEMBER
user: login: webkit-early-warning-system
created_at: 2025-05-17T09:43:30Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/d9f60a3f042e70eca5746300c00473d588b223e0)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/103952 "Passed style check") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23655 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/13976 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109145 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54614 "Built successfully") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24013 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32200 "Built successfully") | [✅ 🧪 wpe-wk2](https://ews-build.webkit.org/#/builders/34/builds/78964 "Passed tests") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/106958 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18645 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93773 "Passed tests") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59292 "Passed tests") | 
| | [✅ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/133/builds/18434 "Passed tests") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/11824 "Passed tests") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/53980 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96627 "Built successfully and passed tests") | [❌ 🧪 api-ios](https://ews-build.webkit.org/#/builders/13/builds/88181 "Found 1 new API test failure: TestWebKitAPI.CARingBufferTest.FetchTimeBoundsConsistent (failure)") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/11882 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111532 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102563 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31108 "Built successfully") | [✅ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/122/builds/22919 "Passed tests") | [✅ 🧪 gtk-wk2](https://ews-build.webkit.org/#/builders/1/builds/87978 "Passed tests") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31472 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/89973 "Passed tests") | [✅ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87634 "Passed tests") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32520 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10260 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25479 "The change is no longer eligible for processing.") | 
| | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31037 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36347 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126196 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30830 "Built successfully") | | [❌ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34913 "Found 50 new JSC stress test failures: microbenchmarks/math-sumPrecise-10.js.bytecode-cache, microbenchmarks/math-sumPrecise-10.js.default, microbenchmarks/math-sumPrecise-10.js.dfg-eager, microbenchmarks/math-sumPrecise-10.js.dfg-eager-no-cjit-validate, microbenchmarks/math-sumPrecise-10.js.eager-jettison-no-cjit, microbenchmarks/math-sumPrecise-10.js.lockdown, microbenchmarks/math-sumPrecise-10.js.mini-mode, microbenchmarks/math-sumPrecise-10.js.no-cjit-collect-continuously, microbenchmarks/math-sumPrecise-10.js.no-cjit-validate-phases, microbenchmarks/math-sumPrecise-10.js.no-llint ... (failure)") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34167 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32391 "Built successfully") | | | </details>
author_association: COLLABORATOR
user: login: webkit-early-warning-system
created_at: 2025-05-18T04:01:29Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/e5d9640693cfc65527ee9600500a7b3d86eb3b48)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104019 "Passed style check") | [❌ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23723 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14043 "Hash e5d96406 for PR 45527 does not build (failure)") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109215 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54686 "Built successfully") 
| | [❌ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24084 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32267 "Hash e5d96406 for PR 45527 does not build (failure)") | [  ~~🧪 wpe-wk2~~](https://ews-build.webkit.org/#/builders/34/builds/79017 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107025 "Passed tests") | [❌ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/130/builds/24084 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🧪 api-mac](https://ews-build.webkit.org/#/builders/138/builds/14043 "Hash e5d96406 for PR 45527 does not build (failure)") | [  ~~🧪 api-wpe~~](https://ews-build.webkit.org/#/builders/41/builds/59346 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [❌ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/130/builds/24084 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/138/builds/14043 "Hash e5d96406 for PR 45527 does not build (failure)") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54047 "Built successfully") | 
| [❌ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96694 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🧪 api-ios](https://ews-build.webkit.org/#/builders/130/builds/24084 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/138/builds/14043 "Hash e5d96406 for PR 45527 does not build (failure)") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111600 "Built successfully") | 
| [❌ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102630 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31175 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/123/builds/32267 "Hash e5d96406 for PR 45527 does not build (failure)") | [  ~~🧪 gtk-wk2~~](https://ews-build.webkit.org/#/builders/1/builds/88030 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [❌ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31539 "Hash e5d96406 for PR 45527 does not build (failure)") | [❌ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/138/builds/14043 "Hash e5d96406 for PR 45527 does not build (failure)") | [  ~~🧪 api-gtk~~](https://ews-build.webkit.org/#/builders/21/builds/87687 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [⏳ 🧪 vision-wk2 ](https://ews-build.webkit.org/#/builders/visionOS-2-Simulator-WK2-Tests-EWS "Waiting in queue, processing has not started yet") | [❌ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/138/builds/14043 "Hash e5d96406 for PR 45527 does not build (failure)") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25601 "The change is no longer eligible for processing.") | 
| | [❌ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31104 "Hash e5d96406 for PR 45527 does not build (failure)") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36416 "Built successfully") | [❌ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126263 "Hash e5d96406 for PR 45527 does not build (failure)") | 
| | [❌ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30897 "Hash e5d96406 for PR 45527 does not build (failure)") | | [❌ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/35/builds/126263 "Hash e5d96406 for PR 45527 does not build (failure)") | 
| | [❌ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34234 "Hash e5d96406 for PR 45527 does not build (failure)") | | | 
| | [❌ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32458 "Hash e5d96406 for PR 45527 does not build (failure)") | | | </details>
author_association: COLLABORATOR
user: login: webkit-early-warning-system
created_at: 2025-05-18T04:06:30Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/dfd015e70aae4176036e72dbad6b67ccb2a08da5)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104020 "Passed style check") | [❌ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23724 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14044 "Hash dfd015e7 for PR 45527 does not build (failure)") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109216 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54687 "Built successfully") 
| | [❌ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24086 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32268 "Hash dfd015e7 for PR 45527 does not build (failure)") | [  ~~🧪 wpe-wk2~~](https://ews-build.webkit.org/#/builders/34/builds/79018 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107026 "Passed tests") | [❌ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/130/builds/24086 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🧪 api-mac](https://ews-build.webkit.org/#/builders/138/builds/14044 "Hash dfd015e7 for PR 45527 does not build (failure)") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59347 "Passed tests") | 
| | [❌ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/130/builds/24086 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/138/builds/14044 "Hash dfd015e7 for PR 45527 does not build (failure)") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54048 "Built successfully") | 
| [❌ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96695 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🧪 api-ios](https://ews-build.webkit.org/#/builders/130/builds/24086 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/138/builds/14044 "Hash dfd015e7 for PR 45527 does not build (failure)") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111601 "Built successfully") | 
| [❌ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102631 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31176 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/123/builds/32268 "Hash dfd015e7 for PR 45527 does not build (failure)") | [  ~~🧪 gtk-wk2~~](https://ews-build.webkit.org/#/builders/1/builds/88032 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [❌ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31540 "Hash dfd015e7 for PR 45527 does not build (failure)") | [❌ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/138/builds/14044 "Hash dfd015e7 for PR 45527 does not build (failure)") | [  ~~🧪 api-gtk~~](https://ews-build.webkit.org/#/builders/21/builds/87689 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [⏳ 🧪 vision-wk2 ](https://ews-build.webkit.org/#/builders/visionOS-2-Simulator-WK2-Tests-EWS "Waiting in queue, processing has not started yet") | [❌ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/138/builds/14044 "Hash dfd015e7 for PR 45527 does not build (failure)") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25602 "The change is no longer eligible for processing.") | 
| | [❌ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31105 "Hash dfd015e7 for PR 45527 does not build (failure)") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36417 "Built successfully") | [❌ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126264 "Hash dfd015e7 for PR 45527 does not build (failure)") | 
| | [❌ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30898 "Hash dfd015e7 for PR 45527 does not build (failure)") | | [❌ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/35/builds/126264 "Hash dfd015e7 for PR 45527 does not build (failure)") | 
| | [❌ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34235 "Hash dfd015e7 for PR 45527 does not build (failure)") | | | 
| | [❌ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32459 "Hash dfd015e7 for PR 45527 does not build (failure)") | | | </details>
author_association: COLLABORATOR
user: login: webkit-early-warning-system
created_at: 2025-05-18T04:17:21Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/8f7bfdbaa63a03941649296186417b209ca1f908)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104021 "Passed style check") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23725 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14045 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109217 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54688 "Built successfully") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24087 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32269 "Built successfully") | [✅ 🧪 wpe-wk2](https://ews-build.webkit.org/#/builders/34/builds/79019 "Passed tests") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107027 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18708 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93829 "Passed tests") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59348 "Passed tests") | 
| | [✅ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/133/builds/18502 "Passed tests") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/11880 "Passed tests") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54049 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96696 "Built successfully and passed tests") | [❌ 🧪 api-ios](https://ews-build.webkit.org/#/builders/13/builds/88228 "Found 1 new API test failure: TestWebKitAPI.CARingBufferTest.FetchTimeBoundsConsistent (failure)") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/11938 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111602 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102632 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31177 "Built successfully") | [✅ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/122/builds/22975 "Passed tests") | [✅ 🧪 gtk-wk2](https://ews-build.webkit.org/#/builders/1/builds/88034 "Passed tests") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31541 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/90029 "Passed tests") | [✅ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87691 "Passed tests") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32574 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10316 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25603 "The change is no longer eligible for processing.") | 
| | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31106 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36418 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126265 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30899 "Built successfully") | | [✅ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34918 "Passed tests") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34236 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32460 "Built successfully") | | | </details>
author_association: COLLABORATOR
user: login: Gumichocopengin8
created_at: 2025-05-18T09:43:57Z
body: @Constellation I think all tests passed with xsum.
author_association: MEMBER
user: login: webkit-early-warning-system
created_at: 2025-05-18T12:24:07Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/2a3040aea46807490cf4cb15ab7293df89543485)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104040 "Passed style check") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23744 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14064 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109236 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54707 "Built successfully") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24106 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32288 "Built successfully") | [✅ 🧪 wpe-wk2](https://ews-build.webkit.org/#/builders/34/builds/79031 "Passed tests") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107046 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18720 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93845 "Passed tests") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59360 "Passed tests") | 
| | [  ~~🧪 ios-wk2-wpt~~](https://ews-build.webkit.org/#/builders/133/builds/18515 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/11896 "Passed tests") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54068 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96715 "Built successfully and passed tests") | [  ~~🧪 api-ios~~](https://ews-build.webkit.org/#/builders/13/builds/88240 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/11954 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111621 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102651 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31196 "Built successfully") | [✅ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/122/builds/22989 "Passed tests") | [✅ 🧪 gtk-wk2](https://ews-build.webkit.org/#/builders/1/builds/88044 "Passed tests") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31560 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/90045 "Passed tests") | [❌ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87701 "Found 101 new API test failures: /WebKitGTK/TestInputMethodContext:/webkit/WebKitInputMethodContext/invalid-sequence, /WebKitGTK/TestDownloads:/webkit/Downloads/blob-download, /WebKitGTK/TestUIClient:/webkit/WebKitWebView/mouse-target, /TestWebKit:WebKit.UserMediaBasic, /WebKitGTK/TestWebProcessExtensions:/webkit/WebKitWebProcessExtension/dom-input-element-is-user-edited, /WebKitGTK/TestDownloads:/webkit/Downloads/contex-menu-download-actions, /WebKitGTK/TestInputMethodContext:/webkit/WebKitInputMethodContext/cancel-sequence, /WebKitGTK/TestWebKitWebView:/webkit/WebKitWebView/is-playing-audio, /WebKitGTK/TestWebKitWebView:/webkit/WebKitWebView/page-visibility, /WebKitGTK/TestOptionMenu:/webkit/WebKitWebView/option-menu-select ... (failure)") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32584 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10332 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25628 "The change is no longer eligible for processing.") | 
| | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31125 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36437 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126284 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30918 "Built successfully") | | [✅ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34925 "Passed tests") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34255 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32479 "Built successfully") | | | </details>
author_association: COLLABORATOR
user: login: webkit-early-warning-system
created_at: 2025-05-18T15:15:50Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/e8812ce6cbb06a47b204ad10a8cadf60f745c147)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104046 "Passed style check") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23750 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14070 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109242 "Built successfully") | [  ~~🛠 win~~](https://ews-build.webkit.org/#/builders/59/builds/54713 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24112 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32294 "Built successfully") | [  ~~🧪 wpe-wk2~~](https://ews-build.webkit.org/#/builders/34/builds/79037 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 win-tests~~](https://ews-build.webkit.org/#/builders/59/builds/54713 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107052 "Passed tests") | [  ~~🧪 ios-wk2~~](https://ews-build.webkit.org/#/builders/132/builds/18726 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 api-mac~~](https://ews-build.webkit.org/#/builders/18/builds/93852 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 api-wpe~~](https://ews-build.webkit.org/#/builders/41/builds/59366 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [  ~~🧪 ios-wk2-wpt~~](https://ews-build.webkit.org/#/builders/133/builds/18521 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 mac-wk1~~](https://ews-build.webkit.org/#/builders/135/builds/11903 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54074 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96721 "Built successfully and passed tests") | [  ~~🧪 api-ios~~](https://ews-build.webkit.org/#/builders/13/builds/88247 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 mac-wk2~~](https://ews-build.webkit.org/#/builders/136/builds/11961 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111627 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102657 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31202 "Built successfully") | [  ~~🧪 mac-AS-debug-wk2~~](https://ews-build.webkit.org/#/builders/122/builds/22997 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 gtk-wk2~~](https://ews-build.webkit.org/#/builders/1/builds/88051 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31566 "Built successfully") | [  ~~🧪 mac-wk2-stress~~](https://ews-build.webkit.org/#/builders/8/builds/90052 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 api-gtk~~](https://ews-build.webkit.org/#/builders/21/builds/87708 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [  ~~🧪 vision-wk2~~](https://ews-build.webkit.org/#/builders/126/builds/32591 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🧪 mac-intel-wk2~~](https://ews-build.webkit.org/#/builders/137/builds/10339 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25635 "The change is no longer eligible for processing.") | 
| | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31131 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36443 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126290 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30924 "Built successfully") | | [  ~~🧪 jsc-armv7-tests~~](https://ews-build.webkit.org/#/builders/25/builds/34927 "The change is no longer eligible for processing. Commit was outdated when EWS attempted to process it.") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34261 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32485 "Built successfully") | | | </details>
author_association: COLLABORATOR
user: login: webkit-early-warning-system
created_at: 2025-05-18T15:19:22Z
body: EWS run on previous version of this PR (hash https://github.com/WebKit/WebKit/commit/7e9986b89756524c74f5b3b92fe1cf04f6f381e4)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104047 "Passed style check") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23751 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14071 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109243 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54714 "Built successfully") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24122 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32295 "Built successfully") | [✅ 🧪 wpe-wk2](https://ews-build.webkit.org/#/builders/34/builds/79038 "Passed tests") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107053 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18734 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93851 "Passed tests") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59367 "Passed tests") | 
| | [❌ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/133/builds/18532 "layout-tests (failure)") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/11902 "Passed tests") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54075 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96722 "Built successfully and passed tests") | [❌ 🧪 api-ios](https://ews-build.webkit.org/#/builders/13/builds/88256 "Found 1 new API test failure: TestWebKitAPI.CARingBufferTest.FetchTimeBoundsConsistent (failure)") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/11960 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111628 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102658 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31203 "Built successfully") | [✅ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/122/builds/22996 "Passed tests") | [✅ 🧪 gtk-wk2](https://ews-build.webkit.org/#/builders/1/builds/88050 "Passed tests") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31567 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/90051 "Passed tests") | [✅ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87707 "Passed tests") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32590 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10338 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25636 "The change is no longer eligible for processing.") | 
| | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31132 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36444 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126291 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/30925 "Built successfully") | | [✅ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34928 "Passed tests") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34262 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32486 "Built successfully") | | | </details>
author_association: COLLABORATOR
user: login: webkit-early-warning-system
created_at: 2025-05-19T22:42:44Z
body: EWS run on current version of this PR (hash https://github.com/WebKit/WebKit/commit/4021da2cae8422231f852b94a32d2df8394566fa)<details>

| Misc | iOS, visionOS, tvOS & watchOS  | macOS  | Linux |  Windows |
| ----- | ---------------------- | ------- |  ----- |  --------- |
| [✅ 🧪 style](https://ews-build.webkit.org/#/builders/38/builds/104168 "Passed style check") | [✅ 🛠 ios](https://ews-build.webkit.org/#/builders/131/builds/23872 "Built successfully") | [✅ 🛠 mac](https://ews-build.webkit.org/#/builders/138/builds/14192 "Built successfully") | [✅ 🛠 wpe](https://ews-build.webkit.org/#/builders/5/builds/109364 "Built successfully") | [✅ 🛠 win](https://ews-build.webkit.org/#/builders/59/builds/54836 "Built successfully") 
| | [✅ 🛠 ios-sim](https://ews-build.webkit.org/#/builders/130/builds/24240 "Built successfully") | [✅ 🛠 mac-AS-debug](https://ews-build.webkit.org/#/builders/123/builds/32416 "Built successfully") | [✅ 🧪 wpe-wk2](https://ews-build.webkit.org/#/builders/34/builds/79122 "Passed tests") | [⏳ 🧪 win-tests](https://ews-build.webkit.org/#/builders/Win-Tests-EWS "Waiting to run tests") 
| [✅ 🧪 webkitperl](https://ews-build.webkit.org/#/builders/11/builds/107174 "Passed tests") | [✅ 🧪 ios-wk2](https://ews-build.webkit.org/#/builders/132/builds/18830 "Passed tests") | [✅ 🧪 api-mac](https://ews-build.webkit.org/#/builders/18/builds/93974 "Passed tests") | [✅ 🧪 api-wpe](https://ews-build.webkit.org/#/builders/41/builds/59449 "Passed tests") | 
| | [✅ 🧪 ios-wk2-wpt](https://ews-build.webkit.org/#/builders/133/builds/18642 "Passed tests") | [✅ 🧪 mac-wk1](https://ews-build.webkit.org/#/builders/135/builds/12013 "Passed tests") | [✅ 🛠 wpe-cairo](https://ews-build.webkit.org/#/builders/65/builds/54196 "Built successfully") | 
| [✅ 🛠 🧪 jsc](https://ews-build.webkit.org/#/builders/20/builds/96843 "Built successfully and passed tests") | [✅ 🧪 api-ios](https://ews-build.webkit.org/#/builders/13/builds/88349 "Passed tests") | [✅ 🧪 mac-wk2](https://ews-build.webkit.org/#/builders/136/builds/12071 "Passed tests") | [✅ 🛠 gtk](https://ews-build.webkit.org/#/builders/2/builds/111750 "Built successfully") | 
| [✅ 🛠 🧪 jsc-arm64](https://ews-build.webkit.org/#/builders/12/builds/102779 "Built successfully and passed tests") | [✅ 🛠 vision](https://ews-build.webkit.org/#/builders/128/builds/31324 "Built successfully") | [✅ 🧪 mac-AS-debug-wk2](https://ews-build.webkit.org/#/builders/122/builds/23096 "Passed tests") | [✅ 🧪 gtk-wk2](https://ews-build.webkit.org/#/builders/1/builds/88145 "Passed tests") | 
| | [✅ 🛠 vision-sim](https://ews-build.webkit.org/#/builders/121/builds/31688 "Built successfully") | [✅ 🧪 mac-wk2-stress](https://ews-build.webkit.org/#/builders/8/builds/90162 "Passed tests") | [✅ 🧪 api-gtk](https://ews-build.webkit.org/#/builders/21/builds/87805 "Passed tests") | 
| | [✅ 🧪 vision-wk2](https://ews-build.webkit.org/#/builders/126/builds/32690 "Passed tests") | [✅ 🧪 mac-intel-wk2](https://ews-build.webkit.org/#/builders/137/builds/10442 "Passed tests") | [  ~~🛠 playstation~~](https://ews-build.webkit.org/#/builders/134/builds/25788 "The change is no longer eligible for processing.") | 
| [✅ 🛠 🧪 unsafe-merge](https://ews-build.webkit.org/#/builders/22/builds/16962 "Built successfully and passed tests") | [✅ 🛠 tv](https://ews-build.webkit.org/#/builders/127/builds/31253 "Built successfully") | [✅ 🛠 mac-safer-cpp](https://ews-build.webkit.org/#/builders/120/builds/36566 "Built successfully") | [✅ 🛠 jsc-armv7](https://ews-build.webkit.org/#/builders/35/builds/126413 "Built successfully") | 
| | [✅ 🛠 tv-sim](https://ews-build.webkit.org/#/builders/125/builds/31047 "Built successfully") | | [✅ 🧪 jsc-armv7-tests](https://ews-build.webkit.org/#/builders/25/builds/34955 "Passed tests") | 
| | [✅ 🛠 watch](https://ews-build.webkit.org/#/builders/129/builds/34383 "Built successfully") | | | 
| | [✅ 🛠 watch-sim](https://ews-build.webkit.org/#/builders/124/builds/32607 "Built successfully") | | | </details>
author_association: COLLABORATOR
user: login: Gumichocopengin8
created_at: 2025-05-19T23:38:56Z
body: Would you mind adding the merge queue label?
author_association: MEMBER
user: login: webkit-commit-queue
created_at: 2025-05-21T22:59:05Z
body: Committed 295242@main (2682d2ab17a4): <https://commits.webkit.org/295242@main>

Reviewed commits have been landed. Closing PR #45527 and removing active labels.
author_association: COLLABORATOR