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"
38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# if !defined(__GNUC_PREREQ)
40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#  if defined(__GNUC__)&&defined(__GNUC_MINOR__)
41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#   define __GNUC_PREREQ(_maj,_min) \
42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ((__GNUC__<<16)+__GNUC_MINOR__>=((_maj)<<16)+(_min))
43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#  else
44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#   define __GNUC_PREREQ(_maj,_min) 0
45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#  endif
46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org# endif
47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CELT_SIG_SCALE 32768.f
49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_fatal(str) _celt_fatal(str, __FILE__, __LINE__);
51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef ENABLE_ASSERTIONS
52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdio.h>
53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdlib.h>
54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef __GNUC__
55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org__attribute__((noreturn))
56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstatic inline void _celt_fatal(const char *str, const char *file, int line)
58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   fprintf (stderr, "Fatal (internal) error in %s, line %d: %s\n", file, line, str);
60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org   abort();
61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert(cond) {if (!(cond)) {celt_fatal("assertion failed: " #cond);}}
63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert2(cond, message) {if (!(cond)) {celt_fatal("assertion failed: " #cond "\n" message);}}
64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else
65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert(cond)
66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define celt_assert2(cond, message)
67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define IMUL32(a,b) ((a)*(b))
70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ABS(x) ((x) < 0 ? (-(x)) : (x))      /**< Absolute integer value. */
72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ABS16(x) ((x) < 0 ? (-(x)) : (x))    /**< Absolute 16-bit value.  */
73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN16(a,b) ((a) < (b) ? (a) : (b))   /**< Minimum 16-bit value.   */
74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX16(a,b) ((a) > (b) ? (a) : (b))   /**< Maximum 16-bit value.   */
75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ABS32(x) ((x) < 0 ? (-(x)) : (x))    /**< Absolute 32-bit value.  */
76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MIN32(a,b) ((a) < (b) ? (a) : (b))   /**< Minimum 32-bit value.   */
77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX32(a,b) ((a) > (b) ? (a) : (b))   /**< Maximum 32-bit value.   */
78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define IMIN(a,b) ((a) < (b) ? (a) : (b))   /**< Minimum int value.   */
79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define IMAX(a,b) ((a) > (b) ? (a) : (b))   /**< Maximum int value.   */
80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define UADD32(a,b) ((a)+(b))
81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define USUB32(a,b) ((a)-(b))
82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PRINT_MIPS(file)
84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef FIXED_POINT
86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_int16 opus_val16;
88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_int32 opus_val32;
89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_val32 celt_sig;
91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_val16 celt_norm;
92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef opus_val32 celt_ener;
93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15ONE 32767
95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SIG_SHIFT 12
97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NORM_SCALING 16384
99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DB_SHIFT 10
101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EPSILON 1
103e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define VERY_SMALL 0
104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VERY_LARGE16 ((opus_val16)32767)
105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15_ONE ((opus_val16)32767)
106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEIN(a)      (a)
108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEOUT(a)     (a)
109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef FIXED_DEBUG
111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_debug.h"
112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else
113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_generic.h"
115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
116e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#ifdef ARMv5E_ASM
117e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#include "arm/fixed_armv5e.h"
118e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#elif defined (ARMv4_ASM)
119e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#include "arm/fixed_armv4.h"
120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#elif defined (BFIN_ASM)
121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_bfin.h"
122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#elif defined (TI_C5X_ASM)
123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_c5x.h"
124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#elif defined (TI_C6X_ASM)
125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "fixed_c6x.h"
126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else /* FIXED_POINT */
131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float opus_val16;
133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float opus_val32;
134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float celt_sig;
136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float celt_norm;
137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef float celt_ener;
138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15ONE 1.0f
140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NORM_SCALING 1.f
142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EPSILON 1e-15f
144e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define VERY_SMALL 1e-30f
145885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VERY_LARGE16 1e15f
146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define Q15_ONE ((opus_val16)1.f)
147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define QCONST16(x,bits) (x)
149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define QCONST32(x,bits) (x)
150885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
151885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NEG16(x) (-(x))
152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define NEG32(x) (-(x))
153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EXTRACT16(x) (x)
154885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define EXTEND32(x) (x)
155885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHR16(a,shift) (a)
156885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHL16(a,shift) (a)
157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHR32(a,shift) (a)
158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHL32(a,shift) (a)
159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PSHR32(a,shift) (a)
160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VSHR32(a,shift) (a)
161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define PSHR(a,shift)   (a)
163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHR(a,shift)    (a)
164885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SHL(a,shift)    (a)
165885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SATURATE(x,a)   (x)
166e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define SATURATE16(x)   (x)
167885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ROUND16(a,shift)  (a)
169885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define HALF16(x)       (.5f*(x))
170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define HALF32(x)       (.5f*(x))
171885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
172885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ADD16(a,b) ((a)+(b))
173885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SUB16(a,b) ((a)-(b))
174885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define ADD32(a,b) ((a)+(b))
175885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SUB32(a,b) ((a)-(b))
176885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_16(a,b)     ((a)*(b))
177885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16(a,b)     ((opus_val32)(a)*(opus_val32)(b))
178885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAC16_16(c,a,b)     ((c)+(opus_val32)(a)*(opus_val32)(b))
179885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
180885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_32_Q15(a,b)     ((a)*(b))
181885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_32_Q16(a,b)     ((a)*(b))
182885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
183885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT32_32_Q31(a,b)     ((a)*(b))
184885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAC16_32_Q15(c,a,b)     ((c)+(a)*(b))
186885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
187885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q11_32(a,b)     ((a)*(b))
188e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org#define MULT16_16_Q11(a,b)     ((a)*(b))
189885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q13(a,b)     ((a)*(b))
190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q14(a,b)     ((a)*(b))
191885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_Q15(a,b)     ((a)*(b))
192885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_P15(a,b)     ((a)*(b))
193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_P13(a,b)     ((a)*(b))
194885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_16_P14(a,b)     ((a)*(b))
195885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MULT16_32_P16(a,b)     ((a)*(b))
196885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DIV32_16(a,b)     (((opus_val32)(a))/(opus_val16)(b))
198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define DIV32(a,b)     (((opus_val32)(a))/(opus_val32)(b))
199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEIN(a)      ((a)*CELT_SIG_SCALE)
201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define SCALEOUT(a)     ((a)*(1/CELT_SIG_SCALE))
202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
203885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif /* !FIXED_POINT */
204885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
205885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef GLOBAL_STACK_SIZE
206885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef FIXED_POINT
207885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define GLOBAL_STACK_SIZE 100000
208885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else
209885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define GLOBAL_STACK_SIZE 100000
210885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
211885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
212885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
213885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif /* ARCH_H */
214