1250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* ------------------------------------------------------------------ 2250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Copyright (C) 1998-2009 PacketVideo 3250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 4250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * you may not use this file except in compliance with the License. 6250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * You may obtain a copy of the License at 7250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 8250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * 10250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * Unless required by applicable law or agreed to in writing, software 11250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * express or implied. 14250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * See the License for the specific language governing permissions 15250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * and limitations under the License. 16250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber * ------------------------------------------------------------------- 17250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber */ 18250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/* 19250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 20250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber PacketVideo Corp. 21250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber MP3 Decoder Library 22250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 23250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Filename: pvmp3_normalize.h 24250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 25250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Date: 10/02/2007 26250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 27250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 28250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REVISION HISTORY 29250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 30250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Description: 31250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 32250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INCLUDE DESCRIPTION 33250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 34250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 35250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber*/ 36250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 37250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#ifndef PVMP3_NORMALIZE_H 38250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#define PVMP3_NORMALIZE_H 39250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 40250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 41250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 42250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; INCLUDES 43250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 44250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 45250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_audio_type_defs.h" 46250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 47250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 48250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; MACROS 49250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; Define module specific macros here 50250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 51250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 52250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 53250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; EXTERNAL VARIABLES REFERENCES 54250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 55250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 56250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber/*---------------------------------------------------------------------------- 57250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber; DEFINES AND SIMPLE TYPEDEF'S 58250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber----------------------------------------------------------------------------*/ 59250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 60250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#if (defined(PV_ARM_V5)||defined(PV_ARM_V4)) 61250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 62250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber__inline int32 pvmp3_normalize(int32 x) 63250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 64250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 y; 65250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber __asm 66250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 67250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber clz y, x; 68250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber sub y, y, #1 69250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 70250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (y); 71250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 72250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 73250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 74250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#elif (defined(PV_ARM_GCC_V5)||defined(PV_ARM_GCC_V4)) 75250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 76250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber__inline int32 pvmp3_normalize(int32 x) 77250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 78250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 y; 79250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = x; 80250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 81250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 82250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile( 83250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "clz %0, %1\n\t" 84250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "sub %0, %0, #1" 85250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(y) 86250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra)); 87250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (y); 88250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 89250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 90250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 91250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#else 92250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 93250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#ifdef __cplusplus 94250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberextern "C" 95250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 96250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif 97250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 98250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 pvmp3_normalize(int32 x); 99250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 100250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#ifdef __cplusplus 101250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 102250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif 103250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 104250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif 105250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 106250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 107250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 108250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif /* PV_NORMALIZE_H */ 109