117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong/* 217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** Copyright 2003-2010, VisualOn, Inc. 317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** 417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** Licensed under the Apache License, Version 2.0 (the "License"); 517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** you may not use this file except in compliance with the License. 617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** You may obtain a copy of the License at 717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** 817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** http://www.apache.org/licenses/LICENSE-2.0 917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** 1017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** Unless required by applicable law or agreed to in writing, software 1117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** distributed under the License is distributed on an "AS IS" BASIS, 1217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** See the License for the specific language governing permissions and 1417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ** limitations under the License. 1517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong */ 1617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong/******************************************************************************* 1717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong File: oper_32b.h 1817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 1917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong Content: Double precision operations 2017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 2117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong*******************************************************************************/ 2217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 2317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#ifndef __OPER_32b_H 2417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#define __OPER_32b_H 2517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 2617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#include "typedef.h" 2717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 2817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#ifdef __cplusplus 2917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dongextern "C" { 3017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#endif 3117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 3217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#define POW2_TABLE_BITS 8 3317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#define POW2_TABLE_SIZE (1<<POW2_TABLE_BITS) 3417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 3517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dongvoid L_Extract (Word32 L_32, Word16 *hi, Word16 *lo); 3617299ab50ceb70d904e610e3b2d7fb2361a11e03James DongWord32 L_Comp (Word16 hi, Word16 lo); 3717299ab50ceb70d904e610e3b2d7fb2361a11e03James DongWord32 Mpy_32 (Word16 hi1, Word16 lo1, Word16 hi2, Word16 lo2); 3817299ab50ceb70d904e610e3b2d7fb2361a11e03James DongWord32 Mpy_32_16 (Word16 hi, Word16 lo, Word16 n); 3917299ab50ceb70d904e610e3b2d7fb2361a11e03James DongWord32 Div_32 (Word32 L_num, Word32 denom); 4017299ab50ceb70d904e610e3b2d7fb2361a11e03James DongWord16 iLog4(Word32 value); 4117299ab50ceb70d904e610e3b2d7fb2361a11e03James DongWord32 rsqrt(Word32 value, Word32 accuracy); 4217299ab50ceb70d904e610e3b2d7fb2361a11e03James DongWord32 pow2_xy(Word32 x, Word32 y); 4317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 4417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong__inline Word32 L_mpy_ls(Word32 L_var2, Word16 var1) 4517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong{ 4617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong unsigned short swLow1; 4717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong Word16 swHigh1; 4817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong Word32 l_var_out; 4917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 5017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong swLow1 = (unsigned short)(L_var2); 5117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong swHigh1 = (Word16)(L_var2 >> 16); 5217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 5317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong l_var_out = (long)swLow1 * (long)var1 >> 15; 5417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 5517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong l_var_out += swHigh1 * var1 << 1; 5617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 5717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong return(l_var_out); 5817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong} 5917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 6017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong__inline Word32 L_mpy_wx(Word32 L_var2, Word16 var1) 6117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong{ 6217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#if ARMV5TE_L_MPY_LS 6317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong Word32 result; 6417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong asm volatile( 6517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong "SMULWB %[result], %[L_var2], %[var1] \n" 6617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong :[result]"+r"(result) 6717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong :[L_var2]"r"(L_var2), [var1]"r"(var1) 6817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ); 6917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong return result; 7017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#else 7117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong unsigned short swLow1; 7217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong Word16 swHigh1; 7317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong Word32 l_var_out; 7417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 7517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong swLow1 = (unsigned short)(L_var2); 7617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong swHigh1 = (Word16)(L_var2 >> 16); 7717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 7817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong l_var_out = (long)swLow1 * (long)var1 >> 16; 7917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong l_var_out += swHigh1 * var1; 8017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 8117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong return(l_var_out); 8217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#endif 8317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong} 8417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 8517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#ifdef __cplusplus 8617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong} 8717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#endif 8817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 8917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong#endif 90