[ros-dev] Speed Tests (was: ping Alex regarding log2() forscheduler)

Mark Junker mjscod at gmx.de
Thu Mar 24 10:54:36 CET 2005


Ash schrieb:

> It doesnt make much sense to put the optimized ASM in there, neither 
> is much hope of GCC having a good day and doing a lot of optimisation.
> So far the best option would be the macro with a lookup table (only 
> one global kernel table tho).

What about using inline assembler in a macro - only as a platform 
specific optimization of course?

> result bsr inlined              46ffffe9
> it took         1751088         21%

Using GCC this should be much faster when using

#define get_bits(value) \
    ({                                  \
        int bits = -1;                  \
        __asm("bsr %1, %0\n"            \
              : "+r" (bits)             \
              : "rm" (value));          \
        bits;                           \
    })

This macro returns -1 when no bits were set. I tested it and it works as 
expected. When the -1 as "error" isn't suitable, you might want to 
change it to 0 ... line 3 of the macro.

> result macro                    46ffffe9
> it took         653692          7%

The table approach doesn't seem to be bad either <g>.

Regards,
Mark



More information about the Ros-dev mailing list