[SciPy-dev] fft code for testing
Chuck Harris
Chuck.Harris at sdl.usu.edu
Sat May 31 13:23:01 EDT 2003
Hi Pearu,
> Btw, does anybody know an efficient way how to test if
> an integer is a power-of-two in C? Currently djbfft wrapper
> uses
> switch (n) {
> case 2:;case 4:;... case 8192: ..
> }
> but there must be a better way.
Fooling around a bit, I think the construction
int foo(int n)
{
int ok = 1;
if ( n == 1 ||
n == 2 ||
n == 4 ||
n == 8 );
else
ok = 0;
return ok;
}
produces the best looking assembly here. gcc optimizes the
case statement without knowing that:
1) there will usually be a match,
2) it should be faster for small numbers than large numbers.
That said, it probably doesn't matter much. For the curious the
assembler looks like :
foo:
pushl %ebp
movl %esp, %ebp
subl $4, %esp
movl $1, -4(%ebp)
cmpl $1, 8(%ebp)
je .L4
cmpl $2, 8(%ebp)
je .L4
cmpl $4, 8(%ebp)
je .L4
cmpl $8, 8(%ebp)
je .L4
movl $0, -4(%ebp)
.L4:
movl -4(%ebp), %eax
leave
ret
Just how I would do it. Extremely unusual, really.
Chuck
_______________________________________________
Scipy-dev mailing list
Scipy-dev at scipy.net
http://www.scipy.net/mailman/listinfo/scipy-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: winmail.dat
Type: application/ms-tnef
Size: 2869 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/scipy-dev/attachments/20030531/fed329af/attachment.bin>
More information about the SciPy-Dev
mailing list