R4R8First_v5.s revision f3664ae9369a861ffbc2354e8e93e48983802062
1@/* 2@ ** Copyright 2003-2010, VisualOn, Inc. 3@ ** 4@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5@ ** you may not use this file except in compliance with the License. 6@ ** You may obtain a copy of the License at 7@ ** 8@ ** http://www.apache.org/licenses/LICENSE-2.0 9@ ** 10@ ** Unless required by applicable law or agreed to in writing, software 11@ ** distributed under the License is distributed on an "AS IS" BASIS, 12@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13@ ** See the License for the specific language governing permissions and 14@ ** limitations under the License. 15@ */ 16 17@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 18@ File: R4R8First_v5.s 19@ 20@ Content: Radix8First and Radix4First function armv5 assemble 21@ 22@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 23 24 .section .text 25 .global Radix4First 26 27Radix4First: 28 stmdb sp!, {r4 - r11, lr} 29 30 movs r10, r1 31 mov r11, r0 32 beq Radix4First_END 33 34Radix4First_LOOP: 35 ldrd r0, [r11] 36 ldrd r2, [r11, #8] 37 ldrd r4, [r11, #16] 38 ldrd r6, [r11, #24] 39 40 add r8, r0, r2 41 add r9, r1, r3 42 43 sub r0, r0, r2 44 sub r1, r1, r3 45 46 add r2, r4, r6 47 add r3, r5, r7 48 49 sub r4, r4, r6 50 sub r5, r5, r7 51 52 add r6, r8, r2 53 add r7, r9, r3 54 55 sub r8, r8, r2 56 sub r9, r9, r3 57 58 add r2, r0, r5 59 sub r3, r1, r4 60 61 sub r0, r0, r5 62 add r1, r1, r4 63 64 strd r6, [r11] 65 strd r2, [r11, #8] 66 strd r8, [r11, #16] 67 strd r0, [r11, #24] 68 69 subs r10, r10, #1 70 add r11, r11, #32 71 bne Radix4First_LOOP 72 73Radix4First_END: 74 ldmia sp!, {r4 - r11, pc} 75 @ENDP @ |Radix4First| 76 77 .section .text 78 .global Radix8First 79 80Radix8First: 81 stmdb sp!, {r4 - r11, lr} 82 sub sp, sp, #0x24 83 84 mov r12, r1 85 mov r14, r0 86 cmp r12, #0 87 beq Radix8First_END 88 89Radix8First_LOOP: 90 ldrd r0, [r14] 91 ldrd r2, [r14, #8] 92 ldrd r4, [r14, #16] 93 ldrd r6, [r14, #24] 94 95 add r8, r0, r2 @ r0 = buf[0] + buf[2]@ 96 add r9, r1, r3 @ i0 = buf[1] + buf[3]@ 97 98 sub r0, r0, r2 @ r1 = buf[0] - buf[2]@ 99 sub r1, r1, r3 @ i1 = buf[1] - buf[3]@ 100 101 add r2, r4, r6 @ r2 = buf[4] + buf[6]@ 102 add r3, r5, r7 @ i2 = buf[5] + buf[7]@ 103 104 sub r4, r4, r6 @ r3 = buf[4] - buf[6]@ 105 sub r5, r5, r7 @ i3 = buf[5] - buf[7]@ 106 107 add r6, r8, r2 @ r4 = (r0 + r2) >> 1@ 108 add r7, r9, r3 @ i4 = (i0 + i2) >> 1@ 109 110 sub r8, r8, r2 @ r5 = (r0 - r2) >> 1@ 111 sub r9, r9, r3 @ i5 = (i0 - i2) >> 1@ 112 113 sub r2, r0, r5 @ r6 = (r1 - i3) >> 1@ 114 add r3, r1, r4 @ i6 = (i1 + r3) >> 1@ 115 116 add r0, r0, r5 @ r7 = (r1 + i3) >> 1@ 117 sub r1, r1, r4 @ i7 = (i1 - r3) >> 1@ 118 119 mov r6, r6, asr #1 @ 120 mov r7, r7, asr #1 @ 121 122 mov r8, r8, asr #1 123 mov r9, r9, asr #1 124 125 mov r2, r2, asr #1 126 mov r3, r3, asr #1 127 128 mov r0, r0, asr #1 129 mov r1, r1, asr #1 130 131 str r6, [sp] 132 str r7, [sp, #4] 133 134 str r8, [sp, #8] 135 str r9, [sp, #12] 136 137 str r2, [sp, #16] 138 str r3, [sp, #20] 139 140 str r0, [sp, #24] 141 str r1, [sp, #28] 142 143 ldrd r2, [r14, #32] 144 ldrd r4, [r14, #40] 145 ldrd r6, [r14, #48] 146 ldrd r8, [r14, #56] 147 148 add r0, r2, r4 @ r0 = buf[ 8] + buf[10]@ 149 add r1, r3, r5 @ i0 = buf[ 9] + buf[11]@ 150 151 sub r2, r2, r4 @ r1 = buf[ 8] - buf[10]@ 152 sub r3, r3, r5 @ i1 = buf[ 9] - buf[11]@ 153 154 add r4, r6, r8 @ r2 = buf[12] + buf[14]@ 155 add r5, r7, r9 @ i2 = buf[13] + buf[15]@ 156 157 sub r6, r6, r8 @ r3 = buf[12] - buf[14]@ 158 sub r7, r7, r9 @ i3 = buf[13] - buf[15]@ 159 160 add r8, r0, r4 @ t0 = (r0 + r2) 161 add r9, r1, r5 @ t1 = (i0 + i2) 162 163 sub r0, r0, r4 @ t2 = (r0 - r2) 164 sub r1, r1, r5 @ t3 = (i0 - i2) 165 166 mov r8, r8, asr #1 167 ldr r4, [sp] 168 169 mov r9, r9, asr #1 170 ldr r5, [sp, #4] 171 172 mov r0, r0, asr #1 173 mov r1, r1, asr #1 174 175 add r10, r4, r8 @ buf[ 0] = r4 + t0@ 176 add r11, r5, r9 @ buf[ 1] = i4 + t1@ 177 178 sub r4, r4, r8 @ buf[ 8] = r4 - t0@ 179 sub r5, r5, r9 @ buf[ 9] = i4 - t1@ 180 181 strd r10, [r14] 182 strd r4, [r14, #32] 183 184 ldr r10, [sp, #8] 185 ldr r11, [sp, #12] 186 187 add r4, r10, r1 @ buf[ 4] = r5 + t3@ 188 sub r5, r11, r0 @ buf[ 5] = i5 - t2@ 189 190 sub r10, r10, r1 @ buf[12] = r5 - t3@ 191 add r11, r11, r0 @ buf[13] = i5 + t2@ 192 193 strd r4, [r14, #16] 194 strd r10, [r14, #48] 195 196 sub r0, r2, r7 @ r0 = r1 - i3@ 197 add r1, r3, r6 @ i0 = i1 + r3@ 198 199 ldr r11, DATATab 200 201 add r2, r2, r7 @ r2 = r1 + i3@ 202 sub r3, r3, r6 @ i2 = i1 - r3@ 203 204 sub r4, r0, r1 @ r0 - i0 205 add r5, r0, r1 @ r0 + i0 206 207 sub r0, r2, r3 @ r2 - i2 208 add r1, r2, r3 @ r2 + i2 209 210 smull r8, r6, r4, r11 211 smull r9, r7, r5, r11 212 213 ldr r2, [sp, #16] 214 ldr r3, [sp, #20] 215 216 smull r8, r4, r0, r11 217 smull r9, r5, r1, r11 218 219 ldr r10, [sp, #24] 220 ldr r11, [sp, #28] 221 222 sub r8, r2, r6 223 sub r9, r3, r7 224 225 add r2, r2, r6 226 add r3, r3, r7 227 228 add r6, r10, r5 229 sub r7, r11, r4 230 231 sub r0, r10, r5 232 add r1, r11, r4 233 234 strd r6, [r14, #8] 235 strd r8, [r14, #24] 236 strd r0, [r14, #40] 237 strd r2, [r14, #56] 238 239 subs r12, r12, #1 240 add r14, r14, #64 241 242 bne Radix8First_LOOP 243 244Radix8First_END: 245 add sp, sp, #0x24 246 ldmia sp!, {r4 - r11, pc} 247 248DATATab: 249 .word 0x5a82799a 250 251 @ENDP @ |Radix8First| 252 .end