ObjFW
atomic.h
1 /*
2  * Copyright (c) 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017
3  * Jonathan Schleifer <js@heap.zone>
4  *
5  * All rights reserved.
6  *
7  * This file is part of ObjFW. It may be distributed under the terms of the
8  * Q Public License 1.0, which can be found in the file LICENSE.QPL included in
9  * the packaging of this file.
10  *
11  * Alternatively, it may be distributed under the terms of the GNU General
12  * Public License, either version 2 or 3, which can be found in the file
13  * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
14  * file.
15  */
16 
17 #include <stdlib.h>
18 
19 #import "macros.h"
20 
21 #ifndef OF_HAVE_ATOMIC_OPS
22 # error No atomic operations available!
23 #endif
24 
25 #if !defined(OF_HAVE_THREADS)
26 # import "atomic_no_threads.h"
27 #elif defined(OF_X86_64_ASM) || defined(OF_X86_ASM)
28 # import "atomic_x86.h"
29 #elif defined(OF_POWERPC_ASM) && !defined(__APPLE_CC__)
30 # import "atomic_powerpc.h"
31 #elif defined(OF_HAVE_ATOMIC_BUILTINS)
32 # import "atomic_builtins.h"
33 #elif defined(OF_HAVE_SYNC_BUILTINS)
34 # import "atomic_sync_builtins.h"
35 #elif defined(OF_HAVE_OSATOMIC)
36 # import "atomic_osatomic.h"
37 #else
38 # error No atomic operations available!
39 #endif