Annotation of embedaddon/sqlite3/src/hwtime.h, revision 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>