blob: e6b84108f8520f247d8f03a44f9a2920b3353892 [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 *
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
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
33#define DEFINE_COMPILERRT_FUNCTION(name) \
34 .globl SYMBOL_NAME(name) SEPARATOR \
35 SYMBOL_NAME(name):
36
37#define DEFINE_COMPILERRT_PRIVATE_FUNCTION(name) \
38 .globl SYMBOL_NAME(name) SEPARATOR \
39 .private_extern SYMBOL_NAME(name) SEPARATOR \
40 SYMBOL_NAME(name):
41
Daniel Dunbare136da92010-01-18 22:19:20 +000042#define DEFINE_COMPILERRT_PRIVATE_FUNCTION_UNMANGLED(name) \
43 .globl name SEPARATOR \
44 .private_extern name SEPARATOR \
45 name:
46
Daniel Dunbar19336a22009-10-27 17:49:50 +000047#endif /* COMPILERRT_ASSEMBLY_H */