blob: cff8c2a9b7931bb6de20ece12ada70d23e5360ec [file] [log] [blame]
borenet@google.com84d67152012-07-26 14:20:13 +00001/*
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