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_gcc.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_GCC_H 41d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define PV_MP3DEC_FXD_OP_ARM_GCC_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_GCC_V5)||defined(PV_ARM_GCC_V4)) 53d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 54d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define Qfmt_31(a) (int32)(a*0x7FFFFFFF + (a>=0?0.5F:-0.5F)) 55d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 56d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#define Qfmt15(x) (Int16)(x*((int32)1<<15) + (x>=0?0.5F:-0.5F)) 57d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 58d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mul32_Q30(const int32 a, const int32 b) 59d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber { 60d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 61d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 62d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 63d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 64d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 65d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "mov %1, %1, lsr #30\n\t" 66d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %0, %1, %0, asl #2" 67d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 68d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 69d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 70d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb)); 71d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 72d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 73d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 74d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 75d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mac32_Q30(const int32 a, const int32 b, int32 L_add) 76d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 77d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 78d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 79d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 80d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 81d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rc = (int32)L_add; 82d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 83d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 84d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %4, %4, %0, asl #2\n\t" 85d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %0, %4, %1, lsr #30" 86d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 87d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 88d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 89d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb), 90d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rc)); 91d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 92d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 93d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 94d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 95d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 96d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 97d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mul32_Q32(const int32 a, const int32 b) 98d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 99d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 100d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 101d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 102d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 103d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile( 104d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "smull %1, %0, %2, %3" 105d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 106d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 107d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 108d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb)); 109d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 110d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 111d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 112d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 113d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 114d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mul32_Q29(const int32 a, const int32 b) 115d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 116d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 117d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 118d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 119d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 120d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 121d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "mov %1, %1, lsr #29\n\t" 122d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %0, %1, %0, asl #3" 123d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 124d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 125d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 126d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb)); 127d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 128d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 129d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 130d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 131d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mul32_Q28(const int32 a, const int32 b) 132d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 133d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 134d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 135d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 136d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 137d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 138d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 139d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "mov %1, %1, lsr #28\n\t" 140d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %0, %1, %0, asl #4" 141d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 142d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 143d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 144d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb)); 145d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 146d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 147d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 148d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 149d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 150d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mul32_Q27(const int32 a, const int32 b) 151d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 152d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 153d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 154d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 155d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 156d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 157d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "mov %1, %1, lsr #27\n\t" 158d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %0, %1, %0, asl #5" 159d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 160d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 161d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 162d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb)); 163d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 164d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 165d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 166d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 167d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 168d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mul32_Q26(const int32 a, const int32 b) 169d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 170d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 171d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 172d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 173d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 174d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 175d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "mov %1, %1, lsr #26\n\t" 176d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %0, %1, %0, asl #6" 177d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 178d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 179d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 180d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb)); 181d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 182d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 183d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 184d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 185d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 186d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 187d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_mac32_Q32(int32 L_add, const int32 a, const int32 b) 188d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 189d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 190d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 191d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 192d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 193d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 194d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rc = (int32)L_add; 195d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 196d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 197d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "add %0, %0, %4" 198d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 199d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 200d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 201d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb), 202d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rc)); 203d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 204d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 205d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 206d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 207d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber static inline int32 fxp_msb32_Q32(int32 L_sub, const int32 a, const int32 b) 208d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 209d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_hi; 210d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber int32 result64_lo; 211d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = (int32)a; 212d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rb = (int32)b; 213d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 rc = (int32)L_sub; 214d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 215d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile("smull %1, %0, %2, %3\n\t" 216d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "sub %0, %4, %0" 217d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(result64_hi), 218d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(result64_lo) 219d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra), 220d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rb), 221d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "r"(rc)); 222d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 223d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 224d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (result64_hi); 225d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 226d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 227d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 228d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber __inline int32 pv_abs(int32 x) 229d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber{ 230d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 z; 231d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 y; 232d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber register int32 ra = x; 233d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber asm volatile( 234d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "sub %0, %2, %2, lsr #31\n\t" 235d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "eor %1, %0, %0, asr #31" 236d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "=&r*i"(z), 237d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber "=&r*i"(y) 238d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber : "r"(ra)); 239d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 240d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber return (y); 241d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber } 242d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 243d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 244d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif 245d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 246d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#ifdef __cplusplus 247d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber} 248d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif 249d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 250d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 251d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber#endif /* PV_MP3DEC_FXD_OP_ARM_GCC_H */ 252d9618f23226f46c752e56f712bc4b505117d8b4bAndreas Huber 253