xref: /aosp_15_r20/external/libopus/celt/fixed_c6x.h (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
1*a58d3d2aSXin Li /* Copyright (C) 2008 CSIRO */
2*a58d3d2aSXin Li /**
3*a58d3d2aSXin Li    @file fixed_c6x.h
4*a58d3d2aSXin Li    @brief Fixed-point operations for the TI C6x DSP family
5*a58d3d2aSXin Li */
6*a58d3d2aSXin Li /*
7*a58d3d2aSXin Li    Redistribution and use in source and binary forms, with or without
8*a58d3d2aSXin Li    modification, are permitted provided that the following conditions
9*a58d3d2aSXin Li    are met:
10*a58d3d2aSXin Li 
11*a58d3d2aSXin Li    - Redistributions of source code must retain the above copyright
12*a58d3d2aSXin Li    notice, this list of conditions and the following disclaimer.
13*a58d3d2aSXin Li 
14*a58d3d2aSXin Li    - Redistributions in binary form must reproduce the above copyright
15*a58d3d2aSXin Li    notice, this list of conditions and the following disclaimer in the
16*a58d3d2aSXin Li    documentation and/or other materials provided with the distribution.
17*a58d3d2aSXin Li 
18*a58d3d2aSXin Li    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19*a58d3d2aSXin Li    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20*a58d3d2aSXin Li    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21*a58d3d2aSXin Li    A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
22*a58d3d2aSXin Li    OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23*a58d3d2aSXin Li    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24*a58d3d2aSXin Li    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25*a58d3d2aSXin Li    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
26*a58d3d2aSXin Li    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27*a58d3d2aSXin Li    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28*a58d3d2aSXin Li    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*a58d3d2aSXin Li */
30*a58d3d2aSXin Li 
31*a58d3d2aSXin Li #ifndef FIXED_C6X_H
32*a58d3d2aSXin Li #define FIXED_C6X_H
33*a58d3d2aSXin Li 
34*a58d3d2aSXin Li #undef MULT16_16SU
35*a58d3d2aSXin Li #define MULT16_16SU(a,b) _mpysu(a,b)
36*a58d3d2aSXin Li 
37*a58d3d2aSXin Li #undef MULT_16_16
38*a58d3d2aSXin Li #define MULT_16_16(a,b) _mpy(a,b)
39*a58d3d2aSXin Li 
40*a58d3d2aSXin Li #define celt_ilog2(x) (30 - _norm(x))
41*a58d3d2aSXin Li #define OVERRIDE_CELT_ILOG2
42*a58d3d2aSXin Li 
43*a58d3d2aSXin Li #undef MULT16_32_Q15
44*a58d3d2aSXin Li #define MULT16_32_Q15(a,b) (_mpylill(a, b) >> 15)
45*a58d3d2aSXin Li 
46*a58d3d2aSXin Li #if 0
47*a58d3d2aSXin Li #include "dsplib.h"
48*a58d3d2aSXin Li 
49*a58d3d2aSXin Li #undef MAX16
50*a58d3d2aSXin Li #define MAX16(a,b) _max(a,b)
51*a58d3d2aSXin Li 
52*a58d3d2aSXin Li #undef MIN16
53*a58d3d2aSXin Li #define MIN16(a,b) _min(a,b)
54*a58d3d2aSXin Li 
55*a58d3d2aSXin Li #undef MAX32
56*a58d3d2aSXin Li #define MAX32(a,b) _lmax(a,b)
57*a58d3d2aSXin Li 
58*a58d3d2aSXin Li #undef MIN32
59*a58d3d2aSXin Li #define MIN32(a,b) _lmin(a,b)
60*a58d3d2aSXin Li 
61*a58d3d2aSXin Li #undef VSHR32
62*a58d3d2aSXin Li #define VSHR32(a, shift) _lshl(a,-(shift))
63*a58d3d2aSXin Li 
64*a58d3d2aSXin Li #undef MULT16_16_Q15
65*a58d3d2aSXin Li #define MULT16_16_Q15(a,b) (_smpy(a,b))
66*a58d3d2aSXin Li 
67*a58d3d2aSXin Li #define celt_maxabs16(x, len) MAX32(EXTEND32(maxval((DATA *)x, len)),-EXTEND32(minval((DATA *)x, len)))
68*a58d3d2aSXin Li #define OVERRIDE_CELT_MAXABS16
69*a58d3d2aSXin Li 
70*a58d3d2aSXin Li #endif /* FIXED_C6X_H */
71