Git init
[external/opencore-amr.git] / opencore / codecs_v2 / audio / gsm_amr / amr_nb / common / include / norm_s.h
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  Filename: norm_s.h
31
32 ------------------------------------------------------------------------------
33  INCLUDE DESCRIPTION
34
35  This file contains all the constant definitions and prototype definitions
36  needed by the norm_s function.
37
38 ------------------------------------------------------------------------------
39 */
40
41 /*----------------------------------------------------------------------------
42 ; CONTINUE ONLY IF NOT ALREADY DEFINED
43 ----------------------------------------------------------------------------*/
44 #ifndef NORM_S_H
45 #define NORM_S_H
46
47 /*----------------------------------------------------------------------------
48 ; INCLUDES
49 ----------------------------------------------------------------------------*/
50 #include    "basicop_malloc.h"
51
52 /*--------------------------------------------------------------------------*/
53 #ifdef __cplusplus
54 extern "C"
55 {
56 #endif
57
58     /*----------------------------------------------------------------------------
59     ; MACROS
60     ; Define module specific macros here
61     ----------------------------------------------------------------------------*/
62
63     /*----------------------------------------------------------------------------
64     ; DEFINES
65     ; Include all pre-processor statements here.
66     ----------------------------------------------------------------------------*/
67
68     /*----------------------------------------------------------------------------
69     ; EXTERNAL VARIABLES REFERENCES
70     ; Declare variables used in this module but defined elsewhere
71     ----------------------------------------------------------------------------*/
72
73     /*----------------------------------------------------------------------------
74     ; SIMPLE TYPEDEF'S
75     ----------------------------------------------------------------------------*/
76
77     /*----------------------------------------------------------------------------
78     ; ENUMERATED TYPEDEF'S
79     ----------------------------------------------------------------------------*/
80
81     /*----------------------------------------------------------------------------
82     ; STRUCTURES TYPEDEF'S
83     ----------------------------------------------------------------------------*/
84
85     /*----------------------------------------------------------------------------
86     ; GLOBAL FUNCTION DEFINITIONS
87     ; Function Prototype declaration
88     ----------------------------------------------------------------------------*/
89 #if !( defined(PV_ARM_V5) || defined(PV_ARM_GCC_V5) )
90
91     /* C EQUIVALENT */
92
93     OSCL_IMPORT_REF Word16 norm_s(Word16 var1);
94
95 #elif defined(PV_ARM_V5)
96
97     __inline Word16  norm_s(Word16 var)
98     {
99         register Word32 var_out = 0;
100         Word32 var1 = var << 16;
101
102         __asm
103         {
104             CMP    var1, #0
105             EORNE  var1, var1, var1, LSL #1
106             CLZNE  var_out, var1
107         }
108
109         return ((Word16)var_out);
110     }
111
112 #elif defined(PV_ARM_GCC_V5)
113
114     static inline Word16 norm_s(Word16 var1)
115     {
116         register Word32 var_out = 0;
117         register Word32 ra = var1 << 16;
118         if (ra)
119         {
120             ra ^= (ra << 1);
121             asm volatile(
122                 "clz %0, %1"
123     : "=r"(var_out)
124                         : "r"(ra)
125                     );
126         }
127         return (var_out);
128     }
129
130 #endif
131     /*----------------------------------------------------------------------------
132     ; END
133     ----------------------------------------------------------------------------*/
134 #ifdef __cplusplus
135 }
136 #endif
137
138 #endif
139
140