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

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

Issue 1952953004: Remove NEON runtime detection support. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: (x) Created 4 years, 7 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/opts/SkOpts_neon.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" 11 #include "SkTypes.h"
12 #include "SkUtils.h"
13 12
14 // Define SK_ARM_NEON_MODE to one of the following values 13 #if defined(SK_ARM_HAS_NEON)
15 // corresponding respectively to: 14 #define SK_ARM_NEON_WRAP(x) (x ## _neon)
16 // - 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)
18 // - Optional ARM Neon support (i.e. probe CPU at runtime)
19 //
20 #define SK_ARM_NEON_MODE_NONE 0
21 #define SK_ARM_NEON_MODE_ALWAYS 1
22 #define SK_ARM_NEON_MODE_DYNAMIC 2
23
24 #if defined(SK_ARM_HAS_OPTIONAL_NEON)
25 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_DYNAMIC
26 #elif defined(SK_ARM_HAS_NEON)
27 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_ALWAYS
28 #else 15 #else
29 # define SK_ARM_NEON_MODE SK_ARM_NEON_MODE_NONE 16 #define SK_ARM_NEON_WRAP(x) (x)
djsollen 2016/05/05 17:55:08 can we remove this wrapper now as well?
mtklein_C 2016/05/05 17:57:33 There are still a few files where this chooses bet
30 #endif
31
32 // 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)
34 #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)
36
37 // 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
39 // probes the CPU at runtime (and caches the result).
40
41 static inline bool sk_cpu_arm_has_neon(void) {
42 #if SK_ARM_NEON_IS_NONE
43 return false;
44 #else
45 return SkCpu::Supports(SkCpu::NEON);
46 #endif
47 }
48
49 // Use SK_ARM_NEON_WRAP(symbol) to map 'symbol' to a NEON-specific symbol
50 // when applicable. This will transform 'symbol' differently depending on
51 // the current NEON configuration, i.e.:
52 //
53 // NONE -> 'symbol'
54 // ALWAYS -> 'symbol_neon'
55 // DYNAMIC -> 'symbol' or 'symbol_neon' depending on runtime check.
56 //
57 // The goal is to simplify user code, for example:
58 //
59 // return SK_ARM_NEON_WRAP(do_something)(params);
60 //
61 // Replaces the equivalent:
62 //
63 // #if SK_ARM_NEON_IS_NONE
64 // return do_something(params);
65 // #elif SK_ARM_NEON_IS_ALWAYS
66 // return do_something_neon(params);
67 // #elif SK_ARM_NEON_IS_DYNAMIC
68 // if (sk_cpu_arm_has_neon())
69 // return do_something_neon(params);
70 // else
71 // return do_something(params);
72 // #endif
73 //
74 #if SK_ARM_NEON_IS_NONE
75 # define SK_ARM_NEON_WRAP(x) (x)
76 #elif SK_ARM_NEON_IS_ALWAYS
77 # define SK_ARM_NEON_WRAP(x) (x ## _neon)
78 #elif SK_ARM_NEON_IS_DYNAMIC
79 # define SK_ARM_NEON_WRAP(x) (sk_cpu_arm_has_neon() ? x ## _neon : x)
80 #endif 17 #endif
81 18
82 #endif // SkUtilsArm_DEFINED 19 #endif // SkUtilsArm_DEFINED
OLDNEW
« no previous file with comments | « src/core/SkOpts.cpp ('k') | src/opts/SkOpts_neon.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698