boehm-gc: revert all CACAO-specific modifications; this is now an exact copy of the...
[cacao.git] / src / mm / boehm-gc / libatomic_ops-1.2 / src / atomic_ops / sysdeps / standard_ao_double_t.h
1 /* NEC LE-IT: For 64Bit OS we extend the double type to hold two int64's
2 *       
3 *  x86-64: __m128 serves as placeholder which also requires the compiler
4 *          to align     it on 16 byte boundary (as required by cmpxchg16.
5 * Similar things could be done for PowerPC 64bit using a VMX data type...       */
6
7 #if defined(__GNUC__)
8 # if defined(__x86_64__)
9 # include<xmmintrin.h>
10    typedef __m128 double_ptr_storage;
11 #  define AO_HAVE_DOUBLE_PTR_STORAGE
12 # endif /* __x86_64__ */
13 #endif
14
15 #ifdef _MSC_VER
16 # ifdef _WIN64
17    typedef __m128 double_ptr_storage;
18 #  define AO_HAVE_DOUBLE_PTR_STORAGE
19 # elif _WIN32
20    typedef unsigned __int64 double_ptr_storage;
21 #  define AO_HAVE_DOUBLE_PTR_STORAGE
22 # endif
23 #endif
24
25 #ifndef AO_HAVE_DOUBLE_PTR_STORAGE
26    typedef unsigned long long double_ptr_storage;
27 #endif
28
29 typedef union {
30     double_ptr_storage AO_whole;
31     struct {AO_t AO_v1; AO_t AO_v2;} AO_parts;
32 } AO_double_t;
33
34 #define AO_HAVE_double_t
35 #define AO_val1 AO_parts.AO_v1
36 #define AO_val2 AO_parts.AO_v2