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}

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