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 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 74Word32 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----------------------------------------------------------------------------*/ 150Word32 L_negate(register 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