1 //===-- sync_synchronize - Implement memory barrier * ----------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "../assembly.h" 11 12 // 13 // When compiling a use of the gcc built-in __sync_synchronize() in thumb1 mode 14 // the compiler may emit a call to __sync_synchronize. 15 // On Darwin the implementation jumps to an OS supplied function named 16 // OSMemoryBarrier 17 // 18 19 .text 20 .syntax unified 21 22 #if __APPLE__ 23 24 .p2align 2 25 DEFINE_COMPILERRT_PRIVATE_FUNCTION(__sync_synchronize) 26 stmfd sp!, {r7, lr} 27 add r7, sp, #0 28 bl _OSMemoryBarrier 29 ldmfd sp!, {r7, pc} 30 END_COMPILERRT_FUNCTION(__sync_synchronize) 31 32 // tell linker it can break up file at label boundaries 33 .subsections_via_symbols 34 35 #endif 36