nrelease - fix/improve livecd
[dragonfly.git] / test / sysperf / cld1.c
1 /*
2  * cld1.c
3  *
4  * $DragonFly: src/test/sysperf/cld1.c,v 1.1 2008/05/09 15:49:42 dillon Exp $
5  */
6
7 #include "blib.h"
8
9 static __attribute__ ((noinline)) void dummy_with_cld(void);
10 static __attribute__ ((noinline)) void dummy_without_cld(void);
11
12 int
13 main(int ac, char **av)
14 {
15     long long count = 0;
16     long long max;
17     char c;
18     int j;
19
20     printf("timing the cld instruction\n");
21
22     start_timing();
23     while (stop_timing(0, NULL) == 0) {
24         for (j = 0; j < 100; ++j)
25             getuid();
26         count += 100;
27     }
28     max = count;
29     start_timing();
30     for (count = 0; count < max; count += 100) {
31         for (j = 0; j < 100; ++j)
32             dummy_without_cld();
33     }
34     stop_timing(count, "dummy() - without cld");
35
36     start_timing();
37     for (count = 0; count < max; count += 100) {
38         for (j = 0; j < 100; ++j)
39             dummy_with_cld();
40     }
41     stop_timing(count, "dummy() - with cld");
42     return(0);
43 }
44
45 static
46 __attribute__ ((noinline))
47 void
48 dummy_with_cld(void)
49 {
50         volatile int i, j, k;
51
52         i = 0;
53         j = 0;
54         k = 0;
55         __asm __volatile("cld"::);
56 }
57
58 static
59 __attribute__ ((noinline))
60 void
61 dummy_without_cld(void)
62 {
63         volatile int i, j, k;
64
65         i = 0;
66         j = 0;
67         k = 0;
68 }