Mercurial > hg > peckfft
comparison kf_bfly4.S @ 10:05f6ab0a17c0
backup
author | Peter Meerwald <p.meerwald@bct-electronic.com> |
---|---|
date | Wed, 21 Sep 2011 15:20:58 +0200 |
parents | |
children | abdcde012978 |
comparison
equal
deleted
inserted
replaced
9:8726585681f6 | 10:05f6ab0a17c0 |
---|---|
1 .cpu cortex-a8 | |
2 .eabi_attribute 27, 3 | |
3 .fpu neon | |
4 .eabi_attribute 23, 1 | |
5 .eabi_attribute 24, 1 | |
6 .eabi_attribute 25, 1 | |
7 .eabi_attribute 26, 2 | |
8 .eabi_attribute 30, 1 | |
9 .eabi_attribute 18, 4 | |
10 | |
11 .text | |
12 .align 2 | |
13 .global kf_bfly4 | |
14 .type kf_bfly4, %function | |
15 kf_bfly4: | |
16 .fnstart | |
17 .cfi_startproc | |
18 stmfd sp!, {r4, r5, r6, r7, r8, sl} | |
19 .save {r4, r5, r6, r7, r8, sl} | |
20 mov r4, r3, asl #1 | |
21 add r6, r4, r3 | |
22 add ip, r2, #264 | |
23 ldr r2, [r2, #4] | |
24 cmp r2, #0 | |
25 beq .forward | |
26 mov r8, r1, asl #4 | |
27 mov r7, r1, asl #5 | |
28 add r1, r1, r1, asl #1 | |
29 mov r1, r1, asl #4 | |
30 add r2, r0, #0 | |
31 add r5, r0, r3, asl #4 | |
32 add r4, r0, r4, asl #4 | |
33 add r0, r0, r6, asl #4 | |
34 mov sl, ip | |
35 mov r6, ip | |
36 .inverse_loop: | |
37 // C_MUL(scratch[0], Fout[m], *tw1); | |
38 vld1.32 {d18,d19}, [r5] | |
39 vld1.32 {d16,d17}, [ip] | |
40 vmul.f32 d20, d18, d16 | |
41 vmls.f32 d20, d19, d17 | |
42 vmul.f32 d21, d16, d19 | |
43 vmla.f32 d21, d18, d17 | |
44 | |
45 // C_MUL(scratch[3], Fout[m2], *tw2); | |
46 vld1.32 {d18,d19}, [r4] | |
47 vld1.32 {d16,d17}, [r6] | |
48 vmul.f32 d22, d18, d16 | |
49 vmls.f32 d22, d19, d17 | |
50 vmul.f32 d23, d16, d19 | |
51 vmla.f32 d23, d18, d17 | |
52 | |
53 // C_MUL(scratch[2], Fout[m3], *tw3); | |
54 vld1.32 {d18,d19}, [r0] | |
55 vld1.32 {d16,d17}, [sl] | |
56 vmul.f32 d24, d18, d16 | |
57 vmls.f32 d24, d19, d17 | |
58 vmul.f32 d25, d16, d19 | |
59 vmla.f32 d25, d18, d17 | |
60 | |
61 // C_SUB(scratch[1], *Fout, scratch[3]); | |
62 vld1.32 {d16,d17}, [r2] | |
63 vsubq.f32 q13, q8, q11 | |
64 | |
65 // C_ADDTO(*Fout, scratch[3]); | |
66 vaddq.f32 q8, q8, q11 | |
67 vst1.32 {d16,d17}, [r2] | |
68 | |
69 // C_ADD(scratch[3], scratch[0], scratch[2]); | |
70 vaddq.f32 q11, q10, q12 | |
71 | |
72 // C_SUB(Fout[m2], *Fout, scratch[3]); | |
73 vsubq.f32 q9, q8, q11 | |
74 vst1.32 {d18,d19}, [r4]! | |
75 | |
76 // C_ADDTO(*Fout, scratch[3]); | |
77 vaddq.f32 q8, q8, q11 | |
78 vst1.32 {d16,d17}, [r2]! | |
79 | |
80 add ip, ip, r8 | |
81 add r6, r6, r7 | |
82 add sl, sl, r1 | |
83 | |
84 // C_SUB(scratch[3], scratch[0], scratch[2]); | |
85 vsubq.f32 q11, q10, q12 | |
86 | |
87 // Fout[m].r = scratch[1].r - scratch[3].i; | |
88 // Fout[m].i = scratch[1].i + scratch[3].r; | |
89 vsub.f32 d18, d26, d23 | |
90 vadd.f32 d19, d27, d22 | |
91 vst1.32 {d18,d19}, [r5]! | |
92 | |
93 // Fout[m3].r = scratch[1].r + scratch[3].i; | |
94 // Fout[m3].i = scratch[1].i - scratch[3].r; | |
95 vadd.f32 d18, d26, d23 | |
96 vsub.f32 d19, d27, d22 | |
97 vst1.32 {d18,d19}, [r0]! | |
98 | |
99 subs r3, r3, #1 | |
100 bne .inverse_loop | |
101 b .done | |
102 .forward: | |
103 mov r8, r1, asl #4 | |
104 mov r7, r1, asl #5 | |
105 add r1, r1, r1, asl #1 | |
106 mov r1, r1, asl #4 | |
107 add r2, r0, #0 | |
108 add r5, r0, r3, asl #4 | |
109 add r4, r0, r4, asl #4 | |
110 add r0, r0, r6, asl #4 | |
111 mov sl, ip | |
112 mov r6, ip | |
113 .forward_loop: | |
114 // C_MUL(scratch[0], Fout[m], *tw1); | |
115 vld1.32 {d18,d19}, [r5] | |
116 vld1.32 {d16,d17}, [ip] | |
117 vmul.f32 d20, d18, d16 | |
118 vmls.f32 d20, d19, d17 | |
119 vmul.f32 d21, d16, d19 | |
120 vmla.f32 d21, d18, d17 | |
121 | |
122 // C_MUL(scratch[3], Fout[m2], *tw2); | |
123 vld1.32 {d18,d19}, [r4] | |
124 vld1.32 {d16,d17}, [r6] | |
125 vmul.f32 d22, d18, d16 | |
126 vmls.f32 d22, d19, d17 | |
127 vmul.f32 d23, d16, d19 | |
128 vmla.f32 d23, d18, d17 | |
129 | |
130 // C_MUL(scratch[2], Fout[m3], *tw3); | |
131 vld1.32 {d18,d19}, [r0] | |
132 vld1.32 {d16,d17}, [sl] | |
133 vmul.f32 d24, d18, d16 | |
134 vmls.f32 d24, d19, d17 | |
135 vmul.f32 d25, d16, d19 | |
136 vmla.f32 d25, d18, d17 | |
137 | |
138 // C_SUB(scratch[1], *Fout, scratch[3]); | |
139 vld1.32 {d16,d17}, [r2] | |
140 vsubq.f32 q13, q8, q11 | |
141 | |
142 // C_ADDTO(*Fout, scratch[3]); | |
143 vaddq.f32 q8, q8, q11 | |
144 vst1.32 {d16,d17}, [r2] | |
145 | |
146 // C_ADD(scratch[3], scratch[0], scratch[2]); | |
147 vaddq.f32 q11, q10, q12 | |
148 | |
149 // C_SUB(Fout[m2], *Fout, scratch[3]); | |
150 vsubq.f32 q9, q8, q11 | |
151 vst1.32 {d18,d19}, [r4]! | |
152 | |
153 // C_ADDTO(*Fout, scratch[3]); | |
154 vaddq.f32 q8, q8, q11 | |
155 vst1.32 {d16,d17}, [r2]! | |
156 | |
157 add ip, ip, r8 | |
158 add r6, r6, r7 | |
159 add sl, sl, r1 | |
160 | |
161 // C_SUB(scratch[3], scratch[0], scratch[2]); | |
162 vsubq.f32 q11, q10, q12 | |
163 | |
164 // Fout[m].r = scratch[1].r - scratch[3].i; | |
165 // Fout[m].i = scratch[1].i + scratch[3].r; | |
166 vadd.f32 d18, d26, d23 | |
167 vsub.f32 d19, d27, d22 | |
168 vst1.32 {d18,d19}, [r5]! | |
169 | |
170 // Fout[m3].r = scratch[1].r + scratch[3].i; | |
171 // Fout[m3].i = scratch[1].i - scratch[3].r; | |
172 vsub.f32 d18, d26, d23 | |
173 vadd.f32 d19, d27, d22 | |
174 vst1.32 {d18,d19}, [r0]! | |
175 | |
176 subs r3, r3, #1 | |
177 bne .forward_loop | |
178 .done: | |
179 ldmfd sp!, {r4, r5, r6, r7, r8, sl} | |
180 bx lr | |
181 .cfi_endproc | |
182 .fnend | |
183 .size kf_bfly4, .-kf_bfly4 | |
184 |