1 /* ===-- assembly.h - compiler-rt assembler support macros -----------------=== 2 * 3 * The LLVM Compiler Infrastructure 4 * 5 * This file is distributed under the University of Illinois Open Source 6 * License. See LICENSE.TXT for details. 7 * 8 * ===----------------------------------------------------------------------=== 9 * 10 * This file defines macros for use in compiler-rt assembler source. 11 * This file is not part of the interface of this library. 12 * 13 * ===----------------------------------------------------------------------=== 14 */ 15 16 #ifndef COMPILERRT_ASSEMBLY_H 17 #define COMPILERRT_ASSEMBLY_H 18 19 #if defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__) 20 #define SEPARATOR @ 21 #else 22 #define SEPARATOR ; 23 #endif 24 25 /* We can't use __USER_LABEL_PREFIX__ here, it isn't possible to concatenate the 26 *values* of two macros. This is quite brittle, though. */ 27 #if defined(__APPLE__) 28 #define SYMBOL_NAME(name) _##name 29 #else 30 #define SYMBOL_NAME(name) name 31 #endif 32 33 #ifdef VISIBILITY_HIDDEN 34 #define DEFINE_COMPILERRT_FUNCTION(name) \ 35 .globl SYMBOL_NAME(name) SEPARATOR \ 36 .private_extern SYMBOL_NAME(name) SEPARATOR \ 37 SYMBOL_NAME(name): 38 #else 39 #define DEFINE_COMPILERRT_FUNCTION(name) \ 40 .globl SYMBOL_NAME(name) SEPARATOR \ 41 SYMBOL_NAME(name): 42 #endif 43 44 #define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name) \ 45 .globl SYMBOL_NAME(name) SEPARATOR \ 46 .private_extern SYMBOL_NAME(name) SEPARATOR \ 47 SYMBOL_NAME(name): 48 49 #define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name) \ 50 .globl name SEPARATOR \ 51 .private_extern name SEPARATOR \ 52 name: 53 54 #endif /* COMPILERRT_ASSEMBLY_H */ 55