1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 12:28:22 +01:00
Files
wmaker/wrlib/bench.h
2000-01-21 21:04:20 +00:00

69 lines
1.3 KiB
C

inline static void
cycle_bench(int start)
{
static volatile unsigned int start_cycle;
if (start) {
asm volatile
("pushl %%edx \n\t"
"rdtsc \n\t"
"movl %%eax,%0 \n\t"
"cld \n\t"
"popl %%edx \n\t"
"nop \n\t"
"nop \n\t"
"nop \n\t"
"nop \n\t"
"nop \n\t"
"nop \n\t"
"nop \n\t"
"nop \n\t"
: "=m" (start_cycle) : : "eax", "edx");
} else {
volatile int end;
asm volatile
("pushl %%edx \n\t"
"clc \n\t"
"rdtsc \n\t"
"movl %%eax, %0 \n\t"
"popl %%edx \n\t"
: "=m" (end) : : "eax", "edx");
printf("Cycle count = %u\n", end - start_cycle - 68);
}
}
#if 0
// seems linux doesnt allow user progs to exec rdpcm..
inline static void
cache_bench(int start)
{
static int start_cycle;
if (start) {
asm volatile(
"movl $1,%%ecx \n\t"
"rdpmc \n\t"
"movl %%eax,%0 \n\t"
: "=m" (start_cycle));
} else {
int end;
asm volatile(
"movl $1,%%ecx \n\t"
"rdpmc \n\t"
"movl %%eax,%0"
: "=m" (end));
printf("Cache reloads counted = %i\n", end - start_cycle);
}
}
#endif