X-Git-Url: http://git.annexia.org/?p=jonesforth.git;a=blobdiff_plain;f=perf_dupdrop.c;fp=perf_dupdrop.c;h=a1f3786175ac61886e397506f8cca09a17af4355;hp=0000000000000000000000000000000000000000;hb=465979550d58288f6bee28c49064d9c841a6f45f;hpb=83c6612bf07228f70d25136c850f660721379632;ds=sidebyside diff --git a/perf_dupdrop.c b/perf_dupdrop.c new file mode 100644 index 0000000..a1f3786 --- /dev/null +++ b/perf_dupdrop.c @@ -0,0 +1,33 @@ +/* Ideal DUP DROP * 1000 assuming perfect inlining. + $Id: perf_dupdrop.c,v 1.1 2007-10-10 13:01:05 rich Exp $ +*/ + +#include +#include + +#define DUP \ + asm volatile ("mov (%%esp),%%eax\n" \ + "\tpush %%eax" \ + : : : "eax") +#define DROP \ + asm volatile ("pop %%eax" \ + : : : "eax") + +#define DUPDROP DUP; DROP; +#define DUPDROP10 DUPDROP DUPDROP DUPDROP DUPDROP DUPDROP DUPDROP DUPDROP DUPDROP DUPDROP DUPDROP +#define DUPDROP100 DUPDROP10 DUPDROP10 DUPDROP10 DUPDROP10 DUPDROP10 DUPDROP10 DUPDROP10 DUPDROP10 DUPDROP10 DUPDROP10 +#define DUPDROP1000 DUPDROP100 DUPDROP100 DUPDROP100 DUPDROP100 DUPDROP100 DUPDROP100 DUPDROP100 DUPDROP100 DUPDROP100 DUPDROP100 + +int +main (int argc, char *argv[]) +{ + unsigned long long start_time, end_time; + + asm volatile ("rdtsc" : "=A" (start_time)); + DUPDROP1000 + asm volatile ("rdtsc" : "=A" (end_time)); + + printf ("%llu\n", end_time - start_time); + + exit (0); +}