1dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* ------------------------------------------------------------------ 2dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Copyright (C) 1998-2009 PacketVideo 3dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 4dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * you may not use this file except in compliance with the License. 6dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * You may obtain a copy of the License at 7dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 8dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * 10dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * Unless required by applicable law or agreed to in writing, software 11dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * express or implied. 14dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * See the License for the specific language governing permissions 15dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * and limitations under the License. 16dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber * ------------------------------------------------------------------- 17dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber */ 18dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber/* 19dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 20dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Pathname: ./c/include/fxp_mul32_c_equivalent.h 21dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 22dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 23dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber REVISION HISTORY 24dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 25dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Who: Date: 26dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Description: 27dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 28dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber INCLUDE DESCRIPTION 29dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 30dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber------------------------------------------------------------------------------ 31dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber*/ 32dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 33dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifndef FXP_MUL32_C_EQUIVALENT 34dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define FXP_MUL32_C_EQUIVALENT 35dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 36dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 37dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus 38dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huberextern "C" 39dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber{ 40dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 41dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 42dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 43dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#include "pv_audio_type_defs.h" 44dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 45dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 46dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#if defined(C_EQUIVALENT) 47dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 48dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define preload_cache( a) 49dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 50dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 shft_lft_1(Int32 L_var1) 51dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 52dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber if (((L_var1 << 1) >> 1) == L_var1) 53dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 <<= 1; 54dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber else 55dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 = ((L_var1 >> 31) ^ INT32_MAX); 56dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 57dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (L_var1); 58dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 59dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 60dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 61dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 62dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul_16_by_16bb(Int32 L_var1, Int32 L_var2) 63dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 64dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var2 = (L_var2 << 16) >> 16; 65dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 = (L_var1 << 16) >> 16; 66dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 67dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 *= L_var2; 68dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 69dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return L_var1; 70dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 71dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 72dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 73dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 74dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define fxp_mul_16_by_16(a, b) fxp_mul_16_by_16bb( a, b) 75dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 76dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 77dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul_16_by_16tb(Int32 L_var1, Int32 L_var2) 78dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 79dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var2 = (L_var2 << 16) >> 16; 80dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 = L_var1 >> 16; 81dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 82dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 *= L_var2; 83dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 84dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return L_var1; 85dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 86dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 87dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 88dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 89dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul_16_by_16bt(Int32 L_var1, Int32 L_var2) 90dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 91dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var2 = L_var2 >> 16; 92dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 = (L_var1 << 16) >> 16; 93dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 94dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 *= L_var2; 95dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 96dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return L_var1; 97dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 98dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 99dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 100dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 101dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul_16_by_16tt(Int32 L_var1, Int32 L_var2) 102dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 103dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var2 = L_var2 >> 16; 104dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 = L_var1 >> 16; 105dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 106dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var1 *= L_var2; 107dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 108dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return L_var1; 109dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 110dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 111dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 112dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mac_16_by_16(Int16 L_var1, Int16 L_var2, Int32 L_add) 113dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 114dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 115dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_add += L_var1 * L_var2; 116dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 117dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return L_add; 118dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 119dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 120dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 121dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 122dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 123dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 124dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 125dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mac_16_by_16_bb(Int16 L_var1, Int32 L_var2, Int32 L_add) 126dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 127dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var2 = (L_var2 << 16) >> 16; 128dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 129dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_add += L_var1 * L_var2; 130dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 131dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return L_add; 132dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 133dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 134dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 135dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 136dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mac_16_by_16_bt(Int16 L_var1, Int32 L_var2, Int32 L_add) 137dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 138dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_var2 = L_var2 >> 16; 139dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 140dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_add += L_var1 * L_var2; 141dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 142dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return L_add; 143dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 144dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 145dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 146dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 147dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 148dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 149dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 150dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 cmplx_mul32_by_16(Int32 x, const Int32 y, Int32 exp_jw) 151dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 152dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 rTmp0 = (Int16)(exp_jw >> 16); 153dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 iTmp0 = exp_jw; 154dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 z; 155dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 156dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber z = (Int32)(((int64_t)x * (rTmp0 << 16)) >> 32); 157dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber z += (Int32)(((int64_t)y * (iTmp0 << 16)) >> 32); 158dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 159dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (z); 160dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 161dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 162dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 163dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_by_16(Int32 L_var1, const Int32 L_var2) 164dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 165dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 z; 166dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 167dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber z = (Int32)(((int64_t) L_var1 * (L_var2 << 16)) >> 32); 168dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return(z); 169dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 170dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 171dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 172dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#define fxp_mul32_by_16b( a, b) fxp_mul32_by_16( a, b) 173dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 174dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 175dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_by_16t(Int32 L_var1, const Int32 L_var2) 176dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 177dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 rTmp0 = (Int16)(L_var2 >> 16); 178dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 z; 179dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 180dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber z = (Int32)(((int64_t) L_var1 * (rTmp0 << 16)) >> 32); 181dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 182dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return(z); 183dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 184dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 185dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 186dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mac32_by_16(const Int32 L_var1, const Int32 L_var2, Int32 L_add) 187dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 188dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber Int32 rTmp0 = L_var2 << 16; 189dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 190dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber L_add += (Int32)(((int64_t) L_var1 * rTmp0) >> 32); 191dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 192dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return(L_add); 193dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 194dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 195dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline int64_t fxp_mac64_Q31(int64_t sum, const Int32 L_var1, const Int32 L_var2) 196dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 197dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber sum += (int64_t)L_var1 * L_var2; 198dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (sum); 199dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 200dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 201dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q31(const Int32 a, const Int32 b) 202dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 203dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 32); 204dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 205dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 206dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mac32_Q31(Int32 L_add, const Int32 a, const Int32 b) 207dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 208dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (L_add + (Int32)(((int64_t)(a) * b) >> 32)); 209dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 210dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 211dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_msu32_Q31(Int32 L_sub, const Int32 a, const Int32 b) 212dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 213dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (L_sub - (Int32)(((int64_t)(a) * b) >> 32)); 214dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 215dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 216dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 217dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q30(const Int32 a, const Int32 b) 218dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 219dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 30); 220dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 221dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 222dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mac32_Q30(const Int32 a, const Int32 b, Int32 L_add) 223dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 224dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (L_add + (Int32)(((int64_t)(a) * b) >> 30)); 225dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 226dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 227dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 228dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q29(const Int32 a, const Int32 b) 229dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 230dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 29); 231dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 232dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 233dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mac32_Q29(const Int32 a, const Int32 b, Int32 L_add) 234dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 235dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (L_add + (Int32)(((int64_t)(a) * b) >> 29)); 236dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 237dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 238dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_msu32_Q29(const Int32 a, const Int32 b, Int32 L_sub) 239dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 240dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (L_sub - (Int32)(((int64_t)(a) * b) >> 29)); 241dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 242dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 243dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 244dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q28(const Int32 a, const Int32 b) 245dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 246dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 28); 247dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 248dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 249dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q27(const Int32 a, const Int32 b) 250dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 251dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 27); 252dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 253dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 254dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q26(const Int32 a, const Int32 b) 255dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 256dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 26); 257dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 258dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 259dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q20(const Int32 a, const Int32 b) 260dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 261dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 20); 262dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 263dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 264dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q15(const Int32 a, const Int32 b) 265dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 266dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 15); 267dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 268dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 269dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber __inline Int32 fxp_mul32_Q14(const Int32 a, const Int32 b) 270dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber { 271dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber return (Int32)(((int64_t)(a) * b) >> 14); 272dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber } 273dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 274dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 275dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 276dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 277dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 278dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 279dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#ifdef __cplusplus 280dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber} 281dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif 282dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 283dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 284dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber#endif /* FXP_MUL32 */ 285dacaa73ae5010b66f4224d70a520945e5b653544Andreas Huber 286