1885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Copyright (c) 2003-2008 Jean-Marc Valin 2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Copyright (c) 2007-2008 CSIRO 3885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Copyright (c) 2007-2009 Xiph.Org Foundation 4885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Written by Jean-Marc Valin */ 5885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/** 6885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org @file arch.h 7885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org @brief Various architecture definitions for CELT 8885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org*/ 9885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* 10885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Redistribution and use in source and binary forms, with or without 11885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org modification, are permitted provided that the following conditions 12885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org are met: 13885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 14885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions of source code must retain the above copyright 15885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer. 16885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 17885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions in binary form must reproduce the above copyright 18885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer in the 19885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org documentation and/or other materials provided with the distribution. 20885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 21885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 25885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 26885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 27885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org*/ 33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef ARCH_H 35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ARCH_H 36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "opus_types.h" 383c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com#include "opus_defines.h" 39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# if !defined(__GNUC_PREREQ) 41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# if defined(__GNUC__)&&defined(__GNUC_MINOR__) 42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# define __GNUC_PREREQ(_maj,_min) \ 43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min)) 44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# else 45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# define __GNUC_PREREQ(_maj,_min) 0 46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# endif 47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# endif 48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CELT_SIG_SCALE 32768.f 50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_fatal(str) _celt_fatal(str, __FILE__, __LINE__); 52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef ENABLE_ASSERTIONS 53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdio.h> 54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdlib.h> 55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef __GNUC__ 56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org__attribute__((noreturn)) 57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 583c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.comstatic OPUS_INLINE void _celt_fatal(const char *str, const char *file, int line) 59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str); 61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org abort(); 62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert(cond) {if (!(cond)) {celt_fatal("assertion failed: " #cond);}} 64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert2(cond, message) {if (!(cond)) {celt_fatal("assertion failed: " #cond "\n" message);}} 65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else 66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert(cond) 67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert2(cond, message) 68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define IMUL32(a,b) ((a)*(b)) 71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ABS(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute integer value. */ 73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ABS16(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 16-bit value. */ 74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN16(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 16-bit value. */ 75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX16(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 16-bit value. */ 76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ABS32(x) ((x) < 0 ? (-(x)) : (x)) /**< Absolute 32-bit value. */ 77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN32(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum 32-bit value. */ 78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX32(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum 32-bit value. */ 79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define IMIN(a,b) ((a) < (b) ? (a) : (b)) /**< Minimum int value. */ 80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define IMAX(a,b) ((a) > (b) ? (a) : (b)) /**< Maximum int value. */ 81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define UADD32(a,b) ((a)+(b)) 82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define USUB32(a,b) ((a)-(b)) 83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PRINT_MIPS(file) 85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef FIXED_POINT 87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_int16 opus_val16; 89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_int32 opus_val32; 90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_val32 celt_sig; 92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_val16 celt_norm; 93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_val32 celt_ener; 94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15ONE 32767 96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SIG_SHIFT 12 98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NORM_SCALING 16384 100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DB_SHIFT 10 102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EPSILON 1 104e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define VERY_SMALL 0 105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VERY_LARGE16 ((opus_val16)32767) 106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15_ONE ((opus_val16)32767) 107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEIN(a) (a) 109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEOUT(a) (a) 110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef FIXED_DEBUG 112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_debug.h" 113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else 114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_generic.h" 116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1173c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com#ifdef OPUS_ARM_INLINE_EDSP 118e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#include "arm/fixed_armv5e.h" 1193c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com#elif defined (OPUS_ARM_INLINE_ASM) 120e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#include "arm/fixed_armv4.h" 121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#elif defined (BFIN_ASM) 122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_bfin.h" 123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#elif defined (TI_C5X_ASM) 124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_c5x.h" 125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#elif defined (TI_C6X_ASM) 126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_c6x.h" 127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else /* FIXED_POINT */ 132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float opus_val16; 134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float opus_val32; 135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float celt_sig; 137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float celt_norm; 138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float celt_ener; 139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15ONE 1.0f 141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NORM_SCALING 1.f 143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EPSILON 1e-15f 145e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define VERY_SMALL 1e-30f 146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VERY_LARGE16 1e15f 147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15_ONE ((opus_val16)1.f) 148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define QCONST16(x,bits) (x) 150885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define QCONST32(x,bits) (x) 151885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NEG16(x) (-(x)) 153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NEG32(x) (-(x)) 154885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EXTRACT16(x) (x) 155885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EXTEND32(x) (x) 156885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHR16(a,shift) (a) 157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHL16(a,shift) (a) 158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHR32(a,shift) (a) 159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHL32(a,shift) (a) 160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PSHR32(a,shift) (a) 161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VSHR32(a,shift) (a) 162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PSHR(a,shift) (a) 164885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHR(a,shift) (a) 165885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHL(a,shift) (a) 166885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SATURATE(x,a) (x) 167e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define SATURATE16(x) (x) 168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 169885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ROUND16(a,shift) (a) 170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define HALF16(x) (.5f*(x)) 171885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define HALF32(x) (.5f*(x)) 172885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 173885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ADD16(a,b) ((a)+(b)) 174885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SUB16(a,b) ((a)-(b)) 175885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ADD32(a,b) ((a)+(b)) 176885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SUB32(a,b) ((a)-(b)) 177885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_16(a,b) ((a)*(b)) 178885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16(a,b) ((opus_val32)(a)*(opus_val32)(b)) 179885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAC16_16(c,a,b) ((c)+(opus_val32)(a)*(opus_val32)(b)) 180885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 181885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_32_Q15(a,b) ((a)*(b)) 182885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_32_Q16(a,b) ((a)*(b)) 183885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 184885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT32_32_Q31(a,b) ((a)*(b)) 185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 186885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAC16_32_Q15(c,a,b) ((c)+(a)*(b)) 187885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 188885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q11_32(a,b) ((a)*(b)) 189e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define MULT16_16_Q11(a,b) ((a)*(b)) 190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q13(a,b) ((a)*(b)) 191885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q14(a,b) ((a)*(b)) 192885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q15(a,b) ((a)*(b)) 193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_P15(a,b) ((a)*(b)) 194885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_P13(a,b) ((a)*(b)) 195885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_P14(a,b) ((a)*(b)) 196885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_32_P16(a,b) ((a)*(b)) 197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DIV32_16(a,b) (((opus_val32)(a))/(opus_val16)(b)) 199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DIV32(a,b) (((opus_val32)(a))/(opus_val32)(b)) 200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEIN(a) ((a)*CELT_SIG_SCALE) 202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEOUT(a) ((a)*(1/CELT_SIG_SCALE)) 203885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 204885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif /* !FIXED_POINT */ 205885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 206885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef GLOBAL_STACK_SIZE 207885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef FIXED_POINT 208885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define GLOBAL_STACK_SIZE 100000 209885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else 210885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define GLOBAL_STACK_SIZE 100000 211885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 212885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 213885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 214885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif /* ARCH_H */ 215