prefetch.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * include/asm-parisc/prefetch.h
  3. *
  4. * PA 2.0 defines data prefetch instructions on page 6-11 of the Kane book.
  5. * In addition, many implementations do hardware prefetching of both
  6. * instructions and data.
  7. *
  8. * PA7300LC (page 14-4 of the ERS) also implements prefetching by a load
  9. * to gr0 but not in a way that Linux can use. If the load would cause an
  10. * interruption (eg due to prefetching 0), it is suppressed on PA2.0
  11. * processors, but not on 7300LC.
  12. *
  13. */
  14. #ifndef __ASM_PARISC_PREFETCH_H
  15. #define __ASM_PARISC_PREFETCH_H
  16. #ifndef __ASSEMBLY__
  17. #ifdef CONFIG_PREFETCH
  18. #define ARCH_HAS_PREFETCH
  19. static inline void prefetch(const void *addr)
  20. {
  21. __asm__(
  22. #ifndef CONFIG_PA20
  23. /* Need to avoid prefetch of NULL on PA7300LC */
  24. " extrw,u,= %0,31,32,%%r0\n"
  25. #endif
  26. " ldw 0(%0), %%r0" : : "r" (addr));
  27. }
  28. /* LDD is a PA2.0 addition. */
  29. #ifdef CONFIG_PA20
  30. #define ARCH_HAS_PREFETCHW
  31. static inline void prefetchw(const void *addr)
  32. {
  33. __asm__("ldd 0(%0), %%r0" : : "r" (addr));
  34. }
  35. #endif /* CONFIG_PA20 */
  36. #endif /* CONFIG_PREFETCH */
  37. #endif /* __ASSEMBLY__ */
  38. #endif /* __ASM_PARISC_PROCESSOR_H */