source: u8u16/tags/u8u16-0.92/Profiling/i386_timer.c @ 5877

Last change on this file since 5877 was 5877, checked in by cameron, 14 months ago

Adding old u8u16 for Teradata

File size: 761 bytes
Line 
1#define cycle_counter_units "cyc"
2
3__inline__ unsigned long long int read_cycle_counter () {
4  unsigned long long int ts;
5#ifndef OMIT_CPUID
6  asm volatile("cpuid\n" ::: "eax", "ebx", "ecx", "edx");
7#endif
8  asm volatile("rdtsc\n" : 
9               "=A" (ts));
10#ifndef OMIT_CPUID
11  asm volatile("cpuid\n" ::: "eax", "ebx", "ecx", "edx");
12#endif
13  return(ts);
14}
15
16
17inline int binary_order_of_magnitude(unsigned long long int ts) {
18  int msb;
19  asm volatile("bsr 4(%[ts]), %[msb]\n\t"
20               "jz 1f\n\t"
21               "add $32, %[msb]\n\t"
22               "jmp 2f\n"
23               "1:\n\t"
24               "bsr (%[ts]), %[msb]\n"
25               "2:\n"
26               : [msb] "=r"(msb)
27               : [ts] "r"(&ts)
28               : "cc");
29  return msb;
30}
Note: See TracBrowser for help on using the repository browser.