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