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