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