|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.macro skip args:vararg |
|
.endm |
|
|
|
.macro sum8 lo, hi, w, p, t1, t2, t3, t4, rsb=skip, offs=0 |
|
ldr \t1, [\w, |
|
ldr \t2, [\p, |
|
\rsb \t1, \t1, |
|
.irpc i, 135 |
|
ldr \t3, [\w, |
|
ldr \t4, [\p, |
|
smlal \lo, \hi, \t1, \t2 |
|
\rsb \t3, \t3, |
|
ldr \t1, [\w, |
|
ldr \t2, [\p, |
|
smlal \lo, \hi, \t3, \t4 |
|
\rsb \t1, \t1, |
|
.endr |
|
ldr \t3, [\w, |
|
ldr \t4, [\p, |
|
smlal \lo, \hi, \t1, \t2 |
|
\rsb \t3, \t3, |
|
smlal \lo, \hi, \t3, \t4 |
|
.endm |
|
|
|
.macro round rd, lo, hi |
|
lsr \rd, \lo, |
|
bic \lo, \lo, |
|
orr \rd, \rd, \hi, lsl |
|
mov \hi, |
|
ssat \rd, |
|
.endm |
|
|
|
function ff_mpadsp_apply_window_fixed_armv6, export=1 |
|
push {r2,r4-r11,lr} |
|
|
|
add r4, r0, |
|
.rept 4 |
|
ldm r0!, {r5-r12} |
|
stm r4!, {r5-r12} |
|
.endr |
|
|
|
ldr r4, [sp, |
|
sub r0, r0, |
|
ldr r8, [r2] @ sum:low |
|
add r2, r0, |
|
rsb r5, r4, r4, lsl |
|
lsl r4, r4, |
|
asr r9, r8, |
|
add r5, r3, r5, lsl |
|
add r6, r1, |
|
str r4, [sp, |
|
|
|
sum8 r8, r9, r1, r0, r10, r11, r12, lr |
|
sum8 r8, r9, r1, r2, r10, r11, r12, lr, rsb, 32 |
|
round r10, r8, r9 |
|
strh_post r10, r3, r4 |
|
|
|
mov lr, |
|
1: |
|
ldr r12, [r0, |
|
ldr r11, [r6, |
|
ldr r10, [r1, |
|
.irpc i, 0246 |
|
.if \i |
|
ldr r11, [r6, |
|
ldr r10, [r1, |
|
.endif |
|
rsb r11, r11, |
|
smlal r8, r9, r10, r12 |
|
ldr r10, [r0, |
|
.ifeq \i |
|
smull r4, r7, r11, r12 |
|
.else |
|
smlal r4, r7, r11, r12 |
|
.endif |
|
ldr r11, [r6, |
|
ldr r12, [r1, |
|
rsb r11, r11, |
|
smlal r8, r9, r12, r10 |
|
.iflt \i-6 |
|
ldr r12, [r0, |
|
.else |
|
ldr r12, [r2, |
|
.endif |
|
smlal r4, r7, r11, r10 |
|
.endr |
|
.irpc i, 0246 |
|
ldr r10, [r1, |
|
rsb r12, r12, |
|
ldr r11, [r6, |
|
smlal r8, r9, r10, r12 |
|
ldr r10, [r2, |
|
smlal r4, r7, r11, r12 |
|
ldr r12, [r1, |
|
rsb r10, r10, |
|
ldr r11, [r6, |
|
smlal r8, r9, r12, r10 |
|
.iflt \i-6 |
|
ldr r12, [r2, |
|
.else |
|
ldr r12, [sp, |
|
.endif |
|
smlal r4, r7, r11, r10 |
|
.endr |
|
round r10, r8, r9 |
|
adds r8, r8, r4 |
|
adc r9, r9, r7 |
|
strh_post r10, r3, r12 |
|
round r11, r8, r9 |
|
subs lr, lr, |
|
strh_dpost r11, r5, r12 |
|
bgt 1b |
|
|
|
sum8 r8, r9, r1, r0, r10, r11, r12, lr, rsb, 33 |
|
pop {r4} |
|
round r10, r8, r9 |
|
str r8, [r4] |
|
strh r10, [r3] |
|
|
|
pop {r4-r11,pc} |
|
endfunc |
|
|