#include static inline int test_rolw(unsigned short *s) { int i, start, end; asm volatile("rdtsc\n\t" "movl %%eax, %1\n\t" "movzwl %3,%2\n\t" "rolw $8, %w2\n\t" "addl $1,%2\n\t" "rdtsc" : "=&a"(end), "=r"(start), "=r"(i) : "m"(*s) : "edx"); return end - start; } static inline int test_bswap(unsigned short *s) { int i, start, end; asm volatile("rdtsc\n\t" "movl %%eax, %1\n\t" "movzwl %3,%2\n\t" "bswap %2\n\t" "shl $16,%2\n\t" "addl $1,%2\n\t" "rdtsc" : "=&a"(end), "=r"(start), "=r"(i) : "m"(*s) : "edx"); return end - start; } #define N 10 int main() { unsigned t_r[N], t_b[N]; unsigned short s = 0; int i; for (i = 0; i < N; ++i) t_r[i] = test_rolw(&s); for (i = 0; i < N; ++i) t_b[i] = test_bswap(&s); printf("rolw\t"); for (i = 0; i < N; ++i) printf("%5u", t_r[i]); printf("\nbswap\t"); for (i = 0; i < N; ++i) printf("%5u", t_b[i]); printf("\n"); }