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