1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef RTC_BASE_SYSTEM_ASM_DEFINES_H_
12 #define RTC_BASE_SYSTEM_ASM_DEFINES_H_
13 
14 // clang-format off
15 // clang formatting breaks everything here, e.g. concatenating directives,
16 // due to absence of context via asm keyword.
17 
18 #if defined(__linux__) && defined(__ELF__)
19 .section .note.GNU-stack,"",%progbits
20 #endif
21 
22 // Define the macros used in ARM assembly code, so that for Mac or iOS builds
23 // we add leading underscores for the function names.
24 #ifdef __APPLE__
25 .macro GLOBAL_FUNCTION name
26 .global _\name
27 .private_extern _\name
28 .endm
29 .macro DEFINE_FUNCTION name
30 _\name:
31 .endm
32 .macro CALL_FUNCTION name
33 bl _\name
34 .endm
35 .macro GLOBAL_LABEL name
36 .global _\name
37 .private_extern _\name
38 .endm
39 #else
40 .macro GLOBAL_FUNCTION name
41 .global \name
42 .hidden \name
43 .endm
44 .macro DEFINE_FUNCTION name
45 #if defined(__linux__) && defined(__ELF__)
46 .type \name,%function
47 #endif
48 \name:
49 .endm
50 .macro CALL_FUNCTION name
51 bl \name
52 .endm
53 .macro GLOBAL_LABEL name
54 .global \name
55 .hidden \name
56 .endm
57 #endif
58 
59 // With Apple's clang compiler, for instructions ldrb, strh, etc.,
60 // the condition code is after the width specifier. Here we define
61 // only the ones that are actually used in the assembly files.
62 #if (defined __llvm__) && (defined __APPLE__)
63 .macro streqh reg1, reg2, num
64 strheq \reg1, \reg2, \num
65 .endm
66 #endif
67 
68 .text
69 
70 // clang-format on
71 
72 #endif  // RTC_BASE_SYSTEM_ASM_DEFINES_H_
73