blob: 41c24d74ead35024205908ca9ebd1eeb6a32e578 [file] [log] [blame]
Daniel Dunbar19336a22009-10-27 17:49:50 +00001/* ===-- assembly.h - compiler-rt assembler support macros -----------------===
2 *
3 * The LLVM Compiler Infrastructure
4 *
Howard Hinnant9ad441f2010-11-16 22:13:33 +00005 * This file is dual licensed under the MIT and the University of Illinois Open
6 * Source Licenses. See LICENSE.TXT for details.
Daniel Dunbar19336a22009-10-27 17:49:50 +00007 *
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
Daniel Dunbar19336a22009-10-27 17:49:50 +000019#if defined(__POWERPC__) || defined(__powerpc__) || defined(__ppc__)
Daniel Dunbar19336a22009-10-27 17:49:50 +000020#define SEPARATOR @
Daniel Dunbar19336a22009-10-27 17:49:50 +000021#else
Daniel Dunbar19336a22009-10-27 17:49:50 +000022#define SEPARATOR ;
Daniel Dunbar4c01bb72010-01-18 22:19:25 +000023#endif
Daniel Dunbar19336a22009-10-27 17:49:50 +000024
Daniel Dunbar4c01bb72010-01-18 22:19:25 +000025/* 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
Daniel Dunbar19336a22009-10-27 17:49:50 +000031#endif
32
Daniel Dunbar6a571fb2010-01-18 22:19:34 +000033#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
Daniel Dunbar19336a22009-10-27 17:49:50 +000039#define DEFINE_COMPILERRT_FUNCTION(name) \
40 .globl SYMBOL_NAME(name) SEPARATOR \
41 SYMBOL_NAME(name):
Daniel Dunbar6a571fb2010-01-18 22:19:34 +000042#endif
Daniel Dunbar19336a22009-10-27 17:49:50 +000043
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
Daniel Dunbare136da92010-01-18 22:19:20 +000049#define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name) \
50 .globl name SEPARATOR \
51 .private_extern name SEPARATOR \
52 name:
53
Daniel Dunbar19336a22009-10-27 17:49:50 +000054#endif /* COMPILERRT_ASSEMBLY_H */