mac_32.h revision 4f1efc098cb5791c3e9f483f2af84aef70d2d0a0
1/* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18/****************************************************************************************
19Portions of this file are derived from the following 3GPP standard:
20
21    3GPP TS 26.073
22    ANSI-C code for the Adaptive Multi-Rate (AMR) speech codec
23    Available from http://www.3gpp.org
24
25(C) 2004, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TTA, TTC)
26Permission to distribute, modify and use this file under the standard license
27terms listed above has been obtained from the copyright holder.
28****************************************************************************************/
29/*
30
31 Filename: /audio/gsm_amr/c/include/mac_32.h
32
33------------------------------------------------------------------------------
34 REVISION HISTORY
35
36 Description: Updated function prototype declaration to reflect new interface.
37              A pointer to overflow flag is passed into the function. Updated
38              template.
39
40 Description: Moved _cplusplus #ifdef after Include section.
41
42 Description: Inlined the functions from mac_32.cpp. A performance improvement
43              change.
44
45 Who:                       Date:
46 Description:
47------------------------------------------------------------------------------
48 INCLUDE DESCRIPTION
49
50 This file contains all the constant definitions and prototype definitions
51 needed by the Mac_32 and Mac_32_16 functions
52
53------------------------------------------------------------------------------
54*/
55
56/*----------------------------------------------------------------------------
57; CONTINUE ONLY IF NOT ALREADY DEFINED
58----------------------------------------------------------------------------*/
59#ifndef MAC_32_H
60#define MAC_32_H
61
62/*----------------------------------------------------------------------------
63; INCLUDES
64----------------------------------------------------------------------------*/
65#include    "basicop_malloc.h"
66
67/*--------------------------------------------------------------------------*/
68#ifdef __cplusplus
69extern "C"
70{
71#endif
72
73    /*----------------------------------------------------------------------------
74    ; MACROS
75    ; Define module specific macros here
76    ----------------------------------------------------------------------------*/
77
78    /*----------------------------------------------------------------------------
79    ; DEFINES
80    ; Include all pre-processor statements here.
81    ----------------------------------------------------------------------------*/
82
83    /*----------------------------------------------------------------------------
84    ; EXTERNAL VARIABLES REFERENCES
85    ; Declare variables used in this module but defined elsewhere
86    ----------------------------------------------------------------------------*/
87
88    /*----------------------------------------------------------------------------
89    ; SIMPLE TYPEDEF'S
90    ----------------------------------------------------------------------------*/
91
92    /*----------------------------------------------------------------------------
93    ; ENUMERATED TYPEDEF'S
94    ----------------------------------------------------------------------------*/
95
96    /*----------------------------------------------------------------------------
97    ; STRUCTURES TYPEDEF'S
98    ----------------------------------------------------------------------------*/
99
100    /*----------------------------------------------------------------------------
101    ; GLOBAL FUNCTION DEFINITIONS
102    ; Function Prototype declaration
103    ----------------------------------------------------------------------------*/
104
105    static inline Word32 Mac_32(Word32 L_var3,
106    Word16 L_var1_hi,
107    Word16 L_var1_lo,
108    Word16 L_var2_hi,
109    Word16 L_var2_lo,
110    Flag *pOverflow)
111    {
112        Word16  product;
113
114        L_var3 = L_mac(L_var3, L_var1_hi, L_var2_hi, pOverflow);
115
116        product = mult(L_var1_hi, L_var2_lo, pOverflow);
117        L_var3 = L_mac(L_var3, product, 1, pOverflow);
118
119        product = mult(L_var1_lo, L_var2_hi, pOverflow);
120        L_var3 = L_mac(L_var3, product, 1, pOverflow);
121
122        return (L_var3);
123    }
124
125    static inline Word32 Mac_32_16(Word32 L_var3,
126                                   Word16 L_var1_hi,
127                                   Word16 L_var1_lo,
128                                   Word16 var2,
129                                   Flag  *pOverflow)
130    {
131        Word16  product;
132
133        L_var3 = L_mac(L_var3, L_var1_hi, var2, pOverflow);
134
135        product = mult(L_var1_lo, var2, pOverflow);
136        L_var3 = L_mac(L_var3, product, 1, pOverflow);
137
138        return (L_var3);
139    }
140
141    /*----------------------------------------------------------------------------
142    ; END
143    ----------------------------------------------------------------------------*/
144#ifdef __cplusplus
145}
146#endif
147
148#endif /* _MAC_32_H_ */
149
150
151