1f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/* ------------------------------------------------------------------ 2f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 4f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * you may not use this file except in compliance with the License. 6f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * You may obtain a copy of the License at 7f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 8f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * 10f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * Unless required by applicable law or agreed to in writing, software 11f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * express or implied. 14f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * See the License for the specific language governing permissions 15f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * and limitations under the License. 16f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber * ------------------------------------------------------------------- 17f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber */ 18f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/* 19f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 20f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Pathname: pv_normalize.h 21f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 22f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 23f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 24f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber REVISION HISTORY 25f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 26f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Who: Date: 27f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Description: 28f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 29f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber INCLUDE DESCRIPTION 30f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 31f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber------------------------------------------------------------------------------ 32f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber*/ 33f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 34f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#ifndef PV_NORMALIZE_H 35f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#define PV_NORMALIZE_H 36f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 37f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 38f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 39f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; INCLUDES 40f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 41f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 42f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#include "pv_audio_type_defs.h" 43f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 44f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 45f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; MACROS 46f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; Define module specific macros here 47f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 48f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 49f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 50f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; EXTERNAL VARIABLES REFERENCES 51f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 52f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 53f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber/*---------------------------------------------------------------------------- 54f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber; DEFINES AND SIMPLE TYPEDEF'S 55f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber----------------------------------------------------------------------------*/ 56f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 57f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#if defined(_ARM) 58f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 59f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber__inline Int pv_normalize(Int32 x) 60f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber{ 61f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int32 y; 62f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber __asm 63f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber { 64f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber clz y, x; 65f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber sub y, y, #1 66f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber } 67f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber return (y); 68f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber} 69f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 70f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 71f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#elif (defined(PV_ARM_GCC_V5)||defined(PV_ARM_GCC_V4)) 72f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 73f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber__inline Int pv_normalize(Int32 x) 74f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber{ 75f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber register Int32 y; 76f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber register Int32 ra = x; 77f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 78f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 79f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber asm volatile( 80f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber "clz %0, %1\n\t" 81f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber "sub %0, %0, #1" 82f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber : "=&r*i"(y) 83f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber : "r"(ra)); 84f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber return (y); 85f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 86f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber} 87f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 88f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#else 89f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 90f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#ifdef __cplusplus 91f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huberextern "C" 92f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber{ 93f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#endif 94f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 95f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber Int pv_normalize(Int32 x); 96f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 97f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#ifdef __cplusplus 98f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber} 99f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#endif 100f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 101f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#endif 102f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 103f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 104f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber 105f44de515d3b6098a0b585865c1a0c7b20d3075a6Andreas Huber#endif /* PV_NORMALIZE_H */ 106