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