| @/* |
| @ ** Copyright 2003-2010, VisualOn, Inc. |
| @ ** |
| @ ** Licensed under the Apache License, Version 2.0 (the "License"); |
| @ ** you may not use this file except in compliance with the License. |
| @ ** You may obtain a copy of the License at |
| @ ** |
| @ ** http://www.apache.org/licenses/LICENSE-2.0 |
| @ ** |
| @ ** Unless required by applicable law or agreed to in writing, software |
| @ ** distributed under the License is distributed on an "AS IS" BASIS, |
| @ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| @ ** See the License for the specific language governing permissions and |
| @ ** limitations under the License. |
| @ */ |
| |
| @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
| @ File: R4R8First_v5.s |
| @ |
| @ Content: Radix8First and Radix4First function armv5 assemble |
| @ |
| @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ |
| |
| .section .text |
| .global Radix4First |
| |
| Radix4First: |
| stmdb sp!, {r4 - r11, lr} |
| |
| movs r10, r1 |
| mov r11, r0 |
| beq Radix4First_END |
| |
| Radix4First_LOOP: |
| ldrd r0, [r11] |
| ldrd r2, [r11, #8] |
| ldrd r4, [r11, #16] |
| ldrd r6, [r11, #24] |
| |
| add r8, r0, r2 |
| add r9, r1, r3 |
| |
| sub r0, r0, r2 |
| sub r1, r1, r3 |
| |
| add r2, r4, r6 |
| add r3, r5, r7 |
| |
| sub r4, r4, r6 |
| sub r5, r5, r7 |
| |
| add r6, r8, r2 |
| add r7, r9, r3 |
| |
| sub r8, r8, r2 |
| sub r9, r9, r3 |
| |
| add r2, r0, r5 |
| sub r3, r1, r4 |
| |
| sub r0, r0, r5 |
| add r1, r1, r4 |
| |
| strd r6, [r11] |
| strd r2, [r11, #8] |
| strd r8, [r11, #16] |
| strd r0, [r11, #24] |
| |
| subs r10, r10, #1 |
| add r11, r11, #32 |
| bne Radix4First_LOOP |
| |
| Radix4First_END: |
| ldmia sp!, {r4 - r11, pc} |
| @ENDP @ |Radix4First| |
| |
| .section .text |
| .global Radix8First |
| |
| Radix8First: |
| stmdb sp!, {r4 - r11, lr} |
| sub sp, sp, #0x24 |
| |
| mov r12, r1 |
| mov r14, r0 |
| cmp r12, #0 |
| beq Radix8First_END |
| |
| Radix8First_LOOP: |
| ldrd r0, [r14] |
| ldrd r2, [r14, #8] |
| ldrd r4, [r14, #16] |
| ldrd r6, [r14, #24] |
| |
| add r8, r0, r2 @ r0 = buf[0] + buf[2]@ |
| add r9, r1, r3 @ i0 = buf[1] + buf[3]@ |
| |
| sub r0, r0, r2 @ r1 = buf[0] - buf[2]@ |
| sub r1, r1, r3 @ i1 = buf[1] - buf[3]@ |
| |
| add r2, r4, r6 @ r2 = buf[4] + buf[6]@ |
| add r3, r5, r7 @ i2 = buf[5] + buf[7]@ |
| |
| sub r4, r4, r6 @ r3 = buf[4] - buf[6]@ |
| sub r5, r5, r7 @ i3 = buf[5] - buf[7]@ |
| |
| add r6, r8, r2 @ r4 = (r0 + r2) >> 1@ |
| add r7, r9, r3 @ i4 = (i0 + i2) >> 1@ |
| |
| sub r8, r8, r2 @ r5 = (r0 - r2) >> 1@ |
| sub r9, r9, r3 @ i5 = (i0 - i2) >> 1@ |
| |
| sub r2, r0, r5 @ r6 = (r1 - i3) >> 1@ |
| add r3, r1, r4 @ i6 = (i1 + r3) >> 1@ |
| |
| add r0, r0, r5 @ r7 = (r1 + i3) >> 1@ |
| sub r1, r1, r4 @ i7 = (i1 - r3) >> 1@ |
| |
| mov r6, r6, asr #1 @ |
| mov r7, r7, asr #1 @ |
| |
| mov r8, r8, asr #1 |
| mov r9, r9, asr #1 |
| |
| mov r2, r2, asr #1 |
| mov r3, r3, asr #1 |
| |
| mov r0, r0, asr #1 |
| mov r1, r1, asr #1 |
| |
| str r6, [sp] |
| str r7, [sp, #4] |
| |
| str r8, [sp, #8] |
| str r9, [sp, #12] |
| |
| str r2, [sp, #16] |
| str r3, [sp, #20] |
| |
| str r0, [sp, #24] |
| str r1, [sp, #28] |
| |
| ldrd r2, [r14, #32] |
| ldrd r4, [r14, #40] |
| ldrd r6, [r14, #48] |
| ldrd r8, [r14, #56] |
| |
| add r0, r2, r4 @ r0 = buf[ 8] + buf[10]@ |
| add r1, r3, r5 @ i0 = buf[ 9] + buf[11]@ |
| |
| sub r2, r2, r4 @ r1 = buf[ 8] - buf[10]@ |
| sub r3, r3, r5 @ i1 = buf[ 9] - buf[11]@ |
| |
| add r4, r6, r8 @ r2 = buf[12] + buf[14]@ |
| add r5, r7, r9 @ i2 = buf[13] + buf[15]@ |
| |
| sub r6, r6, r8 @ r3 = buf[12] - buf[14]@ |
| sub r7, r7, r9 @ i3 = buf[13] - buf[15]@ |
| |
| add r8, r0, r4 @ t0 = (r0 + r2) |
| add r9, r1, r5 @ t1 = (i0 + i2) |
| |
| sub r0, r0, r4 @ t2 = (r0 - r2) |
| sub r1, r1, r5 @ t3 = (i0 - i2) |
| |
| mov r8, r8, asr #1 |
| ldr r4, [sp] |
| |
| mov r9, r9, asr #1 |
| ldr r5, [sp, #4] |
| |
| mov r0, r0, asr #1 |
| mov r1, r1, asr #1 |
| |
| add r10, r4, r8 @ buf[ 0] = r4 + t0@ |
| add r11, r5, r9 @ buf[ 1] = i4 + t1@ |
| |
| sub r4, r4, r8 @ buf[ 8] = r4 - t0@ |
| sub r5, r5, r9 @ buf[ 9] = i4 - t1@ |
| |
| strd r10, [r14] |
| strd r4, [r14, #32] |
| |
| ldr r10, [sp, #8] |
| ldr r11, [sp, #12] |
| |
| add r4, r10, r1 @ buf[ 4] = r5 + t3@ |
| sub r5, r11, r0 @ buf[ 5] = i5 - t2@ |
| |
| sub r10, r10, r1 @ buf[12] = r5 - t3@ |
| add r11, r11, r0 @ buf[13] = i5 + t2@ |
| |
| strd r4, [r14, #16] |
| strd r10, [r14, #48] |
| |
| sub r0, r2, r7 @ r0 = r1 - i3@ |
| add r1, r3, r6 @ i0 = i1 + r3@ |
| |
| ldr r11, DATATab |
| |
| add r2, r2, r7 @ r2 = r1 + i3@ |
| sub r3, r3, r6 @ i2 = i1 - r3@ |
| |
| sub r4, r0, r1 @ r0 - i0 |
| add r5, r0, r1 @ r0 + i0 |
| |
| sub r0, r2, r3 @ r2 - i2 |
| add r1, r2, r3 @ r2 + i2 |
| |
| smull r8, r6, r4, r11 |
| smull r9, r7, r5, r11 |
| |
| ldr r2, [sp, #16] |
| ldr r3, [sp, #20] |
| |
| smull r8, r4, r0, r11 |
| smull r9, r5, r1, r11 |
| |
| ldr r10, [sp, #24] |
| ldr r11, [sp, #28] |
| |
| sub r8, r2, r6 |
| sub r9, r3, r7 |
| |
| add r2, r2, r6 |
| add r3, r3, r7 |
| |
| add r6, r10, r5 |
| sub r7, r11, r4 |
| |
| sub r0, r10, r5 |
| add r1, r11, r4 |
| |
| strd r6, [r14, #8] |
| strd r8, [r14, #24] |
| strd r0, [r14, #40] |
| strd r2, [r14, #56] |
| |
| subs r12, r12, #1 |
| add r14, r14, #64 |
| |
| bne Radix8First_LOOP |
| |
| Radix8First_END: |
| add sp, sp, #0x24 |
| ldmia sp!, {r4 - r11, pc} |
| |
| DATATab: |
| .word 0x5a82799a |
| |
| @ENDP @ |Radix8First| |
| .end |