18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef __ASM_ARM_COMPILER_H 38c2ecf20Sopenharmony_ci#define __ASM_ARM_COMPILER_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci/* 68c2ecf20Sopenharmony_ci * This is used to ensure the compiler did actually allocate the register we 78c2ecf20Sopenharmony_ci * asked it for some inline assembly sequences. Apparently we can't trust 88c2ecf20Sopenharmony_ci * the compiler from one version to another so a bit of paranoia won't hurt. 98c2ecf20Sopenharmony_ci * This string is meant to be concatenated with the inline asm string and 108c2ecf20Sopenharmony_ci * will cause compilation to stop on mismatch. 118c2ecf20Sopenharmony_ci * (for details, see gcc PR 15089) 128c2ecf20Sopenharmony_ci * For compatibility with clang, we have to specifically take the equivalence 138c2ecf20Sopenharmony_ci * of 'r11' <-> 'fp' and 'r12' <-> 'ip' into account as well. 148c2ecf20Sopenharmony_ci */ 158c2ecf20Sopenharmony_ci#define __asmeq(x, y) \ 168c2ecf20Sopenharmony_ci ".ifnc " x "," y "; " \ 178c2ecf20Sopenharmony_ci ".ifnc " x y ",fpr11; " \ 188c2ecf20Sopenharmony_ci ".ifnc " x y ",r11fp; " \ 198c2ecf20Sopenharmony_ci ".ifnc " x y ",ipr12; " \ 208c2ecf20Sopenharmony_ci ".ifnc " x y ",r12ip; " \ 218c2ecf20Sopenharmony_ci ".err; " \ 228c2ecf20Sopenharmony_ci ".endif; " \ 238c2ecf20Sopenharmony_ci ".endif; " \ 248c2ecf20Sopenharmony_ci ".endif; " \ 258c2ecf20Sopenharmony_ci ".endif; " \ 268c2ecf20Sopenharmony_ci ".endif\n\t" 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci#endif /* __ASM_ARM_COMPILER_H */ 30