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 */ 87 88 89 /*---------------------------------------------------------------------------- 90 ; INCLUDES 91 ----------------------------------------------------------------------------*/ 92 #include "basic_op.h" 93 94 /*---------------------------------------------------------------------------- 95 ; MACROS 96 ; Define module specific macros here 97 ----------------------------------------------------------------------------*/ 98 99 /*---------------------------------------------------------------------------- 100 ; DEFINES 101 ; Include all pre-processor statements here. Include conditional 102 ; compile variables also. 103 ----------------------------------------------------------------------------*/ 104 105 /*---------------------------------------------------------------------------- 106 ; LOCAL FUNCTION DEFINITIONS 107 ; Function Prototype declaration 108 ----------------------------------------------------------------------------*/ 109 110 /*---------------------------------------------------------------------------- 111 ; LOCAL STORE/BUFFER/POINTER DEFINITIONS 112 ; Variable declaration - defined here and used outside this module 113 ----------------------------------------------------------------------------*/ 114 115 /*---------------------------------------------------------------------------- 116 ; EXTERNAL FUNCTION REFERENCES 117 ; Declare functions defined elsewhere and referenced in this module 118 ----------------------------------------------------------------------------*/ 119 120 /*---------------------------------------------------------------------------- 121 ; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 122 ; Declare variables used in this module but defined elsewhere 123 ----------------------------------------------------------------------------*/ 124 125 /*---------------------------------------------------------------------------- 126 ; FUNCTION CODE 127 ----------------------------------------------------------------------------*/ 128 Word32 L_negate(register Word32 L_var1) 129 { 130 /*---------------------------------------------------------------------------- 131 ; Define all local variables 132 ----------------------------------------------------------------------------*/ 133 134 /*---------------------------------------------------------------------------- 135 ; Function body here 136 ----------------------------------------------------------------------------*/ 137 L_var1 = (L_var1 == MIN_32) ? MAX_32 : -L_var1; 138 139 /*---------------------------------------------------------------------------- 140 ; Return nothing or data or data pointer 141 ----------------------------------------------------------------------------*/ 142 return (L_var1); 143 } 144 145