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