public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/chromium] epel9-next: - refreshed patches
@ 2026-08-07 16:06 Than Ngo
  0 siblings, 0 replies; only message in thread
From: Than Ngo @ 2026-08-07 16:06 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/chromium
            Branch : epel9-next
            Commit : 765ac9dc58ec6372b7312555ea3ec2b675d40fbd
            Author : Than Ngo <than@redhat.com>
            Date   : 2024-05-14T11:10:12+02:00
            Stats  : +1210/-1229 in 11 file(s)
            URL    : https://src.fedoraproject.org/rpms/chromium/c/765ac9dc58ec6372b7312555ea3ec2b675d40fbd?branch=epel9-next

            Log:
            - refreshed patches
- rebased clean source

---
diff --git a/0001-Add-PPC64-support-for-boringssl.patch b/0001-Add-PPC64-support-for-boringssl.patch
index 52c6cb4..f636451 100644
--- a/0001-Add-PPC64-support-for-boringssl.patch
+++ b/0001-Add-PPC64-support-for-boringssl.patch
@@ -1,45 +1,3 @@
-Index: chromium-124.0.6367.60/third_party/boringssl/src/cmake/perlasm.cmake
-===================================================================
---- chromium-124.0.6367.60.orig/third_party/boringssl/src/cmake/perlasm.cmake
-+++ chromium-124.0.6367.60/third_party/boringssl/src/cmake/perlasm.cmake
-@@ -17,6 +17,7 @@ function(add_perlasm_target dest src)
-     DEPENDS
-     ${src}
-     ${PROJECT_SOURCE_DIR}/crypto/perlasm/arm-xlate.pl
-+    ${PROJECT_SOURCE_DIR}/crypto/perlasm/ppc-xlate.pl
-     ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86_64-xlate.pl
-     ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86asm.pl
-     ${PROJECT_SOURCE_DIR}/crypto/perlasm/x86gas.pl
-@@ -39,6 +40,9 @@ function(perlasm var arch dest src)
-   elseif(arch STREQUAL "arm")
-     add_perlasm_target("${dest}-linux.S" ${src} linux32 ${ARGN})
-     append_to_parent_scope("${var}_ASM" "${dest}-linux.S")
-+  elseif(arch STREQUAL "ppc64le")
-+    add_perlasm_target("${dest}-linux.S" ${src} linux64le)
-+    append_to_parent_scope("${var}_ASM" "${dest}-linux.S")
-   elseif(arch STREQUAL "x86")
-     add_perlasm_target("${dest}-apple.S" ${src} macosx -fPIC ${ARGN})
-     add_perlasm_target("${dest}-linux.S" ${src} elf -fPIC ${ARGN})
-Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/CMakeLists.txt
-===================================================================
---- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/CMakeLists.txt
-+++ chromium-124.0.6367.60/third_party/boringssl/src/crypto/CMakeLists.txt
-@@ -26,6 +26,7 @@ perlasm(CRYPTO_SOURCES aarch64 cipher_ex
- perlasm(CRYPTO_SOURCES aarch64 test/trampoline-armv8 test/asm/trampoline-armv8.pl)
- perlasm(CRYPTO_SOURCES arm chacha/chacha-armv4 chacha/asm/chacha-armv4.pl)
- perlasm(CRYPTO_SOURCES arm test/trampoline-armv4 test/asm/trampoline-armv4.pl)
-+perlasm(CRYPTO_SOURCES ppc64le test/trampoline-ppc test/asm/trampoline-ppc.pl)
- perlasm(CRYPTO_SOURCES x86 chacha/chacha-x86 chacha/asm/chacha-x86.pl)
- perlasm(CRYPTO_SOURCES x86 test/trampoline-x86 test/asm/trampoline-x86.pl)
- perlasm(CRYPTO_SOURCES x86_64 chacha/chacha-x86_64 chacha/asm/chacha-x86_64.pl)
-@@ -137,6 +138,7 @@ add_library(
-   cpu_arm_freebsd.c
-   cpu_arm_linux.c
-   cpu_intel.c
-+  cpu_ppc64le.c
-   crypto.c
-   curve25519/curve25519.c
-   curve25519/curve25519_64_adx.c
 Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/abi_self_test.cc
 ===================================================================
 --- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/abi_self_test.cc
@@ -419,19 +377,6 @@ Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/crypto.c
  #elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
  
  #include <openssl/arm_arch.h>
-Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/CMakeLists.txt
-===================================================================
---- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/fipsmodule/CMakeLists.txt
-+++ chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/CMakeLists.txt
-@@ -19,6 +19,8 @@ perlasm(BCM_SOURCES arm sha1-armv4-large
- perlasm(BCM_SOURCES arm sha256-armv4 sha/asm/sha256-armv4.pl)
- perlasm(BCM_SOURCES arm sha512-armv4 sha/asm/sha512-armv4.pl)
- perlasm(BCM_SOURCES arm vpaes-armv7 aes/asm/vpaes-armv7.pl)
-+perlasm(BCM_SOURCES ppc64le aesp8-ppc aes/asm/aesp8-ppc.pl)
-+perlasm(BCM_SOURCES ppc64le ghashp8-ppc modes/asm/ghashp8-ppc.pl)
- perlasm(BCM_SOURCES x86 aesni-x86 aes/asm/aesni-x86.pl)
- perlasm(BCM_SOURCES x86 bn-586 bn/asm/bn-586.pl)
- perlasm(BCM_SOURCES x86 co-586 bn/asm/co-586.pl)
 Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/aes/asm/aesp8-ppc.pl
 ===================================================================
 --- /dev/null
@@ -8870,18 +8815,6 @@ Index: chromium-124.0.6367.60/third_party/boringssl/src/util/fipstools/delocate/
 +.byte 0xff
 +.byte 0x31
 +.byte 0x80
-Index: chromium-124.0.6367.60/third_party/boringssl/src/util/generate_build_files.py
-===================================================================
---- chromium-124.0.6367.60.orig/third_party/boringssl/src/util/generate_build_files.py
-+++ chromium-124.0.6367.60/third_party/boringssl/src/util/generate_build_files.py
-@@ -34,6 +34,7 @@ OS_ARCH_COMBOS = [
-     ('apple', 'x86_64', 'macosx', [], 'S'),
-     ('linux', 'arm', 'linux32', [], 'S'),
-     ('linux', 'aarch64', 'linux64', [], 'S'),
-+    ('linux', 'ppc64le', 'linux64le', [], 'S'),
-     ('linux', 'x86', 'elf', ['-fPIC'], 'S'),
-     ('linux', 'x86_64', 'elf', [], 'S'),
-     ('win', 'x86', 'win32n', [], 'asm'),
 Index: chromium-124.0.6367.60/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.c
 ===================================================================
 --- chromium-124.0.6367.60.orig/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.c

diff --git a/0002-third-party-boringssl-add-generated-files.patch b/0002-third-party-boringssl-add-generated-files.patch
index b4f8d28..11f9e4c 100644
--- a/0002-third-party-boringssl-add-generated-files.patch
+++ b/0002-third-party-boringssl-add-generated-files.patch
@@ -1,8 +1,7 @@
-Index: chromium-120.0.6099.71/third_party/boringssl/BUILD.generated.gni
-===================================================================
---- chromium-120.0.6099.71.orig/third_party/boringssl/BUILD.generated.gni
-+++ chromium-120.0.6099.71/third_party/boringssl/BUILD.generated.gni
-@@ -94,6 +94,7 @@ crypto_sources = [
+diff -up chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni
+--- chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni.0002-third-party-boringssl-add-generated-files	2024-05-08 22:30:22.000000000 +0200
++++ chromium-125.0.6422.41/third_party/boringssl/BUILD.generated.gni	2024-05-13 23:31:29.026580692 +0200
+@@ -93,6 +93,7 @@ crypto_sources = [
    "src/crypto/cpu_arm_linux.c",
    "src/crypto/cpu_arm_linux.h",
    "src/crypto/cpu_intel.c",
@@ -10,20 +9,19 @@ Index: chromium-120.0.6099.71/third_party/boringssl/BUILD.generated.gni
    "src/crypto/crypto.c",
    "src/crypto/curve25519/curve25519.c",
    "src/crypto/curve25519/curve25519_64_adx.c",
-@@ -389,6 +390,9 @@ crypto_sources_asm = [
-   "linux-arm/crypto/fipsmodule/sha512-armv4-linux.S",
-   "linux-arm/crypto/fipsmodule/vpaes-armv7-linux.S",
-   "linux-arm/crypto/test/trampoline-armv4-linux.S",
+@@ -434,6 +435,9 @@ crypto_sources_asm = [
+   "src/gen/crypto/chacha20_poly1305_x86_64-apple.S",
+   "src/gen/crypto/chacha20_poly1305_x86_64-linux.S",
+   "src/gen/test_support/trampoline-armv4-linux.S",
 +  "linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S",
 +  "linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S",
 +  "linux-ppc64le/crypto/test/trampoline-ppc-linux.S",
-   "linux-x86/crypto/chacha/chacha-x86-linux.S",
-   "linux-x86/crypto/fipsmodule/aesni-x86-linux.S",
-   "linux-x86/crypto/fipsmodule/bn-586-linux.S",
-Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S
-===================================================================
---- /dev/null
-+++ chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S
+   "src/gen/test_support/trampoline-armv8-apple.S",
+   "src/gen/test_support/trampoline-armv8-linux.S",
+   "src/gen/test_support/trampoline-armv8-win.S",
+diff -up chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S
+--- chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files	2024-05-13 21:28:13.295879825 +0200
++++ chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/aesp8-ppc-linux.S	2024-05-13 21:28:13.294879802 +0200
 @@ -0,0 +1,3673 @@
 +// This file is generated from a similarly-named Perl script in the BoringSSL
 +// source tree. Do not edit by hand.
@@ -3698,10 +3696,9 @@ Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmod
 +// See https://www.airs.com/blog/archives/518.
 +.section .note.GNU-stack,"",%progbits
 +#endif
-Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S
-===================================================================
---- /dev/null
-+++ chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S
+diff -up chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S
+--- chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S.0002-third-party-boringssl-add-generated-files	2024-05-13 21:28:13.295879825 +0200
++++ chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/fipsmodule/ghashp8-ppc-linux.S	2024-05-13 21:28:13.295879825 +0200
 @@ -0,0 +1,590 @@
 +// This file is generated from a similarly-named Perl script in the BoringSSL
 +// source tree. Do not edit by hand.
@@ -4293,10 +4290,9 @@ Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/fipsmod
 +// See https://www.airs.com/blog/archives/518.
 +.section .note.GNU-stack,"",%progbits
 +#endif
-Index: chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S
-===================================================================
---- /dev/null
-+++ chromium-120.0.6099.71/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S
+diff -up chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S.0002-third-party-boringssl-add-generated-files chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S
+--- chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S.0002-third-party-boringssl-add-generated-files	2024-05-13 21:28:13.295879825 +0200
++++ chromium-125.0.6422.41/third_party/boringssl/linux-ppc64le/crypto/test/trampoline-ppc-linux.S	2024-05-13 21:28:13.295879825 +0200
 @@ -0,0 +1,1413 @@
 +// This file is generated from a similarly-named Perl script in the BoringSSL
 +// source tree. Do not edit by hand.

diff --git a/HACK-debian-clang-disable-skia-musttail.patch b/HACK-debian-clang-disable-skia-musttail.patch
deleted file mode 100644
index 6e25520..0000000
--- a/HACK-debian-clang-disable-skia-musttail.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-Index: chromium-120.0.6099.71/third_party/skia/src/core/SkRasterPipeline.h
-===================================================================
---- chromium-120.0.6099.71.orig/third_party/skia/src/core/SkRasterPipeline.h
-+++ chromium-120.0.6099.71/third_party/skia/src/core/SkRasterPipeline.h
-@@ -24,7 +24,7 @@ enum SkColorType : int;
- struct SkImageInfo;
- struct skcms_TransferFunction;
- 
--#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32)
-+#if __has_cpp_attribute(clang::musttail) && !defined(__EMSCRIPTEN__) && !defined(SK_CPU_ARM32) && !defined(__powerpc64__)
-     #define SK_HAS_MUSTTAIL 1
- #else
-     #define SK_HAS_MUSTTAIL 0

diff --git a/chromium-121-v8-c++20-p1.patch b/chromium-121-v8-c++20-p1.patch
deleted file mode 100644
index bdf6c01..0000000
--- a/chromium-121-v8-c++20-p1.patch
+++ /dev/null
@@ -1,171 +0,0 @@
-commit ce71348a09f6689dd01a68db64b172191d0182d8
-Author: Andrey Kosyakov <caseq@chromium.org>
-Date:   Thu Dec 21 18:38:38 2023 +0000
-
-    [bindings] Use v8::Array::Iterate for converting script wrappables
-    
-    
-    This changes CreateIDLSequenceFromV8Array to use the new
-    v8::Array::Iterate() operation.
-    This speeds up the "execBundles" part of the microbenchmark
-    at crbug.com/dawn/1858 by around 3x.
-    This depends on crrev.com/c/4846594 landing (and rolling) first.
-    
-    This is a slight re-work of https://crrev.com/c/4847447/3,
-    originally by jkummerow@chromium.org
-    
-    Bug: v8:14218, dawn:1858, 1511239
-    Change-Id: Ia266556d05b4d53e6942e12609d1c08882b4ff0f
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5132129
-    Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
-    Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1240236}
-
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
-index 1e5a0790df6da..a5c28b37e9454 100644
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
-@@ -84,6 +84,12 @@ struct NativeValueTraitsBase {
-       std::is_pointer_v<ImplType> ||
-       requires(ImplType value) { value.IsNull(); };
- 
-+  // This should only be true for certain subclasses of ScriptWrappable
-+  // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
-+  // regards to how NativeValue() is implemented for the underlying type.
-+  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
-+      false;
-+
-   template <typename... ExtraArgs>
-   static decltype(auto) ArgumentValue(v8::Isolate* isolate,
-                                       int argument_index,
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
-index 5011503dcf1c0..f085b6e905161 100644
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
-@@ -1037,10 +1037,86 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate,
-     return {};
-   }
- 
--  typename NativeValueTraits<IDLSequence<T>>::ImplType result;
-+  using ResultType = typename NativeValueTraits<IDLSequence<T>>::ImplType;
-+  ResultType result;
-   result.ReserveInitialCapacity(length);
-   v8::Local<v8::Context> current_context = isolate->GetCurrentContext();
-   v8::TryCatch try_block(isolate);
-+
-+  // Fast path -- we're creating a sequence of script wrappables, which can be
-+  // done by directly getting underlying object as long as array types are
-+  // homogeneous. With ScriptWrappables, we don't expect to enter JS during
-+  // iteration, so we can rely on v8::Array::Iterate() which is much faster than
-+  // iterating an array on the client side of the v8. Additionally, for most
-+  // subsptyes of ScriptWrappables, we can speed up type checks (see more on
-+  // that below next to supports_scriptwrappable_specific_fast_array_iteration
-+  // check.
-+  if constexpr (std::is_base_of_v<ScriptWrappable, T>) {
-+    struct CallbackData {
-+      STACK_ALLOCATED();
-+
-+     public:
-+      v8::Isolate* isolate;
-+      v8::TypecheckWitness witness;
-+      ResultType& result;
-+      ExceptionState& exception_state;
-+      CallbackData(v8::Isolate* isolate,
-+                   ResultType& result,
-+                   ExceptionState& exception_state)
-+          : isolate(isolate),
-+            witness(isolate),
-+            result(result),
-+            exception_state(exception_state) {}
-+    };
-+
-+    CallbackData callback_data(isolate, result, exception_state);
-+    v8::Array::IterationCallback callback = [](uint32_t index,
-+                                               v8::Local<v8::Value> v8_element,
-+                                               void* data) {
-+      CallbackData* callback_data = reinterpret_cast<CallbackData*>(data);
-+      // 3.4. Initialize Si to the result of converting nextItem to an IDL value
-+      //   of type T.
-+      v8::TypecheckWitness& witness = callback_data->witness;
-+      // We can speed up type check by taking advantage of V8's type witness,
-+      // provided traits' NativeValue implementation doesn't have additional
-+      // logic beyond checking the type and calling ToScriptWrappable().
-+      if constexpr (
-+          NativeValueTraits<
-+              T>::supports_scriptwrappable_specific_fast_array_iteration) {
-+        if (witness.Matches(v8_element)) {
-+          auto&& value = ToScriptWrappable(v8_element.As<v8::Object>())
-+                             ->template ToImpl<T>();
-+          callback_data->result.push_back(std::move(value));
-+          return v8::Array::CallbackResult::kContinue;
-+        }
-+      }
-+      auto&& element = NativeValueTraits<T>::NativeValue(
-+          callback_data->isolate, v8_element, callback_data->exception_state);
-+      if (callback_data->exception_state.HadException()) {
-+        // It doesn't matter whether we return `kException` or `kBreak` here,
-+        // as that only affects the return value of `v8_array->Iterate()`,
-+        // which we are ignoring.
-+        return v8::Array::CallbackResult::kException;
-+      }
-+      if constexpr (
-+          NativeValueTraits<
-+              T>::supports_scriptwrappable_specific_fast_array_iteration) {
-+        witness.Update(v8_element);
-+      }
-+      callback_data->result.push_back(std::move(element));
-+      return v8::Array::CallbackResult::kContinue;
-+    };
-+    if (!v8_array->Iterate(current_context, callback, &callback_data)
-+             .IsJust()) {
-+      if (try_block.HasCaught()) {
-+        exception_state.RethrowV8Exception(try_block.Exception());
-+      }
-+      DCHECK(exception_state.HadException());
-+      return {};
-+    }
-+    return result;
-+  }
-+
-   // Array length may change if array is mutated during iteration.
-   for (uint32_t i = 0; i < v8_array->Length(); ++i) {
-     v8::Local<v8::Value> v8_element;
-@@ -1056,6 +1132,7 @@ CreateIDLSequenceFromV8ArraySlow(v8::Isolate* isolate,
-       return {};
-     result.push_back(std::move(element));
-   }
-+
-   // 3.2. If next is false, then return an IDL sequence value of type
-   //   sequence<T> of length i, where the value of the element at index j is Sj.
-   return result;
-@@ -1398,6 +1475,7 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-   }
- };
- 
-+// Interface types
- template <typename T>
-   requires std::derived_from<T, CallbackInterfaceBase>
- struct NativeValueTraits<IDLNullable<T>>
-@@ -1470,12 +1548,21 @@ struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
- template <typename T>
-   requires std::derived_from<T, ScriptWrappable>
- struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-+  // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
-+  // certain optimization based on assumptions about `NativeValue()`
-+  // implementation below. For subclasses of ScriptWrappable that have
-+  // different implementation of NativeValue(), this should remain false.
-+  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
-+      true;
-+
-   static inline T* NativeValue(v8::Isolate* isolate,
-                                v8::Local<v8::Value> value,
-                                ExceptionState& exception_state) {
-     const WrapperTypeInfo* wrapper_type_info = T::GetStaticWrapperTypeInfo();
--    if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info, value))
-+    if (V8PerIsolateData::From(isolate)->HasInstance(wrapper_type_info,
-+                                                     value)) {
-       return ToScriptWrappable(value.As<v8::Object>())->template ToImpl<T>();
-+    }
- 
-     bindings::NativeValueTraitsInterfaceNotOfType(wrapper_type_info,
-                                                   exception_state);

diff --git a/chromium-123-v8-c++20.patch b/chromium-123-v8-c++20.patch
deleted file mode 100644
index a4682da..0000000
--- a/chromium-123-v8-c++20.patch
+++ /dev/null
@@ -1,733 +0,0 @@
-commit 940af9f2c87b436559b97c53763aa9eaaf1254eb
-Author: Jeremy Roman <jbroman@chromium.org>
-Date:   Wed Nov 15 16:24:54 2023 +0000
-
-    Use C++20 features to simplify blink::NativeValueTraitsBase.
-    
-    These allow some of the metaprogramming bits to be simplified a little.
-    
-    Change-Id: I052b4397586d21348401616e1792afdb9662f975
-    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5030335
-    Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
-    Commit-Queue: Jeremy Roman <jbroman@chromium.org>
-    Cr-Commit-Position: refs/heads/main@{#1224978}
-
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
-index 7fc91d14acc71..1e5a0790df6da 100644
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
-@@ -5,6 +5,7 @@
- #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
- #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
- 
-+#include <concepts>
- #include <type_traits>
- 
- #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h"
-@@ -30,7 +31,7 @@ class ExceptionState;
- //     return toInt32(isolate, value, exceptionState, NormalConversion);
- //   }
- // }
--template <typename T, typename SFINAEHelper = void>
-+template <typename T>
- struct NativeValueTraits;
- 
- // This declaration serves only as a blueprint for specializations: the
-@@ -45,22 +46,15 @@ struct NativeValueTraits;
- 
- namespace bindings {
- 
--template <typename T, typename = void>
--struct NativeValueTraitsHasIsNull : std::false_type {};
--
- template <typename T>
--struct NativeValueTraitsHasIsNull<
--    T,
--    std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
-+struct ImplTypeFor {
-+  using type = T;
-+};
- 
- template <typename T>
--struct NativeValueTraitsHasNullValue {
--  // true if |T| supports IDL null value.
--  static constexpr bool value =
--      // ScriptValue, String, and union types have IsNull member function.
--      bindings::NativeValueTraitsHasIsNull<T>::value ||
--      // Pointer types have nullptr as IDL null value.
--      std::is_pointer<T>::value;
-+  requires std::derived_from<T, IDLBase>
-+struct ImplTypeFor<T> {
-+  using type = typename T::ImplType;
- };
- 
- }  // namespace bindings
-@@ -78,37 +72,17 @@ struct NativeValueTraitsHasNullValue {
- // If present, |NullValue()| will be used when converting from the nullable type
- // T?, and should be used if the impl type has an existing "null" state. If not
- // present, WTF::Optional will be used to wrap the type.
--template <typename T, typename SFINAEHelper = void>
--struct NativeValueTraitsBase {
--  STATIC_ONLY(NativeValueTraitsBase);
--
--  using ImplType = T;
--
--  static constexpr bool has_null_value =
--      bindings::NativeValueTraitsHasNullValue<ImplType>::value;
--
--  template <typename... ExtraArgs>
--  static decltype(auto) ArgumentValue(v8::Isolate* isolate,
--                                      int argument_index,
--                                      v8::Local<v8::Value> value,
--                                      ExceptionState& exception_state,
--                                      ExtraArgs... extra_args) {
--    return NativeValueTraits<std::remove_pointer_t<T>>::NativeValue(
--        isolate, value, exception_state,
--        std::forward<ExtraArgs>(extra_args)...);
--  }
--};
--
- template <typename T>
--struct NativeValueTraitsBase<
--    T,
--    std::enable_if_t<std::is_base_of<IDLBase, T>::value>> {
-+struct NativeValueTraitsBase {
-   STATIC_ONLY(NativeValueTraitsBase);
- 
--  using ImplType = typename T::ImplType;
-+  using ImplType = bindings::ImplTypeFor<T>::type;
- 
-+  // Pointer types have nullptr as IDL null value.
-+  // ScriptValue, String, and union types have IsNull member function.
-   static constexpr bool has_null_value =
--      bindings::NativeValueTraitsHasNullValue<ImplType>::value;
-+      std::is_pointer_v<ImplType> ||
-+      requires(ImplType value) { value.IsNull(); };
- 
-   template <typename... ExtraArgs>
-   static decltype(auto) ArgumentValue(v8::Isolate* isolate,
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
-index 508ea6d8eea48..18de71d84023f 100644
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
-@@ -7,6 +7,7 @@
- #include "third_party/blink/renderer/core/core_export.h"
- #include "third_party/blink/renderer/core/execution_context/execution_context.h"
- #include "third_party/blink/renderer/core/frame/web_feature.h"
-+#include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h"
- #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h"
- 
- namespace blink {
-@@ -698,12 +699,11 @@ DOMArrayBufferBase* NativeValueTraits<
- // ArrayBufferView
- 
- template <typename T>
--NotShared<T> NativeValueTraits<
--    NotShared<T>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    NativeValue(v8::Isolate* isolate,
--                v8::Local<v8::Value> value,
--                ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
-+    v8::Isolate* isolate,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return NativeValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -712,13 +712,12 @@ NotShared<T> NativeValueTraits<
- }
- 
- template <typename T>
--NotShared<T> NativeValueTraits<
--    NotShared<T>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<NotShared<T>>::ArgumentValue(
-+    v8::Isolate* isolate,
-+    int argument_index,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return ArgumentValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -729,12 +728,11 @@ NotShared<T> NativeValueTraits<
- // [AllowShared] ArrayBufferView
- 
- template <typename T>
--MaybeShared<T> NativeValueTraits<
--    MaybeShared<T>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    NativeValue(v8::Isolate* isolate,
--                v8::Local<v8::Value> value,
--                ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
-+    v8::Isolate* isolate,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
-                          ToDOMViewType<T, kMaybeShared>,
-                          Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -743,13 +741,12 @@ MaybeShared<T> NativeValueTraits<
- }
- 
- template <typename T>
--MaybeShared<T> NativeValueTraits<
--    MaybeShared<T>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<MaybeShared<T>>::ArgumentValue(
-+    v8::Isolate* isolate,
-+    int argument_index,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
-                            ToDOMViewType<T, kMaybeShared>,
-                            Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-@@ -760,12 +757,12 @@ MaybeShared<T> NativeValueTraits<
- // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
- 
- template <typename T>
--MaybeShared<T> NativeValueTraits<
--    IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    NativeValue(v8::Isolate* isolate,
--                v8::Local<v8::Value> value,
--                ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T>
-+NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
-+    v8::Isolate* isolate,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return NativeValueImpl<
-       RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
-@@ -774,13 +771,12 @@ MaybeShared<T> NativeValueTraits<
- }
- 
- template <typename T>
--MaybeShared<T> NativeValueTraits<
--    IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<
-+    MaybeShared<T>>>::ArgumentValue(v8::Isolate* isolate,
-+                                    int argument_index,
-+                                    v8::Local<v8::Value> value,
-+                                    ExceptionState& exception_state) {
-   return ArgumentValueImpl<
-       RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
-       Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
-@@ -791,12 +787,11 @@ MaybeShared<T> NativeValueTraits<
- // Nullable ArrayBufferView
- 
- template <typename T>
--NotShared<T> NativeValueTraits<
--    IDLNullable<NotShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    NativeValue(v8::Isolate* isolate,
--                v8::Local<v8::Value> value,
--                ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
-+    v8::Isolate* isolate,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return NativeValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -805,13 +800,12 @@ NotShared<T> NativeValueTraits<
- }
- 
- template <typename T>
--NotShared<T> NativeValueTraits<
--    IDLNullable<NotShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::ArgumentValue(
-+    v8::Isolate* isolate,
-+    int argument_index,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return ArgumentValueImpl<
-       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
-       Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -822,12 +816,11 @@ NotShared<T> NativeValueTraits<
- // Nullable [AllowShared] ArrayBufferView
- 
- template <typename T>
--MaybeShared<T> NativeValueTraits<
--    IDLNullable<MaybeShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    NativeValue(v8::Isolate* isolate,
--                v8::Local<v8::Value> value,
--                ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
-+    v8::Isolate* isolate,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
-                          ToDOMViewType<T, kMaybeShared>,
-                          Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -836,13 +829,12 @@ MaybeShared<T> NativeValueTraits<
- }
- 
- template <typename T>
--MaybeShared<T> NativeValueTraits<
--    IDLNullable<MaybeShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::ArgumentValue(
-+    v8::Isolate* isolate,
-+    int argument_index,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
-                            ToDOMViewType<T, kMaybeShared>,
-                            Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-@@ -853,9 +845,9 @@ MaybeShared<T> NativeValueTraits<
- // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
- 
- template <typename T>
--MaybeShared<T> NativeValueTraits<
--    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
-+  requires std::derived_from<T, DOMArrayBufferView>
-+MaybeShared<T>
-+NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
-     ArgumentValue(v8::Isolate* isolate,
-                   int argument_index,
-                   v8::Local<v8::Value> value,
-@@ -870,13 +862,11 @@ MaybeShared<T> NativeValueTraits<
- // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
- 
- template <typename T>
--T NativeValueTraits<T,
--                    typename std::enable_if_t<
--                        std::is_base_of<FlexibleArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, FlexibleArrayBufferView>
-+T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
-+                                      int argument_index,
-+                                      v8::Local<v8::Value> value,
-+                                      ExceptionState& exception_state) {
-   return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
-                            Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
-                            ResizableAllowance::kDisallowResizable,
-@@ -888,13 +878,12 @@ T NativeValueTraits<T,
- // ArrayBufferView
- 
- template <typename T>
--T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
--                    typename std::enable_if_t<
--                        std::is_base_of<FlexibleArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, FlexibleArrayBufferView>
-+T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>::ArgumentValue(
-+    v8::Isolate* isolate,
-+    int argument_index,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return ArgumentValueImpl<
-       RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
-       BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
-@@ -905,13 +894,12 @@ T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
- // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
- 
- template <typename T>
--T NativeValueTraits<IDLNullable<T>,
--                    typename std::enable_if_t<
--                        std::is_base_of<FlexibleArrayBufferView, T>::value>>::
--    ArgumentValue(v8::Isolate* isolate,
--                  int argument_index,
--                  v8::Local<v8::Value> value,
--                  ExceptionState& exception_state) {
-+  requires std::derived_from<T, FlexibleArrayBufferView>
-+T NativeValueTraits<IDLNullable<T>>::ArgumentValue(
-+    v8::Isolate* isolate,
-+    int argument_index,
-+    v8::Local<v8::Value> value,
-+    ExceptionState& exception_state) {
-   return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
-                            Nullablity::kIsNullable, BufferSizeCheck::kCheck,
-                            ResizableAllowance::kDisallowResizable,
-diff --git a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
-index 899929dcf49f9..5011503dcf1c0 100644
---- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
-+++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
-@@ -715,9 +718,8 @@ struct CORE_EXPORT NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<T> {
-   // NotShared<T> or MaybeShared<T> should be used instead.
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -729,9 +731,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<T>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
-+  requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLNullable<T>> {
-   // NotShared<T> or MaybeShared<T> should be used instead.
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -743,9 +744,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    NotShared<T>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+  requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<NotShared<T>>
-     : public NativeValueTraitsBase<NotShared<T>> {
-   static NotShared<T> NativeValue(v8::Isolate* isolate,
-                                   v8::Local<v8::Value> value,
-@@ -758,9 +758,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<NotShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+  requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLNullable<NotShared<T>>>
-     : public NativeValueTraitsBase<NotShared<T>> {
-   static NotShared<T> NativeValue(v8::Isolate* isolate,
-                                   v8::Local<v8::Value> value,
-@@ -773,9 +772,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    MaybeShared<T>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+  requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<MaybeShared<T>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
-                                     v8::Local<v8::Value> value,
-@@ -788,9 +786,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+  requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   // FlexibleArrayBufferView uses this in its implementation, so we cannot
-   // delete it.
-@@ -805,9 +802,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<MaybeShared<T>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+  requires std::derived_from<T, DOMArrayBufferView>
-+struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
-                                     v8::Local<v8::Value> value,
-@@ -820,9 +816,9 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
-+  requires std::derived_from<T, DOMArrayBufferView>
- struct NativeValueTraits<
--    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
--    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
-+    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
-     : public NativeValueTraitsBase<MaybeShared<T>> {
-   // BufferSourceTypeNoSizeLimit must be used only as arguments.
-   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
-@@ -836,11 +832,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<
--        std::is_base_of<FlexibleArrayBufferView, T>::value>>
--    : public NativeValueTraitsBase<T> {
-+  requires std::derived_from<T, FlexibleArrayBufferView>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
-   // FlexibleArrayBufferView must be used only as arguments.
-   static T NativeValue(v8::Isolate* isolate,
-                        v8::Local<v8::Value> value,
-@@ -853,10 +846,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLBufferSourceTypeNoSizeLimit<T>,
--    typename std::enable_if_t<
--        std::is_base_of<FlexibleArrayBufferView, T>::value>>
-+  requires std::derived_from<T, FlexibleArrayBufferView>
-+struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
-     : public NativeValueTraitsBase<T> {
-   // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
-   // as arguments.
-@@ -871,11 +862,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<T>,
--    typename std::enable_if_t<
--        std::is_base_of<FlexibleArrayBufferView, T>::value>>
--    : public NativeValueTraitsBase<T> {
-+  requires std::derived_from<T, FlexibleArrayBufferView>
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
-   // FlexibleArrayBufferView must be used only as arguments.
-   static T NativeValue(v8::Isolate* isolate,
-                        v8::Local<v8::Value> value,
-@@ -1134,9 +1122,8 @@ NativeValueTraits<IDLSequence<T>>::NativeValue(
- }
- 
- template <typename T>
--struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
--                         typename std::enable_if_t<
--                             NativeValueTraits<IDLSequence<T>>::has_null_value>>
-+  requires NativeValueTraits<IDLSequence<T>>::has_null_value
-+struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
-     : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
-   using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
- 
-@@ -1203,9 +1190,8 @@ struct NativeValueTraits<IDLArray<T>>
-     : public NativeValueTraits<IDLSequence<T>> {};
- 
- template <typename T>
--struct NativeValueTraits<IDLNullable<IDLArray<T>>,
--                         typename std::enable_if_t<
--                             NativeValueTraits<IDLSequence<T>>::has_null_value>>
-+  requires NativeValueTraits<IDLSequence<T>>::has_null_value
-+struct NativeValueTraits<IDLNullable<IDLArray<T>>>
-     : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
- 
- // Record types
-@@ -1335,10 +1321,8 @@ struct NativeValueTraits<IDLRecord<K, V>>
- 
- // Callback function types
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
--    : public NativeValueTraitsBase<T*> {
-+  requires std::derived_from<T, CallbackFunctionBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1361,9 +1345,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<T>,
--    typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
-+  requires std::derived_from<T, CallbackFunctionBase>
-+struct NativeValueTraits<IDLNullable<T>>
-     : public NativeValueTraitsBase<IDLNullable<T>> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -1392,10 +1375,8 @@ struct NativeValueTraits<
- 
- // Callback interface types
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
--    : public NativeValueTraitsBase<T*> {
-+  requires std::derived_from<T, CallbackInterfaceBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1418,9 +1399,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<T>,
--    typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
-+  requires std::derived_from<T, CallbackInterfaceBase>
-+struct NativeValueTraits<IDLNullable<T>>
-     : public NativeValueTraitsBase<IDLNullable<T>> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-@@ -1449,11 +1429,8 @@ struct NativeValueTraits<
- 
- // Dictionary types
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<
--        std::is_base_of<bindings::DictionaryBase, T>::value>>
--    : public NativeValueTraitsBase<T*> {
-+  requires std::derived_from<T, bindings::DictionaryBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1464,14 +1441,11 @@ struct NativeValueTraits<
- // We don't support nullable dictionary types in general since it's quite
- // confusing and often misused.
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<T>,
--    typename std::enable_if_t<
--        std::is_base_of<bindings::DictionaryBase, T>::value &&
--        (std::is_same<T, GPUColorTargetState>::value ||
--         std::is_same<T, GPURenderPassColorAttachment>::value ||
--         std::is_same<T, GPUVertexBufferLayout>::value)>>
--    : public NativeValueTraitsBase<T*> {
-+  requires std::derived_from<T, bindings::DictionaryBase> &&
-+           (std::same_as<T, GPUColorTargetState> ||
-+            std::same_as<T, GPURenderPassColorAttachment> ||
-+            std::same_as<T, GPUVertexBufferLayout>)
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1483,11 +1457,8 @@ struct NativeValueTraits<
- 
- // Enumeration types
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<
--        std::is_base_of<bindings::EnumerationBase, T>::value>>
--    : public NativeValueTraitsBase<T> {
-+  requires std::derived_from<T, bindings::EnumerationBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
-   static T NativeValue(v8::Isolate* isolate,
-                        v8::Local<v8::Value> value,
-                        ExceptionState& exception_state) {
-@@ -1497,10 +1468,8 @@ struct NativeValueTraits<
- 
- // Interface types
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
--    : public NativeValueTraitsBase<T*> {
-+  requires std::derived_from<T, ScriptWrappable>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-   static inline T* NativeValue(v8::Isolate* isolate,
-                                v8::Local<v8::Value> value,
-                                ExceptionState& exception_state) {
-@@ -1528,9 +1497,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<T>,
--    typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
-+  requires std::derived_from<T, ScriptWrappable>
-+struct NativeValueTraits<IDLNullable<T>>
-     : public NativeValueTraitsBase<IDLNullable<T>> {
-   static inline T* NativeValue(v8::Isolate* isolate,
-                                v8::Local<v8::Value> value,
-@@ -1565,10 +1533,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    T,
--    typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
--    : public NativeValueTraitsBase<T*> {
-+  requires std::derived_from<T, bindings::UnionBase>
-+struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1584,10 +1550,8 @@ struct NativeValueTraits<
- };
- 
- template <typename T>
--struct NativeValueTraits<
--    IDLNullable<T>,
--    typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
--    : public NativeValueTraitsBase<T*> {
-+  requires std::derived_from<T, bindings::UnionBase>
-+struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
-   static T* NativeValue(v8::Isolate* isolate,
-                         v8::Local<v8::Value> value,
-                         ExceptionState& exception_state) {
-@@ -1608,9 +1572,8 @@ struct NativeValueTraits<
- 
- // Nullable types
- template <typename InnerType>
--struct NativeValueTraits<
--    IDLNullable<InnerType>,
--    typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
-+  requires(!NativeValueTraits<InnerType>::has_null_value)
-+struct NativeValueTraits<IDLNullable<InnerType>>
-     : public NativeValueTraitsBase<IDLNullable<InnerType>> {
-   // https://webidl.spec.whatwg.org/#es-nullable-type
-   using ImplType =
-@@ -1642,9 +1605,8 @@ struct NativeValueTraits<IDLNullable<IDLNullable<T>>>;
- 
- // Optional types
- template <typename T>
--struct NativeValueTraits<IDLOptional<T>,
--                         typename std::enable_if_t<std::is_arithmetic<
--                             typename NativeValueTraits<T>::ImplType>::value>>
-+  requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
-+struct NativeValueTraits<IDLOptional<T>>
-     : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
-   using ImplType = typename NativeValueTraits<T>::ImplType;
- 
-@@ -1666,9 +1628,8 @@ struct NativeValueTraits<IDLOptional<T>,
- };
- 
- template <typename T>
--struct NativeValueTraits<IDLOptional<T>,
--                         typename std::enable_if_t<std::is_pointer<
--                             typename NativeValueTraits<T>::ImplType>::value>>
-+  requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
-+struct NativeValueTraits<IDLOptional<T>>
-     : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
-   using ImplType = typename NativeValueTraits<T>::ImplType;
- 

diff --git a/chromium-125-el-NativeValueTraits-p1.patch b/chromium-125-el-NativeValueTraits-p1.patch
new file mode 100644
index 0000000..ad0c8a8
--- /dev/null
+++ b/chromium-125-el-NativeValueTraits-p1.patch
@@ -0,0 +1,739 @@
+revert as workaround for compiler error with old clang < 17
+
+commit 940af9f2c87b436559b97c53763aa9eaaf1254eb
+Author: Jeremy Roman <jbroman@chromium.org>
+Date:   Wed Nov 15 16:24:54 2023 +0000
+
+    Use C++20 features to simplify blink::NativeValueTraitsBase.
+    
+    These allow some of the metaprogramming bits to be simplified a little.
+    
+    Change-Id: I052b4397586d21348401616e1792afdb9662f975
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5030335
+    Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
+    Commit-Queue: Jeremy Roman <jbroman@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1224978}
+
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h
+@@ -5,7 +5,6 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
+ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_H_
+ 
+-#include <concepts>
+ #include <type_traits>
+ 
+ #include "third_party/blink/renderer/bindings/core/v8/idl_types_base.h"
+@@ -31,7 +30,7 @@ class ExceptionState;
+ //     return toInt32(isolate, value, exceptionState, NormalConversion);
+ //   }
+ // }
+-template <typename T>
++template <typename T, typename SFINAEHelper = void>
+ struct NativeValueTraits;
+ 
+ // This declaration serves only as a blueprint for specializations: the
+@@ -46,15 +45,22 @@ struct NativeValueTraits;
+ 
+ namespace bindings {
+ 
++template <typename T, typename = void>
++struct NativeValueTraitsHasIsNull : std::false_type {};
++
+ template <typename T>
+-struct ImplTypeFor {
+-  using type = T;
+-};
++struct NativeValueTraitsHasIsNull<
++    T,
++    std::void_t<decltype(std::declval<T>().IsNull())>> : std::true_type {};
+ 
+ template <typename T>
+-  requires std::derived_from<T, IDLBase>
+-struct ImplTypeFor<T> {
+-  using type = typename T::ImplType;
++struct NativeValueTraitsHasNullValue {
++  // true if |T| supports IDL null value.
++  static constexpr bool value =
++      // ScriptValue, String, and union types have IsNull member function.
++      bindings::NativeValueTraitsHasIsNull<T>::value ||
++      // Pointer types have nullptr as IDL null value.
++      std::is_pointer<T>::value;
+ };
+ 
+ }  // namespace bindings
+@@ -72,17 +78,37 @@ struct ImplTypeFor<T> {
+ // If present, |NullValue()| will be used when converting from the nullable type
+ // T?, and should be used if the impl type has an existing "null" state. If not
+ // present, WTF::Optional will be used to wrap the type.
+-template <typename T>
++template <typename T, typename SFINAEHelper = void>
+ struct NativeValueTraitsBase {
+   STATIC_ONLY(NativeValueTraitsBase);
+ 
+-  using ImplType = bindings::ImplTypeFor<T>::type;
++  using ImplType = T;
++
++  static constexpr bool has_null_value =
++      bindings::NativeValueTraitsHasNullValue<ImplType>::value;
++
++  template <typename... ExtraArgs>
++  static decltype(auto) ArgumentValue(v8::Isolate* isolate,
++                                      int argument_index,
++                                      v8::Local<v8::Value> value,
++                                      ExceptionState& exception_state,
++                                      ExtraArgs... extra_args) {
++    return NativeValueTraits<std::remove_pointer_t<T>>::NativeValue(
++        isolate, value, exception_state,
++        std::forward<ExtraArgs>(extra_args)...);
++  }
++};
++
++template <typename T>
++struct NativeValueTraitsBase<
++    T,
++    std::enable_if_t<std::is_base_of<IDLBase, T>::value>> {
++  STATIC_ONLY(NativeValueTraitsBase);
++
++  using ImplType = typename T::ImplType;
+ 
+-  // Pointer types have nullptr as IDL null value.
+-  // ScriptValue, String, and union types have IsNull member function.
+   static constexpr bool has_null_value =
+-      std::is_pointer_v<ImplType> ||
+-      requires(ImplType value) { value.IsNull(); };
++      bindings::NativeValueTraitsHasNullValue<ImplType>::value;
+ 
+   // This should only be true for certain subclasses of ScriptWrappable
+   // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_buffer_sources.cc
+@@ -7,7 +7,6 @@
+ #include "third_party/blink/renderer/core/core_export.h"
+ #include "third_party/blink/renderer/core/execution_context/execution_context.h"
+ #include "third_party/blink/renderer/core/frame/web_feature.h"
+-#include "third_party/blink/renderer/core/typed_arrays/flexible_array_buffer_view.h"
+ #include "third_party/blink/renderer/core/typed_arrays/typed_flexible_array_buffer_view.h"
+ 
+ namespace blink {
+@@ -698,11 +697,12 @@ DOMArrayBufferBase* NativeValueTraits<
+ // ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<NotShared<T>>::NativeValue(
+-    v8::Isolate* isolate,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++    NotShared<T>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    NativeValue(v8::Isolate* isolate,
++                v8::Local<v8::Value> value,
++                ExceptionState& exception_state) {
+   return NativeValueImpl<
+       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+       Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -711,12 +711,13 @@ NotShared<T> NativeValueTraits<NotShared
+ }
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<NotShared<T>>::ArgumentValue(
+-    v8::Isolate* isolate,
+-    int argument_index,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++    NotShared<T>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<
+       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+       Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -727,11 +728,12 @@ NotShared<T> NativeValueTraits<NotShared
+ // [AllowShared] ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<MaybeShared<T>>::NativeValue(
+-    v8::Isolate* isolate,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++    MaybeShared<T>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    NativeValue(v8::Isolate* isolate,
++                v8::Local<v8::Value> value,
++                ExceptionState& exception_state) {
+   return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+                          ToDOMViewType<T, kMaybeShared>,
+                          Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -740,12 +742,13 @@ MaybeShared<T> NativeValueTraits<MaybeSh
+ }
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<MaybeShared<T>>::ArgumentValue(
+-    v8::Isolate* isolate,
+-    int argument_index,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++    MaybeShared<T>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+                            ToDOMViewType<T, kMaybeShared>,
+                            Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+@@ -756,12 +759,12 @@ MaybeShared<T> NativeValueTraits<MaybeSh
+ // [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T>
+-NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>::NativeValue(
+-    v8::Isolate* isolate,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++    IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    NativeValue(v8::Isolate* isolate,
++                v8::Local<v8::Value> value,
++                ExceptionState& exception_state) {
+   return NativeValueImpl<
+       RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+       Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -770,12 +773,13 @@ NativeValueTraits<IDLBufferSourceTypeNoS
+ }
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<
+-    MaybeShared<T>>>::ArgumentValue(v8::Isolate* isolate,
+-                                    int argument_index,
+-                                    v8::Local<v8::Value> value,
+-                                    ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++    IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<
+       RecipeTrait<MaybeShared<T>>, ToDOMViewType<T, kMaybeShared>,
+       Nullablity::kIsNotNullable, BufferSizeCheck::kDoNotCheck,
+@@ -786,11 +790,12 @@ MaybeShared<T> NativeValueTraits<IDLBuff
+ // Nullable ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::NativeValue(
+-    v8::Isolate* isolate,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++    IDLNullable<NotShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    NativeValue(v8::Isolate* isolate,
++                v8::Local<v8::Value> value,
++                ExceptionState& exception_state) {
+   return NativeValueImpl<
+       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+       Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -799,12 +804,13 @@ NotShared<T> NativeValueTraits<IDLNullab
+ }
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-NotShared<T> NativeValueTraits<IDLNullable<NotShared<T>>>::ArgumentValue(
+-    v8::Isolate* isolate,
+-    int argument_index,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++NotShared<T> NativeValueTraits<
++    IDLNullable<NotShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<
+       RecipeTrait<NotShared<T>>, ToDOMViewType<T, kNotShared>,
+       Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -815,11 +821,12 @@ NotShared<T> NativeValueTraits<IDLNullab
+ // Nullable [AllowShared] ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::NativeValue(
+-    v8::Isolate* isolate,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++    IDLNullable<MaybeShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    NativeValue(v8::Isolate* isolate,
++                v8::Local<v8::Value> value,
++                ExceptionState& exception_state) {
+   return NativeValueImpl<RecipeTrait<MaybeShared<T>>,
+                          ToDOMViewType<T, kMaybeShared>,
+                          Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -828,12 +835,13 @@ MaybeShared<T> NativeValueTraits<IDLNull
+ }
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T> NativeValueTraits<IDLNullable<MaybeShared<T>>>::ArgumentValue(
+-    v8::Isolate* isolate,
+-    int argument_index,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++MaybeShared<T> NativeValueTraits<
++    IDLNullable<MaybeShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<RecipeTrait<MaybeShared<T>>,
+                            ToDOMViewType<T, kMaybeShared>,
+                            Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+@@ -844,9 +852,9 @@ MaybeShared<T> NativeValueTraits<IDLNull
+ // Nullable [AllowShared, BufferSourceTypeNoSizeLimit] ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-MaybeShared<T>
+-NativeValueTraits<IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>::
++MaybeShared<T> NativeValueTraits<
++    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>::
+     ArgumentValue(v8::Isolate* isolate,
+                   int argument_index,
+                   v8::Local<v8::Value> value,
+@@ -861,11 +869,13 @@ NativeValueTraits<IDLNullable<IDLBufferS
+ // [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, FlexibleArrayBufferView>
+-T NativeValueTraits<T>::ArgumentValue(v8::Isolate* isolate,
+-                                      int argument_index,
+-                                      v8::Local<v8::Value> value,
+-                                      ExceptionState& exception_state) {
++T NativeValueTraits<T,
++                    typename std::enable_if_t<
++                        std::is_base_of<FlexibleArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
+                            Nullablity::kIsNotNullable, BufferSizeCheck::kCheck,
+                            ResizableAllowance::kDisallowResizable,
+@@ -877,12 +887,13 @@ T NativeValueTraits<T>::ArgumentValue(v8
+ // ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, FlexibleArrayBufferView>
+-T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>::ArgumentValue(
+-    v8::Isolate* isolate,
+-    int argument_index,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++T NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>,
++                    typename std::enable_if_t<
++                        std::is_base_of<FlexibleArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<
+       RecipeTrait<T>, ToFlexibleArrayBufferView, Nullablity::kIsNotNullable,
+       BufferSizeCheck::kDoNotCheck, ResizableAllowance::kDisallowResizable,
+@@ -893,12 +904,13 @@ T NativeValueTraits<IDLBufferSourceTypeN
+ // Nullable [AllowShared, FlexibleArrayBufferView] ArrayBufferView
+ 
+ template <typename T>
+-  requires std::derived_from<T, FlexibleArrayBufferView>
+-T NativeValueTraits<IDLNullable<T>>::ArgumentValue(
+-    v8::Isolate* isolate,
+-    int argument_index,
+-    v8::Local<v8::Value> value,
+-    ExceptionState& exception_state) {
++T NativeValueTraits<IDLNullable<T>,
++                    typename std::enable_if_t<
++                        std::is_base_of<FlexibleArrayBufferView, T>::value>>::
++    ArgumentValue(v8::Isolate* isolate,
++                  int argument_index,
++                  v8::Local<v8::Value> value,
++                  ExceptionState& exception_state) {
+   return ArgumentValueImpl<RecipeTrait<T>, ToFlexibleArrayBufferView,
+                            Nullablity::kIsNullable, BufferSizeCheck::kCheck,
+                            ResizableAllowance::kDisallowResizable,
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h
+@@ -5,9 +5,7 @@
+ #ifndef THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
+ #define THIRD_PARTY_BLINK_RENDERER_BINDINGS_CORE_V8_NATIVE_VALUE_TRAITS_IMPL_H_
+ 
+-#include <concepts>
+ #include <optional>
+-#include <type_traits>
+ 
+ #include "third_party/blink/renderer/bindings/core/v8/idl_types.h"
+ #include "third_party/blink/renderer/bindings/core/v8/native_value_traits.h"
+@@ -718,8 +716,9 @@ struct CORE_EXPORT NativeValueTraits<
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<T> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
+   // NotShared<T> or MaybeShared<T> should be used instead.
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+@@ -731,8 +730,9 @@ struct NativeValueTraits<T> {
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLNullable<T>> {
++struct NativeValueTraits<
++    IDLNullable<T>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>> {
+   // NotShared<T> or MaybeShared<T> should be used instead.
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+@@ -744,8 +744,9 @@ struct NativeValueTraits<IDLNullable<T>>
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<NotShared<T>>
++struct NativeValueTraits<
++    NotShared<T>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+     : public NativeValueTraitsBase<NotShared<T>> {
+   static NotShared<T> NativeValue(v8::Isolate* isolate,
+                                   v8::Local<v8::Value> value,
+@@ -758,8 +759,9 @@ struct NativeValueTraits<NotShared<T>>
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLNullable<NotShared<T>>>
++struct NativeValueTraits<
++    IDLNullable<NotShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+     : public NativeValueTraitsBase<NotShared<T>> {
+   static NotShared<T> NativeValue(v8::Isolate* isolate,
+                                   v8::Local<v8::Value> value,
+@@ -772,8 +774,9 @@ struct NativeValueTraits<IDLNullable<Not
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<MaybeShared<T>>
++struct NativeValueTraits<
++    MaybeShared<T>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+     : public NativeValueTraitsBase<MaybeShared<T>> {
+   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+                                     v8::Local<v8::Value> value,
+@@ -786,8 +789,9 @@ struct NativeValueTraits<MaybeShared<T>>
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>
++struct NativeValueTraits<
++    IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+     : public NativeValueTraitsBase<MaybeShared<T>> {
+   // FlexibleArrayBufferView uses this in its implementation, so we cannot
+   // delete it.
+@@ -802,8 +806,9 @@ struct NativeValueTraits<IDLBufferSource
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+-struct NativeValueTraits<IDLNullable<MaybeShared<T>>>
++struct NativeValueTraits<
++    IDLNullable<MaybeShared<T>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+     : public NativeValueTraitsBase<MaybeShared<T>> {
+   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+                                     v8::Local<v8::Value> value,
+@@ -816,9 +821,9 @@ struct NativeValueTraits<IDLNullable<May
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, DOMArrayBufferView>
+ struct NativeValueTraits<
+-    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>>
++    IDLNullable<IDLBufferSourceTypeNoSizeLimit<MaybeShared<T>>>,
++    typename std::enable_if_t<std::is_base_of<DOMArrayBufferView, T>::value>>
+     : public NativeValueTraitsBase<MaybeShared<T>> {
+   // BufferSourceTypeNoSizeLimit must be used only as arguments.
+   static MaybeShared<T> NativeValue(v8::Isolate* isolate,
+@@ -832,8 +837,11 @@ struct NativeValueTraits<
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, FlexibleArrayBufferView>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<
++        std::is_base_of<FlexibleArrayBufferView, T>::value>>
++    : public NativeValueTraitsBase<T> {
+   // FlexibleArrayBufferView must be used only as arguments.
+   static T NativeValue(v8::Isolate* isolate,
+                        v8::Local<v8::Value> value,
+@@ -846,8 +854,10 @@ struct NativeValueTraits<T> : public Nat
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, FlexibleArrayBufferView>
+-struct NativeValueTraits<IDLBufferSourceTypeNoSizeLimit<T>>
++struct NativeValueTraits<
++    IDLBufferSourceTypeNoSizeLimit<T>,
++    typename std::enable_if_t<
++        std::is_base_of<FlexibleArrayBufferView, T>::value>>
+     : public NativeValueTraitsBase<T> {
+   // BufferSourceTypeNoSizeLimit and FlexibleArrayBufferView must be used only
+   // as arguments.
+@@ -862,8 +872,11 @@ struct NativeValueTraits<IDLBufferSource
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, FlexibleArrayBufferView>
+-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T> {
++struct NativeValueTraits<
++    IDLNullable<T>,
++    typename std::enable_if_t<
++        std::is_base_of<FlexibleArrayBufferView, T>::value>>
++    : public NativeValueTraitsBase<T> {
+   // FlexibleArrayBufferView must be used only as arguments.
+   static T NativeValue(v8::Isolate* isolate,
+                        v8::Local<v8::Value> value,
+@@ -1199,8 +1212,9 @@ NativeValueTraits<IDLSequence<T>>::Nativ
+ }
+ 
+ template <typename T>
+-  requires NativeValueTraits<IDLSequence<T>>::has_null_value
+-struct NativeValueTraits<IDLNullable<IDLSequence<T>>>
++struct NativeValueTraits<IDLNullable<IDLSequence<T>>,
++                         typename std::enable_if_t<
++                             NativeValueTraits<IDLSequence<T>>::has_null_value>>
+     : public NativeValueTraitsBase<HeapVector<AddMemberIfNeeded<T>>*> {
+   using ImplType = typename NativeValueTraits<IDLSequence<T>>::ImplType*;
+ 
+@@ -1276,8 +1290,9 @@ struct NativeValueTraits<IDLArray<T>>
+     : public NativeValueTraits<IDLSequence<T>> {};
+ 
+ template <typename T>
+-  requires NativeValueTraits<IDLSequence<T>>::has_null_value
+-struct NativeValueTraits<IDLNullable<IDLArray<T>>>
++struct NativeValueTraits<IDLNullable<IDLArray<T>>,
++                         typename std::enable_if_t<
++                             NativeValueTraits<IDLSequence<T>>::has_null_value>>
+     : public NativeValueTraits<IDLNullable<IDLSequence<T>>> {};
+ 
+ // Record types
+@@ -1407,8 +1422,10 @@ struct NativeValueTraits<IDLRecord<K, V>
+ 
+ // Callback function types
+ template <typename T>
+-  requires std::derived_from<T, CallbackFunctionBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
++    : public NativeValueTraitsBase<T*> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+                         ExceptionState& exception_state) {
+@@ -1431,8 +1448,9 @@ struct NativeValueTraits<T> : public Nat
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, CallbackFunctionBase>
+-struct NativeValueTraits<IDLNullable<T>>
++struct NativeValueTraits<
++    IDLNullable<T>,
++    typename std::enable_if_t<std::is_base_of<CallbackFunctionBase, T>::value>>
+     : public NativeValueTraitsBase<IDLNullable<T>> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+@@ -1461,8 +1479,10 @@ struct NativeValueTraits<IDLNullable<T>>
+ 
+ // Callback interface types
+ template <typename T>
+-  requires std::derived_from<T, CallbackInterfaceBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
++    : public NativeValueTraitsBase<T*> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+                         ExceptionState& exception_state) {
+@@ -1486,8 +1506,9 @@ struct NativeValueTraits<T> : public Nat
+ 
+ // Interface types
+ template <typename T>
+-  requires std::derived_from<T, CallbackInterfaceBase>
+-struct NativeValueTraits<IDLNullable<T>>
++struct NativeValueTraits<
++    IDLNullable<T>,
++    typename std::enable_if_t<std::is_base_of<CallbackInterfaceBase, T>::value>>
+     : public NativeValueTraitsBase<IDLNullable<T>> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+@@ -1516,8 +1537,11 @@ struct NativeValueTraits<IDLNullable<T>>
+ 
+ // Dictionary types
+ template <typename T>
+-  requires std::derived_from<T, bindings::DictionaryBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<
++        std::is_base_of<bindings::DictionaryBase, T>::value>>
++    : public NativeValueTraitsBase<T*> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+                         ExceptionState& exception_state) {
+@@ -1528,11 +1552,14 @@ struct NativeValueTraits<T> : public Nat
+ // We don't support nullable dictionary types in general since it's quite
+ // confusing and often misused.
+ template <typename T>
+-  requires std::derived_from<T, bindings::DictionaryBase> &&
+-           (std::same_as<T, GPUColorTargetState> ||
+-            std::same_as<T, GPURenderPassColorAttachment> ||
+-            std::same_as<T, GPUVertexBufferLayout>)
+-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++    IDLNullable<T>,
++    typename std::enable_if_t<
++        std::is_base_of<bindings::DictionaryBase, T>::value &&
++        (std::is_same<T, GPUColorTargetState>::value ||
++         std::is_same<T, GPURenderPassColorAttachment>::value ||
++         std::is_same<T, GPUVertexBufferLayout>::value)>>
++    : public NativeValueTraitsBase<T*> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+                         ExceptionState& exception_state) {
+@@ -1544,8 +1571,11 @@ struct NativeValueTraits<IDLNullable<T>>
+ 
+ // Enumeration types
+ template <typename T>
+-  requires std::derived_from<T, bindings::EnumerationBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<
++        std::is_base_of<bindings::EnumerationBase, T>::value>>
++    : public NativeValueTraitsBase<T> {
+   static T NativeValue(v8::Isolate* isolate,
+                        v8::Local<v8::Value> value,
+                        ExceptionState& exception_state) {
+@@ -1555,8 +1585,10 @@ struct NativeValueTraits<T> : public Nat
+ 
+ // Interface types
+ template <typename T>
+-  requires std::derived_from<T, ScriptWrappable>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
++    : public NativeValueTraitsBase<T*> {
+   // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
+   // certain optimization based on assumptions about `NativeValue()`
+   // implementation below. For subclasses of ScriptWrappable that have
+@@ -1593,8 +1625,9 @@ struct NativeValueTraits<T> : public Nat
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, ScriptWrappable>
+-struct NativeValueTraits<IDLNullable<T>>
++struct NativeValueTraits<
++    IDLNullable<T>,
++    typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
+     : public NativeValueTraitsBase<IDLNullable<T>> {
+   static inline T* NativeValue(v8::Isolate* isolate,
+                                v8::Local<v8::Value> value,
+@@ -1629,8 +1662,10 @@ struct NativeValueTraits<IDLNullable<T>>
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, bindings::UnionBase>
+-struct NativeValueTraits<T> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++    T,
++    typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
++    : public NativeValueTraitsBase<T*> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+                         ExceptionState& exception_state) {
+@@ -1646,8 +1681,10 @@ struct NativeValueTraits<T> : public Nat
+ };
+ 
+ template <typename T>
+-  requires std::derived_from<T, bindings::UnionBase>
+-struct NativeValueTraits<IDLNullable<T>> : public NativeValueTraitsBase<T*> {
++struct NativeValueTraits<
++    IDLNullable<T>,
++    typename std::enable_if_t<std::is_base_of<bindings::UnionBase, T>::value>>
++    : public NativeValueTraitsBase<T*> {
+   static T* NativeValue(v8::Isolate* isolate,
+                         v8::Local<v8::Value> value,
+                         ExceptionState& exception_state) {
+@@ -1668,8 +1705,9 @@ struct NativeValueTraits<IDLNullable<T>>
+ 
+ // Nullable types
+ template <typename InnerType>
+-  requires(!NativeValueTraits<InnerType>::has_null_value)
+-struct NativeValueTraits<IDLNullable<InnerType>>
++struct NativeValueTraits<
++    IDLNullable<InnerType>,
++    typename std::enable_if_t<!NativeValueTraits<InnerType>::has_null_value>>
+     : public NativeValueTraitsBase<IDLNullable<InnerType>> {
+   // https://webidl.spec.whatwg.org/#es-nullable-type
+   using ImplType =
+@@ -1701,8 +1739,9 @@ struct NativeValueTraits<IDLNullable<IDL
+ 
+ // Optional types
+ template <typename T>
+-  requires std::is_arithmetic_v<typename NativeValueTraits<T>::ImplType>
+-struct NativeValueTraits<IDLOptional<T>>
++struct NativeValueTraits<IDLOptional<T>,
++                         typename std::enable_if_t<std::is_arithmetic<
++                             typename NativeValueTraits<T>::ImplType>::value>>
+     : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+   using ImplType = typename NativeValueTraits<T>::ImplType;
+ 
+@@ -1724,8 +1763,9 @@ struct NativeValueTraits<IDLOptional<T>>
+ };
+ 
+ template <typename T>
+-  requires std::is_pointer_v<typename NativeValueTraits<T>::ImplType>
+-struct NativeValueTraits<IDLOptional<T>>
++struct NativeValueTraits<IDLOptional<T>,
++                         typename std::enable_if_t<std::is_pointer<
++                             typename NativeValueTraits<T>::ImplType>::value>>
+     : public NativeValueTraitsBase<typename NativeValueTraits<T>::ImplType> {
+   using ImplType = typename NativeValueTraits<T>::ImplType;
+ 

diff --git a/chromium-125-el-NativeValueTraits-p2.patch b/chromium-125-el-NativeValueTraits-p2.patch
new file mode 100644
index 0000000..477378b
--- /dev/null
+++ b/chromium-125-el-NativeValueTraits-p2.patch
@@ -0,0 +1,144 @@
+revert as workaround for compiler error with old clang < 17
+
+commit ce71348a09f6689dd01a68db64b172191d0182d8
+Author: Andrey Kosyakov <caseq@chromium.org>
+Date:   Thu Dec 21 18:38:38 2023 +0000
+
+    [bindings] Use v8::Array::Iterate for converting script wrappables
+    
+    
+    This changes CreateIDLSequenceFromV8Array to use the new
+    v8::Array::Iterate() operation.
+    This speeds up the "execBundles" part of the microbenchmark
+    at crbug.com/dawn/1858 by around 3x.
+    This depends on crrev.com/c/4846594 landing (and rolling) first.
+    
+    This is a slight re-work of https://crrev.com/c/4847447/3,
+    originally by jkummerow@chromium.org
+    
+    Bug: v8:14218, dawn:1858, 1511239
+    Change-Id: Ia266556d05b4d53e6942e12609d1c08882b4ff0f
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5132129
+    Commit-Queue: Andrey Kosyakov <caseq@chromium.org>
+    Reviewed-by: Yuki Shiino <yukishiino@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1240236}
+
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits.h	2024-05-13 20:23:41.165774029 +0200
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits.h	2024-05-13 20:27:58.994663485 +0200
+@@ -110,12 +110,6 @@ struct NativeValueTraitsBase<
+   static constexpr bool has_null_value =
+       bindings::NativeValueTraitsHasNullValue<ImplType>::value;
+ 
+-  // This should only be true for certain subclasses of ScriptWrappable
+-  // that satisfy the assumptions of CreateIDLSequenceFromV8ArraySlow() with
+-  // regards to how NativeValue() is implemented for the underlying type.
+-  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
+-      false;
+-
+   template <typename... ExtraArgs>
+   static decltype(auto) ArgumentValue(v8::Isolate* isolate,
+                                       int argument_index,
+--- a/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h	2024-05-13 20:23:47.295915837 +0200
++++ b/third_party/blink/renderer/bindings/core/v8/native_value_traits_impl.h	2024-05-13 20:27:21.649808564 +0200
+@@ -1050,87 +1050,11 @@ CreateIDLSequenceFromV8ArraySlow(v8::Iso
+     return {};
+   }
+ 
+-  using ResultType = typename NativeValueTraits<IDLSequence<T>>::ImplType;
+-  ResultType result;
++  typename NativeValueTraits<IDLSequence<T>>::ImplType result;
+   result.ReserveInitialCapacity(length);
+   v8::Local<v8::Context> current_context = isolate->GetCurrentContext();
+   v8::TryCatch try_block(isolate);
+ 
+-  // Fast path -- we're creating a sequence of script wrappables, which can be
+-  // done by directly getting underlying object as long as array types are
+-  // homogeneous. With ScriptWrappables, we don't expect to enter JS during
+-  // iteration, so we can rely on v8::Array::Iterate() which is much faster than
+-  // iterating an array on the client side of the v8. Additionally, for most
+-  // subsptyes of ScriptWrappables, we can speed up type checks (see more on
+-  // that below next to supports_scriptwrappable_specific_fast_array_iteration
+-  // check.
+-  if constexpr (std::is_base_of_v<ScriptWrappable, T>) {
+-    struct CallbackData {
+-      STACK_ALLOCATED();
+-
+-     public:
+-      v8::Isolate* isolate;
+-      v8::TypecheckWitness witness;
+-      ResultType& result;
+-      ExceptionState& exception_state;
+-      CallbackData(v8::Isolate* isolate,
+-                   ResultType& result,
+-                   ExceptionState& exception_state)
+-          : isolate(isolate),
+-            witness(isolate),
+-            result(result),
+-            exception_state(exception_state) {}
+-    };
+-
+-    CallbackData callback_data(isolate, result, exception_state);
+-    v8::Array::IterationCallback callback = [](uint32_t index,
+-                                               v8::Local<v8::Value> v8_element,
+-                                               void* data) {
+-      CallbackData* callback_data = reinterpret_cast<CallbackData*>(data);
+-      v8::Isolate* isolate = callback_data->isolate;
+-      // 3.4. Initialize Si to the result of converting nextItem to an IDL value
+-      //   of type T.
+-      v8::TypecheckWitness& witness = callback_data->witness;
+-      // We can speed up type check by taking advantage of V8's type witness,
+-      // provided traits' NativeValue implementation doesn't have additional
+-      // logic beyond checking the type and calling ToScriptWrappable().
+-      if constexpr (
+-          NativeValueTraits<
+-              T>::supports_scriptwrappable_specific_fast_array_iteration) {
+-        if (witness.Matches(v8_element)) {
+-          auto&& value = ToScriptWrappable(isolate, v8_element.As<v8::Object>())
+-                             ->template ToImpl<T>();
+-          callback_data->result.push_back(std::move(value));
+-          return v8::Array::CallbackResult::kContinue;
+-        }
+-      }
+-      auto&& element = NativeValueTraits<T>::NativeValue(
+-          isolate, v8_element, callback_data->exception_state);
+-      if (callback_data->exception_state.HadException()) {
+-        // It doesn't matter whether we return `kException` or `kBreak` here,
+-        // as that only affects the return value of `v8_array->Iterate()`,
+-        // which we are ignoring.
+-        return v8::Array::CallbackResult::kException;
+-      }
+-      if constexpr (
+-          NativeValueTraits<
+-              T>::supports_scriptwrappable_specific_fast_array_iteration) {
+-        witness.Update(v8_element);
+-      }
+-      callback_data->result.push_back(std::move(element));
+-      return v8::Array::CallbackResult::kContinue;
+-    };
+-    if (!v8_array->Iterate(current_context, callback, &callback_data)
+-             .IsJust()) {
+-      if (try_block.HasCaught()) {
+-        exception_state.RethrowV8Exception(try_block.Exception());
+-      }
+-      DCHECK(exception_state.HadException());
+-      return {};
+-    }
+-    return result;
+-  }
+-
+   // Array length may change if array is mutated during iteration.
+   for (uint32_t i = 0; i < v8_array->Length(); ++i) {
+     v8::Local<v8::Value> v8_element;
+@@ -1590,12 +1514,6 @@ struct NativeValueTraits<
+     T,
+     typename std::enable_if_t<std::is_base_of<ScriptWrappable, T>::value>>
+     : public NativeValueTraitsBase<T*> {
+-  // This signifies that CreateIDLSequenceFromV8ArraySlow() may apply
+-  // certain optimization based on assumptions about `NativeValue()`
+-  // implementation below. For subclasses of ScriptWrappable that have
+-  // different implementation of NativeValue(), this should remain false.
+-  static constexpr bool supports_scriptwrappable_specific_fast_array_iteration =
+-      true;
+ 
+   static inline T* NativeValue(v8::Isolate* isolate,
+                                v8::Local<v8::Value> value,

diff --git a/chromium-125-ffmpeg-5.x-reordered_opaque.patch b/chromium-125-ffmpeg-5.x-reordered_opaque.patch
new file mode 100644
index 0000000..9aff864
--- /dev/null
+++ b/chromium-125-ffmpeg-5.x-reordered_opaque.patch
@@ -0,0 +1,105 @@
+commit 62274859104bd828373ae406aa9309e610449ac5
+Author: Ted Meyer <tmathmeyer@chromium.org>
+Date:   Fri Mar 22 19:56:55 2024 +0000
+
+    Replace deprecated use of AVCodecContext::reordered_opaque
+    
+    We can use the AV_CODEC_FLAG_COPY_OPAQUE flag on the codec context
+    now to trigger timestamp propagation.
+    
+    Bug: 330573128
+    Change-Id: I6bc57241a35ab5283742aad8d42acb4dc5e85858
+    Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5384308
+    Commit-Queue: Ted (Chromium) Meyer <tmathmeyer@chromium.org>
+    Reviewed-by: Dan Sanders <sandersd@chromium.org>
+    Cr-Commit-Position: refs/heads/main@{#1277051}
+
+diff --git a/media/filters/ffmpeg_video_decoder.cc b/media/filters/ffmpeg_video_decoder.cc
+index bd75477feeabb..8a658a58caac5 100644
+--- a/media/filters/ffmpeg_video_decoder.cc
++++ b/media/filters/ffmpeg_video_decoder.cc
+@@ -134,7 +134,7 @@ bool FFmpegVideoDecoder::IsCodecSupported(VideoCodec codec) {
+ }
+ 
+ FFmpegVideoDecoder::FFmpegVideoDecoder(MediaLog* media_log)
+-    : media_log_(media_log) {
++    : media_log_(media_log), timestamp_map_(128) {
+   DVLOG(1) << __func__;
+   DETACH_FROM_SEQUENCE(sequence_checker_);
+ }
+@@ -363,8 +363,10 @@ bool FFmpegVideoDecoder::FFmpegDecode(const DecoderBuffer& buffer) {
+     DCHECK(packet->data);
+     DCHECK_GT(packet->size, 0);
+ 
+-    // Let FFmpeg handle presentation timestamp reordering.
+-    codec_context_->reordered_opaque = buffer.timestamp().InMicroseconds();
++    const int64_t timestamp = buffer.timestamp().InMicroseconds();
++    const TimestampId timestamp_id = timestamp_id_generator_.GenerateNextId();
++    timestamp_map_.Put(std::make_pair(timestamp_id, timestamp));
++    packet->opaque = reinterpret_cast<void*>(timestamp_id.GetUnsafeValue());
+   }
+   FFmpegDecodingLoop::DecodeStatus decode_status = decoding_loop_->DecodePacket(
+       packet, base::BindRepeating(&FFmpegVideoDecoder::OnNewFrame,
+@@ -423,7 +425,12 @@ bool FFmpegVideoDecoder::OnNewFrame(AVFrame* frame) {
+   }
+   gfx::Size natural_size = aspect_ratio.GetNaturalSize(visible_rect);
+ 
+-  const auto pts = base::Microseconds(frame->reordered_opaque);
++  const auto ts_id = TimestampId(reinterpret_cast<size_t>(frame->opaque));
++  const auto ts_lookup = timestamp_map_.Get(ts_id);
++  if (ts_lookup == timestamp_map_.end()) {
++    return false;
++  }
++  const auto pts = base::Microseconds(std::get<1>(*ts_lookup));
+   auto video_frame = VideoFrame::WrapExternalDataWithLayout(
+       opaque->layout, visible_rect, natural_size, opaque->data, opaque->size,
+       pts);
+@@ -498,8 +505,10 @@ bool FFmpegVideoDecoder::ConfigureDecoder(const VideoDecoderConfig& config,
+   codec_context_->thread_count = GetFFmpegVideoDecoderThreadCount(config);
+   codec_context_->thread_type =
+       FF_THREAD_SLICE | (low_delay ? 0 : FF_THREAD_FRAME);
++
+   codec_context_->opaque = this;
+   codec_context_->get_buffer2 = GetVideoBufferImpl;
++  codec_context_->flags |= AV_CODEC_FLAG_COPY_OPAQUE;
+ 
+   if (base::FeatureList::IsEnabled(kFFmpegAllowLists)) {
+     // Note: FFmpeg will try to free this string, so we must duplicate it.
+diff --git a/media/filters/ffmpeg_video_decoder.h b/media/filters/ffmpeg_video_decoder.h
+index d02cb89c3ddf7..0a2de1c623fff 100644
+--- a/media/filters/ffmpeg_video_decoder.h
++++ b/media/filters/ffmpeg_video_decoder.h
+@@ -7,10 +7,12 @@
+ 
+ #include <memory>
+ 
++#include "base/containers/lru_cache.h"
+ #include "base/functional/callback.h"
+ #include "base/memory/raw_ptr.h"
+ #include "base/memory/scoped_refptr.h"
+ #include "base/sequence_checker.h"
++#include "base/types/id_type.h"
+ #include "media/base/frame_buffer_pool.h"
+ #include "media/base/supported_video_decoder_config.h"
+ #include "media/base/video_decoder.h"
+@@ -87,6 +89,20 @@ class MEDIA_EXPORT FFmpegVideoDecoder : public VideoDecoder {
+   // FFmpeg structures owned by this object.
+   std::unique_ptr<AVCodecContext, ScopedPtrAVFreeContext> codec_context_;
+ 
++  // The gist here is that timestamps need to be 64 bits to store microsecond
++  // precision. A 32 bit integer would overflow at ~35 minutes at this level of
++  // precision. We can't cast the timestamp to the void ptr object used by the
++  // opaque field in ffmpeg then, because it would lose data on a 32 bit build.
++  // However, we don't actually have 2^31 timestamped frames in a single
++  // playback, so it's fine to use the 32 bit value as a key in a map which
++  // contains the actual timestamps. Additionally, we've in the past set 128
++  // outstanding frames for re-ordering as a limit for cross-thread decoding
++  // tasks, so we'll do that here too with the LRU cache.
++  using TimestampId = base::IdType<int64_t, size_t, 0>;
++
++  TimestampId::Generator timestamp_id_generator_;
++  base::LRUCache<TimestampId, int64_t> timestamp_map_;
++
+   VideoDecoderConfig config_;
+ 
+   scoped_refptr<FrameBufferPool> frame_pool_;

diff --git a/chromium.spec b/chromium.spec
index e6c8a5b..fe61ed7 100644
--- a/chromium.spec
+++ b/chromium.spec
@@ -428,6 +428,7 @@ Patch122: chromium-124-el7-constexpr.patch
 
 # system ffmpeg
 # need for old ffmpeg 5.x on epel9
+Patch129: chromium-125-ffmpeg-5.x-reordered_opaque.patch
 Patch130: chromium-107-ffmpeg-5.x-duration.patch
 # disable the check
 Patch131: chromium-107-proprietary-codecs.patch
@@ -449,10 +450,9 @@ Patch150: chromium-124-qt6.patch
 # not supported in old glibc < 2.30, error: fatal error: 'sys/ifunc.h' file not found
 Patch305: chromium-124-arm64-memory_tagging.patch
 
-# compiler errors on epel
-# revert it for old clang on rhel and f38
-Patch307: chromium-121-v8-c++20-p1.patch
-Patch308: chromium-123-v8-c++20.patch
+# compiler errors on el7/el8 and f38 (clang <17)
+Patch307: chromium-125-el-NativeValueTraits-p1.patch
+Patch308: chromium-125-el-NativeValueTraits-p2.patch
 
 # enable fstack-protector-strong
 Patch312: chromium-123-fstack-protector-strong.patch
@@ -462,6 +462,9 @@ Patch313: chromium-123-rust-clap_lex.patch
 
 Patch314: chromium-124-clang16-buildflags.patch
 
+# remove ldflags -Wl,-mllvm,-disable-auto-upgrade-debug-info which is not supported
+Patch315: chromium-122-clang16-disable-auto-upgrade-debug-info.patch
+
 # add -ftrivial-auto-var-init=zero and -fwrapv
 Patch316: chromium-122-clang-build-flags.patch
 
@@ -479,9 +482,6 @@ Patch354: chromium-120-split-threshold-for-reg-with-hint.patch
 # disable FFmpegAllowLists by default to allow external ffmpeg
 patch356: chromium-125-disable-FFmpegAllowLists.patch
 
-# remove ldflags -Wl,-mllvm,-disable-auto-upgrade-debug-info which is not supported
-Patch357: chromium-122-clang16-disable-auto-upgrade-debug-info.patch
-
 # set clang_lib path
 Patch358: chromium-124-rust-clang_lib.patch
 
@@ -521,7 +521,6 @@ Patch383: 0002-Include-cstddef-to-fix-build.patch
 Patch384: 0004-third_party-crashpad-port-curl-transport-ppc64.patch
 
 Patch385: HACK-third_party-libvpx-use-generic-gnu.patch
-Patch386: HACK-debian-clang-disable-skia-musttail.patch
 
 Patch387: 0001-Add-ppc64-target-to-libaom.patch
 Patch388: 0001-Add-pregenerated-config-for-libaom-on-ppc64.patch
@@ -1174,6 +1173,7 @@ udev.
 
 %if ! %{bundleffmpegfree}
 %if 0%{?rhel} == 9
+%patch -P129 -p1 -R -b .ffmpeg-5.x-reordered_opaque
 %patch -P130 -p1 -b .ffmpeg-5.x-duration
 %endif
 %patch -P131 -p1 -b .prop-codecs
@@ -1226,10 +1226,11 @@ udev.
 %endif
 %endif
 
-%if 0%{?rhel} || 0%{?fedora} && 0%{?fedora} < 39
-#patch -P307 -p1 -R -b .v8-c++20
-#patch -P308 -p1 -R -b .v8-c++20
+%if 0%{?rhel} && 0%{?rhel} < 9 || 0%{?fedora} && 0%{?fedora} < 39
+%patch -P307 -p1 -b .el-NativeValueTraits-p1
+%patch -P308 -p1 -b .el-NativeValueTraits
 %patch -P314 -p1 -b .clang16-buildflag
+%patch -P315 -p1 -b .clang16-disable-auto-upgrade-debug-info
 %endif
 
 %patch -P312 -p1 -b .fstack-protector-strong
@@ -1248,7 +1249,6 @@ udev.
 
 %patch -P354 -p1 -b .revert-split-threshold-for-reg-with-hint
 %patch -P356 -p1 -b .disable-FFmpegAllowLists
-%patch -P357 -p1 -b .clang16-disable-auto-upgrade-debug-info
 %patch -P358 -p1 -b .rust-clang_lib
 %patch -P359 -p1 -b .libavif-deps
 
@@ -1283,7 +1283,6 @@ udev.
 %patch -P384 -p1 -b .0004-third_party-crashpad-port-curl-transport-ppc64
 
 %patch -P385 -p1 -b .HACK-third_party-libvpx-use-generic-gnu
-%patch -P386 -p1 -b .HACK-debian-clang-disable-skia-musttail
 
 %patch -P387 -p1 -b .0001-Add-ppc64-target-to-libaom
 %patch -P388 -p1 -b .0001-Add-pregenerated-config-for-libaom-on-ppc64
@@ -2120,7 +2119,7 @@ getent group chrome-remote-desktop >/dev/null || groupadd -r chrome-remote-deskt
 - update to 125.0.6422.41
 
 * Sat May 11 2024 Than Ngo <than@redhat.com> - 124.0.6367.201-2
-- include headless_command_resources.pak for head_shell
+- include headless_command_resources.pak for headless_shell
 
 * Fri May 10 2024 Than Ngo <than@redhat.com> - 124.0.6367.201-1
 - update to 124.0.6367.201

diff --git a/skia-vsx-instructions.patch b/skia-vsx-instructions.patch
index fa9d5c7..55e782a 100644
--- a/skia-vsx-instructions.patch
+++ b/skia-vsx-instructions.patch
@@ -1,8 +1,7 @@
-Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/BUILD.gn
-+++ chromium-124.0.6367.118/third_party/skia/BUILD.gn
-@@ -191,6 +191,12 @@ opts("skx") {
+diff -up chromium-125.0.6422.41/third_party/skia/BUILD.gn.me chromium-125.0.6422.41/third_party/skia/BUILD.gn
+--- chromium-125.0.6422.41/third_party/skia/BUILD.gn.me	2024-05-08 22:30:53.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/BUILD.gn	2024-05-14 00:02:51.686315473 +0200
+@@ -188,6 +188,12 @@ opts("skx") {
    }
  }
  
@@ -15,7 +14,7 @@ Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn
  # Any feature of Skia that requires third-party code should be optional and use this template.
  template("optional") {
    if (invoker.enabled) {
-@@ -1482,6 +1488,7 @@ skia_component("skia") {
+@@ -1478,6 +1484,7 @@ skia_component("skia") {
      ":skx",
      ":typeface_fontations",
      ":vello",
@@ -23,7 +22,7 @@ Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn
      ":webp_decode",
      ":wuffs",
      ":xml",
-@@ -1659,7 +1666,10 @@ skia_static_library("pathkit") {
+@@ -1653,7 +1660,10 @@ skia_static_library("pathkit") {
    public_configs = [ ":skia_public" ]
    configs = skia_library_configs
  
@@ -35,23 +34,21 @@ Index: chromium-124.0.6367.118/third_party/skia/BUILD.gn
  
    sources = []
    sources += skia_pathops_sources
-Index: chromium-124.0.6367.118/third_party/skia/gn/skia/BUILD.gn
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/gn/skia/BUILD.gn
-+++ chromium-124.0.6367.118/third_party/skia/gn/skia/BUILD.gn
+diff -up chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn.me chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn
+--- chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn.me	2024-05-14 00:02:51.686315473 +0200
++++ chromium-125.0.6422.41/third_party/skia/gn/skia/BUILD.gn	2024-05-14 00:05:17.683137362 +0200
 @@ -163,6 +163,8 @@ config("default") {
        "-mfpmath=sse",
      ]
      ldflags += [ "-m32" ]
 +  } else if (current_cpu == "ppc64") {
 +    cflags += [ "-mcpu=power9", "-mtune=power9" ]
-   }
- 
-   if (malloc != "" && !is_win) {
-Index: chromium-124.0.6367.118/third_party/skia/include/core/SkTypes.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/include/core/SkTypes.h
-+++ chromium-124.0.6367.118/third_party/skia/include/core/SkTypes.h
+   } else if (current_cpu == "loong64") {
+     cflags += [
+       "-mlsx",
+diff -up chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h.me chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h
+--- chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h.me	2024-05-08 22:30:53.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/include/core/SkTypes.h	2024-05-14 00:02:51.686315473 +0200
 @@ -195,5 +195,44 @@ static constexpr uint32_t SK_InvalidGenI
  */
  static constexpr uint32_t SK_InvalidUniqueID = 0;
@@ -97,10 +94,32 @@ Index: chromium-124.0.6367.118/third_party/skia/include/core/SkTypes.h
 +
  
  #endif
-Index: chromium-124.0.6367.118/third_party/skia/src/base/SkSpinlock.cpp
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/base/SkSpinlock.cpp
-+++ chromium-124.0.6367.118/third_party/skia/src/base/SkSpinlock.cpp
+diff -up chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h.me chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h
+--- chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h.me	2024-05-08 22:30:53.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/include/private/base/SkFeatures.h	2024-05-14 00:02:51.689315531 +0200
+@@ -63,6 +63,8 @@
+ 
+ #if defined(__i386) || defined(_M_IX86) ||  defined(__x86_64__) || defined(_M_X64)
+   #define SK_CPU_X86 1
++#elif defined(__powerpc64__) || defined(__PPC64__)
++  #define SK_CPU_PPC64 1
+ #endif
+ 
+ #if defined(__loongarch__) || defined (__loongarch64)
+diff -up chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h.me chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h
+--- chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h.me	2024-05-08 22:30:54.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/modules/skcms/src/skcms_internals.h	2024-05-14 00:02:51.689315531 +0200
+@@ -47,6 +47,7 @@ extern "C" {
+                                                  && !defined(__EMSCRIPTEN__) \
+                                                  && !defined(__arm__) \
+                                                  && !defined(__riscv) \
++                                                 && !defined(__powerpc64__) \
+                                                  && !defined(__loongarch__) \
+                                                  && !defined(_WIN32) && !defined(__SYMBIAN32__)
+             #define SKCMS_HAS_MUSTTAIL 1
+diff -up chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp.me chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp
+--- chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/base/SkSpinlock.cpp	2024-05-14 00:02:51.686315473 +0200
 @@ -33,7 +33,8 @@
  #endif
  
@@ -111,10 +130,119 @@ Index: chromium-124.0.6367.118/third_party/skia/src/base/SkSpinlock.cpp
      #include <emmintrin.h>
      static void do_pause() { _mm_pause(); }
  #else
-Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBitmapProcState_opts.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkBitmapProcState_opts.h
-+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkBitmapProcState_opts.h
+diff -up chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h.me chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h
+--- chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/base/SkVx.h	2024-05-14 00:02:51.688315511 +0200
+@@ -42,7 +42,13 @@
+ 
+ #if SKVX_USE_SIMD
+     #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1
+-        #include <immintrin.h>
++        #if __PPC64__
++            #include <mmintrin.h>
++            #include <emmintrin.h>
++            #include <tmmintrin.h>
++        #else
++            #include <immintrin.h>
++        #endif
+     #elif defined(SK_ARM_HAS_NEON)
+         #include <arm_neon.h>
+     #elif defined(__wasm_simd128__)
+diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp
+--- chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts.cpp	2024-05-14 00:02:51.689315531 +0200
+@@ -25,7 +25,7 @@ namespace SkOpts {
+     static bool init() {
+     #if defined(SK_ENABLE_OPTIMIZE_SIZE)
+         // All Init_foo functions are omitted when optimizing for size
+-    #elif defined(SK_CPU_X86)
++    #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64)
+         #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3
+             if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BitmapProcState_ssse3(); }
+         #endif
+diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp
+--- chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp	2024-05-14 00:02:51.689315531 +0200
+@@ -8,7 +8,7 @@
+ #include "include/private/base/SkFeatures.h"
+ #include "src/core/SkOptsTargets.h"
+ 
+-#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
++#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
+ 
+ // The order of these includes is important:
+ // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget
+diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp
+--- chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts.cpp	2024-05-14 00:02:51.689315531 +0200
+@@ -25,7 +25,7 @@ namespace SkOpts {
+     static bool init() {
+     #if defined(SK_ENABLE_OPTIMIZE_SIZE)
+         // All Init_foo functions are omitted when optimizing for size
+-    #elif defined(SK_CPU_X86)
++    #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64)
+         #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3
+             if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BlitMask_ssse3(); }
+         #endif
+diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp
+--- chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp	2024-05-14 00:02:51.688315511 +0200
+@@ -9,7 +9,7 @@
+ #include "src/core/SkBlitMask.h"
+ #include "src/core/SkOptsTargets.h"
+ 
+-#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
++#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
+ 
+ // The order of these includes is important:
+ // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget
+diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp
+--- chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/core/SkBlitter_ARGB32.cpp	2024-05-14 00:02:51.690315550 +0200
+@@ -126,6 +126,16 @@ static inline SkPMColor blend_lcd16_opaq
+ #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
+     #include <emmintrin.h>
+ 
++#if defined(SK_CPU_PPC64)
++    /* Load signed 64-bit integer from P into vector element 0.  The address need not be 16-byte aligned.  */
++    extern __inline __m128i
++        __attribute__((__gnu_inline__, __always_inline__, __artificial__))
++        _mm_loadu_si64 (void const *__P)
++    {
++      return _mm_set_epi64((__m64)0LL, *(__m64 *)__P);
++    }
++#endif
++
+     // The following (left) shifts cause the top 5 bits of the mask components to
+     // line up with the corresponding components in an SkPMColor.
+     // Note that the mask's RGB16 order may differ from the SkPMColor order.
+diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h.me chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h
+--- chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/core/SkCpu.h	2024-05-14 00:02:51.689315531 +0200
+@@ -60,7 +60,7 @@ inline bool SkCpu::Supports(uint32_t mas
+ 
+     // If we mask in compile-time known lower limits, the compiler can
+     // often compile away this entire function.
+-#if SK_CPU_X86
++#if SK_CPU_X86 || defined(SK_CPU_PPC64)
+     #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1
+     features |= SSE1;
+     #endif
+diff -up chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp.me chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp
+--- chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp	2024-05-14 00:02:51.688315511 +0200
+@@ -10,7 +10,7 @@
+ #include "src/core/SkOptsTargets.h"
+ #include "src/core/SkSwizzlePriv.h"
+ 
+-#if defined(SK_CPU_X86) && \
++#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && \
+     !defined(SK_ENABLE_OPTIMIZE_SIZE) && \
+     SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3
+ 
+diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h.me chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h
+--- chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkBitmapProcState_opts.h	2024-05-14 00:02:51.686315473 +0200
 @@ -21,7 +21,13 @@
  // The rest are scattershot at the moment but I want to get them
  // all migrated to be normal code inside SkBitmapProcState.cpp.
@@ -130,10 +258,9 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBitmapProcState_opts.
      #include <immintrin.h>
  #elif defined(SK_ARM_HAS_NEON)
      #include <arm_neon.h>
-Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBlitRow_opts.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkBlitRow_opts.h
-+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkBlitRow_opts.h
+diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h.me chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h
+--- chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkBlitRow_opts.h	2024-05-14 00:02:51.687315492 +0200
 @@ -69,7 +69,7 @@
  #endif
  
@@ -143,10 +270,9 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkBlitRow_opts.h
  
      static inline __m128i SkPMSrcOver_SSE2(const __m128i& src, const __m128i& dst) {
          __m128i scale = _mm_sub_epi32(_mm_set1_epi32(256),
-Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkRasterPipeline_opts.h
-+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
+diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h.me chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h
+--- chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkRasterPipeline_opts.h	2024-05-14 00:11:12.485694679 +0200
 @@ -1,5 +1,6 @@
  /*
   * Copyright 2018 Google Inc.
@@ -163,16 +289,16 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SKX
      #define JUMPER_IS_SKX
  #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_AVX2
-@@ -107,6 +110,8 @@ using NoCtx = const void*;
-     #include <math.h>
- #elif defined(JUMPER_IS_NEON)
-     #include <arm_neon.h>
+@@ -116,6 +119,8 @@ using NoCtx = const void*;
+     #include <lsxintrin.h>
+ #elif defined(JUMPER_IS_LSX)
+     #include <lsxintrin.h>
 +#elif defined(JUMPER_IS_VSX)
 +    #include <emmintrin.h>
  #else
      #include <immintrin.h>
  #endif
-@@ -200,6 +205,184 @@ namespace SK_OPTS_NS {
+@@ -209,6 +214,184 @@ namespace SK_OPTS_NS {
          ptr[3] = a;
      }
  
@@ -357,7 +483,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  #elif defined(JUMPER_IS_NEON)
      template <typename T> using V = Vec<4, T>;
      using F   = V<float   >;
-@@ -1025,6 +1208,15 @@ SI F from_half(U16 h) {
+@@ -1406,6 +1589,15 @@ SI F from_half(U16 h) {
  #elif defined(JUMPER_IS_HSW)
      return _mm256_cvtph_ps((__m128i)h);
  
@@ -373,7 +499,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  #else
      // Remember, a half is 1-5-10 (sign-exponent-mantissa) with 15 exponent bias.
      U32 sem = expand(h),
-@@ -1048,6 +1240,16 @@ SI U16 to_half(F f) {
+@@ -1429,6 +1621,16 @@ SI U16 to_half(F f) {
  #elif defined(JUMPER_IS_HSW)
      return (U16)_mm256_cvtps_ph(f, _MM_FROUND_CUR_DIRECTION);
  
@@ -390,19 +516,19 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  #else
      // Remember, a float is 1-8-23 (sign-exponent-mantissa) with 127 exponent bias.
      U32 sem = sk_bit_cast<U32>(f),
-@@ -1123,7 +1325,7 @@ static constexpr size_t N = sizeof(F) /
+@@ -1504,7 +1706,7 @@ static constexpr size_t N = sizeof(F) /
      // instead of {b,a} on the stack.  Narrow stages work best for __vectorcall.
      #define ABI __vectorcall
      #define JUMPER_NARROW_STAGES 1
--#elif defined(__x86_64__) || defined(SK_CPU_ARM64)
-+#elif defined(__x86_64__) || defined(SK_CPU_ARM64) || defined(SK_CPU_PPC64)
+-#elif defined(__x86_64__) || defined(SK_CPU_ARM64) || defined(SK_CPU_LOONGARCH)
++#elif defined(__x86_64__) || defined(SK_CPU_ARM64) || defined(SK_CPU_LOONGARCH) || defined(SK_CPU_PPC64)
      // These platforms are ideal for wider stages, and their default ABI is ideal.
      #define ABI
      #define JUMPER_NARROW_STAGES 0
-@@ -5023,6 +5225,10 @@ SI F sqrt_(F x) {
-     float32x4_t lo,hi;
+@@ -5475,6 +5677,10 @@ SI F sqrt_(F x) {
+     __m128 lo,hi;
      split(x, &lo,&hi);
-     return join<F>(sqrt(lo), sqrt(hi));
+     return join<F>(__lsx_vfsqrt_s(lo), __lsx_vfsqrt_s(hi));
 +#elif defined(JUMPER_IS_VSX)
 +    vector float lo,hi;
 +    split(x, &lo,&hi);
@@ -410,10 +536,10 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  #else
      return F{
          sqrtf(x[0]), sqrtf(x[1]), sqrtf(x[2]), sqrtf(x[3]),
-@@ -5046,6 +5252,10 @@ SI F floor_(F x) {
+@@ -5506,6 +5712,10 @@ SI F floor_(F x) {
      __m128 lo,hi;
      split(x, &lo,&hi);
-     return join<F>(_mm_floor_ps(lo), _mm_floor_ps(hi));
+     return join<F>(__lsx_vfrintrm_s(lo), __lsx_vfrintrm_s(hi));
 +#elif defined(JUMPER_IS_VSX)
 +    vector float lo,hi;
 +    split(x, &lo,&hi);
@@ -421,7 +547,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  #else
      F roundtrip = cast<F>(cast<I32>(x));
      return roundtrip - if_then_else(roundtrip > x, F_(1), F_(0));
-@@ -5057,6 +5267,7 @@ SI F floor_(F x) {
+@@ -5517,6 +5727,7 @@ SI F floor_(F x) {
  //     (2 * a * b + (1 << 15)) >> 16
  // The result is a number on [-1, 1).
  // Note: on neon this is a saturating multiply while the others are not.
@@ -429,10 +555,10 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  SI I16 scaled_mult(I16 a, I16 b) {
  #if defined(JUMPER_IS_SKX)
      return (I16)_mm256_mulhrs_epi16((__m256i)a, (__m256i)b);
-@@ -5068,6 +5279,22 @@ SI I16 scaled_mult(I16 a, I16 b) {
-     return vqrdmulhq_s16(a, b);
- #elif defined(JUMPER_IS_NEON)
-     return vqrdmulhq_s16(a, b);
+@@ -5534,6 +5745,22 @@ SI I16 scaled_mult(I16 a, I16 b) {
+ #elif defined(JUMPER_IS_LSX)
+     I16 res = __lsx_vmuh_h(a, b);
+     return __lsx_vslli_h(res, 1);
 +#elif defined(JUMPER_IS_VSX)
 +    const vector unsigned int shift = vec_splats((unsigned int)14);
 +    const vector int ones = vec_splats((signed int)1);
@@ -452,7 +578,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  #else
      const I32 roundingTerm = I32_(1 << 14);
      return cast<I16>((cast<I32>(a) * cast<I32>(b) + roundingTerm) >> 15);
-@@ -5089,7 +5316,26 @@ SI U16 constrained_add(I16 a, U16 b) {
+@@ -5555,7 +5782,26 @@ SI U16 constrained_add(I16 a, U16 b) {
              SkASSERT(-ib <= ia && ia <= 65535 - ib);
          }
      #endif
@@ -479,7 +605,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
  }
  
  SI F fract(F x) { return x - floor_(x); }
-@@ -5947,8 +6193,14 @@ STAGE_GP(bilerp_clamp_8888, const SkRast
+@@ -6479,8 +6725,14 @@ STAGE_GP(bilerp_clamp_8888, const SkRast
      //         2^-8 * v = 2^-9 * (tx*(R - L) + (R + L))
      //                v = 1/2 * (tx*(R - L) + (R + L))
      auto lerpX = [&](U16 left, U16 right) -> U16 {
@@ -494,7 +620,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
          // The constrained_add is the most subtle part of lerp. The first term is on the interval
          // [-1, 1), and the second term is on the interval is on the interval [0, 1) because
          // both terms are too high by a factor of 2 which will be handled below. (Both R and L are
-@@ -5960,7 +6212,12 @@ STAGE_GP(bilerp_clamp_8888, const SkRast
+@@ -6492,7 +6744,12 @@ STAGE_GP(bilerp_clamp_8888, const SkRast
          U16 v2  = constrained_add(scaled_mult(tx, width), middle) + 1;
          // Divide by 2 to calculate v and at the same time bring the intermediate value onto the
          // interval [0, 1/2] to set up for the lerpY.
@@ -507,7 +633,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
      };
  
      const uint32_t* ptr;
-@@ -5994,9 +6251,15 @@ STAGE_GP(bilerp_clamp_8888, const SkRast
+@@ -6526,9 +6783,15 @@ STAGE_GP(bilerp_clamp_8888, const SkRast
          I16 width  = (I16)bottom - (I16)top;
          U16 middle = bottom + top;
          // Add + 0x80 for rounding.
@@ -524,132 +650,9 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkRasterPipeline_opts.h
      };
  
      r = lerpY(topR, bottomR);
-Index: chromium-124.0.6367.118/third_party/skia/src/base/SkVx.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/base/SkVx.h
-+++ chromium-124.0.6367.118/third_party/skia/src/base/SkVx.h
-@@ -42,7 +42,13 @@
- 
- #if SKVX_USE_SIMD
-     #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1
--        #include <immintrin.h>
-+        #if __PPC64__
-+            #include <mmintrin.h>
-+            #include <emmintrin.h>
-+            #include <tmmintrin.h>
-+        #else
-+            #include <immintrin.h>
-+        #endif
-     #elif defined(SK_ARM_HAS_NEON)
-         #include <arm_neon.h>
-     #elif defined(__wasm_simd128__)
-Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp
-+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts_ssse3.cpp
-@@ -9,7 +9,7 @@
- #include "src/core/SkBlitMask.h"
- #include "src/core/SkOptsTargets.h"
- 
--#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
-+#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
- 
- // The order of these includes is important:
- // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget
-Index: chromium-124.0.6367.118/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp
-+++ chromium-124.0.6367.118/third_party/skia/src/core/SkSwizzler_opts_ssse3.cpp
-@@ -10,7 +10,7 @@
- #include "src/core/SkOptsTargets.h"
- #include "src/core/SkSwizzlePriv.h"
- 
--#if defined(SK_CPU_X86) && \
-+#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && \
-     !defined(SK_ENABLE_OPTIMIZE_SIZE) && \
-     SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3
- 
-Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts.cpp
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBlitMask_opts.cpp
-+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBlitMask_opts.cpp
-@@ -25,7 +25,7 @@ namespace SkOpts {
-     static bool init() {
-     #if defined(SK_ENABLE_OPTIMIZE_SIZE)
-         // All Init_foo functions are omitted when optimizing for size
--    #elif defined(SK_CPU_X86)
-+    #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64)
-         #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3
-             if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BlitMask_ssse3(); }
-         #endif
-Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts.cpp
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBitmapProcState_opts.cpp
-+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts.cpp
-@@ -25,7 +25,7 @@ namespace SkOpts {
-     static bool init() {
-     #if defined(SK_ENABLE_OPTIMIZE_SIZE)
-         // All Init_foo functions are omitted when optimizing for size
--    #elif defined(SK_CPU_X86)
-+    #elif defined(SK_CPU_X86) || defined(SK_CPU_PPC64)
-         #if SK_CPU_SSE_LEVEL < SK_CPU_SSE_LEVEL_SSSE3
-             if (SkCpu::Supports(SkCpu::SSSE3)) { Init_BitmapProcState_ssse3(); }
-         #endif
-Index: chromium-124.0.6367.118/third_party/skia/src/core/SkCpu.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkCpu.h
-+++ chromium-124.0.6367.118/third_party/skia/src/core/SkCpu.h
-@@ -55,7 +55,7 @@ inline bool SkCpu::Supports(uint32_t mas
- 
-     // If we mask in compile-time known lower limits, the compiler can
-     // often compile away this entire function.
--#if SK_CPU_X86
-+#if SK_CPU_X86 || defined(SK_CPU_PPC64)
-     #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1
-     features |= SSE1;
-     #endif
-Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp
-+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBitmapProcState_opts_ssse3.cpp
-@@ -8,7 +8,7 @@
- #include "include/private/base/SkFeatures.h"
- #include "src/core/SkOptsTargets.h"
- 
--#if defined(SK_CPU_X86) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
-+#if (defined(SK_CPU_X86) || defined(SK_CPU_PPC64)) && !defined(SK_ENABLE_OPTIMIZE_SIZE)
- 
- // The order of these includes is important:
- // 1) Select the target CPU architecture by defining SK_OPTS_TARGET and including SkOpts_SetTarget
-Index: chromium-124.0.6367.118/third_party/skia/include/private/base/SkFeatures.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/include/private/base/SkFeatures.h
-+++ chromium-124.0.6367.118/third_party/skia/include/private/base/SkFeatures.h
-@@ -63,6 +63,8 @@
- 
- #if defined(__i386) || defined(_M_IX86) ||  defined(__x86_64__) || defined(_M_X64)
-   #define SK_CPU_X86 1
-+#elif defined(__powerpc64__) || defined(__PPC64__)
-+  #define SK_CPU_PPC64 1
- #endif
- 
- /**
-Index: chromium-124.0.6367.118/third_party/skia/modules/skcms/src/skcms_internals.h
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/modules/skcms/src/skcms_internals.h
-+++ chromium-124.0.6367.118/third_party/skia/modules/skcms/src/skcms_internals.h
-@@ -47,6 +47,7 @@ extern "C" {
-                                                  && !defined(__EMSCRIPTEN__) \
-                                                  && !defined(__arm__) \
-                                                  && !defined(__riscv) \
-+                                                 && !defined(__powerpc64__) \
-                                                  && !defined(__loongarch__) \
-                                                  && !defined(_WIN32) && !defined(__SYMBIAN32__)
-             #define SKCMS_HAS_MUSTTAIL 1
-Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/opts/SkSwizzler_opts.inc
-+++ chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc
+diff -up chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc.me chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc
+--- chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc.me	2024-05-08 22:30:55.000000000 +0200
++++ chromium-125.0.6422.41/third_party/skia/src/opts/SkSwizzler_opts.inc	2024-05-14 00:02:51.689315531 +0200
 @@ -14,7 +14,10 @@
  #include <cmath>
  #include <utility>
@@ -662,7 +665,7 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc
      #include <immintrin.h>
  #elif defined(SK_ARM_HAS_NEON)
      #include <arm_neon.h>
-@@ -61,6 +64,33 @@ SI float reciprocal_alpha_times_255(floa
+@@ -65,6 +68,33 @@ SI float reciprocal_alpha_times_255(floa
  SI float reciprocal_alpha(float a) {
      return reciprocal_alpha_portable(a);
  }
@@ -696,24 +699,3 @@ Index: chromium-124.0.6367.118/third_party/skia/src/opts/SkSwizzler_opts.inc
  #elif SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE1 && (defined(__clang__) || !defined(_MSC_VER))
  // -- SSE -- Harden against timing attacks -- MSVC is not supported.
  using F4 = __m128;
-Index: chromium-124.0.6367.118/third_party/skia/src/core/SkBlitter_ARGB32.cpp
-===================================================================
---- chromium-124.0.6367.118.orig/third_party/skia/src/core/SkBlitter_ARGB32.cpp
-+++ chromium-124.0.6367.118/third_party/skia/src/core/SkBlitter_ARGB32.cpp
-@@ -126,6 +126,16 @@ static inline SkPMColor blend_lcd16_opaq
- #if SK_CPU_SSE_LEVEL >= SK_CPU_SSE_LEVEL_SSE2
-     #include <emmintrin.h>
- 
-+#if defined(SK_CPU_PPC64)
-+    /* Load signed 64-bit integer from P into vector element 0.  The address need not be 16-byte aligned.  */
-+    extern __inline __m128i
-+        __attribute__((__gnu_inline__, __always_inline__, __artificial__))
-+        _mm_loadu_si64 (void const *__P)
-+    {
-+      return _mm_set_epi64((__m64)0LL, *(__m64 *)__P);
-+    }
-+#endif
-+
-     // The following (left) shifts cause the top 5 bits of the mask components to
-     // line up with the corresponding components in an SkPMColor.
-     // Note that the mask's RGB16 order may differ from the SkPMColor order.

diff --git a/sources b/sources
index 6106727..ae802a5 100644
--- a/sources
+++ b/sources
@@ -2,4 +2,4 @@ SHA512 (node-v20.6.1-linux-arm64.tar.xz) = adfcaf2c22614797fd69fb46d94c1cbf64dea
 SHA512 (node-v20.6.1-linux-x64.tar.xz) = 7e15c05041a9a50f0046266aadb2e092a5aefbec19be1c7c809471add520cb57c7df3c47d88b1888b29bf2979dca3c92adddfd965370fa2a9da4ea02186464fd
 SHA512 (linux-arm64-0.19.2.tgz) = 8a0d8fec6786fffcd6954d00820037a55d61e60762c74300df0801f8db27057562c221a063bedfb8df56af9ba80abb366336987e881782c5996e6f871abd3dc6
 SHA512 (linux-x64-0.19.2.tgz) = a31cc74c4bfa54f9b75d735a1cfc944d3b5efb7c06bfba9542da9a642ae0b2d235ea00ae84d3ad0572c406405110fe7b61377af0fd15803806ef78d20fc6f05d
-SHA512 (chromium-125.0.6422.41-clean.tar.xz) = db3fb64e5962d3ab1f0debae06d311df4866fd647d50d74f3c58368a70a7bc1cb4f81c900adb96130ef416c8f90976d40ab4e90fa683f9b68791019ed570d1ed
+SHA512 (chromium-125.0.6422.41-clean.tar.xz) = 8ada0a737557c88f797f00e10d4eb9410dcd37dffc02b3846aabe027b968caf3c21388a620bd07734285aed5a119e5d61e28bbbb23cbf049a5ac050ce9ff1db0

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-07 16:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-07 16:06 [rpms/chromium] epel9-next: - refreshed patches Than Ngo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox