sync_synchronize.S revision 2d1fdb26e458c4ddc04155c1d421bced3ba90cd0
148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar//===-- sync_synchronize - Implement memory barrier * ----------------------===//
248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar//
348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar//                     The LLVM Compiler Infrastructure
448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar//
548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar// This file is dual licensed under the MIT and the University of Illinois Open
606f38e5fc22bbeadabc1be11eb77f6d27cd3140cDaniel Dunbar// Source Licenses. See LICENSE.TXT for details.
706f38e5fc22bbeadabc1be11eb77f6d27cd3140cDaniel Dunbar//
848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar//===----------------------------------------------------------------------===//
948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
1048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar#include "../assembly.h"
1148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
1248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar//
1348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar// When compiling a use of the gcc built-in __sync_synchronize() in thumb1 mode
1448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar// the compiler may emit a call to __sync_synchronize.
1548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar// On Darwin the implementation jumps to an OS supplied function named
1648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar// OSMemoryBarrier
1748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar//
1848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
1948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	.text
2048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	.syntax unified
2148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
2248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar#if __APPLE__
2348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
2448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	.p2align 2
2548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel DunbarDEFINE_COMPILERRT_PRIVATE_FUNCTION(__sync_synchronize)
2648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	stmfd	sp!, {r7, lr}
2748464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	add		r7, sp, #0
2848464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	bl		_OSMemoryBarrier
2948464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	ldmfd	sp!, {r7, pc}
3048464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel DunbarEND_COMPILERRT_FUNCTION(__sync_synchronize)
3148464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
3248464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	// tell linker it can break up file at label boundaries
3348464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar	.subsections_via_symbols
3448464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar
3548464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar#endif
3648464e0ee1c2de5bcbf0d609348f55d0c301085dDaniel Dunbar