source: u8u16/trunk/Profiling/ppc_timer.c @ 5877

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

Adding old u8u16 for Teradata

File size: 1011 bytes
Line 
1#define cycle_counter_units "tbu"
2
3__inline__ unsigned long long int read_cycle_counter () {
4  union {long long int ts_long_long;
5         struct {int upper; 
6                 int lower;
7         } ts_struct;
8  } ts;
9  int ts_upper1;
10  do {
11    asm volatile ("mftbu %0\n\t"
12                  "mftb %1\n\t"
13                  "mftbu %2\n\t"
14                  : "=r"(ts_upper1), "=r"(ts.ts_struct.lower), "=r"(ts.ts_struct.upper));
15  } while (ts.ts_struct.upper != ts_upper1);
16  return(ts.ts_long_long);
17}
18
19
20__inline__ int binary_order_of_magnitude(unsigned long long int ts) {
21  union {long long int ts_long_long;
22         struct {int upper; 
23                 int lower;
24         } ts_struct;
25  } ts_s;
26  ts_s.ts_long_long = ts;
27  int leading_zeroes;
28  asm volatile("cntlzw %0, %1\n" : "=r" (leading_zeroes) : "r" (ts_s.ts_struct.upper));
29  if (leading_zeroes == 32) {
30    asm volatile("cntlzw %0, %1\n" : "=r" (leading_zeroes) : "r" (ts_s.ts_struct.lower));
31    return 32 - leading_zeroes;
32  }
33  return 64 - leading_zeroes;
34}
Note: See TracBrowser for help on using the repository browser.