1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/media/libopus/celt/arm/kiss_fft_armv4.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,121 @@ 1.4 +/*Copyright (c) 2013, Xiph.Org Foundation and contributors. 1.5 + 1.6 + All rights reserved. 1.7 + 1.8 + Redistribution and use in source and binary forms, with or without 1.9 + modification, are permitted provided that the following conditions are met: 1.10 + 1.11 + * Redistributions of source code must retain the above copyright notice, 1.12 + this list of conditions and the following disclaimer. 1.13 + * Redistributions in binary form must reproduce the above copyright notice, 1.14 + this list of conditions and the following disclaimer in the 1.15 + documentation and/or other materials provided with the distribution. 1.16 + 1.17 + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 1.18 + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1.19 + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1.20 + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 1.21 + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 1.22 + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 1.23 + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 1.24 + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 1.25 + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 1.26 + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 1.27 + POSSIBILITY OF SUCH DAMAGE.*/ 1.28 + 1.29 +#ifndef KISS_FFT_ARMv4_H 1.30 +#define KISS_FFT_ARMv4_H 1.31 + 1.32 +#if !defined(KISS_FFT_GUTS_H) 1.33 +#error "This file should only be included from _kiss_fft_guts.h" 1.34 +#endif 1.35 + 1.36 +#ifdef FIXED_POINT 1.37 + 1.38 +#undef C_MUL 1.39 +#define C_MUL(m,a,b) \ 1.40 + do{ \ 1.41 + int br__; \ 1.42 + int bi__; \ 1.43 + int tt__; \ 1.44 + __asm__ __volatile__( \ 1.45 + "#C_MUL\n\t" \ 1.46 + "ldrsh %[br], [%[bp], #0]\n\t" \ 1.47 + "ldm %[ap], {r0,r1}\n\t" \ 1.48 + "ldrsh %[bi], [%[bp], #2]\n\t" \ 1.49 + "smull %[tt], %[mi], r1, %[br]\n\t" \ 1.50 + "smlal %[tt], %[mi], r0, %[bi]\n\t" \ 1.51 + "rsb %[bi], %[bi], #0\n\t" \ 1.52 + "smull %[br], %[mr], r0, %[br]\n\t" \ 1.53 + "mov %[tt], %[tt], lsr #15\n\t" \ 1.54 + "smlal %[br], %[mr], r1, %[bi]\n\t" \ 1.55 + "orr %[mi], %[tt], %[mi], lsl #17\n\t" \ 1.56 + "mov %[br], %[br], lsr #15\n\t" \ 1.57 + "orr %[mr], %[br], %[mr], lsl #17\n\t" \ 1.58 + : [mr]"=r"((m).r), [mi]"=r"((m).i), \ 1.59 + [br]"=&r"(br__), [bi]"=r"(bi__), [tt]"=r"(tt__) \ 1.60 + : [ap]"r"(&(a)), [bp]"r"(&(b)) \ 1.61 + : "r0", "r1" \ 1.62 + ); \ 1.63 + } \ 1.64 + while(0) 1.65 + 1.66 +#undef C_MUL4 1.67 +#define C_MUL4(m,a,b) \ 1.68 + do{ \ 1.69 + int br__; \ 1.70 + int bi__; \ 1.71 + int tt__; \ 1.72 + __asm__ __volatile__( \ 1.73 + "#C_MUL4\n\t" \ 1.74 + "ldrsh %[br], [%[bp], #0]\n\t" \ 1.75 + "ldm %[ap], {r0,r1}\n\t" \ 1.76 + "ldrsh %[bi], [%[bp], #2]\n\t" \ 1.77 + "smull %[tt], %[mi], r1, %[br]\n\t" \ 1.78 + "smlal %[tt], %[mi], r0, %[bi]\n\t" \ 1.79 + "rsb %[bi], %[bi], #0\n\t" \ 1.80 + "smull %[br], %[mr], r0, %[br]\n\t" \ 1.81 + "mov %[tt], %[tt], lsr #17\n\t" \ 1.82 + "smlal %[br], %[mr], r1, %[bi]\n\t" \ 1.83 + "orr %[mi], %[tt], %[mi], lsl #15\n\t" \ 1.84 + "mov %[br], %[br], lsr #17\n\t" \ 1.85 + "orr %[mr], %[br], %[mr], lsl #15\n\t" \ 1.86 + : [mr]"=r"((m).r), [mi]"=r"((m).i), \ 1.87 + [br]"=&r"(br__), [bi]"=r"(bi__), [tt]"=r"(tt__) \ 1.88 + : [ap]"r"(&(a)), [bp]"r"(&(b)) \ 1.89 + : "r0", "r1" \ 1.90 + ); \ 1.91 + } \ 1.92 + while(0) 1.93 + 1.94 +#undef C_MULC 1.95 +#define C_MULC(m,a,b) \ 1.96 + do{ \ 1.97 + int br__; \ 1.98 + int bi__; \ 1.99 + int tt__; \ 1.100 + __asm__ __volatile__( \ 1.101 + "#C_MULC\n\t" \ 1.102 + "ldrsh %[br], [%[bp], #0]\n\t" \ 1.103 + "ldm %[ap], {r0,r1}\n\t" \ 1.104 + "ldrsh %[bi], [%[bp], #2]\n\t" \ 1.105 + "smull %[tt], %[mr], r0, %[br]\n\t" \ 1.106 + "smlal %[tt], %[mr], r1, %[bi]\n\t" \ 1.107 + "rsb %[bi], %[bi], #0\n\t" \ 1.108 + "smull %[br], %[mi], r1, %[br]\n\t" \ 1.109 + "mov %[tt], %[tt], lsr #15\n\t" \ 1.110 + "smlal %[br], %[mi], r0, %[bi]\n\t" \ 1.111 + "orr %[mr], %[tt], %[mr], lsl #17\n\t" \ 1.112 + "mov %[br], %[br], lsr #15\n\t" \ 1.113 + "orr %[mi], %[br], %[mi], lsl #17\n\t" \ 1.114 + : [mr]"=r"((m).r), [mi]"=r"((m).i), \ 1.115 + [br]"=&r"(br__), [bi]"=r"(bi__), [tt]"=r"(tt__) \ 1.116 + : [ap]"r"(&(a)), [bp]"r"(&(b)) \ 1.117 + : "r0", "r1" \ 1.118 + ); \ 1.119 + } \ 1.120 + while(0) 1.121 + 1.122 +#endif /* FIXED_POINT */ 1.123 + 1.124 +#endif /* KISS_FFT_ARMv4_H */