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

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.