Home | History | Annotate | Download | only in arm
      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 	.align 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 
     31 	// tell linker it can break up file at label boundaries
     32 	.subsections_via_symbols
     33 
     34 #endif
     35