xref: /dragonfly/test/sysperf/cld1.c (revision abf903a5)
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 }
69