9 #if defined(__LCLINT__)
11 extern int nanosleep(
const struct timespec *__requested_time,
12 struct timespec *__remaining)
30 #if 0 && defined(__i386__)
33 #define HP_TIMING_ZERO(Var) (Var) = (0)
34 #define HP_TIMING_NOW(Var) __asm__ __volatile__ ("rdtsc" : "=A" (Var))
37 #define HP_TIMING_DIFF(Diff, Start, End) (Diff) = ((End) - (Start))
40 #define HP_TIMING_ACCUM(Sum, Diff) \
43 hp_timing_t __oldval = (Sum); \
44 hp_timing_t __diff = (Diff) - GL(dl_hp_timing_overhead); \
47 hp_timing_t __newval = __oldval + __diff; \
48 int __temp0, __temp1; \
49 __asm__ __volatile__ ("xchgl %4, %%ebx\n\t" \
50 "lock; cmpxchg8b %1\n\t" \
53 : "=q" (__not_done), "=m" (Sum), \
54 "=A" (__oldval), "=c" (__temp0), \
56 : "1" (Sum), "2" (__oldval), \
57 "3" (__newval >> 32), \
58 "4" (__newval & 0xffffffff) \
65 #define HP_TIMING_ACCUM_NT(Sum, Diff) (Sum) += (Diff)
68 #define HP_TIMING_PRINT(Buf, Len, Val) \
71 char *__cp = _itoa (Val, __buf + sizeof (__buf), 10, 0); \
73 char *__dest = (Buf); \
74 while (__len-- > 0 && __cp < __buf + sizeof (__buf)) \
75 *__dest++ = *__cp++; \
76 memcpy (__dest, " clock cycles", MIN (__len, sizeof (" clock cycles"))); \
88 if (gettimeofday(&sw->
u.
tv, NULL))
91 #if defined(HP_TIMING_NOW)
93 HP_TIMING_NOW(sw->
u.
ticks);
108 const struct timeval * btv)
112 if (etv == NULL || btv == NULL)
return 0;
113 secs = etv->tv_sec - btv->tv_sec;
114 for (usecs = etv->tv_usec - btv->tv_usec; usecs < 0; usecs += 1000000)
116 return ((secs * 1000000) + usecs);
121 unsigned long long ticks = 0;
123 if (end == NULL || begin == NULL)
130 #if defined(HP_TIMING_NOW)
144 #if defined(HP_TIMING_NOW)
151 struct timespec req, rem;
159 req.tv_nsec = 20 * 1000 * 1000;
160 for (i = 0; i < 100; i++) {
161 rc = nanosleep(&req, &rem);
164 if (rem.tv_sec == 0 && rem.tv_nsec == 0)
183 unsigned long long sum_cycles = 0;
195 for (i = 0; i < 3; i++) {
196 #if defined(HP_TIMING_NOW)
210 cycles = rpmswCalibrate();
213 sum_cycles += cycles;
277 if (to != NULL && from != NULL) {
289 if (to != NULL && from != NULL) {
302 static unsigned int scale = (1000 * 1000);
303 if (op != NULL && op->
count > 0)
304 fprintf(stderr,
" %s %8d %6lu.%06lu MB %6lu.%06lu secs\n",
306 (
unsigned long)op->
bytes/scale, (
unsigned long)op->
bytes%scale,