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