Home | History | Annotate | Download | only in opts
      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
     35