Motorola DSP96002 User Manual
Page 541
B-22
DSP96002 USER’S MANUAL
MOTOROLA
move #temp,r2 ;initialize temp storage pointers 2 2
move (r2)+,r6 ; " 1 1
move #0,r3 ;initialize group index counter 1 1
move #coef+table/4,r1 ;initialize wr (cos) pointer 2 2
move #coef,r5 ;initialize wi (sin) pointer 2 2
;
; Perform all FFT passes with triple nested DO loops
;
do #@cvi(@log(points)/@log(4)+0.5),_end_pass 2 3
move #data,r4 2 2
do n2,_end_grp 2 3
move r3,n5 ;update rotation factor 1 1
move n5,n1 ; " 1 1
move (r5)+n5 ;point at wi1 1 1
move (r1)+n1 ;point at wr1 1 1
move (r4)+n4 1 1
move r4,r0 ;point at B data (br,bi) 1 1
move (r4)+n4 1 1
move (r4)+n4 ;point at D data (dr,di) 1 1
do n0,_end_bfy 2 3
move x:(r4),d0.s 1 1
move x:(r0),d7.s y:(r4),d2.s 1 1
faddsub.s d0,d7 y:(r0)-n0,d5.s 1 1
faddsub.s d5,d2 x:(r0),d1.s 1 1
move x:(r4)-n4,d4.s 1 1
move x:(r4),d4.s y:(r0),d6.s 1 1
faddsub.s d1,d4 d2.s,x:(r2)+ y:(r4),d3.s 1 1
faddsub.s d1,d5 y:(r1)+n1,d8.s 1 1
fmpy d5,d8,d2 faddsub.s d6,d3 y:(r5)+n5,d9.s 1 1
fmpy d5,d9,d3 faddsub.s d6,d0 d1.s,x:(r2)- d3.s,y:(r6) 1 1
faddsub.s d4,d7 d0.s,d6.s d6.s,y:(r2) 1 1
fmpy.s d6,d9,d0 y:(r5)+n5,d9.s 1 1
fmpy d6,d8,d0 fadd.s d0,d2 y:(r1)+n1,d8.s 1 1
fmpy d4,d8,d3 fsub.s d3,d0 x:(r2)+,d1.s y:(r6),d5.s 1 1
faddsub.s d5,d1 x:(r2)-,d6.s 1 1
fmpy.s d4,d9,d1 d7.s,x:(r0)+n0 d1.s,y: 1 1
fmpy.s d5,d8,d2 d2.s,x:(r0) d0.s,y: 1 1