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 Pathname: ./gsm-amr/c/src/l_abs.c 31 32------------------------------------------------------------------------------ 33 REVISION HISTORY 34 35 Description: Created separate file for the L_abs function. Sync'ed up 36 with the current template and fixed tabs. 37 38 Description: Removed conditional code that updates WMOPS counter 39 40 Who: Date: 41 Description: 42 43------------------------------------------------------------------------------ 44 INPUT AND OUTPUT DEFINITIONS 45 46 Inputs: 47 L_var1 = 32 bit long signed integer (Word32 ) whose value falls 48 in the range : 0x8000 0000 <= L_var1 <= 0x7fff ffff. 49 50 Local Stores/Buffers/Pointers Needed: 51 None 52 53 Global Stores/Buffers/Pointers Needed: 54 None 55 56 Outputs: 57 L_var1 = absolute value of input (Word32) 58 59 Pointers and Buffers Modified: 60 None 61 62 Local Stores Modified: 63 None 64 65 Global Stores Modified: 66 None 67 68------------------------------------------------------------------------------ 69 FUNCTION DESCRIPTION 70 71 This function calculates the absolute value of L_var1; saturate in case 72 where the input is -214783648. 73 74------------------------------------------------------------------------------ 75 REQUIREMENTS 76 77 None 78 79------------------------------------------------------------------------------ 80 REFERENCES 81 82 [1] basicop2.c, ETS Version 2.0.0, February 8, 1999 83 84------------------------------------------------------------------------------ 85 PSEUDO-CODE 86 87Word32 L_abs (Word32 L_var1) 88{ 89 Word32 L_var_out; 90 91 if (L_var1 == MIN_32) 92 { 93 L_var_out = MAX_32; 94 } 95 else 96 { 97 if (L_var1 < 0) 98 { 99 L_var_out = -L_var1; 100 } 101 else 102 { 103 L_var_out = L_var1; 104 } 105 } 106 107#if (WMOPS) 108 multiCounter[currCounter].L_abs++; 109#endif 110 return (L_var_out); 111} 112 113 114------------------------------------------------------------------------------ 115 RESOURCES USED 116 When the code is written for a specific target processor the 117 the resources used should be documented below. 118 119 STACK USAGE: [stack count for this module] + [variable to represent 120 stack usage for each subroutine called] 121 122 where: [stack usage variable] = stack usage for [subroutine 123 name] (see [filename].ext) 124 125 DATA MEMORY USED: x words 126 127 PROGRAM MEMORY USED: x words 128 129 CLOCK CYCLES: [cycle count equation for this module] + [variable 130 used to represent cycle count for each subroutine 131 called] 132 133 where: [cycle count variable] = cycle count for [subroutine 134 name] (see [filename].ext) 135 136------------------------------------------------------------------------------ 137*/ 138 139 140/*---------------------------------------------------------------------------- 141; INCLUDES 142----------------------------------------------------------------------------*/ 143#include "basic_op.h" 144 145/*---------------------------------------------------------------------------- 146; MACROS 147; Define module specific macros here 148----------------------------------------------------------------------------*/ 149 150/*---------------------------------------------------------------------------- 151; DEFINES 152; Include all pre-processor statements here. Include conditional 153; compile variables also. 154----------------------------------------------------------------------------*/ 155 156/*---------------------------------------------------------------------------- 157; LOCAL FUNCTION DEFINITIONS 158; Function Prototype declaration 159----------------------------------------------------------------------------*/ 160 161/*---------------------------------------------------------------------------- 162; LOCAL STORE/BUFFER/POINTER DEFINITIONS 163; Variable declaration - defined here and used outside this module 164----------------------------------------------------------------------------*/ 165 166/*---------------------------------------------------------------------------- 167; EXTERNAL FUNCTION REFERENCES 168; Declare functions defined elsewhere and referenced in this module 169----------------------------------------------------------------------------*/ 170 171/*---------------------------------------------------------------------------- 172; EXTERNAL GLOBAL STORE/BUFFER/POINTER REFERENCES 173; Declare variables used in this module but defined elsewhere 174----------------------------------------------------------------------------*/ 175 176/*---------------------------------------------------------------------------- 177; FUNCTION CODE 178----------------------------------------------------------------------------*/ 179Word32 L_abs(register Word32 L_var1) 180{ 181 /*---------------------------------------------------------------------------- 182 ; Define all local variables 183 ----------------------------------------------------------------------------*/ 184 185 /*---------------------------------------------------------------------------- 186 ; Function body here 187 ----------------------------------------------------------------------------*/ 188 189 Word32 y = L_var1 - (L_var1 < 0); 190 y = y ^(y >> 31); 191 return (y); 192 193} 194