477 lines
13 KiB
ArmAsm
477 lines
13 KiB
ArmAsm
@ ------------------------------------------------------------------
|
|
@ Copyright (C) 1998-2009 PacketVideo
|
|
@
|
|
@ 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.
|
|
@ -------------------------------------------------------------------
|
|
|
|
@
|
|
@
|
|
@ Filename: pvmp3_dct_16_gcc.s
|
|
@
|
|
@
|
|
@------------------------------------------------------------------------------
|
|
@ REVISION HISTORY
|
|
@
|
|
@
|
|
@ Who: Date: MM/DD/YYYY
|
|
@ Description:
|
|
@
|
|
@------------------------------------------------------------------------------
|
|
|
|
.arm
|
|
|
|
.align 4
|
|
|
|
.text
|
|
|
|
.extern pvmp3_dct_16
|
|
.extern pvmp3_merge_in_place_N32
|
|
.extern pvmp3_split
|
|
|
|
|
|
|
|
@------------------------------------------------------------------------------
|
|
|
|
.global pvmp3_dct_16
|
|
|
|
pvmp3_dct_16:
|
|
stmfd sp!,{r0,r1,r4-r11,lr}
|
|
ldr r1,[r0]
|
|
ldr r3,[r0,#0x3c]
|
|
ldr r12,constant1
|
|
sub r2,r1,r3
|
|
smull lr,r2,r12,r2
|
|
sub sp,sp,#0x1c
|
|
str r2,[sp,#0x14]
|
|
ldr r2,[r0,#0x1c]
|
|
ldr r12,[r0,#0x20]
|
|
add r1,r1,r3
|
|
sub r3,r2,r12
|
|
ldr lr,constant2
|
|
mov r3,r3,lsl #3
|
|
smull r4,r3,lr,r3
|
|
ldr r6,constant5
|
|
str r3,[sp]
|
|
add r3,r2,r12
|
|
sub r2,r1,r3
|
|
ldr r12,constant3
|
|
add r3,r1,r3
|
|
smull lr,r2,r12,r2
|
|
ldr r12,[r0,#0x38]
|
|
ldr r1,[r0,#4]
|
|
ldr lr,constant4
|
|
sub r4,r1,r12
|
|
add r1,r1,r12
|
|
ldr r12,[r0,#0x18]
|
|
smull r4,r5,lr,r4
|
|
ldr lr,[r0,#0x24]
|
|
ldr r10,constant10
|
|
sub r4,r12,lr
|
|
mov r4,r4,lsl #1
|
|
smull r7,r4,r6,r4
|
|
add r12,r12,lr
|
|
add r7,r1,r12
|
|
sub r12,r1,r12
|
|
ldr r1,constant6
|
|
str r4,[sp,#4]
|
|
smull r12,r4,r1,r12
|
|
ldr r1,[r0,#8]
|
|
ldr r12,[r0,#0x34]
|
|
ldr r6,constant7
|
|
sub lr,r1,r12
|
|
smull r8,lr,r6,lr
|
|
add r1,r1,r12
|
|
str lr,[sp,#0x10]
|
|
ldr r12,[r0,#0x14]
|
|
ldr lr,[r0,#0x28]
|
|
ldr r8,constant8
|
|
sub r6,r12,lr
|
|
mov r6,r6,lsl #1
|
|
smull r9,r6,r8,r6
|
|
add r12,r12,lr
|
|
ldr r9,constant9
|
|
add r8,r1,r12
|
|
sub r12,r1,r12
|
|
smull r12,lr,r9,r12
|
|
ldr r12,[r0,#0x30]
|
|
ldr r1,[r0,#0xc]
|
|
sub r9,r1,r12
|
|
smull r11,r9,r10,r9
|
|
add r12,r1,r12
|
|
str r9,[sp,#0xc]
|
|
ldr r9,[r0,#0x10]
|
|
ldr r10,constant11
|
|
str r9,[sp,#0x18]
|
|
ldr r1,[r0,#0x2c]
|
|
sub r9,r9,r1
|
|
smull r11,r9,r10,r9
|
|
ldr r10,constant12
|
|
str r9,[sp,#8]
|
|
ldr r9,[sp,#0x18]
|
|
ldr r11,constant14
|
|
add r9,r9,r1
|
|
add r1,r12,r9
|
|
sub r12,r12,r9
|
|
mov r12,r12,lsl #2
|
|
smull r9,r12,r10,r12
|
|
ldr r10,constant13
|
|
add r9,r3,r1
|
|
sub r1,r3,r1
|
|
smull r1,r3,r10,r1
|
|
sub r1,r7,r8
|
|
mov r1,r1,lsl #1
|
|
smull r1,r10,r11,r1
|
|
add r1,r7,r8
|
|
add r8,r9,r1
|
|
sub r7,r9,r1
|
|
mov r8,r8,asr #1
|
|
ldr r1,constant15
|
|
str r8,[r0]
|
|
smull r7,r8,r1,r7
|
|
sub r7,r3,r10
|
|
str r8,[r0,#0x20]
|
|
mov r7,r7,lsl #1
|
|
smull r8,r7,r1,r7
|
|
add r3,r3,r10
|
|
add r3,r3,r7
|
|
str r3,[r0,#0x10]
|
|
sub r3,r2,r12
|
|
str r7,[r0,#0x30]
|
|
add r2,r2,r12
|
|
ldr r7,constant13
|
|
sub r12,r4,lr
|
|
mov r3,r3,lsl #1
|
|
smull r8,r3,r7,r3
|
|
add lr,r4,lr
|
|
sub r4,r2,lr
|
|
mov r12,r12,lsl #2
|
|
smull r7,r12,r11,r12
|
|
add lr,lr,r2
|
|
sub r2,r3,r12
|
|
mov r2,r2,lsl #1
|
|
smull r7,r2,r1,r2
|
|
mov r4,r4,lsl #1
|
|
add r12,r12,r2
|
|
add r3,r12,r3
|
|
smull r7,r4,r1,r4
|
|
add r12,r3,lr
|
|
add r3,r3,r4
|
|
str r3,[r0,#0x18]
|
|
add r3,r2,r4
|
|
str r2,[r0,#0x38]
|
|
str r3,[r0,#0x28]
|
|
str r12,[r0,#8]
|
|
ldr r2,[sp,#0x14]
|
|
ldr r3,[sp,#0]
|
|
ldr lr,[sp,#4]
|
|
sub r2,r2,r3
|
|
ldr r3,constant3
|
|
mov r2,r2,lsl #1
|
|
smull r12,r2,r3,r2
|
|
ldr r3,[sp,#0x14]
|
|
ldr r12,[sp,#0]
|
|
ldr r4,constant6
|
|
add r12,r3,r12
|
|
ldr r3,[sp,#4]
|
|
sub lr,r5,lr
|
|
mov lr,lr,lsl #1
|
|
add r3,r5,r3
|
|
smull r5,lr,r4,lr
|
|
ldr r4,[sp,#0x10]
|
|
ldr r5,[sp,#0x10]
|
|
add r4,r4,r6
|
|
sub r5,r5,r6
|
|
ldr r6,constant9
|
|
mov r5,r5,lsl #1
|
|
smull r7,r5,r6,r5
|
|
ldr r6,[sp,#8]
|
|
ldr r9,[sp,#0xc]
|
|
ldr r10,constant12
|
|
sub r6,r9,r6
|
|
mov r6,r6,lsl #3
|
|
smull r7,r6,r10,r6
|
|
ldr r8,[sp,#0x20]
|
|
ldr r7,[sp,#8]
|
|
cmp r8,#0
|
|
add r7,r9,r7
|
|
|
|
bne no_flag_proc
|
|
rsb r12,r12,#0
|
|
rsb r2,r2,#0
|
|
rsb r3,r3,#0
|
|
rsb lr,lr,#0
|
|
rsb r4,r4,#0
|
|
rsb r5,r5,#0
|
|
rsb r7,r7,#0
|
|
rsb r6,r6,#0
|
|
no_flag_proc:
|
|
|
|
sub r8,r2,r6
|
|
add r2,r6,r2
|
|
sub r6,r12,r7
|
|
ldr r9,constant13
|
|
add r12,r12,r7
|
|
sub r7,r3,r4
|
|
mov r6,r6,lsl #1
|
|
mov r8,r8,lsl #1
|
|
smull r10,r8,r9,r8
|
|
add r3,r3,r4
|
|
smull r10,r6,r9,r6
|
|
sub r4,lr,r5
|
|
mov r7,r7,lsl #2
|
|
smull r9,r7,r11,r7
|
|
add lr,lr,r5
|
|
sub r5,r6,r7
|
|
add r6,r6,r7
|
|
sub r7,r12,r3
|
|
add r3,r12,r3
|
|
sub r12,r2,lr
|
|
mov r4,r4,lsl #2
|
|
smull r9,r4,r11,r4
|
|
add lr,r2,lr
|
|
sub r2,r8,r4
|
|
mov r2,r2,lsl #1
|
|
mov r5,r5,lsl #1
|
|
mov r12,r12,lsl #1
|
|
mov r7,r7,lsl #1
|
|
smull r9,r5,r1,r5
|
|
smull r9,r2,r1,r2
|
|
add r6,r6,r5
|
|
smull r9,r7,r1,r7
|
|
smull r9,r12,r1,r12
|
|
add r1,r4,r2
|
|
add r1,r1,r8
|
|
add lr,lr,r1
|
|
add r3,r3,lr
|
|
str r3,[r0,#4]
|
|
add r3,r6,lr
|
|
str r3,[r0,#0xc]
|
|
add r1,r1,r12
|
|
add r3,r6,r1
|
|
add r1,r7,r1
|
|
str r1,[r0,#0x1c]
|
|
str r3,[r0,#0x14]
|
|
add r1,r12,r2
|
|
add r3,r7,r1
|
|
add r1,r5,r1
|
|
str r1,[r0,#0x2c]
|
|
str r3,[r0,#0x24]!
|
|
add r1,r5,r2
|
|
str r1,[r0,#0x10]
|
|
str r2,[r0,#0x18]
|
|
add sp,sp,#0x24
|
|
ldmfd sp!,{r4-r11,pc}
|
|
|
|
|
|
|
|
@------------------------------------------------------------------------------
|
|
|
|
.global pvmp3_merge_in_place_N32
|
|
|
|
|
|
|
|
pvmp3_merge_in_place_N32:
|
|
stmfd sp!,{r4,lr}
|
|
ldr r1,[r0,#0x1c]
|
|
ldr r2,[r0,#0x38]
|
|
str r1,[r0,#0x38]
|
|
ldr r1,[r0,#0x18]
|
|
ldr r3,[r0,#0x30]
|
|
str r1,[r0,#0x30]
|
|
ldr r12,[r0,#0x14]
|
|
ldr r1,[r0,#0x28]
|
|
str r12,[r0,#0x28]
|
|
ldr r12,[r0,#0x10]
|
|
ldr lr,[r0,#0x20]
|
|
str r12,[r0,#0x20]
|
|
ldr r12,[r0,#0xc]
|
|
str r12,[r0,#0x18]
|
|
ldr r12,[r0,#8]
|
|
str r12,[r0,#0x10]
|
|
ldr r12,[r0,#4]
|
|
str r12,[r0,#8]
|
|
ldr r4,[r0,#0x40]
|
|
ldr r12,[r0,#0x44]
|
|
add r4,r4,r12
|
|
str r4,[r0,#4]
|
|
str lr,[r0,#0x40]
|
|
ldr lr,[r0,#0x48]
|
|
add r12,lr,r12
|
|
str r12,[r0,#0xc]
|
|
ldr r12,[r0,#0x4c]
|
|
add lr,r12,lr
|
|
str lr,[r0,#0x14]
|
|
ldr lr,[r0,#0x24]
|
|
str lr,[r0,#0x48]
|
|
ldr lr,[r0,#0x50]
|
|
add r12,lr,r12
|
|
str r12,[r0,#0x1c]
|
|
ldr r12,[r0,#0x54]
|
|
str r1,[r0,#0x50]
|
|
add lr,r12,lr
|
|
str lr,[r0,#0x24]
|
|
ldr r1,[r0,#0x58]
|
|
ldr r4,[r0,#0x2c]
|
|
ldr lr,[r0,#0x34]
|
|
add r12,r1,r12
|
|
str r12,[r0,#0x2c]
|
|
ldr r12,[r0,#0x5c]
|
|
add r1,r12,r1
|
|
str r1,[r0,#0x34]
|
|
str r4,[r0,#0x58]
|
|
ldr r1,[r0,#0x60]
|
|
ldr r4,[r0,#0x3c]
|
|
add r12,r1,r12
|
|
str r12,[r0,#0x3c]
|
|
ldr r12,[r0,#0x64]
|
|
add r1,r12,r1
|
|
str r1,[r0,#0x44]
|
|
ldr r1,[r0,#0x68]
|
|
add r12,r1,r12
|
|
str r12,[r0,#0x4c]
|
|
ldr r12,[r0,#0x6c]
|
|
add r1,r12,r1
|
|
str r1,[r0,#0x54]
|
|
ldr r1,[r0,#0x70]
|
|
str r3,[r0,#0x60]
|
|
add r12,r1,r12
|
|
str r12,[r0,#0x5c]
|
|
ldr r3,[r0,#0x74]
|
|
add r1,r3,r1
|
|
str r1,[r0,#0x64]
|
|
str lr,[r0,#0x68]
|
|
ldr r1,[r0,#0x78]
|
|
str r2,[r0,#0x70]
|
|
add r3,r1,r3
|
|
str r3,[r0,#0x6c]
|
|
ldr r2,[r0,#0x7c]
|
|
add r1,r1,r2
|
|
str r1,[r0,#0x74]
|
|
str r4,[r0,#0x78]
|
|
ldmfd sp!,{r4,pc}
|
|
|
|
|
|
@------------------------------------------------------------------------------
|
|
|
|
.global pvmp3_split
|
|
|
|
|
|
pvmp3_split:
|
|
stmfd sp!,{r4,r5,lr}
|
|
adr r1,constant16
|
|
ldr r2,[r1]
|
|
add r2,r1
|
|
sub r1,r0,#4
|
|
mov r3,#3
|
|
loop1:
|
|
ldr r12,[r0]
|
|
ldr lr,[r1]
|
|
ldr r4,[r2],#-4
|
|
add r5,lr,r12
|
|
sub r12,lr,r12
|
|
smull r12,lr,r4,r12
|
|
str r5,[r1],#-4
|
|
mov r12,r12,lsr #27
|
|
add r12,r12,lr,lsl #5
|
|
str r12,[r0],#4
|
|
ldr r12,[r0]
|
|
ldr lr,[r1]
|
|
ldr r4,[r2],#-4
|
|
add r5,lr,r12
|
|
sub r12,lr,r12
|
|
smull r12,lr,r4,r12
|
|
str r5,[r1],#-4
|
|
mov r12,r12,lsr #27
|
|
add r12,r12,lr,lsl #5
|
|
str r12,[r0],#4
|
|
subs r3,r3,#1
|
|
bne loop1
|
|
mov r3,#5
|
|
loop2:
|
|
ldr r12,[r0]
|
|
ldr lr,[r1]
|
|
ldr r4,[r2],#-4
|
|
add r5,lr,r12
|
|
sub r12,lr,r12
|
|
mov r12,r12,lsl #1
|
|
smull lr,r12,r4,r12
|
|
str r5,[r1],#-4
|
|
str r12,[r0],#4
|
|
ldr r12,[r0]
|
|
ldr lr,[r1]
|
|
ldr r4,[r2],#-4
|
|
add r5,lr,r12
|
|
sub r12,lr,r12
|
|
mov r12,r12,lsl #1
|
|
smull lr,r12,r4,r12
|
|
str r5,[r1],#-4
|
|
str r12,[r0],#4
|
|
subs r3,r3,#1
|
|
bne loop2
|
|
ldmfd sp!,{r4,r5,pc}
|
|
constant1:
|
|
.word 0x404f4680
|
|
constant2:
|
|
.word 0x519e4e00
|
|
constant3:
|
|
.word 0x4140fb80
|
|
constant4:
|
|
.word 0x42e13c00
|
|
constant5:
|
|
.word 0x6e3c9300
|
|
constant6:
|
|
.word 0x4cf8de80
|
|
constant7:
|
|
.word 0x48919f80
|
|
constant8:
|
|
.word 0x43e22480
|
|
constant9:
|
|
.word 0x73326b80
|
|
constant10:
|
|
.word 0x52cb0e80
|
|
constant11:
|
|
.word 0x64e24000
|
|
constant12:
|
|
.word 0x52036780
|
|
constant13:
|
|
.word 0x4545ea00
|
|
constant14:
|
|
.word 0x539eba80
|
|
constant15:
|
|
.word 0x5a827980
|
|
constant16:
|
|
.word (CosTable_dct32 + 60)-constant16
|
|
|
|
|
|
|
|
CosTable_dct32:
|
|
.word 0x4013c280
|
|
.word 0x40b34580
|
|
.word 0x41fa2d80
|
|
.word 0x43f93400
|
|
.word 0x46cc1c00
|
|
.word 0x4a9d9d00
|
|
.word 0x4fae3700
|
|
.word 0x56601e80
|
|
.word 0x5f4cf700
|
|
.word 0x6b6fcf00
|
|
.word 0x07c7d1d8
|
|
.word 0x095b0350
|
|
.word 0x0bdf91b0
|
|
.word 0x107655e0
|
|
.word 0x1b42c840
|
|
.word 0x51852300
|
|
|
|
|