|
|
| version 1.1.2.6, 2013/03/07 16:17:20 | version 1.3.22.2, 2014/01/14 22:49:39 |
|---|---|
| Line 261 time_Parse(const char *csTime) | Line 261 time_Parse(const char *csTime) |
| elwix_SetErr(EINVAL, "Invalid date/time format"); | elwix_SetErr(EINVAL, "Invalid date/time format"); |
| return tim; | return tim; |
| } | } |
| /* | |
| * time_rdtsc() - Get TSC timer value from CPU | |
| * | |
| * return: TSC in nanoseconds | |
| */ | |
| uint64_t | |
| time_rdtsc(void) | |
| { | |
| #if defined(i386) || defined(__i386__) | |
| /* i386 */ | |
| uint32_t hi, lo; | |
| asm volatile("rdtsc" : "=d" (hi), "=a" (lo)); | |
| return (((uint64_t) hi << 32) | (uint64_t) lo); | |
| #elif defined(amd64) || defined(__amd64__) || \ | |
| defined(x86_64) || defined(__x86_64__) | |
| /* amd64 */ | |
| uint64_t res; | |
| asm volatile("rdtsc" : "=a" (res)); | |
| return res; | |
| #else | |
| /* unsupported for this architecture, get time by ordinary way */ | |
| struct timespec ts = { 0, 0LL }; | |
| clock_gettime(CLOCK_UPTIME_PRECISE, &ts); | |
| return ((uint64_t) ts.tv_sec * 1000000000 + ts.tv_nsec); | |
| #endif | |
| } |