00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #include "ace/config-all.h"
00009 
00010 ACE_RCSID(ace, gethrtime, "$Id: gethrtime.cpp 77333 2007-02-22 16:03:48Z shuston $")
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 #if defined (__GNUG__)
00032   asm volatile ("rdtsc" : "=A" (now) : : "memory");
00033 
00034 
00035 
00036 
00037 
00038 #else
00039 # error unsupported compiler
00040 #endif
00041 
00042 #if defined (ACE_LACKS_LONGLONG_T)
00043   
00044   
00045   ACE_UINT32 least, most;
00046   ACE_OS::memcpy (&least, &now, sizeof (ACE_UINT32));
00047   ACE_OS::memcpy (&most, (unsigned char *) &now + sizeof (ACE_UINT32),
00048                   sizeof (ACE_UINT32));
00049 
00050   const ACE_hrtime_t ret (least, most);
00051   return ret;
00052 #else  
00053   return now;
00054 #endif 
00055 
00056 #else  
00057 # error This file can _only_ be compiled with ACE_HAS_PENTIUM.
00058 #endif 
00059 }
00060 #endif