forked from len0rd/rockbox
Add some CACHEALIGN_* macros and a helper function to assist in aligning data and buffers on PortalPlayer processors to cache line boundaries. They're noops when PROC_NEED_CACHEALIGN isn't defined. Go safe and increase the value to 32 since I'm not sure yet if 16 is sufficient - changing that is a one-liner. Add helper to plugin API which will be needed shortly.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15523 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
194a66ef83
commit
57d71e4267
8 changed files with 87 additions and 5 deletions
|
@ -229,4 +229,36 @@ static inline uint32_t swap_odd_even32(uint32_t value)
|
|||
#define flush_icache()
|
||||
#endif
|
||||
|
||||
#ifdef PROC_NEEDS_CACHEALIGN
|
||||
/* Cache alignment attributes and sizes are enabled */
|
||||
|
||||
/* 2^CACHEALIGN_BITS = the byte size */
|
||||
#define CACHEALIGN_SIZE (1u << CACHEALIGN_BITS)
|
||||
|
||||
#define CACHEALIGN_ATTR __attribute__((aligned(CACHEALIGN_SIZE)))
|
||||
/* Aligns x up to a CACHEALIGN_SIZE boundary */
|
||||
#define CACHEALIGN_UP(x) \
|
||||
((typeof (x))ALIGN_UP_P2((uintptr_t)(x), CACHEALIGN_BITS))
|
||||
/* Aligns x down to a CACHEALIGN_SIZE boundary */
|
||||
#define CACHEALIGN_DOWN(x) \
|
||||
((typeof (x))ALIGN_DOWN_P2((uintptr_t)(x), CACHEALIGN_BITS))
|
||||
/* Aligns at least to the greater of size x or CACHEALIGN_SIZE */
|
||||
#define CACHEALIGN_AT_LEAST_ATTR(x) __attribute__((aligned(CACHEALIGN_UP(x))))
|
||||
/* Aligns a buffer pointer and size to proper boundaries */
|
||||
#define CACHEALIGN_BUFFER(start, size) \
|
||||
({ align_buffer((start), (size), CACHEALIGN_SIZE); })
|
||||
|
||||
#else /* ndef PROC_NEEDS_CACHEALIGN */
|
||||
|
||||
/* Cache alignment attributes and sizes are not enabled */
|
||||
#define CACHEALIGN_ATTR
|
||||
#define CACHEALIGN_AT_LEAST_ATTR(x) __attribute__((aligned(x)))
|
||||
#define CACHEALIGN_UP(x) (x)
|
||||
#define CACHEALIGN_DOWN(x) (x)
|
||||
/* Make no adjustments */
|
||||
#define CACHEALIGN_BUFFER(start, size) \
|
||||
({ (void)(start); (size); })
|
||||
|
||||
#endif /* PROC_NEEDS_CACHEALIGN */
|
||||
|
||||
#endif /* __SYSTEM_H__ */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue