/*
* Copyright 2012 The Android Open Source Project
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkCachePreload_arm_DEFINED
#define SkCachePreload_arm_DEFINED
// This file defines macros for preload instructions for ARM. These macros
// are designed to be embedded inside GNU inline assembly.
// For the use of these macros, __ARM_USE_PLD needs to be enabled. The cache
// line size also needs to be known (and needs to be contained inside
// __ARM_CACHE_LINE_SIZE).
#if defined(__ARM_USE_PLD)
#define PLD(x, n) "pld [%["#x"], #("#n")]\n\t"
#if __ARM_CACHE_LINE_SIZE == 32
#define PLD64(x, n) PLD(x, n) PLD(x, (n) + 32)
#elif __ARM_CACHE_LINE_SIZE == 64
#define PLD64(x, n) PLD(x, n)
#else
#error "unknown __ARM_CACHE_LINE_SIZE."
#endif
#else
// PLD is disabled, all macros become empty.
#define PLD(x, n)
#define PLD64(x, n)
#endif
#define PLD128(x, n) PLD64(x, n) PLD64(x, (n) + 64)
#endif // SkCachePreload_arm_DEFINED