Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: src/core/SkUtilsArm.h

Issue 1892643003: Revert of Move CPU feature detection to its own file. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/core/SkOpts.cpp ('k') | src/core/SkUtilsArm.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkUtilsArm_DEFINED 8 #ifndef SkUtilsArm_DEFINED
9 #define SkUtilsArm_DEFINED 9 #define SkUtilsArm_DEFINED
10 10
11 #include "SkCpu.h"
12 #include "SkUtils.h" 11 #include "SkUtils.h"
13 12
14 // Define SK_ARM_NEON_MODE to one of the following values 13 // Define SK_ARM_NEON_MODE to one of the following values
15 // corresponding respectively to: 14 // corresponding respectively to:
16 // - No ARM Neon support at all (not targetting ARMv7-A, or don't have NEON) 15 // - No ARM Neon support at all (not targetting ARMv7-A, or don't have NEON)
17 // - Full ARM Neon support (i.e. assume the CPU always supports it) 16 // - Full ARM Neon support (i.e. assume the CPU always supports it)
18 // - Optional ARM Neon support (i.e. probe CPU at runtime) 17 // - Optional ARM Neon support (i.e. probe CPU at runtime)
19 // 18 //
20 #define SK_ARM_NEON_MODE_NONE 0 19 #define SK_ARM_NEON_MODE_NONE 0
21 #define SK_ARM_NEON_MODE_ALWAYS 1 20 #define SK_ARM_NEON_MODE_ALWAYS 1
22 #define SK_ARM_NEON_MODE_DYNAMIC 2 21 #define SK_ARM_NEON_MODE_DYNAMIC 2
23 22
24 #if defined(SK_ARM_HAS_OPTIONAL_NEON) 23 #if defined(SK_ARM_HAS_OPTIONAL_NEON)
25 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_DYNAMIC 24 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_DYNAMIC
26 #elif defined(SK_ARM_HAS_NEON) 25 #elif defined(SK_ARM_HAS_NEON)
27 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_ALWAYS 26 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_ALWAYS
28 #else 27 #else
29 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_NONE 28 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_NONE
30 #endif 29 #endif
31 30
32 // Convenience test macros, always defined as 0 or 1 31 // Convenience test macros, always defined as 0 or 1
33 #define SK_ARM_NEON_IS_NONE (SK_ARM_NEON_MODE == SK_ARM_NEON_MODE_NONE) 32 #define SK_ARM_NEON_IS_NONE (SK_ARM_NEON_MODE == SK_ARM_NEON_MODE_NONE)
34 #define SK_ARM_NEON_IS_ALWAYS (SK_ARM_NEON_MODE == SK_ARM_NEON_MODE_ALWAYS) 33 #define SK_ARM_NEON_IS_ALWAYS (SK_ARM_NEON_MODE == SK_ARM_NEON_MODE_ALWAYS)
35 #define SK_ARM_NEON_IS_DYNAMIC (SK_ARM_NEON_MODE == SK_ARM_NEON_MODE_DYNAMIC) 34 #define SK_ARM_NEON_IS_DYNAMIC (SK_ARM_NEON_MODE == SK_ARM_NEON_MODE_DYNAMIC)
36 35
37 // The sk_cpu_arm_has_neon() function returns true iff the target device 36 // The sk_cpu_arm_has_neon() function returns true iff the target device
38 // is ARMv7-A and supports Neon instructions. In DYNAMIC mode, this actually 37 // is ARMv7-A and supports Neon instructions. In DYNAMIC mode, this actually
39 // probes the CPU at runtime (and caches the result). 38 // probes the CPU at runtime (and caches the result).
40 39
40 #if SK_ARM_NEON_IS_NONE
41 static inline bool sk_cpu_arm_has_neon(void) { 41 static inline bool sk_cpu_arm_has_neon(void) {
42 #if SK_ARM_NEON_IS_NONE
43 return false; 42 return false;
44 #else 43 }
45 return SkCpu::Supports(SkCpu::NEON); 44 #elif SK_ARM_NEON_IS_ALWAYS
45 static inline bool sk_cpu_arm_has_neon(void) {
46 return true;
47 }
48 #else // SK_ARM_NEON_IS_DYNAMIC
49
50 extern bool sk_cpu_arm_has_neon(void) SK_PURE_FUNC;
46 #endif 51 #endif
47 }
48 52
49 // Use SK_ARM_NEON_WRAP(symbol) to map 'symbol' to a NEON-specific symbol 53 // Use SK_ARM_NEON_WRAP(symbol) to map 'symbol' to a NEON-specific symbol
50 // when applicable. This will transform 'symbol' differently depending on 54 // when applicable. This will transform 'symbol' differently depending on
51 // the current NEON configuration, i.e.: 55 // the current NEON configuration, i.e.:
52 // 56 //
53 // NONE -> 'symbol' 57 // NONE -> 'symbol'
54 // ALWAYS -> 'symbol_neon' 58 // ALWAYS -> 'symbol_neon'
55 // DYNAMIC -> 'symbol' or 'symbol_neon' depending on runtime check. 59 // DYNAMIC -> 'symbol' or 'symbol_neon' depending on runtime check.
56 // 60 //
57 // The goal is to simplify user code, for example: 61 // The goal is to simplify user code, for example:
(...skipping 15 matching lines...) Expand all
73 // 77 //
74 #if SK_ARM_NEON_IS_NONE 78 #if SK_ARM_NEON_IS_NONE
75 # define SK_ARM_NEON_WRAP(x) (x) 79 # define SK_ARM_NEON_WRAP(x) (x)
76 #elif SK_ARM_NEON_IS_ALWAYS 80 #elif SK_ARM_NEON_IS_ALWAYS
77 # define SK_ARM_NEON_WRAP(x) (x ## _neon) 81 # define SK_ARM_NEON_WRAP(x) (x ## _neon)
78 #elif SK_ARM_NEON_IS_DYNAMIC 82 #elif SK_ARM_NEON_IS_DYNAMIC
79 # define SK_ARM_NEON_WRAP(x) (sk_cpu_arm_has_neon() ? x ## _neon : x) 83 # define SK_ARM_NEON_WRAP(x) (sk_cpu_arm_has_neon() ? x ## _neon : x)
80 #endif 84 #endif
81 85
82 #endif // SkUtilsArm_DEFINED 86 #endif // SkUtilsArm_DEFINED
OLDNEW
« no previous file with comments | « src/core/SkOpts.cpp ('k') | src/core/SkUtilsArm.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698