comparison kf_bfly4.S @ 11:abdcde012978

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

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