00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #if !defined(_XED_GET_TIME_H_)
00033 # define _XED_GET_TIME_H_
00034
00035 # include "xed-portability.h"
00036 # include "xed-types.h"
00037
00038 # if defined(__INTEL_COMPILER) && __INTEL_COMPILER > 810 && !defined(_M_IA64)
00039 # include <ia32intrin.h>
00040 # endif
00041 # if defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 810 && !defined(_M_IA64)
00042 # if __INTEL_COMPILER < 1000
00043 # pragma intrinsic(__rdtsc)
00044 # endif
00045 # endif
00046 # if !defined(__INTEL_COMPILER)
00047
00048 # if defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(_M_IA64)
00049 # include <intrin.h>
00050 # pragma intrinsic(__rdtsc)
00051 # endif
00052 # endif
00053
00054
00059 static XED_INLINE xed_uint64_t xed_get_time(void) {
00060 xed_union64_t ticks;
00061
00062 # if defined(__GNUC__) //&& !defined(__STRICT_ANSI__)
00063 # if defined(__i386__) || defined(i386) || defined(i686) || defined(__x86_64__)
00064 __asm__ volatile ("rdtsc":"=a" (ticks.s.lo32), "=d"(ticks.s.hi32));
00065 # define FOUND_RDTSC
00066 # endif
00067 # endif
00068 # if defined(__INTEL_COMPILER) && __INTEL_COMPILER>=810 && !defined(_M_IA64)
00069 ticks.u64 = __rdtsc();
00070 # define FOUND_RDTSC
00071 # endif
00072 # if !defined(__INTEL_COMPILER)
00073 # if !defined(FOUND_RDTSC) && defined(_MSC_VER) && _MSC_VER >= 1400 && \
00074 !defined(_M_IA64) && !defined(_MANAGED)
00075 ticks.u64 = __rdtsc();
00076 # define FOUND_RDTSC
00077 # endif
00078 # endif
00079 # if !defined(FOUND_RDTSC)
00080 ticks.u64 = 0;
00081 # endif
00082 return ticks.u64;
00083 }
00084
00085 #endif