1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /* 19 20 Pathname: .fxp_mul32_msc_evc_armv5.h 21 22 ------------------------------------------------------------------------------ 23 REVISION HISTORY 24 25 Who: Date: 26 Description: 27 ------------------------------------------------------------------------------ 28 INCLUDE DESCRIPTION 29 30 ------------------------------------------------------------------------------ 31 */ 32 33 #ifndef FXP_MUL32_MSC_EVC_ARMV5 34 #define FXP_MUL32_MSC_EVC_ARMV5 35 36 37 #ifdef __cplusplus 38 extern "C" 39 { 40 #endif 41 42 43 #include "pv_audio_type_defs.h" 44 45 #if defined(PV_ARM_MSC_EVC_V5) 46 47 #include "armintr.h" 48 #include "cmnintrin.h" 49 50 #define preload_cache( a) 51 52 #define shft_lft_1( L_var1) _AddSatInt( L_var1, L_var1) 53 54 #define fxp_mul_16_by_16bb( L_var1, L_var2) _SmulLo_SW_SL( L_var1, L_var2) 55 56 #define fxp_mul_16_by_16(a, b) fxp_mul_16_by_16bb( a, b) 57 58 #define fxp_mul_16_by_16tb( L_var1, L_var2) _SmulHiLo_SW_SL( L_var1, L_var2) 59 60 #define fxp_mul_16_by_16bt( L_var1, L_var2) _SmulLoHi_SW_SL( L_var1, L_var2) 61 62 #define fxp_mul_16_by_16tt( L_var1, L_var2) _SmulHi_SW_SL( L_var1, L_var2) 63 64 #define fxp_mac_16_by_16( L_var1, L_var2, L_add) _SmulAddLo_SW_SL( L_add, L_var1, L_var2) 65 66 #define fxp_mac_16_by_16_bb(a, b, c) fxp_mac_16_by_16( a, b, c) 67 68 #define fxp_mac_16_by_16_bt( L_var1, L_var2, L_add) _SmulAddLoHi_SW_SL( L_add, L_var1, L_var2) 69 70 71 __inline Int32 cmplx_mul32_by_16(Int32 L_var1, const Int32 L_var2, const Int32 cmplx) 72 { 73 Int32 result64_hi; 74 75 result64_hi = _SmulWHi_SW_SL(L_var1, cmplx); 76 result64_hi = _SmulAddWLo_SW_SL(result64_hi, L_var2, cmplx); 77 78 return (result64_hi); 79 } 80 81 #define fxp_mul32_by_16( L_var1, L_var2) _SmulWLo_SW_SL( L_var1, L_var2) 82 83 #define fxp_mul32_by_16b( a, b) fxp_mul32_by_16( a, b) 84 85 #define fxp_mul32_by_16t( L_var1, L_var2) _SmulWHi_SW_SL( L_var1, L_var2) 86 87 #define fxp_mac32_by_16( L_var1, L_var2, L_add) _SmulAddWLo_SW_SL( L_add, L_var1, L_var2) 88 89 90 __inline int64 fxp_mac64_Q31(int64 sum, const Int32 L_var1, const Int32 L_var2) 91 { 92 sum += (int64)L_var1 * L_var2; 93 return (sum); 94 } 95 96 #define fxp_mul32_Q31( a, b) _MulHigh( b, a) 97 98 99 __inline Int32 fxp_mac32_Q31(Int32 L_add, const Int32 a, const Int32 b) 100 { 101 return (L_add + _MulHigh(b, a)); 102 } 103 104 105 __inline Int32 fxp_msu32_Q31(Int32 L_sub, const Int32 a, const Int32 b) 106 { 107 return (L_sub - _MulHigh(b, a)); 108 } 109 110 111 __inline Int32 fxp_mul32_Q30(const Int32 a, const Int32 b) 112 { 113 return (Int32)(((int64)(a) * b) >> 30); 114 } 115 116 __inline Int32 fxp_mac32_Q30(const Int32 a, const Int32 b, Int32 L_add) 117 { 118 return (L_add + (Int32)(((int64)(a) * b) >> 30)); 119 } 120 121 122 __inline Int32 fxp_mul32_Q29(const Int32 a, const Int32 b) 123 { 124 return (Int32)(((int64)(a) * b) >> 29); 125 } 126 127 __inline Int32 fxp_mac32_Q29(const Int32 a, const Int32 b, Int32 L_add) 128 { 129 return (L_add + (Int32)(((int64)(a) * b) >> 29)); 130 } 131 132 __inline Int32 fxp_msu32_Q29(const Int32 a, const Int32 b, Int32 L_sub) 133 { 134 return (L_sub - (Int32)(((int64)(a) * b) >> 29)); 135 } 136 137 138 __inline Int32 fxp_mul32_Q28(const Int32 a, const Int32 b) 139 { 140 return (Int32)(((int64)(a) * b) >> 28); 141 } 142 143 __inline Int32 fxp_mul32_Q27(const Int32 a, const Int32 b) 144 { 145 return (Int32)(((int64)(a) * b) >> 27); 146 } 147 148 __inline Int32 fxp_mul32_Q26(const Int32 a, const Int32 b) 149 { 150 return (Int32)(((int64)(a) * b) >> 26); 151 } 152 153 __inline Int32 fxp_mul32_Q20(const Int32 a, const Int32 b) 154 { 155 return (Int32)(((int64)(a) * b) >> 20); 156 } 157 158 __inline Int32 fxp_mul32_Q15(const Int32 a, const Int32 b) 159 { 160 return (Int32)(((int64)(a) * b) >> 15); 161 } 162 163 __inline Int32 fxp_mul32_Q14(const Int32 a, const Int32 b) 164 { 165 return (Int32)(((int64)(a) * b) >> 14); 166 } 167 168 169 #endif 170 171 172 #ifdef __cplusplus 173 } 174 #endif 175 176 177 #endif /* FXP_MUL32 */ 178 179