root/test/sysperf/cld1.c
/*
 * cld1.c
 *
 * $DragonFly: src/test/sysperf/cld1.c,v 1.1 2008/05/09 15:49:42 dillon Exp $
 */

#include "blib.h"

static __attribute__ ((noinline)) void dummy_with_cld(void);
static __attribute__ ((noinline)) void dummy_without_cld(void);

int
main(int ac, char **av)
{
    long long count = 0;
    long long max;
    char c;
    int j;

    printf("timing the cld instruction\n");

    start_timing();
    while (stop_timing(0, NULL) == 0) {
        for (j = 0; j < 100; ++j)
            getuid();
        count += 100;
    }
    max = count;
    start_timing();
    for (count = 0; count < max; count += 100) {
        for (j = 0; j < 100; ++j)
            dummy_without_cld();
    }
    stop_timing(count, "dummy() - without cld");

    start_timing();
    for (count = 0; count < max; count += 100) {
        for (j = 0; j < 100; ++j)
            dummy_with_cld();
    }
    stop_timing(count, "dummy() - with cld");
    return(0);
}

static
__attribute__ ((noinline))
void
dummy_with_cld(void)
{
        volatile int i, j, k;

        i = 0;
        j = 0;
        k = 0;
        __asm __volatile("cld"::);
}

static
__attribute__ ((noinline))
void
dummy_without_cld(void)
{
        volatile int i, j, k;

        i = 0;
        j = 0;
        k = 0;
}