xref: /aosp_15_r20/external/libvpx/vpx_ports/arm_cpudetect.h (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker /*
2*fb1b10abSAndroid Build Coastguard Worker  *  Copyright (c) 2023 The WebM project authors. All Rights Reserved.
3*fb1b10abSAndroid Build Coastguard Worker  *
4*fb1b10abSAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*fb1b10abSAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*fb1b10abSAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*fb1b10abSAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*fb1b10abSAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*fb1b10abSAndroid Build Coastguard Worker  */
10*fb1b10abSAndroid Build Coastguard Worker 
11*fb1b10abSAndroid Build Coastguard Worker #include <stdlib.h>
12*fb1b10abSAndroid Build Coastguard Worker #include <string.h>
13*fb1b10abSAndroid Build Coastguard Worker 
14*fb1b10abSAndroid Build Coastguard Worker #include "vpx_config.h"
15*fb1b10abSAndroid Build Coastguard Worker #include "vpx_ports/arm.h"
16*fb1b10abSAndroid Build Coastguard Worker 
17*fb1b10abSAndroid Build Coastguard Worker #if defined(_WIN32)
18*fb1b10abSAndroid Build Coastguard Worker #undef WIN32_LEAN_AND_MEAN
19*fb1b10abSAndroid Build Coastguard Worker #define WIN32_LEAN_AND_MEAN
20*fb1b10abSAndroid Build Coastguard Worker #undef WIN32_EXTRA_LEAN
21*fb1b10abSAndroid Build Coastguard Worker #define WIN32_EXTRA_LEAN
22*fb1b10abSAndroid Build Coastguard Worker #include <windows.h>
23*fb1b10abSAndroid Build Coastguard Worker #endif
24*fb1b10abSAndroid Build Coastguard Worker 
25*fb1b10abSAndroid Build Coastguard Worker #ifdef WINAPI_FAMILY
26*fb1b10abSAndroid Build Coastguard Worker #include <winapifamily.h>
27*fb1b10abSAndroid Build Coastguard Worker #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
28*fb1b10abSAndroid Build Coastguard Worker #define getenv(x) NULL
29*fb1b10abSAndroid Build Coastguard Worker #endif
30*fb1b10abSAndroid Build Coastguard Worker #endif
31*fb1b10abSAndroid Build Coastguard Worker 
32*fb1b10abSAndroid Build Coastguard Worker #if defined(__ANDROID__) && (__ANDROID_API__ < 18)
33*fb1b10abSAndroid Build Coastguard Worker #define VPX_USE_ANDROID_CPU_FEATURES 1
34*fb1b10abSAndroid Build Coastguard Worker // Use getauxval() when targeting (64-bit) Android with API level >= 18.
35*fb1b10abSAndroid Build Coastguard Worker // getauxval() is supported since Android API level 18 (Android 4.3.)
36*fb1b10abSAndroid Build Coastguard Worker // First Android version with 64-bit support was Android 5.x (API level 21).
37*fb1b10abSAndroid Build Coastguard Worker #include <cpu-features.h>
38*fb1b10abSAndroid Build Coastguard Worker #endif
39*fb1b10abSAndroid Build Coastguard Worker 
arm_cpu_env_flags(int * flags)40*fb1b10abSAndroid Build Coastguard Worker static INLINE int arm_cpu_env_flags(int *flags) {
41*fb1b10abSAndroid Build Coastguard Worker   const char *env = getenv("VPX_SIMD_CAPS");
42*fb1b10abSAndroid Build Coastguard Worker   if (env && *env) {
43*fb1b10abSAndroid Build Coastguard Worker     *flags = (int)strtol(env, NULL, 0);
44*fb1b10abSAndroid Build Coastguard Worker     return 1;
45*fb1b10abSAndroid Build Coastguard Worker   }
46*fb1b10abSAndroid Build Coastguard Worker   return 0;
47*fb1b10abSAndroid Build Coastguard Worker }
48*fb1b10abSAndroid Build Coastguard Worker 
arm_cpu_env_mask(void)49*fb1b10abSAndroid Build Coastguard Worker static INLINE int arm_cpu_env_mask(void) {
50*fb1b10abSAndroid Build Coastguard Worker   const char *env = getenv("VPX_SIMD_CAPS_MASK");
51*fb1b10abSAndroid Build Coastguard Worker   return env && *env ? (int)strtol(env, NULL, 0) : ~0;
52*fb1b10abSAndroid Build Coastguard Worker }
53