| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #ifndef SQLITE_HWTIME_H |
| #define SQLITE_HWTIME_H |
|
|
| #if defined(_MSC_VER) && defined(_WIN32) |
|
|
| #include "windows.h" |
| #include <profileapi.h> |
|
|
| __inline sqlite3_uint64 sqlite3Hwtime(void){ |
| LARGE_INTEGER tm; |
| QueryPerformanceCounter(&tm); |
| return (sqlite3_uint64)tm.QuadPart; |
| } |
|
|
| #elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && \ |
| (defined(i386) || defined(__i386__) || defined(_M_IX86)) |
|
|
| __inline__ sqlite_uint64 sqlite3Hwtime(void){ |
| unsigned int lo, hi; |
| __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); |
| return (sqlite_uint64)hi << 32 | lo; |
| } |
|
|
| #elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__)) |
|
|
| __inline__ sqlite_uint64 sqlite3Hwtime(void){ |
| unsigned int lo, hi; |
| __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi)); |
| return (sqlite_uint64)hi << 32 | lo; |
| } |
|
|
| #elif !defined(__STRICT_ANSI__) && defined(__GNUC__) && defined(__aarch64__) |
|
|
| __inline__ sqlite_uint64 sqlite3Hwtime(void){ |
| sqlite3_uint64 cnt; |
| __asm__ __volatile__ ("mrs %0, cntvct_el0" : "=r" (cnt)); |
| return cnt; |
| } |
| |
| #elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__)) |
|
|
| __inline__ sqlite_uint64 sqlite3Hwtime(void){ |
| unsigned long long retval; |
| unsigned long junk; |
| __asm__ __volatile__ ("\n\ |
| 1: mftbu %1\n\ |
| mftb %L0\n\ |
| mftbu %0\n\ |
| cmpw %0,%1\n\ |
| bne 1b" |
| : "=r" (retval), "=r" (junk)); |
| return retval; |
| } |
|
|
| #else |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); } |
|
|
| #endif |
|
|
| #endif |
|
|