Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef __ASM_ARM_COMPILER_H
0003 #define __ASM_ARM_COMPILER_H
0004 
0005 /*
0006  * This is used to ensure the compiler did actually allocate the register we
0007  * asked it for some inline assembly sequences.  Apparently we can't trust
0008  * the compiler from one version to another so a bit of paranoia won't hurt.
0009  * This string is meant to be concatenated with the inline asm string and
0010  * will cause compilation to stop on mismatch.
0011  * (for details, see gcc PR 15089)
0012  * For compatibility with clang, we have to specifically take the equivalence
0013  * of 'r11' <-> 'fp' and 'r12' <-> 'ip' into account as well.
0014  */
0015 #define __asmeq(x, y)               \
0016     ".ifnc " x "," y "; "           \
0017       ".ifnc " x y ",fpr11; "       \
0018         ".ifnc " x y ",r11fp; "     \
0019           ".ifnc " x y ",ipr12; "       \
0020             ".ifnc " x y ",r12ip; "     \
0021               ".err; "          \
0022             ".endif; "          \
0023           ".endif; "            \
0024         ".endif; "              \
0025       ".endif; "                \
0026     ".endif\n\t"
0027 
0028 
0029 #endif /* __ASM_ARM_COMPILER_H */