00001
00002
00003
00004
00005
00006
00007
00008 #include "ace/config-all.h"
00009
00010 ACE_RCSID(ace, gethrtime, "gethrtime.cpp,v 4.11 2005/10/31 09:39:35 jwillemsen Exp")
00011
00012 #if defined (ghs) && (defined (i386) || defined(__i386__))
00013
00014 #include "ace/OS_NS_time.h"
00015
00016 extern "C"
00017 ACE_hrtime_t
00018 ACE_GETHRTIME_NAME (void)
00019 {
00020 #if defined (ACE_HAS_PENTIUM)
00021
00022
00023 #if defined (ACE_LACKS_LONGLONG_T)
00024 double now;
00025 #else
00026 ACE_hrtime_t now;
00027 #endif
00028
00029
00030
00031
00032
00033
00034 #if defined (__GNUG__)
00035 asm volatile ("rdtsc" : "=A" (now) : : "memory");
00036
00037
00038
00039
00040
00041 #else
00042 # error unsupported compiler
00043 #endif
00044
00045 #if defined (ACE_LACKS_LONGLONG_T)
00046
00047
00048 ACE_UINT32 least, most;
00049 ACE_OS::memcpy (&least, &now, sizeof (ACE_UINT32));
00050 ACE_OS::memcpy (&most, (unsigned char *) &now + sizeof (ACE_UINT32),
00051 sizeof (ACE_UINT32));
00052
00053 const ACE_hrtime_t ret (least, most);
00054 return ret;
00055 #else
00056 return now;
00057 #endif
00058
00059 #else
00060 # error This file can _only_ be compiled with ACE_HAS_PENTIUM.
00061 #endif
00062 }
00063 #endif