usermode/library/atomic_ops/standard_ao_double_t.h

00001 /* NEC LE-IT: For 64Bit OS we extend the double type to hold two int64's
00002 *
00003 *  x86-64: __m128 serves as placeholder which also requires the compiler
00004 *          to align     it on 16 byte boundary (as required by cmpxchg16.
00005 * Similar things could be done for PowerPC 64bit using a VMX data type...       */
00006 
00007 #if (defined(__x86_64__) && defined(__GNUC__)) || defined(_WIN64)
00008 # include <xmmintrin.h>
00009   typedef __m128 double_ptr_storage;
00010 #elif defined(_WIN32) && !defined(__GNUC__)
00011   typedef unsigned __int64 double_ptr_storage;
00012 #else
00013   typedef unsigned long long double_ptr_storage;
00014 #endif
00015 
00016 # define AO_HAVE_DOUBLE_PTR_STORAGE
00017 
00018 typedef union {
00019     double_ptr_storage AO_whole;
00020     struct {AO_t AO_v1; AO_t AO_v2;} AO_parts;
00021 } AO_double_t;
00022 
00023 #define AO_HAVE_double_t
00024 #define AO_val1 AO_parts.AO_v1
00025 #define AO_val2 AO_parts.AO_v2

Generated on Sat Apr 23 11:43:34 2011 for Mnemosyne by  doxygen 1.4.7