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 /****************************************************************************************
19 Portions 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)
26 Permission to distribute, modify and use this file under the standard license
27 terms listed above has been obtained from the copyright holder.
28 ****************************************************************************************/
29 /*
30 ------------------------------------------------------------------------------
31  INPUT AND OUTPUT DEFINITIONS
32 
33  Inputs:
34     L_var1 = 32 bit long signed integer (Word32) whose value falls
35              in the range : 0x8000 0000 <= L_var1 <= 0x7fff ffff.
36 
37  Local Stores/Buffers/Pointers Needed:
38     None
39 
40  Global Stores/Buffers/Pointers Needed:
41     None
42 
43  Outputs:
44     L_var1 = 32-bit negation of input
45 
46  Pointers and Buffers Modified:
47     None
48 
49  Local Stores Modified:
50     None
51 
52  Global Stores Modified:
53     None
54 
55 ------------------------------------------------------------------------------
56  FUNCTION DESCRIPTION
57 
58  This function negates the 32 bit variable, L_var1, with saturation; saturate
59  in the case where input is -2147483648 (0x8000 0000).
60 
61 ------------------------------------------------------------------------------
62  REQUIREMENTS
63 
64  None
65 
66 ------------------------------------------------------------------------------
67  REFERENCES
68 
69  [1] basicop2.c, ETS Version 2.0.0, February 8, 1999
70 
71 ------------------------------------------------------------------------------
72  PSEUDO-CODE
73 
74 Word32 L_negate (Word32 L_var1)
75 {
76     Word32 L_var_out;
77 
78     L_var_out = (L_var1 == MIN_32) ? MAX_32 : -L_var1;
79 #if (WMOPS)
80     multiCounter[currCounter].L_negate++;
81 #endif
82     return (L_var_out);
83 }
84 
85 ------------------------------------------------------------------------------
86  RESOURCES USED
87    When the code is written for a specific target processor the
88      the resources used should be documented below.
89 
90  STACK USAGE: [stack count for this module] + [variable to represent
91           stack usage for each subroutine called]
92 
93      where: [stack usage variable] = stack usage for [subroutine
94          name] (see [filename].ext)
95 
96  DATA MEMORY USED: x words
97 
98  PROGRAM MEMORY USED: x words
99 
100  CLOCK CYCLES: [cycle count equation for this module] + [variable
101            used to represent cycle count for each subroutine
102            called]
103 
104      where: [cycle count variable] = cycle count for [subroutine
105         name] (see [filename].ext)
106 
107 ------------------------------------------------------------------------------
108 */
109 
110 
111 /*----------------------------------------------------------------------------
112 ; INCLUDES
113 ----------------------------------------------------------------------------*/
114 #include    "basic_op.h"
115 
116 /*----------------------------------------------------------------------------
117 ; MACROS
118 ; Define module specific macros here
119 ----------------------------------------------------------------------------*/
120 
121 /*----------------------------------------------------------------------------
122 ; DEFINES
123 ; Include all pre-processor statements here. Include conditional
124 ; compile variables also.
125 ----------------------------------------------------------------------------*/
126 
127 /*----------------------------------------------------------------------------
128 ; LOCAL FUNCTION DEFINITIONS
129 ; Function Prototype declaration
130 ----------------------------------------------------------------------------*/
131 
132 /*----------------------------------------------------------------------------
133 ; LOCAL STORE/BUFFER/POINTER DEFINITIONS
134 ; Variable declaration - defined here and used outside this module
135 ----------------------------------------------------------------------------*/
136 
137 /*----------------------------------------------------------------------------
138 ; EXTERNAL FUNCTION REFERENCES
139 ; Declare functions defined elsewhere and referenced in this module
140 ----------------------------------------------------------------------------*/
141 
142 /*----------------------------------------------------------------------------
143 ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES
144 ; Declare variables used in this module but defined elsewhere
145 ----------------------------------------------------------------------------*/
146 
147 /*----------------------------------------------------------------------------
148 ; FUNCTION CODE
149 ----------------------------------------------------------------------------*/
L_negate(Word32 L_var1)150 Word32 L_negate(Word32 L_var1)
151 {
152     /*----------------------------------------------------------------------------
153     ; Define all local variables
154     ----------------------------------------------------------------------------*/
155 
156     /*----------------------------------------------------------------------------
157     ; Function body here
158     ----------------------------------------------------------------------------*/
159     L_var1 = (L_var1 == MIN_32) ? MAX_32 : -L_var1;
160 
161     /*----------------------------------------------------------------------------
162     ; Return nothing or data or data pointer
163     ----------------------------------------------------------------------------*/
164     return (L_var1);
165 }
166 
167