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