Upgrade Boehm GC to 7.2alpha4.
[cacao.git] / src / mm / boehm-gc / libatomic_ops / 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(__x86_64__) && defined(__GNUC__)) || defined(_WIN64)
8 # include <xmmintrin.h>
9   typedef __m128 double_ptr_storage;
10 #elif defined(_WIN32) && !defined(__GNUC__)
11   typedef unsigned __int64 double_ptr_storage;
12 #else
13   typedef unsigned long long double_ptr_storage;
14 #endif
15
16 # define AO_HAVE_DOUBLE_PTR_STORAGE
17
18 typedef union {
19     double_ptr_storage AO_whole;
20     struct {AO_t AO_v1; AO_t AO_v2;} AO_parts;
21 } AO_double_t;
22
23 #define AO_HAVE_double_t
24 #define AO_val1 AO_parts.AO_v1
25 #define AO_val2 AO_parts.AO_v2