<pre style='margin:0'>
Michael Dickens (michaelld) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/6cb7f281b76f2379d54b8e27aeef71a4d180d658">https://github.com/macports/macports-ports/commit/6cb7f281b76f2379d54b8e27aeef71a4d180d658</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 6cb7f281b76 volk: revert to 2.5.0
</span>6cb7f281b76 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 6cb7f281b76f2379d54b8e27aeef71a4d180d658
</span>Author: Michael Dickens <michaelld@macports.org>
AuthorDate: Sun Jun 26 10:18:57 2022 -0700

<span style='display:block; white-space:pre;color:#404040;'>    volk: revert to 2.5.0
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Requires std::filesystem via C++17, but that feature isn't easily available on OSX 10.[7-12]
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Ref: https://trac.macports.org/ticket/65377
</span><span style='display:block; white-space:pre;color:#404040;'>    Ref: https://github.com/macports/macports-ports/pull/15205
</span>---
 science/volk/Portfile                              |  36 +-
 .../patch-cpu_features-add-support-for-ARM64.diff  | 467 ++++++---------------
 2 files changed, 156 insertions(+), 347 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/science/volk/Portfile b/science/volk/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index dea1f519235..20258487710 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/science/volk/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/science/volk/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -7,8 +7,9 @@ PortGroup           muniversal 1.0
</span> PortGroup           compiler_blacklist_versions 1.0
 PortGroup           boost 1.0
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+# Volk requires C/C++11 as of release 2.0.0
</span> compiler.c_standard   2011
<span style='display:block; white-space:pre;background:#ffe0e0;'>-compiler.cxx_standard 2017
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+compiler.cxx_standard 2011
</span> 
 # some older Clang say they support SIMD when they don't
 compiler.blacklist-append {clang < 900}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -18,17 +19,23 @@ categories          science comms
</span> maintainers         {michaelld @michaelld}
 description         Vector-Optimized Library of Kernels
 long_description    VOLK is the Vector-Optimized Library of Kernels, a library that contains kernels of hand-written single-instruction multiple data (SIMD) code for different mathematical operations, providing portable SIMD code that is optimized for a variety of platforms.
<span style='display:block; white-space:pre;background:#e0ffe0;'>+long_description {*}${long_description} ${subport} \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    provides the release version, which is typically updated every month or so.
</span> license             GPL-3
 platforms           darwin
 homepage            https://libvolk.org/
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup gnuradio volk 2.5.1 v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup gnuradio volk 2.5.0 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision  0
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-# bump the epoch because I moved the version from 20150707 to 1.0.1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-epoch 1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-long_description {*}${long_description} ${subport} \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    provides the release version, which is typically updated every month or so.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+epoch 2
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 1: bump the epoch because I moved the version from 20150707 to 1.0.1
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# 2: because 2.5.1 requires std::filesystem, which requires updated libc++,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# which is not easily doable on 10.[7-14]; see also
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://trac.macports.org/ticket/65377 and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+# https://github.com/macports/macports-ports/pull/15205
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+#
</span> 
 # Volk requires the submodule "cpu_features" as found here: <
 # https://github.com/google/cpu_features >.  Because we're not
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -42,7 +49,7 @@ long_description {*}${long_description} ${subport} \
</span> 
 set cpu_features_github_author  google
 set cpu_features_github_project cpu_features
<span style='display:block; white-space:pre;background:#ffe0e0;'>-set cpu_features_github_branch  69d39934e83be9a0133d2850f15f5debd5eba06f
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+set cpu_features_github_branch  a8397ba4591237c17d18e4acc091f5f3ebe7391e
</span> 
 set main_distname ${distname}
 set main_distfile ${distfiles}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -57,13 +64,13 @@ master_sites ${github.homepage}/archive/${git.branch}:tagone \
</span>              https://github.com/${cpu_features_github_author}/${cpu_features_github_project}/archive/${cpu_features_github_branch}:tagtwo
 
 checksums    ${main_distfile} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-             rmd160  294db185933e2c6e5f772827ae6d397a96a1e517 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             sha256  a935d284e6ea33fb6885a504e963bc4b92c170529a4268adf39a34c86e067e8d \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             size    388203 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             rmd160  e109ad2361dfa2ab8908aff644b067fcd832028d \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             sha256  468bebdb8c2ae9b82837ad08abd146dd9a9a48d3de7bea2d0095e4b1557b5299 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             size    357828 \
