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 |
