xref: /rk3399_ARM-atf/lib/compiler-rt/builtins/assembly.h (revision 50313d071261dacc923b18c996369326101a3e8a)
18a6a9560SDaniel Boulby //===-- assembly.h - compiler-rt assembler support macros -----------------===//
28a6a9560SDaniel Boulby //
38a6a9560SDaniel Boulby // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
48a6a9560SDaniel Boulby // See https://llvm.org/LICENSE.txt for license information.
58a6a9560SDaniel Boulby // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
68a6a9560SDaniel Boulby //
78a6a9560SDaniel Boulby //===----------------------------------------------------------------------===//
88a6a9560SDaniel Boulby //
98a6a9560SDaniel Boulby // This file defines macros for use in compiler-rt assembler source.
108a6a9560SDaniel Boulby // This file is not part of the interface of this library.
118a6a9560SDaniel Boulby //
128a6a9560SDaniel Boulby //===----------------------------------------------------------------------===//
130e14a7fbSdp-arm 
140e14a7fbSdp-arm #ifndef COMPILERRT_ASSEMBLY_H
150e14a7fbSdp-arm #define COMPILERRT_ASSEMBLY_H
160e14a7fbSdp-arm 
178a6a9560SDaniel Boulby #if defined(__linux__) && defined(__CET__)
188a6a9560SDaniel Boulby #if __has_include(<cet.h>)
198a6a9560SDaniel Boulby #include <cet.h>
208a6a9560SDaniel Boulby #endif
218a6a9560SDaniel Boulby #endif
228a6a9560SDaniel Boulby 
238a6a9560SDaniel Boulby #if defined(__APPLE__) && defined(__aarch64__)
248a6a9560SDaniel Boulby #define SEPARATOR %%
250e14a7fbSdp-arm #else
260e14a7fbSdp-arm #define SEPARATOR ;
270e14a7fbSdp-arm #endif
280e14a7fbSdp-arm 
290e14a7fbSdp-arm #if defined(__APPLE__)
300e14a7fbSdp-arm #define HIDDEN(name) .private_extern name
310e14a7fbSdp-arm #define LOCAL_LABEL(name) L_##name
320e14a7fbSdp-arm // tell linker it can break up file at label boundaries
330e14a7fbSdp-arm #define FILE_LEVEL_DIRECTIVE .subsections_via_symbols
340e14a7fbSdp-arm #define SYMBOL_IS_FUNC(name)
350e14a7fbSdp-arm #define CONST_SECTION .const
360e14a7fbSdp-arm 
370e14a7fbSdp-arm #define NO_EXEC_STACK_DIRECTIVE
380e14a7fbSdp-arm 
390e14a7fbSdp-arm #elif defined(__ELF__)
400e14a7fbSdp-arm 
410e14a7fbSdp-arm #define HIDDEN(name) .hidden name
420e14a7fbSdp-arm #define LOCAL_LABEL(name) .L_##name
430e14a7fbSdp-arm #define FILE_LEVEL_DIRECTIVE
448a6a9560SDaniel Boulby #if defined(__arm__) || defined(__aarch64__)
450e14a7fbSdp-arm #define SYMBOL_IS_FUNC(name) .type name,%function
460e14a7fbSdp-arm #else
470e14a7fbSdp-arm #define SYMBOL_IS_FUNC(name) .type name,@function
480e14a7fbSdp-arm #endif
490e14a7fbSdp-arm #define CONST_SECTION .section .rodata
500e14a7fbSdp-arm 
518a6a9560SDaniel Boulby #if defined(__GNU__) || defined(__FreeBSD__) || defined(__Fuchsia__) ||        \
528a6a9560SDaniel Boulby     defined(__linux__)
530e14a7fbSdp-arm #define NO_EXEC_STACK_DIRECTIVE .section .note.GNU-stack,"",%progbits
540e14a7fbSdp-arm #else
550e14a7fbSdp-arm #define NO_EXEC_STACK_DIRECTIVE
560e14a7fbSdp-arm #endif
570e14a7fbSdp-arm 
580e14a7fbSdp-arm #else // !__APPLE__ && !__ELF__
590e14a7fbSdp-arm 
600e14a7fbSdp-arm #define HIDDEN(name)
610e14a7fbSdp-arm #define LOCAL_LABEL(name) .L ## name
620e14a7fbSdp-arm #define FILE_LEVEL_DIRECTIVE
630e14a7fbSdp-arm #define SYMBOL_IS_FUNC(name)                                                   \
64*3b50591bSChris Kay   .def FUNC_SYMBOL(name) SEPARATOR                                             \
650e14a7fbSdp-arm     .scl 2 SEPARATOR                                                           \
660e14a7fbSdp-arm     .type 32 SEPARATOR                                                         \
670e14a7fbSdp-arm   .endef
680e14a7fbSdp-arm #define CONST_SECTION .section .rdata,"rd"
690e14a7fbSdp-arm 
700e14a7fbSdp-arm #define NO_EXEC_STACK_DIRECTIVE
710e14a7fbSdp-arm 
720e14a7fbSdp-arm #endif
730e14a7fbSdp-arm 
74*3b50591bSChris Kay #if defined(__arm__) || defined(__aarch64__) || defined(__arm64ec__)
758a6a9560SDaniel Boulby #define FUNC_ALIGN                                                             \
768a6a9560SDaniel Boulby   .text SEPARATOR                                                              \
778a6a9560SDaniel Boulby   .balign 16 SEPARATOR
788a6a9560SDaniel Boulby #else
798a6a9560SDaniel Boulby #define FUNC_ALIGN
808a6a9560SDaniel Boulby #endif
818a6a9560SDaniel Boulby 
82*3b50591bSChris Kay // BTI, PAC, and GCS gnu property note
838a6a9560SDaniel Boulby #define NT_GNU_PROPERTY_TYPE_0 5
848a6a9560SDaniel Boulby #define GNU_PROPERTY_AARCH64_FEATURE_1_AND 0xc0000000
858a6a9560SDaniel Boulby #define GNU_PROPERTY_AARCH64_FEATURE_1_BTI 1
868a6a9560SDaniel Boulby #define GNU_PROPERTY_AARCH64_FEATURE_1_PAC 2
87*3b50591bSChris Kay #define GNU_PROPERTY_AARCH64_FEATURE_1_GCS 4
888a6a9560SDaniel Boulby 
898a6a9560SDaniel Boulby #if defined(__ARM_FEATURE_BTI_DEFAULT)
908a6a9560SDaniel Boulby #define BTI_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_BTI
918a6a9560SDaniel Boulby #else
928a6a9560SDaniel Boulby #define BTI_FLAG 0
938a6a9560SDaniel Boulby #endif
948a6a9560SDaniel Boulby 
958a6a9560SDaniel Boulby #if __ARM_FEATURE_PAC_DEFAULT & 3
968a6a9560SDaniel Boulby #define PAC_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_PAC
978a6a9560SDaniel Boulby #else
988a6a9560SDaniel Boulby #define PAC_FLAG 0
998a6a9560SDaniel Boulby #endif
1008a6a9560SDaniel Boulby 
101*3b50591bSChris Kay #if defined(__ARM_FEATURE_GCS_DEFAULT)
102*3b50591bSChris Kay #define GCS_FLAG GNU_PROPERTY_AARCH64_FEATURE_1_GCS
103*3b50591bSChris Kay #else
104*3b50591bSChris Kay #define GCS_FLAG 0
105*3b50591bSChris Kay #endif
106*3b50591bSChris Kay 
1078a6a9560SDaniel Boulby #define GNU_PROPERTY(type, value)                                              \
1088a6a9560SDaniel Boulby   .pushsection .note.gnu.property, "a" SEPARATOR                               \
1098a6a9560SDaniel Boulby   .p2align 3 SEPARATOR                                                         \
1108a6a9560SDaniel Boulby   .word 4 SEPARATOR                                                            \
1118a6a9560SDaniel Boulby   .word 16 SEPARATOR                                                           \
1128a6a9560SDaniel Boulby   .word NT_GNU_PROPERTY_TYPE_0 SEPARATOR                                       \
1138a6a9560SDaniel Boulby   .asciz "GNU" SEPARATOR                                                       \
1148a6a9560SDaniel Boulby   .word type SEPARATOR                                                         \
1158a6a9560SDaniel Boulby   .word 4 SEPARATOR                                                            \
1168a6a9560SDaniel Boulby   .word value SEPARATOR                                                        \
1178a6a9560SDaniel Boulby   .word 0 SEPARATOR                                                            \
1188a6a9560SDaniel Boulby   .popsection
1198a6a9560SDaniel Boulby 
1208a6a9560SDaniel Boulby #if BTI_FLAG != 0
1218a6a9560SDaniel Boulby #define BTI_C hint #34
1228a6a9560SDaniel Boulby #define BTI_J hint #36
1238a6a9560SDaniel Boulby #else
1248a6a9560SDaniel Boulby #define BTI_C
1258a6a9560SDaniel Boulby #define BTI_J
1268a6a9560SDaniel Boulby #endif
1278a6a9560SDaniel Boulby 
128*3b50591bSChris Kay #if (BTI_FLAG | PAC_FLAG | GCS_FLAG) != 0
129*3b50591bSChris Kay #define GNU_PROPERTY_BTI_PAC_GCS                                               \
130*3b50591bSChris Kay   GNU_PROPERTY(GNU_PROPERTY_AARCH64_FEATURE_1_AND,                             \
131*3b50591bSChris Kay                BTI_FLAG | PAC_FLAG | GCS_FLAG)
1328a6a9560SDaniel Boulby #else
133*3b50591bSChris Kay #define GNU_PROPERTY_BTI_PAC_GCS
1348a6a9560SDaniel Boulby #endif
1358a6a9560SDaniel Boulby 
1368a6a9560SDaniel Boulby #if defined(__clang__) || defined(__GCC_HAVE_DWARF2_CFI_ASM)
1378a6a9560SDaniel Boulby #define CFI_START .cfi_startproc
1388a6a9560SDaniel Boulby #define CFI_END .cfi_endproc
1398a6a9560SDaniel Boulby #else
1408a6a9560SDaniel Boulby #define CFI_START
1418a6a9560SDaniel Boulby #define CFI_END
1428a6a9560SDaniel Boulby #endif
1438a6a9560SDaniel Boulby 
1440e14a7fbSdp-arm #if defined(__arm__)
1458a6a9560SDaniel Boulby 
1468a6a9560SDaniel Boulby // Determine actual [ARM][THUMB[1][2]] ISA using compiler predefined macros:
1478a6a9560SDaniel Boulby // - for '-mthumb -march=armv6' compiler defines '__thumb__'
1488a6a9560SDaniel Boulby // - for '-mthumb -march=armv7' compiler defines '__thumb__' and '__thumb2__'
1498a6a9560SDaniel Boulby #if defined(__thumb2__) || defined(__thumb__)
1508a6a9560SDaniel Boulby #define DEFINE_CODE_STATE .thumb SEPARATOR
1518a6a9560SDaniel Boulby #define DECLARE_FUNC_ENCODING    .thumb_func SEPARATOR
1528a6a9560SDaniel Boulby #if defined(__thumb2__)
1538a6a9560SDaniel Boulby #define USE_THUMB_2
1548a6a9560SDaniel Boulby #define IT(cond)  it cond
1558a6a9560SDaniel Boulby #define ITT(cond) itt cond
1568a6a9560SDaniel Boulby #define ITE(cond) ite cond
1578a6a9560SDaniel Boulby #else
1588a6a9560SDaniel Boulby #define USE_THUMB_1
1598a6a9560SDaniel Boulby #define IT(cond)
1608a6a9560SDaniel Boulby #define ITT(cond)
1618a6a9560SDaniel Boulby #define ITE(cond)
1628a6a9560SDaniel Boulby #endif // defined(__thumb__2)
1638a6a9560SDaniel Boulby #else // !defined(__thumb2__) && !defined(__thumb__)
1648a6a9560SDaniel Boulby #define DEFINE_CODE_STATE .arm SEPARATOR
1658a6a9560SDaniel Boulby #define DECLARE_FUNC_ENCODING
1668a6a9560SDaniel Boulby #define IT(cond)
1678a6a9560SDaniel Boulby #define ITT(cond)
1688a6a9560SDaniel Boulby #define ITE(cond)
1698a6a9560SDaniel Boulby #endif
1708a6a9560SDaniel Boulby 
1718a6a9560SDaniel Boulby #if defined(USE_THUMB_1) && defined(USE_THUMB_2)
1728a6a9560SDaniel Boulby #error "USE_THUMB_1 and USE_THUMB_2 can't be defined together."
1738a6a9560SDaniel Boulby #endif
1748a6a9560SDaniel Boulby 
1750e14a7fbSdp-arm #if defined(__ARM_ARCH_4T__) || __ARM_ARCH >= 5
1760e14a7fbSdp-arm #define ARM_HAS_BX
1770e14a7fbSdp-arm #endif
1788a6a9560SDaniel Boulby #if !defined(__ARM_FEATURE_CLZ) && !defined(USE_THUMB_1) &&  \
1790e14a7fbSdp-arm     (__ARM_ARCH >= 6 || (__ARM_ARCH == 5 && !defined(__ARM_ARCH_5__)))
1800e14a7fbSdp-arm #define __ARM_FEATURE_CLZ
1810e14a7fbSdp-arm #endif
1820e14a7fbSdp-arm 
1830e14a7fbSdp-arm #ifdef ARM_HAS_BX
1840e14a7fbSdp-arm #define JMP(r) bx r
1850e14a7fbSdp-arm #define JMPc(r, c) bx##c r
1860e14a7fbSdp-arm #else
1870e14a7fbSdp-arm #define JMP(r) mov pc, r
1880e14a7fbSdp-arm #define JMPc(r, c) mov##c pc, r
1890e14a7fbSdp-arm #endif
1900e14a7fbSdp-arm 
1910e14a7fbSdp-arm // pop {pc} can't switch Thumb mode on ARMv4T
1920e14a7fbSdp-arm #if __ARM_ARCH >= 5
1930e14a7fbSdp-arm #define POP_PC() pop {pc}
1940e14a7fbSdp-arm #else
1950e14a7fbSdp-arm #define POP_PC()                                                               \
1960e14a7fbSdp-arm   pop {ip};                                                                    \
1970e14a7fbSdp-arm   JMP(ip)
1980e14a7fbSdp-arm #endif
1990e14a7fbSdp-arm 
2008a6a9560SDaniel Boulby #if defined(USE_THUMB_2)
2010e14a7fbSdp-arm #define WIDE(op) op.w
2020e14a7fbSdp-arm #else
2030e14a7fbSdp-arm #define WIDE(op) op
2040e14a7fbSdp-arm #endif
205*3b50591bSChris Kay 
206*3b50591bSChris Kay #if defined(__ARM_FEATURE_PAC_DEFAULT) && defined(__ARM_FEATURE_BTI_DEFAULT)
207*3b50591bSChris Kay #define PACBTI_LANDING pacbti r12, lr, sp
208*3b50591bSChris Kay #elif defined(__ARM_FEATURE_PAC_DEFAULT)
209*3b50591bSChris Kay #define PACBTI_LANDING pac r12, lr, sp
210*3b50591bSChris Kay #elif defined(__ARM_FEATURE_BTI_DEFAULT)
211*3b50591bSChris Kay #define PACBTI_LANDING bti
212*3b50591bSChris Kay #else
213*3b50591bSChris Kay #define PACBTI_LANDING
214*3b50591bSChris Kay #endif
215*3b50591bSChris Kay 
216*3b50591bSChris Kay #if defined(__ARM_FEATURE_PAUTH)
217*3b50591bSChris Kay #define PAC_RETURN bxaut r12, lr, sp
218*3b50591bSChris Kay #else
219*3b50591bSChris Kay #define PAC_RETURN aut r12, lr, sp SEPARATOR bx lr
220*3b50591bSChris Kay #endif
221*3b50591bSChris Kay 
2228a6a9560SDaniel Boulby #else // !defined(__arm)
2238a6a9560SDaniel Boulby #define DECLARE_FUNC_ENCODING
2248a6a9560SDaniel Boulby #define DEFINE_CODE_STATE
2250e14a7fbSdp-arm #endif
2260e14a7fbSdp-arm 
2278a6a9560SDaniel Boulby #define GLUE2_(a, b) a##b
2288a6a9560SDaniel Boulby #define GLUE(a, b) GLUE2_(a, b)
2298a6a9560SDaniel Boulby #define GLUE2(a, b) GLUE2_(a, b)
2308a6a9560SDaniel Boulby #define GLUE3_(a, b, c) a##b##c
2318a6a9560SDaniel Boulby #define GLUE3(a, b, c) GLUE3_(a, b, c)
2328a6a9560SDaniel Boulby #define GLUE4_(a, b, c, d) a##b##c##d
2338a6a9560SDaniel Boulby #define GLUE4(a, b, c, d) GLUE4_(a, b, c, d)
2348a6a9560SDaniel Boulby 
2350e14a7fbSdp-arm #define SYMBOL_NAME(name) GLUE(__USER_LABEL_PREFIX__, name)
236*3b50591bSChris Kay #ifndef __arm64ec__
237*3b50591bSChris Kay #define FUNC_SYMBOL(name) name
238*3b50591bSChris Kay #else
239*3b50591bSChris Kay // On ARM64EC, function names and calls (but not address-taking or data symbol
240*3b50591bSChris Kay // references) use symbols prefixed with "#".
241*3b50591bSChris Kay #define QUOTE(a) #a
242*3b50591bSChris Kay #define STR(a) QUOTE(a)
243*3b50591bSChris Kay #define HASH #
244*3b50591bSChris Kay #define FUNC_SYMBOL(name) STR(GLUE2(HASH, name))
245*3b50591bSChris Kay #endif
2460e14a7fbSdp-arm 
2470e14a7fbSdp-arm #ifdef VISIBILITY_HIDDEN
2480e14a7fbSdp-arm #define DECLARE_SYMBOL_VISIBILITY(name)                                        \
2490e14a7fbSdp-arm   HIDDEN(SYMBOL_NAME(name)) SEPARATOR
2508a6a9560SDaniel Boulby #define DECLARE_SYMBOL_VISIBILITY_UNMANGLED(name) \
2518a6a9560SDaniel Boulby   HIDDEN(name) SEPARATOR
2520e14a7fbSdp-arm #else
2530e14a7fbSdp-arm #define DECLARE_SYMBOL_VISIBILITY(name)
2548a6a9560SDaniel Boulby #define DECLARE_SYMBOL_VISIBILITY_UNMANGLED(name)
2550e14a7fbSdp-arm #endif
2560e14a7fbSdp-arm 
2570e14a7fbSdp-arm #define DEFINE_COMPILERRT_FUNCTION(name)                                       \
2588a6a9560SDaniel Boulby   DEFINE_CODE_STATE                                                            \
2590e14a7fbSdp-arm   FILE_LEVEL_DIRECTIVE SEPARATOR                                               \
260*3b50591bSChris Kay   .globl FUNC_SYMBOL(SYMBOL_NAME(name)) SEPARATOR                              \
2610e14a7fbSdp-arm   SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR                                  \
2620e14a7fbSdp-arm   DECLARE_SYMBOL_VISIBILITY(name)                                              \
2638a6a9560SDaniel Boulby   DECLARE_FUNC_ENCODING                                                        \
264*3b50591bSChris Kay   FUNC_SYMBOL(SYMBOL_NAME(name)):
2650e14a7fbSdp-arm 
2660e14a7fbSdp-arm #define DEFINE_COMPILERRT_THUMB_FUNCTION(name)                                 \
2678a6a9560SDaniel Boulby   DEFINE_CODE_STATE                                                            \
2680e14a7fbSdp-arm   FILE_LEVEL_DIRECTIVE SEPARATOR                                               \
269*3b50591bSChris Kay   .globl FUNC_SYMBOL(SYMBOL_NAME(name)) SEPARATOR                              \
2700e14a7fbSdp-arm   SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR                                  \
2710e14a7fbSdp-arm   DECLARE_SYMBOL_VISIBILITY(name) SEPARATOR                                    \
2720e14a7fbSdp-arm   .thumb_func SEPARATOR                                                        \
273*3b50591bSChris Kay   FUNC_SYMBOL(SYMBOL_NAME(name)):
2740e14a7fbSdp-arm 
2750e14a7fbSdp-arm #define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name)                               \
2768a6a9560SDaniel Boulby   DEFINE_CODE_STATE                                                            \
2770e14a7fbSdp-arm   FILE_LEVEL_DIRECTIVE SEPARATOR                                               \
278*3b50591bSChris Kay   .globl FUNC_SYMBOL(SYMBOL_NAME(name)) SEPARATOR                              \
2790e14a7fbSdp-arm   SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR                                  \
2800e14a7fbSdp-arm   HIDDEN(SYMBOL_NAME(name)) SEPARATOR                                          \
2818a6a9560SDaniel Boulby   DECLARE_FUNC_ENCODING                                                        \
282*3b50591bSChris Kay   FUNC_SYMBOL(SYMBOL_NAME(name)):
2830e14a7fbSdp-arm 
2840e14a7fbSdp-arm #define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name)                     \
2858a6a9560SDaniel Boulby   DEFINE_CODE_STATE                                                            \
286*3b50591bSChris Kay   .globl FUNC_SYMBOL(name) SEPARATOR                                           \
2870e14a7fbSdp-arm   SYMBOL_IS_FUNC(name) SEPARATOR                                               \
2880e14a7fbSdp-arm   HIDDEN(name) SEPARATOR                                                       \
2898a6a9560SDaniel Boulby   DECLARE_FUNC_ENCODING                                                        \
290*3b50591bSChris Kay   FUNC_SYMBOL(name):
2910e14a7fbSdp-arm 
2928a6a9560SDaniel Boulby #define DEFINE_COMPILERRT_OUTLINE_FUNCTION_UNMANGLED(name)                     \
2938a6a9560SDaniel Boulby   DEFINE_CODE_STATE                                                            \
2948a6a9560SDaniel Boulby   FUNC_ALIGN                                                                   \
295*3b50591bSChris Kay   .globl FUNC_SYMBOL(name) SEPARATOR                                           \
2968a6a9560SDaniel Boulby   SYMBOL_IS_FUNC(name) SEPARATOR                                               \
297*3b50591bSChris Kay   DECLARE_SYMBOL_VISIBILITY_UNMANGLED(FUNC_SYMBOL(name)) SEPARATOR             \
2988a6a9560SDaniel Boulby   DECLARE_FUNC_ENCODING                                                        \
299*3b50591bSChris Kay   FUNC_SYMBOL(name):                                                           \
3003a965bb3SManish Pandey   SEPARATOR CFI_START                                                          \
3013a965bb3SManish Pandey   SEPARATOR BTI_C
3028a6a9560SDaniel Boulby 
3030e14a7fbSdp-arm #define DEFINE_COMPILERRT_FUNCTION_ALIAS(name, target)                         \
304*3b50591bSChris Kay   .globl FUNC_SYMBOL(SYMBOL_NAME(name)) SEPARATOR                              \
3050e14a7fbSdp-arm   SYMBOL_IS_FUNC(SYMBOL_NAME(name)) SEPARATOR                                  \
306658ce7adSMaksims Svecovs   DECLARE_SYMBOL_VISIBILITY(name) SEPARATOR                                    \
307*3b50591bSChris Kay   .set FUNC_SYMBOL(SYMBOL_NAME(name)), FUNC_SYMBOL(target) SEPARATOR
3080e14a7fbSdp-arm 
3090e14a7fbSdp-arm #if defined(__ARM_EABI__)
3100e14a7fbSdp-arm #define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name)                          \
3110e14a7fbSdp-arm   DEFINE_COMPILERRT_FUNCTION_ALIAS(aeabi_name, name)
3120e14a7fbSdp-arm #else
3130e14a7fbSdp-arm #define DEFINE_AEABI_FUNCTION_ALIAS(aeabi_name, name)
3140e14a7fbSdp-arm #endif
3150e14a7fbSdp-arm 
3160e14a7fbSdp-arm #ifdef __ELF__
3170e14a7fbSdp-arm #define END_COMPILERRT_FUNCTION(name)                                          \
3180e14a7fbSdp-arm   .size SYMBOL_NAME(name), . - SYMBOL_NAME(name)
3198a6a9560SDaniel Boulby #define END_COMPILERRT_OUTLINE_FUNCTION(name)                                  \
3208a6a9560SDaniel Boulby   CFI_END SEPARATOR                                                            \
3218a6a9560SDaniel Boulby   .size SYMBOL_NAME(name), . - SYMBOL_NAME(name)
3220e14a7fbSdp-arm #else
3230e14a7fbSdp-arm #define END_COMPILERRT_FUNCTION(name)
3248a6a9560SDaniel Boulby #define END_COMPILERRT_OUTLINE_FUNCTION(name)                                  \
3258a6a9560SDaniel Boulby   CFI_END
3260e14a7fbSdp-arm #endif
3270e14a7fbSdp-arm 
328*3b50591bSChris Kay #ifdef __arm__
329*3b50591bSChris Kay #include "int_endianness.h"
330*3b50591bSChris Kay 
331*3b50591bSChris Kay #if _YUGA_BIG_ENDIAN
332*3b50591bSChris Kay #define VMOV_TO_DOUBLE(dst, src0, src1) vmov dst, src1, src0 SEPARATOR
333*3b50591bSChris Kay #define VMOV_FROM_DOUBLE(dst0, dst1, src) vmov dst1, dst0, src SEPARATOR
334*3b50591bSChris Kay #else
335*3b50591bSChris Kay #define VMOV_TO_DOUBLE(dst, src0, src1) vmov dst, src0, src1 SEPARATOR
336*3b50591bSChris Kay #define VMOV_FROM_DOUBLE(dst0, dst1, src) vmov dst0, dst1, src SEPARATOR
337*3b50591bSChris Kay #endif
338*3b50591bSChris Kay #endif
339*3b50591bSChris Kay 
3408a6a9560SDaniel Boulby #endif // COMPILERRT_ASSEMBLY_H
341