|
1 /* |
|
2 * Copyright 2012 The Android Open Source Project |
|
3 * |
|
4 * Use of this source code is governed by a BSD-style license that can be |
|
5 * found in the LICENSE file. |
|
6 */ |
|
7 #ifndef SkCachePreload_arm_DEFINED |
|
8 #define SkCachePreload_arm_DEFINED |
|
9 |
|
10 // This file defines macros for preload instructions for ARM. These macros |
|
11 // are designed to be embedded inside GNU inline assembly. |
|
12 // For the use of these macros, __ARM_USE_PLD needs to be enabled. The cache |
|
13 // line size also needs to be known (and needs to be contained inside |
|
14 // __ARM_CACHE_LINE_SIZE). |
|
15 #if defined(__ARM_USE_PLD) |
|
16 |
|
17 #define PLD(x, n) "pld [%["#x"], #("#n")]\n\t" |
|
18 |
|
19 #if __ARM_CACHE_LINE_SIZE == 32 |
|
20 #define PLD64(x, n) PLD(x, n) PLD(x, (n) + 32) |
|
21 #elif __ARM_CACHE_LINE_SIZE == 64 |
|
22 #define PLD64(x, n) PLD(x, n) |
|
23 #else |
|
24 #error "unknown __ARM_CACHE_LINE_SIZE." |
|
25 #endif |
|
26 #else |
|
27 // PLD is disabled, all macros become empty. |
|
28 #define PLD(x, n) |
|
29 #define PLD64(x, n) |
|
30 #endif |
|
31 |
|
32 #define PLD128(x, n) PLD64(x, n) PLD64(x, (n) + 64) |
|
33 |
|
34 #endif // SkCachePreload_arm_DEFINED |