Annotation of embedaddon/sqlite3/src/hwtime.h, revision 1.1.1.1

1.1       misho       1: /*
                      2: ** 2008 May 27
                      3: **
                      4: ** The author disclaims copyright to this source code.  In place of
                      5: ** a legal notice, here is a blessing:
                      6: **
                      7: **    May you do good and not evil.
                      8: **    May you find forgiveness for yourself and forgive others.
                      9: **    May you share freely, never taking more than you give.
                     10: **
                     11: ******************************************************************************
                     12: **
                     13: ** This file contains inline asm code for retrieving "high-performance"
                     14: ** counters for x86 class CPUs.
                     15: */
                     16: #ifndef _HWTIME_H_
                     17: #define _HWTIME_H_
                     18: 
                     19: /*
                     20: ** The following routine only works on pentium-class (or newer) processors.
                     21: ** It uses the RDTSC opcode to read the cycle count value out of the
                     22: ** processor and returns that value.  This can be used for high-res
                     23: ** profiling.
                     24: */
                     25: #if (defined(__GNUC__) || defined(_MSC_VER)) && \
                     26:       (defined(i386) || defined(__i386__) || defined(_M_IX86))
                     27: 
                     28:   #if defined(__GNUC__)
                     29: 
                     30:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                     31:      unsigned int lo, hi;
                     32:      __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
                     33:      return (sqlite_uint64)hi << 32 | lo;
                     34:   }
                     35: 
                     36:   #elif defined(_MSC_VER)
                     37: 
                     38:   __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
                     39:      __asm {
                     40:         rdtsc
                     41:         ret       ; return value at EDX:EAX
                     42:      }
                     43:   }
                     44: 
                     45:   #endif
                     46: 
                     47: #elif (defined(__GNUC__) && defined(__x86_64__))
                     48: 
                     49:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                     50:       unsigned long val;
                     51:       __asm__ __volatile__ ("rdtsc" : "=A" (val));
                     52:       return val;
                     53:   }
                     54:  
                     55: #elif (defined(__GNUC__) && defined(__ppc__))
                     56: 
                     57:   __inline__ sqlite_uint64 sqlite3Hwtime(void){
                     58:       unsigned long long retval;
                     59:       unsigned long junk;
                     60:       __asm__ __volatile__ ("\n\
                     61:           1:      mftbu   %1\n\
                     62:                   mftb    %L0\n\
                     63:                   mftbu   %0\n\
                     64:                   cmpw    %0,%1\n\
                     65:                   bne     1b"
                     66:                   : "=r" (retval), "=r" (junk));
                     67:       return retval;
                     68:   }
                     69: 
                     70: #else
                     71: 
                     72:   #error Need implementation of sqlite3Hwtime() for your platform.
                     73: 
                     74:   /*
                     75:   ** To compile without implementing sqlite3Hwtime() for your platform,
                     76:   ** you can remove the above #error and use the following
                     77:   ** stub function.  You will lose timing support for many
                     78:   ** of the debugging and testing utilities, but it should at
                     79:   ** least compile and run.
                     80:   */
                     81:   sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
                     82: 
                     83: #endif
                     84: 
                     85: #endif /* !defined(_HWTIME_H_) */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>