diff options
author | Mans Rullgard <mans@mansr.com> | 2011-09-29 00:53:03 +0400 |
---|---|---|
committer | Mans Rullgard <mans@mansr.com> | 2011-09-30 22:01:23 +0400 |
commit | bf5d46d8e6de1f3035adb63b50924f474fabb578 (patch) | |
tree | 3c03dadca290f8733800fa9882d5fa3ab7c21762 /libavcodec/arm | |
parent | 6326afd5e90cfed9df08b652a1cd6f6a948c239a (diff) |
dca: NEON optimised high freq VQ decoding
Signed-off-by: Mans Rullgard <mans@mansr.com>
Diffstat (limited to 'libavcodec/arm')
-rw-r--r-- | libavcodec/arm/dca.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/libavcodec/arm/dca.h b/libavcodec/arm/dca.h new file mode 100644 index 0000000000..c4c024a36a --- /dev/null +++ b/libavcodec/arm/dca.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2011 Mans Rullgard <mans@mansr.com> + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * Libav is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with Libav; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_ARM_DCA_H +#define AVCODEC_ARM_DCA_H + +#include <stdint.h> +#include "config.h" + +#if HAVE_NEON && HAVE_INLINE_ASM + +#define int8x8_fmul_int32 int8x8_fmul_int32 +static inline void int8x8_fmul_int32(float *dst, const int8_t *src, int scale) +{ + __asm__ ("vcvt.f32.s32 %2, %2, #4 \n" + "vld1.8 {d0}, [%1,:64] \n" + "vmovl.s8 q0, d0 \n" + "vmovl.s16 q1, d1 \n" + "vmovl.s16 q0, d0 \n" + "vcvt.f32.s32 q0, q0 \n" + "vcvt.f32.s32 q1, q1 \n" + "vmul.f32 q0, q0, %y2 \n" + "vmul.f32 q1, q1, %y2 \n" + "vst1.32 {q0-q1}, [%m0,:128] \n" + : "=Um"(*(float (*)[8])dst) + : "r"(src), "x"(scale) + : "d0", "d1", "d2", "d3"); +} + +#endif + +#endif /* AVCODEC_ARM_DCA_H */ |