yading@10: /* yading@10: * Copyright (c) 2010 Mans Rullgard yading@10: * yading@10: * This file is part of FFmpeg. yading@10: * yading@10: * FFmpeg is free software; you can redistribute it and/or yading@10: * modify it under the terms of the GNU Lesser General Public yading@10: * License as published by the Free Software Foundation; either yading@10: * version 2.1 of the License, or (at your option) any later version. yading@10: * yading@10: * FFmpeg is distributed in the hope that it will be useful, yading@10: * but WITHOUT ANY WARRANTY; without even the implied warranty of yading@10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yading@10: * Lesser General Public License for more details. yading@10: * yading@10: * You should have received a copy of the GNU Lesser General Public yading@10: * License along with FFmpeg; if not, write to the Free Software yading@10: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA yading@10: */ yading@10: yading@10: #include "libavutil/arm/asm.S" yading@10: yading@10: function ff_dca_lfe_fir_neon, export=1 yading@10: push {r4-r6,lr} yading@10: yading@10: add r4, r0, r3, lsl #2 @ out2 yading@10: add r5, r2, #256*4-16 @ cf1 yading@10: sub r1, r1, #12 yading@10: cmp r3, #32 yading@10: ite eq yading@10: moveq r6, #256/32 yading@10: movne r6, #256/64 yading@10: NOVFP vldr s0, [sp, #16] @ scale yading@10: mov lr, #-16 yading@10: 1: yading@10: vmov.f32 q2, #0.0 @ v0 yading@10: vmov.f32 q3, #0.0 @ v1 yading@10: mov r12, r6 yading@10: 2: yading@10: vld1.32 {q8}, [r2,:128]! @ cf0 yading@10: vld1.32 {q9}, [r5,:128], lr @ cf1 yading@10: vld1.32 {q1}, [r1], lr @ in yading@10: subs r12, r12, #4 yading@10: vrev64.32 q10, q8 yading@10: vmla.f32 q3, q1, q9 yading@10: vmla.f32 d4, d2, d21 yading@10: vmla.f32 d5, d3, d20 yading@10: bne 2b yading@10: yading@10: add r1, r1, r6, lsl #2 yading@10: subs r3, r3, #1 yading@10: vadd.f32 d4, d4, d5 yading@10: vadd.f32 d6, d6, d7 yading@10: vpadd.f32 d4, d4, d6 yading@10: vmul.f32 d5, d4, d0[0] yading@10: vst1.32 {d5[0]}, [r0,:32]! yading@10: vst1.32 {d5[1]}, [r4,:32]! yading@10: bne 1b yading@10: yading@10: pop {r4-r6,pc} yading@10: endfunc