Mercurial > hg > peckfft
comparison kf_bfly4.S @ 12:655dc5c14169
backup
author | Peter Meerwald <p.meerwald@bct-electronic.com> |
---|---|
date | Thu, 22 Sep 2011 16:58:25 +0200 |
parents | abdcde012978 |
children |
comparison
equal
deleted
inserted
replaced
11:abdcde012978 | 12:655dc5c14169 |
---|---|
34 add r2, r0, #0 | 34 add r2, r0, #0 |
35 add r0, r0, r6, asl #4 | 35 add r0, r0, r6, asl #4 |
36 mov r6, ip | 36 mov r6, ip |
37 .inverse_loop: | 37 .inverse_loop: |
38 // C_MUL(scratch[0], Fout[m], *tw1); | 38 // C_MUL(scratch[0], Fout[m], *tw1); |
39 vld1.32 {d18,d19}, [r5] | 39 vld1.32 {d18,d19}, [r5,:64] |
40 vld1.32 {d16,d17}, [ip] | 40 vld1.32 {d16,d17}, [ip,:64] |
41 vmul.f32 d20, d18, d16 | 41 vmul.f32 d20, d18, d16 |
42 vmul.f32 d21, d16, d19 | 42 vmul.f32 d21, d16, d19 |
43 // load Fout[m2], *tw2 | 43 // load Fout[m2], *tw2 |
44 vld1.32 {d14,d15}, [r4] | 44 vld1.32 {d14,d15}, [r4,:64] |
45 vld1.32 {d12,d13}, [r6] | 45 vld1.32 {d12,d13}, [r6,:64] |
46 vmls.f32 d20, d19, d17 | 46 vmls.f32 d20, d19, d17 |
47 vmla.f32 d21, d18, d17 | 47 vmla.f32 d21, d18, d17 |
48 | 48 |
49 // C_MUL(scratch[3], Fout[m2], *tw2); | 49 // C_MUL(scratch[3], Fout[m2], *tw2); |
50 vmul.f32 d22, d14, d12 | 50 vmul.f32 d22, d14, d12 |
51 vmul.f32 d23, d12, d15 | 51 vmul.f32 d23, d12, d15 |
52 // load Fout[m3], *tw3 | 52 // load Fout[m3], *tw3 |
53 vld1.32 {d18,d19}, [r0] | 53 vld1.32 {d18,d19}, [r0,:64] |
54 vld1.32 {d16,d17}, [sl] | 54 vld1.32 {d16,d17}, [sl,:64] |
55 vmls.f32 d22, d15, d13 | 55 vmls.f32 d22, d15, d13 |
56 vmla.f32 d23, d14, d13 | 56 vmla.f32 d23, d14, d13 |
57 | 57 |
58 // C_MUL(scratch[2], Fout[m3], *tw3); | 58 // C_MUL(scratch[2], Fout[m3], *tw3); |
59 vmul.f32 d24, d18, d16 | 59 vmul.f32 d24, d18, d16 |
60 vmul.f32 d25, d16, d19 | 60 vmul.f32 d25, d16, d19 |
61 | 61 |
62 // C_SUB(scratch[1], *Fout, scratch[3]); | 62 // C_SUB(scratch[1], *Fout, scratch[3]); |
63 vld1.32 {d14,d15}, [r2] | 63 vld1.32 {d14,d15}, [r2,:64] |
64 vsub.f32 q13, q7, q11 | 64 vsub.f32 q13, q7, q11 |
65 | 65 |
66 vmls.f32 d24, d19, d17 | 66 vmls.f32 d24, d19, d17 |
67 vmla.f32 d25, d18, d17 | 67 vmla.f32 d25, d18, d17 |
68 | 68 |
69 // C_ADDTO(*Fout, scratch[3]); | 69 // C_ADDTO(*Fout, scratch[3]); |
70 vadd.f32 q7, q7, q11 | 70 vadd.f32 q7, q7, q11 |
71 // C_ADD(scratch[3], scratch[0], scratch[2]); | 71 // C_ADD(scratch[3], scratch[0], scratch[2]); |
72 vadd.f32 q11, q10, q12 | 72 vadd.f32 q11, q10, q12 |
73 vst1.32 {d16,d17}, [r2] | 73 vst1.32 {d16,d17}, [r2,:64] |
74 | 74 |
75 // C_SUB(Fout[m2], *Fout, scratch[3]); | 75 // C_SUB(Fout[m2], *Fout, scratch[3]); |
76 vsub.f32 q9, q7, q11 | 76 vsub.f32 q9, q7, q11 |
77 vst1.32 {d18,d19}, [r4]! | 77 vst1.32 {d18,d19}, [r4,:64]! |
78 | 78 |
79 // C_ADDTO(*Fout, scratch[3]); | 79 // C_ADDTO(*Fout, scratch[3]); |
80 vadd.f32 q7, q7, q11 | 80 vadd.f32 q7, q7, q11 |
81 vst1.32 {d14,d15}, [r2]! | 81 vst1.32 {d14,d15}, [r2,:64]! |
82 | 82 |
83 add ip, ip, r8 | 83 add ip, ip, r8 |
84 add r6, r6, r7 | 84 add r6, r6, r7 |
85 add sl, sl, r1 | 85 add sl, sl, r1 |
86 | 86 |
89 | 89 |
90 // Fout[m].r = scratch[1].r - scratch[3].i; | 90 // Fout[m].r = scratch[1].r - scratch[3].i; |
91 // Fout[m].i = scratch[1].i + scratch[3].r; | 91 // Fout[m].i = scratch[1].i + scratch[3].r; |
92 vsub.f32 d18, d26, d23 | 92 vsub.f32 d18, d26, d23 |
93 vadd.f32 d19, d27, d22 | 93 vadd.f32 d19, d27, d22 |
94 vst1.32 {d18,d19}, [r5]! | 94 vst1.32 {d18,d19}, [r5,:64]! |
95 | 95 |
96 // Fout[m3].r = scratch[1].r + scratch[3].i; | 96 // Fout[m3].r = scratch[1].r + scratch[3].i; |
97 // Fout[m3].i = scratch[1].i - scratch[3].r; | 97 // Fout[m3].i = scratch[1].i - scratch[3].r; |
98 vadd.f32 d18, d26, d23 | 98 vadd.f32 d18, d26, d23 |
99 vsub.f32 d19, d27, d22 | 99 vsub.f32 d19, d27, d22 |
100 vst1.32 {d18,d19}, [r0]! | 100 vst1.32 {d18,d19}, [r0,:64]! |
101 | 101 |
102 subs r3, r3, #1 | 102 subs r3, r3, #1 |
103 bne .inverse_loop | 103 bne .inverse_loop |
104 b .done | 104 b .done |
105 .forward: | 105 .forward: |
106 add r2, r0, #0 | 106 add r2, r0, #0 |
107 add r0, r0, r6, asl #4 | 107 add r0, r0, r6, asl #4 |
108 mov r6, ip | 108 mov r6, ip |
109 .forward_loop: | 109 .forward_loop: |
110 // C_MUL(scratch[0], Fout[m], *tw1); | 110 // C_MUL(scratch[0], Fout[m], *tw1); |
111 vld1.32 {d18,d19}, [r5] | 111 vld1.32 {d18,d19}, [r5,:64] |
112 vld1.32 {d16,d17}, [ip] | 112 vld1.32 {d16,d17}, [ip,:64] |
113 vmul.f32 d20, d18, d16 | 113 vmul.f32 d20, d18, d16 |
114 vmul.f32 d21, d16, d19 | 114 vmul.f32 d21, d16, d19 |
115 // load Fout[m2], *tw2 | 115 // load Fout[m2], *tw2 |
116 vld1.32 {d14,d15}, [r4] | 116 vld1.32 {d14,d15}, [r4,:64] |
117 vld1.32 {d12,d13}, [r6] | 117 vld1.32 {d12,d13}, [r6,:64] |
118 vmls.f32 d20, d19, d17 | 118 vmls.f32 d20, d19, d17 |
119 vmla.f32 d21, d18, d17 | 119 vmla.f32 d21, d18, d17 |
120 | 120 |
121 // C_MUL(scratch[3], Fout[m2], *tw2); | 121 // C_MUL(scratch[3], Fout[m2], *tw2); |
122 vmul.f32 d22, d14, d12 | 122 vmul.f32 d22, d14, d12 |
123 vmul.f32 d23, d12, d15 | 123 vmul.f32 d23, d12, d15 |
124 // load Fout[m3], *tw3 | 124 // load Fout[m3], *tw3 |
125 vld1.32 {d18,d19}, [r0] | 125 vld1.32 {d18,d19}, [r0,:64] |
126 vld1.32 {d16,d17}, [sl] | 126 vld1.32 {d16,d17}, [sl,:64] |
127 vmls.f32 d22, d15, d13 | 127 vmls.f32 d22, d15, d13 |
128 vmla.f32 d23, d14, d13 | 128 vmla.f32 d23, d14, d13 |
129 | 129 |
130 // C_MUL(scratch[2], Fout[m3], *tw3); | 130 // C_MUL(scratch[2], Fout[m3], *tw3); |
131 vmul.f32 d24, d18, d16 | 131 vmul.f32 d24, d18, d16 |
132 vmul.f32 d25, d16, d19 | 132 vmul.f32 d25, d16, d19 |
133 | 133 |
134 // C_SUB(scratch[1], *Fout, scratch[3]); | 134 // C_SUB(scratch[1], *Fout, scratch[3]); |
135 vld1.32 {d14,d15}, [r2] | 135 vld1.32 {d14,d15}, [r2,:64] |
136 vsub.f32 q13, q7, q11 | 136 vsub.f32 q13, q7, q11 |
137 | 137 |
138 vmls.f32 d24, d19, d17 | 138 vmls.f32 d24, d19, d17 |
139 vmla.f32 d25, d18, d17 | 139 vmla.f32 d25, d18, d17 |
140 | 140 |
141 // C_ADDTO(*Fout, scratch[3]); | 141 // C_ADDTO(*Fout, scratch[3]); |
142 vadd.f32 q7, q7, q11 | 142 vadd.f32 q7, q7, q11 |
143 // C_ADD(scratch[3], scratch[0], scratch[2]); | 143 // C_ADD(scratch[3], scratch[0], scratch[2]); |
144 vadd.f32 q11, q10, q12 | 144 vadd.f32 q11, q10, q12 |
145 vst1.32 {d16,d17}, [r2] | 145 vst1.32 {d16,d17}, [r2,:64] |
146 | 146 |
147 // C_SUB(Fout[m2], *Fout, scratch[3]); | 147 // C_SUB(Fout[m2], *Fout, scratch[3]); |
148 vsub.f32 q9, q7, q11 | 148 vsub.f32 q9, q7, q11 |
149 vst1.32 {d18,d19}, [r4]! | 149 vst1.32 {d18,d19}, [r4,:64]! |
150 | 150 |
151 // C_ADDTO(*Fout, scratch[3]); | 151 // C_ADDTO(*Fout, scratch[3]); |
152 vadd.f32 q7, q7, q11 | 152 vadd.f32 q7, q7, q11 |
153 vst1.32 {d14,d15}, [r2]! | 153 vst1.32 {d14,d15}, [r2,:64]! |
154 | 154 |
155 add ip, ip, r8 | 155 add ip, ip, r8 |
156 add r6, r6, r7 | 156 add r6, r6, r7 |
157 add sl, sl, r1 | 157 add sl, sl, r1 |
158 | 158 |
161 | 161 |
162 // Fout[m].r = scratch[1].r - scratch[3].i; | 162 // Fout[m].r = scratch[1].r - scratch[3].i; |
163 // Fout[m].i = scratch[1].i + scratch[3].r; | 163 // Fout[m].i = scratch[1].i + scratch[3].r; |
164 vadd.f32 d18, d26, d23 | 164 vadd.f32 d18, d26, d23 |
165 vsub.f32 d19, d27, d22 | 165 vsub.f32 d19, d27, d22 |
166 vst1.32 {d18,d19}, [r5]! | 166 vst1.32 {d18,d19}, [r5,:64]! |
167 | 167 |
168 // Fout[m3].r = scratch[1].r + scratch[3].i; | 168 // Fout[m3].r = scratch[1].r + scratch[3].i; |
169 // Fout[m3].i = scratch[1].i - scratch[3].r; | 169 // Fout[m3].i = scratch[1].i - scratch[3].r; |
170 vsub.f32 d18, d26, d23 | 170 vsub.f32 d18, d26, d23 |
171 vadd.f32 d19, d27, d22 | 171 vadd.f32 d19, d27, d22 |
172 vst1.32 {d18,d19}, [r0]! | 172 vst1.32 {d18,d19}, [r0,:64]! |
173 | 173 |
174 subs r3, r3, #1 | 174 subs r3, r3, #1 |
175 bne .forward_loop | 175 bne .forward_loop |
176 .done: | 176 .done: |
177 ldmfd sp!, {r4, r5, r6, r7, r8, sl} | 177 ldmfd sp!, {r4, r5, r6, r7, r8, sl} |