| 1 |
|
| 2 | #ifndef __ASM_ARM_COMPILER_H
|
| 3 | #define __ASM_ARM_COMPILER_H
|
| 4 |
|
| 5 | |
| 6 | * This is used to ensure the compiler did actually allocate the register we
|
| 7 | * asked it for some inline assembly sequences. Apparently we can't trust
|
| 8 | * the compiler from one version to another so a bit of paranoia won't hurt.
|
| 9 | * This string is meant to be concatenated with the inline asm string and
|
| 10 | * will cause compilation to stop on mismatch.
|
| 11 | * (for details, see gcc PR 15089)
|
| 12 | * For compatibility with clang, we have to specifically take the equivalence
|
| 13 | * of 'r11' <-> 'fp' and 'r12' <-> 'ip' into account as well.
|
| 14 |
|
| 15 | #define __asmeq(x, y) \
|
| 16 | ".ifnc " x "," y "; " \
|
| 17 | ".ifnc " x y ",fpr11; " \
|
| 18 | ".ifnc " x y ",r11fp; " \
|
| 19 | ".ifnc " x y ",ipr12; " \
|
| 20 | ".ifnc " x y ",r12ip; " \
|
| 21 | ".err; " \
|
| 22 | ".endif; " \
|
| 23 | ".endif; " \
|
| 24 | ".endif; " \
|
| 25 | ".endif; " \
|
| 26 | ".endif\n\t"
|
| 27 |
|
| 28 |
|
| 29 | #endif
|