Ради интереса решил проверить, сколько тактов процессора занимает выполнение функций из самописной библиотечки.
После бессонной ночи накидал за пару минут такой код, и завалился спать:
functest.c:
#include <stdio.h>
#include "library.h"
extern unsigned long long _tsc(void);
int main(int c, char **v) {
float arg, ret;
unsigned long long test, start_tsc;
int i;
sscanf(v[0], "%f", arg);
test=0;
for(i=0;i<=10;i++) {
start_tsc = _tsc();
ret = lib_func(arg);
test += (_tsc()-start_tsc);
}
printf("%lld\n", test/10);
return 0;
}
rdtsc.asm:
GLOBAL _tsc
_tsc:
rdtsc
ret
Сборка:
nasm -f elf32 rdtsc.asm
gcc -c functest.c
gcc functest.o rdtsc.o library.so -o functest
Собственно, будет ли оно показывать то что надо, или всё-таки температуру на марсе?