00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011 #ifndef _CLOCKTICKS_H_
00012 #define _CLOCKTICKS_H_
00013
00014
00015
00016
00017 #if defined(__INTEL_COMPILER) && defined(__ia64__)
00018 #include <ia64intrin.h>
00019 #include <ia64regs.h>
00020 #include "BaseNamespaceHeader.H"
00021
00022 inline unsigned long long int ch_ticks()
00023 {
00024 volatile unsigned long long int rtn = __getReg(_IA64_REG_AR_ITC);
00025 return rtn;
00026 }
00027 #define CH_TICKS
00028
00029 #elif defined(__x86_64__) || defined(__i386__) || defined(__i686__)
00030 #include "BaseNamespaceHeader.H"
00031
00032 union clockunion
00033 {
00034 unsigned int i[2];
00035 unsigned long long int l;
00036 };
00037
00038 inline unsigned long long int ch_ticks()
00039 {
00040 volatile clockunion ret;
00041 __asm__ __volatile__ ("rdtsc" : "=a"(ret.i[0]), "=d"(ret.i[1]));
00042 return ret.l;
00043
00044
00045
00046
00047
00048 }
00049 #define CH_TICKS
00050
00051 #elif defined(_POWER) || defined(_POWERPC) || defined(__powerpc__)
00052 #include "BaseNamespaceHeader.H"
00053
00054 inline unsigned long long int ch_ticks()
00055 {
00056 volatile unsigned long long int tbr;
00057 __asm__ __volatile__("mftb %[tbr]" : [tbr] "=r" (tbr):);
00058 return tbr;
00059 }
00060 #define CH_TICKS
00061 #else
00062
00063
00064
00065 #include "BaseNamespaceHeader.H"
00066 #endif
00067
00068 #include "BaseNamespaceFooter.H"
00069 #endif