#include <stdio.h>
#include <time.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
long unsigned tsc_low,
tsc_high,
tsc_low1,
tsc_high1;
} TscMeasurement;
#define rdtsc(low,high) \
__asm__ __volatile__("rdtsc" : "=a" (low), "=d" (high))
inline void tsc_start_measurement (TscMeasurement *tm) {
rdtsc (tm->tsc_low, tm->tsc_high);
}
inline void tsc_stop_measurement (TscMeasurement *tm) {
rdtsc (tm->tsc_low1, tm->tsc_high1);
}
inline long long unsigned tsc_get_ticks (const TscMeasurement *tm)
{
long long unsigned tsc, tsc1;
tsc = (long long unsigned) tm->tsc_high << 32 |
((long long unsigned) tm->tsc_low & 0xffffffff);
tsc1 = (long long unsigned) tm->tsc_high1 << 32 |
((long long unsigned) tm->tsc_low1 & 0xffffffff);
return tsc1 - tsc;
}
#ifdef __cplusplus
}
#endif
int main(void) {
// your code goes here
TscMeasurement ttime;
volatile long long i;
char buf[100];
tsc_start_measurement(&ttime);
for(i=0; i < 10000000UL; i++) {
sprintf(buf
, "%d %s%d%f\n", i
,"bla-bla-bla", -10, 1.3); }
tsc_stop_measurement(&ttime);
printf ("Time: %llu\n", tsc_get_ticks
(&ttime
) );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx0aW1lLmg+IAoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKCnR5cGVkZWYgc3RydWN0IHsKCWxvbmcgdW5zaWduZWQJdHNjX2xvdywKCQkJCQl0c2NfaGlnaCwKCQkJCQl0c2NfbG93MSwKCQkJCQl0c2NfaGlnaDE7Cn0gVHNjTWVhc3VyZW1lbnQ7CgojZGVmaW5lIHJkdHNjKGxvdyxoaWdoKSBcCiAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKQoKaW5saW5lIHZvaWQgdHNjX3N0YXJ0X21lYXN1cmVtZW50IChUc2NNZWFzdXJlbWVudCAqdG0pIHsKCXJkdHNjICh0bS0+dHNjX2xvdywgdG0tPnRzY19oaWdoKTsKfQoKaW5saW5lIHZvaWQgdHNjX3N0b3BfbWVhc3VyZW1lbnQgKFRzY01lYXN1cmVtZW50ICp0bSkgewoJcmR0c2MgKHRtLT50c2NfbG93MSwgdG0tPnRzY19oaWdoMSk7Cn0KCmlubGluZSBsb25nIGxvbmcgdW5zaWduZWQgdHNjX2dldF90aWNrcyAoY29uc3QgVHNjTWVhc3VyZW1lbnQgKnRtKQp7Cglsb25nIGxvbmcgdW5zaWduZWQgdHNjLCB0c2MxOwoJdHNjID0gKGxvbmcgbG9uZyB1bnNpZ25lZCkgdG0tPnRzY19oaWdoIDw8IDMyIHwKCQkoKGxvbmcgbG9uZyB1bnNpZ25lZCkgdG0tPnRzY19sb3cgJiAweGZmZmZmZmZmKTsKCXRzYzEgPSAobG9uZyBsb25nIHVuc2lnbmVkKSB0bS0+dHNjX2hpZ2gxIDw8IDMyIHwKCQkoKGxvbmcgbG9uZyB1bnNpZ25lZCkgdG0tPnRzY19sb3cxICYgMHhmZmZmZmZmZik7CglyZXR1cm4gdHNjMSAtIHRzYzsKfQoKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCiAKaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJVHNjTWVhc3VyZW1lbnQgdHRpbWU7Cgl2b2xhdGlsZSBsb25nIGxvbmcgaTsKCWNoYXIgYnVmWzEwMF07CiAKCXRzY19zdGFydF9tZWFzdXJlbWVudCgmdHRpbWUpOwoJZm9yKGk9MDsgaSA8IDEwMDAwMDAwVUw7IGkrKykgewoJCXNwcmludGYoYnVmLCAiJWQgICAlcyVkJWZcbiIsIGksImJsYS1ibGEtYmxhIiwgLTEwLCAxLjMpOwoJfQoJdHNjX3N0b3BfbWVhc3VyZW1lbnQoJnR0aW1lKTsKCQoJcHJpbnRmICgiVGltZTogJWxsdVxuIiwgdHNjX2dldF90aWNrcygmdHRpbWUpICk7CiAKCXJldHVybiAwOwp9