pv_mp3dec_fxd_op_arm_gcc.h revision 250f2433c6e1cf2727a79971fdc6ce0f8677037a
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 Pathname: ./cpp/include/pv_mp3dec_fxd_op_arm_gcc.h 24250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 25250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Date: 08/20/2007 26250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 27250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 28250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber REVISION HISTORY 29250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 30250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber Description: 31250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 32250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber INCLUDE DESCRIPTION 33250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 34250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber This file select the associated fixed point functions with the OS/ARCH. 35250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 36250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 37250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber------------------------------------------------------------------------------ 38250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber*/ 39250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 40250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#ifndef PV_MP3DEC_FXD_OP_ARM_GCC_H 41250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#define PV_MP3DEC_FXD_OP_ARM_GCC_H 42250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 43250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 44250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#ifdef __cplusplus 45250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huberextern "C" 46250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 47250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif 48250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 49250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#include "pvmp3_audio_type_defs.h" 50250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 51250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 52250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#if (defined(PV_ARM_GCC_V5)||defined(PV_ARM_GCC_V4)) 53250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 54250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#define Qfmt_31(a) (int32)(a*0x7FFFFFFF + (a>=0?0.5F:-0.5F)) 55250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 56250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#define Qfmt15(x) (Int16)(x*((int32)1<<15) + (x>=0?0.5F:-0.5F)) 57250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 58250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mul32_Q30(const int32 a, const int32 b) 59250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber { 60250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 61250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 62250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 63250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 64250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 65250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "mov %1, %1, lsr #30\n\t" 66250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %0, %1, %0, asl #2" 67250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 68250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 69250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 70250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb)); 71250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 72250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 73250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 74250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 75250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mac32_Q30(const int32 a, const int32 b, int32 L_add) 76250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 77250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 78250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 79250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 80250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 81250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rc = (int32)L_add; 82250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 83250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 84250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %4, %4, %0, asl #2\n\t" 85250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %0, %4, %1, lsr #30" 86250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 87250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 88250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 89250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb), 90250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rc)); 91250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 92250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 93250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 94250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 95250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 96250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 97250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mul32_Q32(const int32 a, const int32 b) 98250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 99250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 100250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 101250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 102250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 103250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile( 104250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "smull %1, %0, %2, %3" 105250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 106250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 107250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 108250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb)); 109250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 110250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 111250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 112250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 113250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 114250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mul32_Q29(const int32 a, const int32 b) 115250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 116250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 117250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 118250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 119250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 120250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 121250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "mov %1, %1, lsr #29\n\t" 122250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %0, %1, %0, asl #3" 123250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 124250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 125250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 126250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb)); 127250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 128250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 129250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 130250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 131250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mul32_Q28(const int32 a, const int32 b) 132250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 133250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 134250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 135250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 136250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 137250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 138250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 139250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "mov %1, %1, lsr #28\n\t" 140250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %0, %1, %0, asl #4" 141250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 142250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 143250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 144250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb)); 145250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 146250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 147250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 148250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 149250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 150250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mul32_Q27(const int32 a, const int32 b) 151250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 152250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 153250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 154250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 155250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 156250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 157250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "mov %1, %1, lsr #27\n\t" 158250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %0, %1, %0, asl #5" 159250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 160250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 161250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 162250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb)); 163250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 164250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 165250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 166250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 167250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 168250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mul32_Q26(const int32 a, const int32 b) 169250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 170250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 171250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 172250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 173250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 174250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 175250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "mov %1, %1, lsr #26\n\t" 176250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %0, %1, %0, asl #6" 177250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 178250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 179250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 180250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb)); 181250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 182250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 183250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 184250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 185250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 186250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 187250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_mac32_Q32(int32 L_add, const int32 a, const int32 b) 188250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 189250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 190250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 191250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 192250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 193250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 194250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rc = (int32)L_add; 195250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 196250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 197250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "add %0, %0, %4" 198250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 199250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 200250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 201250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb), 202250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rc)); 203250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 204250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 205250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 206250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 207250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber static inline int32 fxp_msb32_Q32(int32 L_sub, const int32 a, const int32 b) 208250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 209250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_hi; 210250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber int32 result64_lo; 211250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = (int32)a; 212250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rb = (int32)b; 213250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 rc = (int32)L_sub; 214250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 215250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 216250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "sub %0, %4, %0" 217250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(result64_hi), 218250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(result64_lo) 219250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra), 220250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rb), 221250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "r"(rc)); 222250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 223250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 224250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (result64_hi); 225250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 226250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 227250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 228250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber __inline int32 pv_abs(int32 x) 229250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber{ 230250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 z; 231250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 y; 232250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber register int32 ra = x; 233250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber asm volatile( 234250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "sub %0, %2, %2, lsr #31\n\t" 235250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "eor %1, %0, %0, asr #31" 236250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "=&r*i"(z), 237250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber "=&r*i"(y) 238250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber : "r"(ra)); 239250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 240250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber return (y); 241250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber } 242250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 243250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 244250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif 245250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 246250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#ifdef __cplusplus 247250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber} 248250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif 249250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 250250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 251250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber#endif /* PV_MP3DEC_FXD_OP_ARM_GCC_H */ 252250f2433c6e1cf2727a79971fdc6ce0f8677037aAndreas Huber 253