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