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 25DEFINE_COMPILERRT_PRIVATE_FUNCTION(__sync_synchronize) 26 stmfd sp!, {r7, lr} 27 add r7, sp, #0 28 bl _OSMemoryBarrier 29 ldmfd sp!, {r7, pc} 30END_COMPILERRT_FUNCTION(__sync_synchronize) 31 32 // tell linker it can break up file at label boundaries 33 .subsections_via_symbols 34 35#endif 36 37NO_EXEC_STACK_DIRECTIVE 38 39