implemented Setup.hs to build boehm cpp libs and install them;
[hs-boehmgc.git] / gc-7.2 / libatomic_ops / src / atomic_ops / sysdeps / standard_ao_double_t.h
1 /*
2  * NEC LE-IT: For 64-bit OS we extend the double type to hold two int64's
3  *
4  *  x86-64: __m128 serves as placeholder which also requires the compiler
5  *          to align it on 16 byte boundary (as required by cmpxchg16).
6  * Similar things could be done for PowerPC 64-bit using a VMX data type...
7  */
8
9 #if (defined(__x86_64__) && __GNUC__ >= 4) || defined(_WIN64)
10 # include <xmmintrin.h>
11   typedef __m128 double_ptr_storage;
12 #elif defined(_WIN32) && !defined(__GNUC__)
13   typedef unsigned __int64 double_ptr_storage;
14 #else
15   typedef unsigned long long double_ptr_storage;
16 #endif
17
18 # define AO_HAVE_DOUBLE_PTR_STORAGE
19
20 typedef union {
21     double_ptr_storage AO_whole;
22     struct {AO_t AO_v1; AO_t AO_v2;} AO_parts;
23 } AO_double_t;
24
25 #define AO_HAVE_double_t
26 #define AO_val1 AO_parts.AO_v1
27 #define AO_val2 AO_parts.AO_v2