1d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/* ------------------------------------------------------------------
2d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Copyright (C) 1998-2009 PacketVideo
3d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
4d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License");
5d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * you may not use this file except in compliance with the License.
6d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * You may obtain a copy of the License at
7d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
8d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *      http://www.apache.org/licenses/LICENSE-2.0
9d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber *
10d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * Unless required by applicable law or agreed to in writing, software
11d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS,
12d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * express or implied.
14d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * See the License for the specific language governing permissions
15d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * and limitations under the License.
16d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber * -------------------------------------------------------------------
17d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */
18d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber/*
19d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
20d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   PacketVideo Corp.
21d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   MP3 Decoder Library
22d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
23d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber   Pathname: ./cpp/include/pv_mp3dec_fxd_op_msc_evc.h
24d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
25d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber     Date: 08/20/2007
26d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
27d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
28d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber REVISION HISTORY
29d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
30d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Description:
31d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
32d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber INCLUDE DESCRIPTION
33d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
34d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber This file select the associated fixed point functions with the OS/ARCH.
35d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
36d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
37d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber------------------------------------------------------------------------------
38d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber*/
39d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
40d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#ifndef PV_MP3DEC_FXD_OP_MSC_EVC_H
41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define PV_MP3DEC_FXD_OP_MSC_EVC_H
42d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
43d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
44d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#ifdef __cplusplus
45d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huberextern "C"
46d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{
47d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif
48d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
49d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "pvmp3_audio_type_defs.h"
50d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
51d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
52d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#if (defined(PV_ARM_MSC_EVC_V5)||defined(PV_ARM_MSC_EVC_V4))
53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "armintr.h"
54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#include "cmnintrin.h"
55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_mul32_Q30(const int32 a, const int32 b)
58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (int32)(((int64)(a) * b) >> 30);
60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_mac32_Q30(const int32 a, const int32 b, int32 L_add)
64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (L_add + (int32)(((int64)(a) * b) >> 30));
66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define Qfmt_31(a)   (int32)(a*0x7FFFFFFF + (a>=0?0.5F:-0.5F))
70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define Qfmt15(x)   (Int16)(x*((int32)1<<15) + (x>=0?0.5F:-0.5F))
72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define fxp_mul32_Q32( a,  b)   _MulHigh( b, a)
74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_mul32_Q28(const int32 a, const int32 b)
78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (int32)(((int64)(a) * b) >> 28);
80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_mul32_Q27(const int32 a, const int32 b)
84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (int32)(((int64)(a) * b) >> 27);
86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_mul32_Q26(const int32 a, const int32 b)
91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (int32)(((int64)(a) * b) >> 26);
93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_mac32_Q32(int32 L_add, const int32 a, const int32 b)
97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (L_add + _MulHigh(b, a));
99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_msb32_Q32(int32 L_sub, const int32 a, const int32 b)
103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (L_sub - _MulHigh(b, a));
105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 fxp_mul32_Q29(const int32 a, const int32 b)
110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return (int32)(((int64)(a) * b) >> 29);
112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    __inline int32 pv_abs(int32 a)
117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    {
118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        int32 b = (a < 0) ? -a : a;
119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber        return b;
120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber    }
121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif
125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#ifdef __cplusplus
127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber}
128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif
129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif   /*  PV_MP3DEC_FXD_OP_MSC_EVC_H  */
132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber
133