@/* | |
@ ** 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 |