#include <stdio.h>

#define get_ticks(var) {					   \
      unsigned int __a, __d;					   \
      asm volatile("rdtsc" : "=a" (__a), "=d" (__d));		   \
      var = ((unsigned long) __a) | (((unsigned long) __d) << 32); \
   } while(0)



int main ( int argc, char *argv[] ) 
{
   unsigned long ticks0, ticks1, ticks_add, ticks_mul; 
   int i, repetitions = 1000;
   double a = 123.456, eps = .000001, eps1 = 1.000001;

   get_ticks(ticks0);
   for( i=0; i<repetitions; i++ ){
      a = a + eps;
   }
   get_ticks(ticks1);
   printf( "add: %.15g\n", a );
   ticks_add = ticks1 - ticks0; 

   get_ticks(ticks0);
   for( i=0; i<repetitions; i++ ){
      a = a * eps1;
   }
   get_ticks(ticks1);
   printf( "mul: %.15g\n", a );
   ticks_mul = ticks1 - ticks0; 

   printf(" ticks \tadd: %ld\tmul: %ld\n", ticks_add, ticks_mul );
   
   return 0;
}
