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 Pathname: ./gsm-amr/c/include/norm_l.h 31 32 ------------------------------------------------------------------------------ 33 REVISION HISTORY 34 35 Description: Created separate header file for norm_l function. 36 37 Description: Updated template to make it build in Symbian. Updated copyright 38 year. 39 40 Description: Moved _cplusplus #ifdef after Include section. 41 42 Description: Support for ARM and Linux-ARM assembly. 43 44 Who: Date: 45 Description: 46 47 ------------------------------------------------------------------------------ 48 INCLUDE DESCRIPTION 49 50 This file contains all the constant definitions and prototype definitions 51 needed by the norm_l function. 52 53 ------------------------------------------------------------------------------ 54 */ 55 56 /*---------------------------------------------------------------------------- 57 ; CONTINUE ONLY IF NOT ALREADY DEFINED 58 ----------------------------------------------------------------------------*/ 59 #ifndef NORM_L_H 60 #define NORM_L_H 61 62 /*---------------------------------------------------------------------------- 63 ; INCLUDES 64 ----------------------------------------------------------------------------*/ 65 #include "basicop_malloc.h" 66 67 /*--------------------------------------------------------------------------*/ 68 #ifdef __cplusplus 69 extern "C" 70 { 71 #endif 72 73 /*---------------------------------------------------------------------------- 74 ; MACROS 75 ; Define module specific macros here 76 ----------------------------------------------------------------------------*/ 77 78 /*---------------------------------------------------------------------------- 79 ; DEFINES 80 ; Include all pre-processor statements here. 81 ----------------------------------------------------------------------------*/ 82 83 /*---------------------------------------------------------------------------- 84 ; EXTERNAL VARIABLES REFERENCES 85 ; Declare variables used in this module but defined elsewhere 86 ----------------------------------------------------------------------------*/ 87 88 /*---------------------------------------------------------------------------- 89 ; SIMPLE TYPEDEF'S 90 ----------------------------------------------------------------------------*/ 91 92 /*---------------------------------------------------------------------------- 93 ; ENUMERATED TYPEDEF'S 94 ----------------------------------------------------------------------------*/ 95 96 /*---------------------------------------------------------------------------- 97 ; STRUCTURES TYPEDEF'S 98 ----------------------------------------------------------------------------*/ 99 100 /*---------------------------------------------------------------------------- 101 ; GLOBAL FUNCTION DEFINITIONS 102 ; Function Prototype declaration 103 ----------------------------------------------------------------------------*/ 104 #if !( defined(PV_ARM_V5) || defined(PV_ARM_GCC_V5) ) 105 106 /* C EQUIVALENT */ 107 Word16 norm_l(Word32 L_var1); 108 109 #elif defined(PV_ARM_V5) 110 111 __inline Word16 norm_l(Word32 L_var1) 112 { 113 register Word32 var_out = 0; 114 115 __asm 116 { 117 CMP L_var1, #0 118 EORNE L_var1, L_var1, L_var1, LSL #1 119 CLZNE var_out, L_var1 120 } 121 122 return ((Word16)var_out); 123 } 124 125 #elif defined(PV_ARM_GCC_V5) 126 127 static inline Word16 norm_l(Word32 L_var1) 128 { 129 register Word32 var_out = 0; 130 register Word32 ra = L_var1; 131 if (L_var1) 132 { 133 ra ^= (ra << 1); 134 asm volatile( 135 "clz %0, %1" 136 : "=r"(var_out) 137 : "r"(ra) 138 ); 139 } 140 return (var_out); 141 } 142 143 #endif 144 /*---------------------------------------------------------------------------- 145 ; END 146 ----------------------------------------------------------------------------*/ 147 #ifdef __cplusplus 148 } 149 #endif 150 151 #endif 152 153 154