</span>              ${cpu_features_distfile} \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-             rmd160  6845fea19ef309fb81714600e9b5dbee29a951e2 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             sha256  eec63919535abcf029f6fce1bca1192e67a5f5701d067d24094a54378c7f9563 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             size    83271
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             rmd160  7221e014514170ed24a1d0294b8195cecd9b7465 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             sha256  b47031a2a9ab04cb6514285103e51ba92c8f0bf28470cce911ac0c9af781c307 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             size    63263
</span> 
 post-extract {
     # put the cpu_features_github_project directory into position
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -77,7 +84,6 @@ post-extract {
</span> # fix cpu_features to work with ARM64
 
 patchfiles-append patch-cpu_features-add-support-for-ARM64.diff
<span style='display:block; white-space:pre;background:#ffe0e0;'>-patch.pre_args -p1
</span> 
 # done with special git command replication
 
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/science/volk/files/patch-cpu_features-add-support-for-ARM64.diff b/science/volk/files/patch-cpu_features-add-support-for-ARM64.diff
</span><span style='display:block; white-space:pre;color:#808080;'>index 973b62259cc..3613d6def57 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/science/volk/files/patch-cpu_features-add-support-for-ARM64.diff
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/science/volk/files/patch-cpu_features-add-support-for-ARM64.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,347 +1,159 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Based on https://github.com/google/cpu_features/pull/204
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/cpu_features/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,4 +1,4 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--cmake_minimum_required(VERSION 3.0)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cmake_minimum_required(VERSION 3.19.2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cpu_features/CMakeLists.txt.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cpu_features/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -57,10 +57,10 @@
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>- # option() honors normal variables.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- # see: https://cmake.org/cmake/help/git-stage/policy/CMP0077.html
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -135,7 +135,7 @@ target_link_libraries(cpu_features PUBLIC ${CMAKE_DL_LIBS})
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "^mips")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   set(PROCESSOR_IS_MIPS TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(^aarch64)|(arm64)")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  set(PROCESSOR_IS_AARCH64 TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   set(PROCESSOR_IS_ARM TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^aarch64")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  set(PROCESSOR_IS_AARCH64 TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86_64)|(AMD64|amd64)|(^i.86$)")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   set(PROCESSOR_IS_X86 TRUE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^(powerpc|ppc)")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -146,10 +146,8 @@
</span>  target_include_directories(cpu_features
    PUBLIC $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/cpu_features>
  )
 -if(PROCESSOR_IS_X86)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+if(PROCESSOR_IS_X86 OR PROCESSOR_IS_AARCH64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   if(APPLE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     target_compile_definitions(cpu_features PRIVATE HAVE_SYSCTLBYNAME)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   endif()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/cpu_features/README.md
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/README.md
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -152,14 +152,14 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a name="support"></a>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ## What's supported
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  if(APPLE)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    target_compile_definitions(cpu_features PRIVATE HAVE_SYSCTLBYNAME)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-  endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++if(APPLE AND (PROCESSOR_IS_X86 OR PROCESSOR_IS_AARCH64))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++   target_compile_definitions(cpu_features PRIVATE HAVE_SYSCTLBYNAME)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ endif()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ add_library(CpuFeature::cpu_features ALIAS cpu_features)
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>--|         | x86³ | ARM     | AArch64 | MIPS⁴   | POWER   |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--|---------|:----:|:-------:|:-------:|:-------:|:-------:|
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--| Android | yes² | yes¹    | yes¹    | yes¹    | N/A     |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--| iOS     | N/A  | not yet | not yet | N/A     | N/A     |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--| Linux   | yes² | yes¹    | yes¹    | yes¹    | yes¹    |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--| MacOs   | yes² | N/A     | not yet | N/A     | no      |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--| Windows | yes² | not yet | not yet | N/A     | N/A     |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--| FreeBSD | yes² | not yet | not yet | not yet | not yet |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+|         | x86<sup>3</sup> |        ARM      |       AArch64     | MIPS<sup>4</sup>|   POWER         |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+|---------|:---------------:|:---------------:|:-----------------:|:---------------:|:---------------:|
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+| Android | yes<sup>2</sup> | yes<sup>1</sup> | yes<sup>1</sup>   | yes<sup>1</sup> | N/A             |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+| iOS     | N/A             | not yet         | not yet           | N/A             | N/A             |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+| Linux   | yes<sup>2</sup> | yes<sup>1</sup> | yes<sup>1</sup>   | yes<sup>1</sup> | yes<sup>1</sup> |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+| MacOs   | yes<sup>2</sup> | N/A             | yes<sup>5</sup>   | N/A             | no              |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+| Windows | yes<sup>2</sup> | not yet         | not yet           | N/A             | N/A             |
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+| FreeBSD | yes<sup>2</sup> | not yet         | not yet           | not yet         | not yet         |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cpu_features/README.md.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cpu_features/README.md
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -146,7 +146,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ | Android | yes² |   yes¹  |   yes¹  |  yes¹  |   N/A   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ | iOS     |  N/A | not yet | not yet |   N/A  |   N/A   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ | Linux   | yes² |   yes¹  |   yes¹  |  yes¹  |   yes¹  |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-| MacOs   | yes² |   N/A   | not yet |   N/A  |    no   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++| macOS   | yes² |   N/A   | yes² |   N/A  |    no   |
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ | Windows | yes² | not yet | not yet |   N/A  |   N/A   |
</span>  
  1.  **Features revealed from Linux.** We gather data from several sources
<span style='display:block; white-space:pre;background:#ffe0e0;'>-     depending on availability:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -174,6 +174,8 @@ flags           : aes,avx,cx16,smx,sse4_1,sse4_2,ssse3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     microarchitecture allows the client to reject particular microarchitectures.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 4.  All flavors of Mips are supported, little and big endian as well as 32/64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     bits.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5.  **Features revealed from sysctl.** features are retrieved by the `sysctl`
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    instruction.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- <a name="ndk"></a>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ## Android NDK's drop in replacement
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/cpu_features/include/cpu_features_macros.h
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/include/cpu_features_macros.h
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cpu_features/include/cpu_features_macros.h.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cpu_features/include/cpu_features_macros.h
</span> @@ -39,7 +39,7 @@
  #define CPU_FEATURES_ARCH_ARM
  #endif
  
 -#if defined(__aarch64__)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(__aarch64__) || defined(__arm64__)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if (defined(__aarch64__) || (defined(__APPLE__) && defined(__arm64__)))
</span>  #define CPU_FEATURES_ARCH_AARCH64
  #endif
  
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/src/impl_aarch64__base_implementation.inl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,85 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Copyright 2021 Google LLC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Licensed under the Apache License, Version 2.0 (the "License");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// you may not use this file except in compliance with the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// You may obtain a copy of the License at
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//    http://www.apache.org/licenses/LICENSE-2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Unless required by applicable law or agreed to in writing, software
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// distributed under the License is distributed on an "AS IS" BASIS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// See the License for the specific language governing permissions and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// limitations under the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include <stdbool.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "cpuinfo_aarch64.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "internal/bit_utils.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "internal/filesystem.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "internal/stack_line_reader.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "internal/string_view.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if !defined(CPU_FEATURES_ARCH_AARCH64)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#error "Cannot compile aarch64_base on a non aarch64 platform."
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+////////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Definitions for introspection.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+////////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INTROSPECTION_TABLE                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_FP, fp, "fp", AARCH64_HWCAP_FP, 0)                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_ASIMD, asimd, "asimd", AARCH64_HWCAP_ASIMD, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_EVTSTRM, evtstrm, "evtstrm", AARCH64_HWCAP_EVTSTRM, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_AES, aes, "aes", AARCH64_HWCAP_AES, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_PMULL, pmull, "pmull", AARCH64_HWCAP_PMULL, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SHA1, sha1, "sha1", AARCH64_HWCAP_SHA1, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SHA2, sha2, "sha2", AARCH64_HWCAP_SHA2, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_CRC32, crc32, "crc32", AARCH64_HWCAP_CRC32, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_ATOMICS, atomics, "atomics", AARCH64_HWCAP_ATOMICS, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_FPHP, fphp, "fphp", AARCH64_HWCAP_FPHP, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_ASIMDHP, asimdhp, "asimdhp", AARCH64_HWCAP_ASIMDHP, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_CPUID, cpuid, "cpuid", AARCH64_HWCAP_CPUID, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_ASIMDRDM, asimdrdm, "asimdrdm", AARCH64_HWCAP_ASIMDRDM, 0)  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_JSCVT, jscvt, "jscvt", AARCH64_HWCAP_JSCVT, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_FCMA, fcma, "fcma", AARCH64_HWCAP_FCMA, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_LRCPC, lrcpc, "lrcpc", AARCH64_HWCAP_LRCPC, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_DCPOP, dcpop, "dcpop", AARCH64_HWCAP_DCPOP, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SHA3, sha3, "sha3", AARCH64_HWCAP_SHA3, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SM3, sm3, "sm3", AARCH64_HWCAP_SM3, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SM4, sm4, "sm4", AARCH64_HWCAP_SM4, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_ASIMDDP, asimddp, "asimddp", AARCH64_HWCAP_ASIMDDP, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SHA512, sha512, "sha512", AARCH64_HWCAP_SHA512, 0)          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVE, sve, "sve", AARCH64_HWCAP_SVE, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_ASIMDFHM, asimdfhm, "asimdfhm", AARCH64_HWCAP_ASIMDFHM, 0)  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_DIT, dit, "dit", AARCH64_HWCAP_DIT, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_USCAT, uscat, "uscat", AARCH64_HWCAP_USCAT, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_ILRCPC, ilrcpc, "ilrcpc", AARCH64_HWCAP_ILRCPC, 0)          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_FLAGM, flagm, "flagm", AARCH64_HWCAP_FLAGM, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SSBS, ssbs, "ssbs", AARCH64_HWCAP_SSBS, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SB, sb, "sb", AARCH64_HWCAP_SB, 0)                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_PACA, paca, "paca", AARCH64_HWCAP_PACA, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_PACG, pacg, "pacg", AARCH64_HWCAP_PACG, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_DCPODP, dcpodp, "dcpodp", 0, AARCH64_HWCAP2_DCPODP)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVE2, sve2, "sve2", 0, AARCH64_HWCAP2_SVE2)                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVEAES, sveaes, "sveaes", 0, AARCH64_HWCAP2_SVEAES)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVEPMULL, svepmull, "svepmull", 0, AARCH64_HWCAP2_SVEPMULL) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVEBITPERM, svebitperm, "svebitperm", 0,                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+       AARCH64_HWCAP2_SVEBITPERM)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVESHA3, svesha3, "svesha3", 0, AARCH64_HWCAP2_SVESHA3)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVESM4, svesm4, "svesm4", 0, AARCH64_HWCAP2_SVESM4)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_FLAGM2, flagm2, "flagm2", 0, AARCH64_HWCAP2_FLAGM2)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_FRINT, frint, "frint", 0, AARCH64_HWCAP2_FRINT)             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVEI8MM, svei8mm, "svei8mm", 0, AARCH64_HWCAP2_SVEI8MM)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVEF32MM, svef32mm, "svef32mm", 0, AARCH64_HWCAP2_SVEF32MM) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVEF64MM, svef64mm, "svef64mm", 0, AARCH64_HWCAP2_SVEF64MM) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_SVEBF16, svebf16, "svebf16", 0, AARCH64_HWCAP2_SVEBF16)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_I8MM, i8mm, "i8mm", 0, AARCH64_HWCAP2_I8MM)                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_BF16, bf16, "bf16", 0, AARCH64_HWCAP2_BF16)                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_DGH, dgh, "dgh", 0, AARCH64_HWCAP2_DGH)                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_RNG, rng, "rng", 0, AARCH64_HWCAP2_RNG)                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_BTI, bti, "bti", 0, AARCH64_HWCAP2_BTI)                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  LINE(AARCH64_MTE, mte, "mte", 0, AARCH64_HWCAP2_MTE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INTROSPECTION_PREFIX Aarch64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#define INTROSPECTION_ENUM_PREFIX AARCH64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "define_introspection_and_hwcaps.inl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/cpu_features/src/impl_aarch64_linux_or_android.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/src/impl_aarch64_linux_or_android.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -17,78 +17,7 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #ifdef CPU_FEATURES_ARCH_AARCH64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- #if defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "cpuinfo_aarch64.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--////////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// Definitions for introspection.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--////////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define INTROSPECTION_TABLE                                                \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_FP, fp, "fp", AARCH64_HWCAP_FP, 0)                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_ASIMD, asimd, "asimd", AARCH64_HWCAP_ASIMD, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_EVTSTRM, evtstrm, "evtstrm", AARCH64_HWCAP_EVTSTRM, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_AES, aes, "aes", AARCH64_HWCAP_AES, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_PMULL, pmull, "pmull", AARCH64_HWCAP_PMULL, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SHA1, sha1, "sha1", AARCH64_HWCAP_SHA1, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SHA2, sha2, "sha2", AARCH64_HWCAP_SHA2, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_CRC32, crc32, "crc32", AARCH64_HWCAP_CRC32, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_ATOMICS, atomics, "atomics", AARCH64_HWCAP_ATOMICS, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_FPHP, fphp, "fphp", AARCH64_HWCAP_FPHP, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_ASIMDHP, asimdhp, "asimdhp", AARCH64_HWCAP_ASIMDHP, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_CPUID, cpuid, "cpuid", AARCH64_HWCAP_CPUID, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_ASIMDRDM, asimdrdm, "asimdrdm", AARCH64_HWCAP_ASIMDRDM, 0)  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_JSCVT, jscvt, "jscvt", AARCH64_HWCAP_JSCVT, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_FCMA, fcma, "fcma", AARCH64_HWCAP_FCMA, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_LRCPC, lrcpc, "lrcpc", AARCH64_HWCAP_LRCPC, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_DCPOP, dcpop, "dcpop", AARCH64_HWCAP_DCPOP, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SHA3, sha3, "sha3", AARCH64_HWCAP_SHA3, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SM3, sm3, "sm3", AARCH64_HWCAP_SM3, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SM4, sm4, "sm4", AARCH64_HWCAP_SM4, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_ASIMDDP, asimddp, "asimddp", AARCH64_HWCAP_ASIMDDP, 0)      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SHA512, sha512, "sha512", AARCH64_HWCAP_SHA512, 0)          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVE, sve, "sve", AARCH64_HWCAP_SVE, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_ASIMDFHM, asimdfhm, "asimdfhm", AARCH64_HWCAP_ASIMDFHM, 0)  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_DIT, dit, "dit", AARCH64_HWCAP_DIT, 0)                      \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_USCAT, uscat, "uscat", AARCH64_HWCAP_USCAT, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_ILRCPC, ilrcpc, "ilrcpc", AARCH64_HWCAP_ILRCPC, 0)          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_FLAGM, flagm, "flagm", AARCH64_HWCAP_FLAGM, 0)              \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SSBS, ssbs, "ssbs", AARCH64_HWCAP_SSBS, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SB, sb, "sb", AARCH64_HWCAP_SB, 0)                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_PACA, paca, "paca", AARCH64_HWCAP_PACA, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_PACG, pacg, "pacg", AARCH64_HWCAP_PACG, 0)                  \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_DCPODP, dcpodp, "dcpodp", 0, AARCH64_HWCAP2_DCPODP)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVE2, sve2, "sve2", 0, AARCH64_HWCAP2_SVE2)                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVEAES, sveaes, "sveaes", 0, AARCH64_HWCAP2_SVEAES)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVEPMULL, svepmull, "svepmull", 0, AARCH64_HWCAP2_SVEPMULL) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVEBITPERM, svebitperm, "svebitperm", 0,                    \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--       AARCH64_HWCAP2_SVEBITPERM)                                          \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVESHA3, svesha3, "svesha3", 0, AARCH64_HWCAP2_SVESHA3)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVESM4, svesm4, "svesm4", 0, AARCH64_HWCAP2_SVESM4)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_FLAGM2, flagm2, "flagm2", 0, AARCH64_HWCAP2_FLAGM2)         \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_FRINT, frint, "frint", 0, AARCH64_HWCAP2_FRINT)             \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVEI8MM, svei8mm, "svei8mm", 0, AARCH64_HWCAP2_SVEI8MM)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVEF32MM, svef32mm, "svef32mm", 0, AARCH64_HWCAP2_SVEF32MM) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVEF64MM, svef64mm, "svef64mm", 0, AARCH64_HWCAP2_SVEF64MM) \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_SVEBF16, svebf16, "svebf16", 0, AARCH64_HWCAP2_SVEBF16)     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_I8MM, i8mm, "i8mm", 0, AARCH64_HWCAP2_I8MM)                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_BF16, bf16, "bf16", 0, AARCH64_HWCAP2_BF16)                 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_DGH, dgh, "dgh", 0, AARCH64_HWCAP2_DGH)                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_RNG, rng, "rng", 0, AARCH64_HWCAP2_RNG)                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_BTI, bti, "bti", 0, AARCH64_HWCAP2_BTI)                     \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--  LINE(AARCH64_MTE, mte, "mte", 0, AARCH64_HWCAP2_MTE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define INTROSPECTION_PREFIX Aarch64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#define INTROSPECTION_ENUM_PREFIX AARCH64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "define_introspection_and_hwcaps.inl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--////////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--// Implementation.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--////////////////////////////////////////////////////////////////////////////////
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include <stdbool.h>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "internal/bit_utils.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "internal/filesystem.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "internal/stack_line_reader.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--#include "internal/string_view.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "impl_aarch64__base_implementation.inl"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cpu_features/src/cpuinfo_aarch64.c.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cpu_features/src/cpuinfo_aarch64.c
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -22,6 +22,31 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "internal/stack_line_reader.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "internal/string_view.h"
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>- static bool HandleAarch64Line(const LineResult result,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                               Aarch64Info* const info) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/src/impl_aarch64_macos_or_iphone.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,81 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Copyright 2021 Google LLC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Licensed under the Apache License, Version 2.0 (the "License");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// you may not use this file except in compliance with the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// You may obtain a copy of the License at
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//    http://www.apache.org/licenses/LICENSE-2.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+//
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// Unless required by applicable law or agreed to in writing, software
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// distributed under the License is distributed on an "AS IS" BASIS,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// See the License for the specific language governing permissions and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+// limitations under the License.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "cpu_features_macros.h"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#ifdef CPU_FEATURES_ARCH_AARCH64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(CPU_FEATURES_OS_MACOS) || defined(CPU_FEATURES_OS_IPHONE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#include "impl_aarch64__base_implementation.inl"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(CPU_FEATURES_OS_DARWIN)
</span> +#if !defined(HAVE_SYSCTLBYNAME)
 +#error "Darwin needs support for sysctlbyname"
 +#endif
 +#include <sys/sysctl.h>
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(CPU_FEATURES_MOCK_SYSCTL_AARCH64)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(CPU_FEATURES_MOCK_CPUID_ARM64)
</span> +extern bool GetDarwinSysCtlByName(const char*);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern int GetDarwinSysCtlByNameValue(const char* name);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern int GetDarwinSysCtlByNameValue(const char*);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else  // CPU_FEATURES_MOCK_CPUID_ARM64
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++static bool GetDarwinSysCtlByName(const char* name) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  int enabled;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  size_t enabled_len = sizeof(enabled);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  const int failure = sysctlbyname(name, &enabled, &enabled_len, NULL, 0);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return failure ? false : enabled;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span> +static int GetDarwinSysCtlByNameValue(const char* name) {
 +  int enabled;
 +  size_t enabled_len = sizeof(enabled);
 +  const int failure = sysctlbyname(name, &enabled, &enabled_len, NULL, 0);
 +  return failure ? 0 : enabled;
 +}
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static bool GetDarwinSysCtlByName(const char* name) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return GetDarwinSysCtlByNameValue(name) != 0;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span> +#endif
<span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif  // CPU_FEATURES_OS_DARWIN
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // Generation of feature's getters/setters functions and kGetters, kSetters,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ // kCpuInfoFlags and kHardwareCapabilities global tables.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define DEFINE_TABLE_FEATURES                                                 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -79,6 +104,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #define DEFINE_TABLE_FEATURE_TYPE Aarch64Features
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ #include "define_tables.h"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if !defined(CPU_FEATURES_OS_DARWIN)
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+static const Aarch64Info kEmptyAarch64Info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static bool HandleAarch64Line(const LineResult result,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                               Aarch64Info* const info) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   StringView line = result.line;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -116,6 +143,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* !CPU_FEATURES_OS_DARWIN */
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+Aarch64Info GetAarch64Info(void) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  Aarch64Info info = kEmptyAarch64Info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ static const Aarch64Info kEmptyAarch64Info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ Aarch64Info GetAarch64Info(void) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -124,6 +153,24 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   // /proc/cpuinfo).
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   Aarch64Info info = kEmptyAarch64Info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(CPU_FEATURES_OS_DARWIN)
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  // Handling Darwin platform through sysctlbyname.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  // Handling Darwin platform through sysctlbyname
</span> +  info.implementer = GetDarwinSysCtlByNameValue("hw.cputype");
 +  info.variant = GetDarwinSysCtlByNameValue("hw.cpusubtype");
 +  info.part = GetDarwinSysCtlByNameValue("hw.cpufamily");
 +  info.revision = GetDarwinSysCtlByNameValue("hw.cpusubfamily");
 +
 +  info.features.fp = GetDarwinSysCtlByName("hw.optional.floatingpoint");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.asimd = GetDarwinSysCtlByName("hw.optional.AdvSIMD");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.aes = GetDarwinSysCtlByName("hw.optional.arm.FEAT_AES");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.pmull = GetDarwinSysCtlByName("hw.optional.arm.FEAT_PMULL");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.sha1 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SHA1");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.sha2 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SHA2");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.crc32 = GetDarwinSysCtlByName("hw.optional.armv8_crc32");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.atomics = GetDarwinSysCtlByName("hw.optional.armv8_1_atomics");
</span> +  info.features.fphp = GetDarwinSysCtlByName("hw.optional.neon_hpfp");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.jscvt = GetDarwinSysCtlByName("hw.optional.arm.FEAT_JSCVT");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.fcma = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FCMA");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.lrcpc = GetDarwinSysCtlByName("hw.optional.arm.FEAT_LRCPC");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.sha3 = GetDarwinSysCtlByName("hw.optional.armv8_2_sha3");
</span> +  info.features.sha512 = GetDarwinSysCtlByName("hw.optional.armv8_2_sha512");
<span style='display:block; white-space:pre;background:#e0ffe0;'>++  info.features.atomics = GetDarwinSysCtlByName("hw.optional.armv8_1_atomics");
</span> +  info.features.asimdfhm = GetDarwinSysCtlByName("hw.optional.armv8_2_fhm");
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.flagm = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FLAGM");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.flagm2 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_FLAGM2");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.ssbs = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SSBS");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.sb = GetDarwinSysCtlByName("hw.optional.arm.FEAT_SB");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.i8mm = GetDarwinSysCtlByName("hw.optional.arm.FEAT_I8MM");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.bf16 = GetDarwinSysCtlByName("hw.optional.arm.FEAT_BF16");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  info.features.bti = GetDarwinSysCtlByName("hw.optional.arm.FEAT_BTI");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  info.features.sha3 = GetDarwinSysCtlByName("hw.optional.armv8_2_sha3");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  info.features.crc32 = GetDarwinSysCtlByName("hw.optional.armv8_crc32");
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return info;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#else
</span> +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // defined(CPU_FEATURES_OS_MACOS) || defined(CPU_FEATURES_OS_IPHONE)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // CPU_FEATURES_ARCH_AARCH64
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/cpu_features/test/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/test/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -71,7 +71,15 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ##------------------------------------------------------------------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   FillProcCpuInfoData(&info);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   const HardwareCapabilities hwcaps = CpuFeatures_GetHardwareCapabilities();
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   for (size_t i = 0; i < AARCH64_LAST_; ++i) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -132,6 +179,8 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   return info;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cpu_features/test/CMakeLists.txt.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cpu_features/test/CMakeLists.txt
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -66,6 +66,10 @@
</span>  ## cpuinfo_aarch64_test
  if(PROCESSOR_IS_AARCH64)
<span style='display:block; white-space:pre;background:#ffe0e0;'>--  add_executable(cpuinfo_aarch64_test cpuinfo_aarch64_test.cc ../src/impl_aarch64_linux_or_android.c)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  add_executable(cpuinfo_aarch64_test
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    cpuinfo_aarch64_test.cc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ../src/impl_aarch64_linux_or_android.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    ../src/impl_aarch64_macos_or_iphone.c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+   add_executable(cpuinfo_aarch64_test cpuinfo_aarch64_test.cc ../src/cpuinfo_aarch64.c)
</span> +  if(APPLE)
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+    target_compile_definitions(cpuinfo_aarch64_test PUBLIC CPU_FEATURES_MOCK_SYSCTL_AARCH64)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    target_compile_definitions(cpuinfo_aarch64_test PUBLIC CPU_FEATURES_MOCK_CPUID_ARM64)
</span> +    target_compile_definitions(cpuinfo_aarch64_test PRIVATE HAVE_SYSCTLBYNAME)
 +  endif()
    target_link_libraries(cpuinfo_aarch64_test all_libraries)
    add_test(NAME cpuinfo_aarch64_test COMMAND cpuinfo_aarch64_test)
  endif()
<span style='display:block; white-space:pre;background:#ffe0e0;'>---- a/cpu_features/test/cpuinfo_aarch64_test.cc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/cpu_features/test/cpuinfo_aarch64_test.cc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -23,6 +23,125 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- void DisableHardwareCapabilities() { SetHardwareCapabilities(0, 0); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- cpu_features/test/cpuinfo_aarch64_test.cc.orig
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ cpu_features/test/cpuinfo_aarch64_test.cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -21,6 +21,116 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace cpu_features {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ namespace {
</span>  
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#if defined(CPU_FEATURES_OS_MACOS)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if defined(CPU_FEATURES_OS_DARWIN)
</span> +
 +class FakeCpu {
 + public:
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -350,7 +162,8 @@ Based on https://github.com/google/cpu_features/pull/204
</span> +  }
 +
 +  int GetDarwinSysCtlByNameValue(std::string name) const {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+    std::map<std::string, int>::const_iterator iter = darwin_sysctlbynamevalue_.find(name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    std::map<std::string, int>::const_iterator iter =
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        darwin_sysctlbynamevalue_.find(name);
</span> +    if (iter != std::end(darwin_sysctlbynamevalue_)) {
 +      return iter->second;
 +    }
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -365,57 +178,47 @@ Based on https://github.com/google/cpu_features/pull/204
</span> +  void SetDarwinSysCtlByNameValue(std::string name, int value) {
 +    darwin_sysctlbynamevalue_[name] = value;
 +  }
<span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span> + private:
 +  std::set<std::string> darwin_sysctlbyname_;
 +  std::map<std::string, int> darwin_sysctlbynamevalue_;
 +};
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+static FakeCpu* g_fake_cpu_instance = nullptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+static FakeCpu& cpu() {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  assert(g_fake_cpu_instance != nullptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return *g_fake_cpu_instance;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++FakeCpu* g_fake_cpu = nullptr;
</span> +
 +extern "C" bool GetDarwinSysCtlByName(const char* name) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return cpu().GetDarwinSysCtlByName(name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return g_fake_cpu->GetDarwinSysCtlByName(name);
</span> +}
 +
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+extern "C" int GetDarwinSysCtlByNameValue(const char *name) {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  return cpu().GetDarwinSysCtlByNameValue(name);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++extern "C" int GetDarwinSysCtlByNameValue(const char* name) {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  return g_fake_cpu->GetDarwinSysCtlByNameValue(name);
</span> +}
 +
 +class CpuinfoAarch64Test : public ::testing::Test {
 + protected:
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void SetUp() override {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    assert(g_fake_cpu_instance == nullptr);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    g_fake_cpu_instance = new FakeCpu();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  void TearDown() override {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    delete g_fake_cpu_instance;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    g_fake_cpu_instance = nullptr;
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  void SetUp() override { g_fake_cpu = new FakeCpu(); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  void TearDown() override { delete g_fake_cpu; }
</span> +};
 +
 +TEST_F(CpuinfoAarch64Test, FromDarwinSysctlFromName) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.floatingpoint");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.neon");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.neon_hpfp");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.neon_fp16");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.armv8_1_atomics");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.armv8_crc32");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.armv8_2_fhm");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.armv8_2_sha512");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.armv8_2_sha3");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.amx_version");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.ucnormal_mem");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByName("hw.optional.arm64");
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByNameValue("hw.cputype", 16777228);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByNameValue("hw.cpusubtype", 2);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByNameValue("hw.cpu64bit", 1);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByNameValue("hw.cpufamily", 458787763);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+  cpu().SetDarwinSysCtlByNameValue("hw.cpusubfamily", 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.floatingpoint");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.neon");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.neon_hpfp");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.neon_fp16");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.armv8_1_atomics");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.armv8_crc32");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.armv8_2_fhm");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.armv8_2_sha512");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.armv8_2_sha3");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.amx_version");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.ucnormal_mem");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByName("hw.optional.arm64");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByNameValue("hw.cputype", 16777228);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByNameValue("hw.cpusubtype", 2);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByNameValue("hw.cpu64bit", 1);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByNameValue("hw.cpufamily", 458787763);
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++  g_fake_cpu->SetDarwinSysCtlByNameValue("hw.cpusubfamily", 2);
</span> +
 +  const auto info = GetAarch64Info();
 +
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -460,14 +263,14 @@ Based on https://github.com/google/cpu_features/pull/204
</span> +
 +#else
 +
<span style='display:block; white-space:pre;background:#e0ffe0;'>+ void DisableHardwareCapabilities() { SetHardwareCapabilities(0, 0); }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span>  TEST(CpuinfoAarch64Test, FromHardwareCap) {
<span style='display:block; white-space:pre;background:#ffe0e0;'>-   ResetHwcaps();
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-   SetHardwareCapabilities(AARCH64_HWCAP_FP | AARCH64_HWCAP_AES, 0);
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -169,6 +288,7 @@ CPU revision    : 3)");
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -167,5 +277,7 @@
</span>    EXPECT_FALSE(info.features.bti);
<span style='display:block; white-space:pre;background:#ffe0e0;'>-   EXPECT_FALSE(info.features.mte);
</span>  }
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+#endif  // CPU_FEATURES_OS_MACOS
</span>  
<span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span>  }  // namespace
  }  // namespace cpu_features
</pre><pre style='margin:0'>

</pre>