Lines 446-461
fft %+ n %+ %3%2:
Link Here
|
446 |
%endrep |
446 |
%endrep |
447 |
%undef n |
447 |
%undef n |
448 |
|
448 |
|
449 |
align 8 |
449 |
; On x86_32, this function does the register saving and restoring for all of |
450 |
dispatch_tab%3%2: pointer list_of_fft |
450 |
; fft. The others pass args in registers and don't spill anything. |
451 |
|
|
|
452 |
; On x86_32, this function does the register saving and restoring for all of fft. |
453 |
; The others pass args in registers and don't spill anything. |
454 |
cglobal fft_dispatch%3%2, 2,5,0, z, nbits |
451 |
cglobal fft_dispatch%3%2, 2,5,0, z, nbits |
455 |
lea r2, [dispatch_tab%3%2 GLOBAL] |
452 |
|
456 |
mov r2, [r2 + (nbitsq-2)*gprsize] |
453 |
; FIXME: The following jump table like construction can be solved better, I |
|
|
454 |
; just dont know how to manipulate the program counter |
455 |
%assign i 2 |
456 |
%rep 15 |
457 |
cmp nbitsq, i |
458 |
je L %+ i %+ %3%2 |
459 |
%assign i i+1 |
460 |
%endrep |
461 |
|
462 |
%assign i 2 |
463 |
%rep 15 |
464 |
L %+ i %+ %3%2: |
465 |
%assign k 1<<i |
466 |
%if (%1==5 && i==4) || i<4 |
467 |
lea r2, [fft %+ k %+ %2 GLOBAL] |
468 |
%else |
469 |
lea r2, [fft %+ k %+ %3%2 GLOBAL] |
470 |
%endif |
457 |
call r2 |
471 |
call r2 |
458 |
RET |
472 |
RET |
|
|
473 |
%assign i i+1 |
474 |
%endrep |
475 |
%undef i |
476 |
|
459 |
%endmacro ; DECL_FFT |
477 |
%endmacro ; DECL_FFT |
460 |
|
478 |
|
461 |
DECL_FFT 5, _sse |
479 |
DECL_FFT 5, _sse |