#include #include #include #include /*Dead simple (but slow) versions to compare against.*/ static int test_ilog32(uint32_t _v){ int ret; for(ret=0;_v;ret++)_v>>=1; return ret; } static int test_ilog64(uint64_t _v){ int ret; for(ret=0;_v;ret++)_v>>=1; return ret; } #define NTRIALS (64) int main(int _argc,const char *_argv[]){ int i; int j; int (*il32)(uint32_t) = ilog32; int (*il64)(uint64_t) = ilog64; int (*il32_nz)(uint32_t) = ilog32_nz; int (*il64_nz)(uint64_t) = ilog64_nz; /*This is how many tests you plan to run.*/ plan_tests(33 * NTRIALS * 3 + 65 * NTRIALS * 3); for(i=0;i<=32;i++){ uint32_t v; /*Test each bit in turn (and 0).*/ v=i?(uint32_t)1U<<(i-1):0; for(j=0;j>((33-i)>>1)>>((32-i)>>1); } } for(i=0;i<=64;i++){ uint64_t v; /*Test each bit in turn (and 0).*/ v=i?(uint64_t)1U<<(i-1):0; for(j=0;j>((65-i)>>1)>>((64-i)>>1)); } } return exit_status(); }