lua
move
;
Intermediate Passes -- W(n) < 1
;
;
A---\
/---A'= Re[ A + jC + (B - jD)W(k) ] = A+BWr+DWi=A+T1
;
B----\_|_/----B'= Im[ A + jC - (B - jD)W(k) ] = C+DWr-BWi=T2+C
;
C----/ | \----C'= Re[ A + jC - (B - jD)W(k) ] = A-(BWr+DWi)=A-T1
;
D---/
\---D'= Im[-A - jC - (B - jD)W(k) ] = -C+DWr-BWi=T2-C
; ______________________________
move
move
move
do
mpy
mac
sub
addl
mpy
mac
sub
addl
end_bfly
move
end_group
move
end_pass
;the last pass converts bergland order to normal order by calling bergtable
move
move
move
move
move
move
move
move
; first group in the last pass
move
sub
addl
sub
move
add
move
move
do
B - 24
BENCHMARK PROGRAMS
(r0)+n0,r1
r1,r5
x:(r2)+,x0
y:(r6)+,y0
x:(r1)-,x1
y:(r5),y1
x:(r1),B
n0,end_bfly
-x1,x0,B B,x:(r1)
y0,y1,B y:(r4),A
A,B
B,A x:(r1)+,B B,x:(r5)+
-x1,y0,B x:(r0),A A,y:(r4)+
-x0,y1,B x:(r1)-,x1
B,A
A,B A,x:(r0)+ y:(r5),y1
B,x:(r1)+
#idata,r0
r7,r2
r2,r6
r0,r4
#bergtable,r3
#(points/4)-1,n2
x:(r3)+,r7
x:(r3)+,r1
#2,n4
x:(r0)+,A y:(r4)+,B
B,A x:(r0)+,x0 y:(r6)+,y0
A,B A,x:(r1) y:(r4),A
x0,A B,x:(r7)
y:(r4)+,B
x0,B A,y:(r1)
x:(r0)+,A B,y:(r7)
x:(r2)+,x0 y:(r4)+,B
n2,end_lastg
BENCHMARK PROGRAMS
;r1 ptr to next group b
;r5 ptr to next group d
;x0=Wi, y0=Wr
;x1=b,y1=d
;for pointer reason
;n0 bfly in this group
;B=-bWi, PUT c' to x:b
;B=dWr-bWi=T2, A=c
;B=T2-c=d'
;A=T2+c=b', PUT d'
;B=-bWr, A=a, PUT b' to y:c
;B=-bWr-dWi=-T1, x1=next b
;A=a+T1=a'
;B=a-T1=c', y1=next d, PUT a'
;PUT last b'
;r0 = ptr to a
;r2 points to real twiddle
;r6 points to imag twiddle
r4 points to c
;r3=pointer of bergland table
;n2=group per pass -1
;get first index
;get second index
;A=a, B=c
;A=a-c=c',x0=b, y0=Wr for next bfly
;B=a+c=a', A=d,PUT c' to x:b
;A=d-b=d',PUT a' to x
;B=d
;B=d+b=b', A=next a,PUT d'
;A=next a, PUT b'
;x0=Wi,B=next c
;rest groups in the last pass
MOTOROLA