<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/415d0cc2bc47ea704dfb678fb1fa9475f1d3ad73">https://github.com/macports/macports-ports/commit/415d0cc2bc47ea704dfb678fb1fa9475f1d3ad73</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 415d0cc2bc4 volk: fix 2.5.1 build
</span>415d0cc2bc4 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 415d0cc2bc47ea704dfb678fb1fa9475f1d3ad73
</span>Author: Michael Dickens <michaelld@macports.org>
AuthorDate: Thu Jun 23 14:41:34 2022 -0500

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

</pre>