#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() {
// 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+IAoKI2lmZGVmIF9fY3BsdXNwbHVzCmV4dGVybiAiQyIgewojZW5kaWYKIAp0eXBlZGVmIHN0cnVjdCB7Cglsb25nIHVuc2lnbmVkCXRzY19sb3csCgkJCQkJdHNjX2hpZ2gsCgkJCQkJdHNjX2xvdzEsCgkJCQkJdHNjX2hpZ2gxOwp9IFRzY01lYXN1cmVtZW50OwogCiNkZWZpbmUgcmR0c2MobG93LGhpZ2gpIFwKICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogIj1hIiAobG93KSwgIj1kIiAoaGlnaCkpCiAKaW5saW5lIHZvaWQgdHNjX3N0YXJ0X21lYXN1cmVtZW50IChUc2NNZWFzdXJlbWVudCAqdG0pIHsKCXJkdHNjICh0bS0+dHNjX2xvdywgdG0tPnRzY19oaWdoKTsKfQogCmlubGluZSB2b2lkIHRzY19zdG9wX21lYXN1cmVtZW50IChUc2NNZWFzdXJlbWVudCAqdG0pIHsKCXJkdHNjICh0bS0+dHNjX2xvdzEsIHRtLT50c2NfaGlnaDEpOwp9CiAKaW5saW5lIGxvbmcgbG9uZyB1bnNpZ25lZCB0c2NfZ2V0X3RpY2tzIChjb25zdCBUc2NNZWFzdXJlbWVudCAqdG0pCnsKCWxvbmcgbG9uZyB1bnNpZ25lZCB0c2MsIHRzYzE7Cgl0c2MgPSAobG9uZyBsb25nIHVuc2lnbmVkKSB0bS0+dHNjX2hpZ2ggPDwgMzIgfAoJCSgobG9uZyBsb25nIHVuc2lnbmVkKSB0bS0+dHNjX2xvdyAmIDB4ZmZmZmZmZmYpOwoJdHNjMSA9IChsb25nIGxvbmcgdW5zaWduZWQpIHRtLT50c2NfaGlnaDEgPDwgMzIgfAoJCSgobG9uZyBsb25nIHVuc2lnbmVkKSB0bS0+dHNjX2xvdzEgJiAweGZmZmZmZmZmKTsKCXJldHVybiB0c2MxIC0gdHNjOwp9CiAKI2lmZGVmIF9fY3BsdXNwbHVzCn0KI2VuZGlmCgppbnQgbWFpbigpIHsKCQkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCglUc2NNZWFzdXJlbWVudCB0dGltZTsKCXZvbGF0aWxlIGxvbmcgbG9uZyBpOwoJY2hhciBidWZbMTAwXTsKIAoJdHNjX3N0YXJ0X21lYXN1cmVtZW50KCZ0dGltZSk7Cglmb3IoaT0wOyBpIDwgMTAwMDAwMDBVTDsgaSsrKSB7CgkJc3ByaW50ZihidWYsICIlZCAgICVzJWQlZlxuIiwgaSwiYmxhLWJsYS1ibGEiLCAtMTAsIDEuMyk7Cgl9Cgl0c2Nfc3RvcF9tZWFzdXJlbWVudCgmdHRpbWUpOwogCglwcmludGYgKCJUaW1lOiAlbGx1XG4iLCB0c2NfZ2V0X3RpY2tzKCZ0dGltZSkgKTsKIAoJcmV0dXJuIDA7Cn0=