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