annotate src/opus-1.3/celt/arm/fixed_armv4.h @ 77:4edcd14160a5 pa_catalina

Duplicate for patch testing
author Chris Cannam
date Wed, 30 Oct 2019 11:25:10 +0000
parents 7aeed7906520
children
rev   line source
Chris@69 1 /* Copyright (C) 2013 Xiph.Org Foundation and contributors */
Chris@69 2 /*
Chris@69 3 Redistribution and use in source and binary forms, with or without
Chris@69 4 modification, are permitted provided that the following conditions
Chris@69 5 are met:
Chris@69 6
Chris@69 7 - Redistributions of source code must retain the above copyright
Chris@69 8 notice, this list of conditions and the following disclaimer.
Chris@69 9
Chris@69 10 - Redistributions in binary form must reproduce the above copyright
Chris@69 11 notice, this list of conditions and the following disclaimer in the
Chris@69 12 documentation and/or other materials provided with the distribution.
Chris@69 13
Chris@69 14 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
Chris@69 15 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
Chris@69 16 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
Chris@69 17 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
Chris@69 18 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
Chris@69 19 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
Chris@69 20 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
Chris@69 21 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
Chris@69 22 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
Chris@69 23 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
Chris@69 24 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Chris@69 25 */
Chris@69 26
Chris@69 27 #ifndef FIXED_ARMv4_H
Chris@69 28 #define FIXED_ARMv4_H
Chris@69 29
Chris@69 30 /** 16x32 multiplication, followed by a 16-bit shift right. Results fits in 32 bits */
Chris@69 31 #undef MULT16_32_Q16
Chris@69 32 static OPUS_INLINE opus_val32 MULT16_32_Q16_armv4(opus_val16 a, opus_val32 b)
Chris@69 33 {
Chris@69 34 unsigned rd_lo;
Chris@69 35 int rd_hi;
Chris@69 36 __asm__(
Chris@69 37 "#MULT16_32_Q16\n\t"
Chris@69 38 "smull %0, %1, %2, %3\n\t"
Chris@69 39 : "=&r"(rd_lo), "=&r"(rd_hi)
Chris@69 40 : "%r"(b),"r"(SHL32(a,16))
Chris@69 41 );
Chris@69 42 return rd_hi;
Chris@69 43 }
Chris@69 44 #define MULT16_32_Q16(a, b) (MULT16_32_Q16_armv4(a, b))
Chris@69 45
Chris@69 46
Chris@69 47 /** 16x32 multiplication, followed by a 15-bit shift right. Results fits in 32 bits */
Chris@69 48 #undef MULT16_32_Q15
Chris@69 49 static OPUS_INLINE opus_val32 MULT16_32_Q15_armv4(opus_val16 a, opus_val32 b)
Chris@69 50 {
Chris@69 51 unsigned rd_lo;
Chris@69 52 int rd_hi;
Chris@69 53 __asm__(
Chris@69 54 "#MULT16_32_Q15\n\t"
Chris@69 55 "smull %0, %1, %2, %3\n\t"
Chris@69 56 : "=&r"(rd_lo), "=&r"(rd_hi)
Chris@69 57 : "%r"(b), "r"(SHL32(a,16))
Chris@69 58 );
Chris@69 59 /*We intentionally don't OR in the high bit of rd_lo for speed.*/
Chris@69 60 return SHL32(rd_hi,1);
Chris@69 61 }
Chris@69 62 #define MULT16_32_Q15(a, b) (MULT16_32_Q15_armv4(a, b))
Chris@69 63
Chris@69 64
Chris@69 65 /** 16x32 multiply, followed by a 15-bit shift right and 32-bit add.
Chris@69 66 b must fit in 31 bits.
Chris@69 67 Result fits in 32 bits. */
Chris@69 68 #undef MAC16_32_Q15
Chris@69 69 #define MAC16_32_Q15(c, a, b) ADD32(c, MULT16_32_Q15(a, b))
Chris@69 70
Chris@69 71 /** 16x32 multiply, followed by a 16-bit shift right and 32-bit add.
Chris@69 72 Result fits in 32 bits. */
Chris@69 73 #undef MAC16_32_Q16
Chris@69 74 #define MAC16_32_Q16(c, a, b) ADD32(c, MULT16_32_Q16(a, b))
Chris@69 75
Chris@69 76 /** 32x32 multiplication, followed by a 31-bit shift right. Results fits in 32 bits */
Chris@69 77 #undef MULT32_32_Q31
Chris@69 78 #define MULT32_32_Q31(a,b) (opus_val32)((((opus_int64)(a)) * ((opus_int64)(b)))>>31)
Chris@69 79
Chris@69 80 #endif