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_arm.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_ARM 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define PV_MP3DEC_FXD_OP_ARM 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_V5)||defined(PV_ARM_V4)) 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mul32_Q30(const Int32 L_var1, const Int32 L_var2) 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_hi; 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_lo; 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull result64_lo, result64_hi, L_var2, L_var1 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mov result64_lo, result64_lo, lsr #30 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber add result64_hi, result64_lo, result64_hi, asl #2 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mac32_Q30(const Int32 L_var1, const Int32 L_var2, Int32 L_add) 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_hi; 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_lo; 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull result64_lo, result64_hi, L_var2, L_var1 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber add L_add, L_add, result64_hi, asl #2 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber add L_add, L_add, result64_lo, lsr #30 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (L_add); 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define Qfmt_31(a) (Int32)(a*0x7FFFFFFF + (a>=0?0.5F:-0.5F)) 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mul32_Q32(Int32 L_var1, const Int32 L_var2) 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_hi; 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull L_var1, result64_hi, L_var2, L_var1 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mul32_Q28(const Int32 L_var1, const Int32 L_var2) 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_hi; 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_lo; 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull result64_lo, result64_hi, L_var2, L_var1 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mov result64_lo, result64_lo, lsr #28 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber add result64_hi, result64_lo, result64_hi, asl #4 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mul32_Q27(const Int32 L_var1, const Int32 L_var2) 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_hi; 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_lo; 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull result64_lo, result64_hi, L_var2, L_var1 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mov result64_lo, result64_lo, lsr #27 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber add result64_hi, result64_lo, result64_hi, asl #5 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mul32_Q26(Int32 L_var1, Int32 L_var2) 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_hi; 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_lo; 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull result64_lo, result64_hi, L_var2, L_var1 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mov result64_lo, result64_lo, lsr #26 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber add result64_hi, result64_lo, result64_hi, asl #6 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mac32_Q32(Int32 L_add, Int32 L_var1, const Int32 L_var2) 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smlal L_var1, L_add, L_var2, L_var1 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return L_add; 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_msb32_Q32(Int32 L_sub, Int32 L_var1, Int32 L_var2) 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull L_var2, L_var1, L_var2, L_var1 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sub L_sub, L_sub, L_var1 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return L_sub; 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline Int32 fxp_mul32_Q29(const Int32 L_var1, const Int32 L_var2) 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_hi; 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 result64_lo; 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber smull result64_lo, result64_hi, L_var2, L_var1 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber mov result64_lo, result64_lo, lsr #29 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber add result64_hi, result64_lo, result64_hi, asl #3 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline int32 pv_abs(int32 a) 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber Int32 b; 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber /* 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber b = a - (a<0); 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber a = b ^ sign(b) 186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber */ 187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __asm 188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber sub b, a, a, lsr #31 190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber eor a, b, b, asr #31 191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (a); 193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif 196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#ifdef __cplusplus 198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif 200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif /* PV_MP3DEC_FXD_OP_ARM */ 203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 204