BENCHMARK PROGRAMS
B - 12 BENCHMARK PROGRAMS
MOTOROLA
;Latest Revision — September 30, 1986
;move #points/2,n0 ;initialize butterflies per group
move #1,n2 ;initialize groups per pass
move #points/4,n6 ;initialize C pointer offset
move #-1,m0 ;initialize A and B address modifiers
move m0,m1 ;for linear addressing
move m0,m4
move m0,m5
move #0,m6 ;initialize C address modifier for
;reverse carry (bit-reversed) addressing
;
;Perform all FFT passes with triple nested DO loop
;do #@cvi (@log(points)/@log(2)+0.5),_end_pass
move #data,r0 ;initialize A input pointer
move r0,r4 ;initialize A output pointer
lua (r0)+n0,r1 ;initialize B input pointer
move #coef,r6 ;initialize C input pointer
lua (r1)-,r5 ;initialize B output pointer
move n0,n1 ;initialize pointer offsets
move n0,n4
move n0,n5
do n2,_end_grp
move x:(r1),X1 y:(r6),y0 ;lookup -sine and
; -cosine values
move x:(r5),a y:(r0),b ;preload data
move x:(r6)+n6,x0 ;update C pointer
do n0,_end_bfy
mac x1,y0,b y:(r1)+,y1 ;Radx 2 DIT
;butterfly kernel
macr -x0,y1,b a,x:(r5)+ y:(r0),a
subl b,a x:(r0),b b,y:(r4)
mac -x1,x0,b x:(r0)+,a a,y:(r5)
macr -y1,y0,b x:(r1),x1
subl b,a b,x:(r4)+ y:(r0),b
_end_bfy move a,x:(r5)+n5 y:(r1)+n1,y1 ;update A and B pointers
move x:(r0)+n0,x1 y:(r4)+n4,y1
_end_grp move n0,b1 ;divide butterflies per group by two
Isr b n2,a1 ;multiply groups per pass by two
IsI a b1,n0
move a1,n2
_end_passendm
Figure B-2 Radix 2, In-Place, Decimation-In-Time FFT (Sheet 2 of 2) Figure B-5 Real Input FFT Based on Glenn Bergland Algorithm (Sheet 1 of 8)