17f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* 27f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 37f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 47f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 57f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * you may not use this file except in compliance with the License. 67f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * You may obtain a copy of the License at 77f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 87f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 97f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * 107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * See the License for the specific language governing permissions and 147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project * limitations under the License. 157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */ 167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */ 187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_TensorEm/Flt16Vec.h" 207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Memory.h" 217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Math.h" 227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Functions.h" 237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ auxiliary functions } ---------------------------------------- */ 297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor / destructor } ----------------------------------- */ 377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_init( struct bbs_Context* cpA, 437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec* ptrA ) 447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_Int16Arr_init( cpA, &ptrA->arrE ); 467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE = 0; 477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_exit( struct bbs_Context* cpA, 527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec* ptrA ) 537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_Int16Arr_exit( cpA, &ptrA->arrE ); 557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE = 0; 567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */ 637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_copy( struct bbs_Context* cpA, 697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec* ptrA, 707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Flt16Vec* srcPtrA ) 717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_Int16Arr_copy( cpA, &ptrA->arrE, &srcPtrA->arrE ); 737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE = srcPtrA->expE; 747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bts_Flt16Vec_equal( struct bbs_Context* cpA, 797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Flt16Vec* ptrA, 807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Flt16Vec* srcPtrA ) 817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( !bbs_Int16Arr_equal( cpA, &ptrA->arrE, &srcPtrA->arrE ) ) return FALSE; 837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->expE != srcPtrA->expE ) return FALSE; 847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */ 927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectint16 bts_Flt16Vec_avg( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ) 987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 iL; 1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 sizeL = ptrA->arrE.sizeE; 1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 sumL = 0; 1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const int16* srcL = ptrA->arrE.arrPtrE; 1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) 1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sumL += srcL[ iL ]; 1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return sumL / ( int32 )sizeL; 1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Vec_norm( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ) 1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bbs_vecNorm16( ptrA->arrE.arrPtrE, ptrA->arrE.sizeE ); 1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint16 bts_Flt16Vec_maxAbs( struct bbs_Context* cpA, const struct bts_Flt16Vec* ptrA ) 1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 iL; 1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 sizeL = ptrA->arrE.sizeE; 1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 maxL = 0; 1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const int16* srcL = ptrA->arrE.arrPtrE; 1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) 1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 vL = srcL[ iL ] > 0 ? srcL[ iL ] : -srcL[ iL ]; 1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project maxL = vL > maxL ? vL : maxL; 1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return maxL; 1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */ 1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_create( struct bbs_Context* cpA, 1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec* ptrA, 1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeA, 1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemSeg* mspA ) 1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_Int16Arr_create( cpA, &ptrA->arrE, sizeA, mspA ); 1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_size( struct bbs_Context* cpA, 1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec* ptrA, 1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeA ) 1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_Int16Arr_size( cpA, &ptrA->arrE, sizeA ); 1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ I/O } -------------------------------------------------------- */ 1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Vec_memSize( struct bbs_Context* cpA, 1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Flt16Vec *ptrA ) 1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bbs_SIZEOF16( uint32 ) /* mem size */ 1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project + bbs_Int16Arr_memSize( cpA, &ptrA->arrE ) 1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project + bbs_SIZEOF16( ptrA->expE ); 1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Vec_memWrite( struct bbs_Context* cpA, 1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Flt16Vec* ptrA, 1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16* memPtrA ) 1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 memSizeL = bts_Flt16Vec_memSize( cpA, ptrA ); 1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite32( &memSizeL, memPtrA ); 1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_Int16Arr_memWrite( cpA, &ptrA->arrE, memPtrA ); 1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memWrite16( &ptrA->expE, memPtrA ); 1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return memSizeL; 1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Vec_memRead( struct bbs_Context* cpA, 1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec* ptrA, 1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const uint16* memPtrA, 1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bbs_MemSeg* mspA ) 1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 memSizeL; 1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( bbs_Context_error( cpA ) ) return 0; 2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead32( &memSizeL, memPtrA ); 2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_Int16Arr_memRead( cpA, &ptrA->arrE, memPtrA, mspA ); 2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project memPtrA += bbs_memRead16( &ptrA->expE, memPtrA ); 2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( memSizeL != bts_Flt16Vec_memSize( cpA, ptrA ) ) 2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERR0( bbs_ERR_CORRUPT_DATA, "uint32 bts_Flt16Vec_memRead( const struct bts_Flt16Vec* ptrA, const void* memPtrA ):\n" 2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project "size mismatch" ); 2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return 0; 2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return memSizeL; 2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */ 2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 2197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 2207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_maximizeMantisse( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) 2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 maxAbsL = bts_Flt16Vec_maxAbs( cpA, ptrA ); 2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16 shlL = 0; 2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( maxAbsL == 0 ) return; /* cannot maximize 0 */ 2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project while( maxAbsL < 0x4000 ) 2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project shlL++; 2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project maxAbsL <<= 1; 2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( shlL > 0 ) 2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeL = ptrA->arrE.sizeE; 2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16* dstL = ptrA->arrE.arrPtrE; 2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] <<= shlL; 2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE -= shlL; 2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Vec_maximizeAbsValue( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) 2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 maxAbsL = bts_Flt16Vec_maxAbs( cpA, ptrA ); 2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 fL; 2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( maxAbsL == 0 ) return 0; /* vector is zero */ 2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project fL = ( int32 )0x7FFF0000 / maxAbsL; 2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeL = ptrA->arrE.sizeE; 2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16* dstL = ptrA->arrE.arrPtrE; 2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( int32 )dstL[ iL ] * fL + 32768 ) >> 16; 2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return fL; 2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_zeroAverage( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) 2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 iL; 2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 sizeL = ptrA->arrE.sizeE; 2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16* dstL = ptrA->arrE.arrPtrE; 2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16 avgL = bts_Flt16Vec_avg( cpA, ptrA ); 2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] -= avgL; 2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_normalize( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) 2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 normL = bts_Flt16Vec_norm( cpA, ptrA ); 2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( normL == 0 ) 2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* vector is zero - do nothing */ 2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return; 2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16* dstL = ptrA->arrE.arrPtrE; 2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 iL; 2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 sizeL = ptrA->arrE.sizeE; 2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16 expL = 0; 2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 fL; 2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* let norm occupy 17 bits */ 2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( normL & 0xFFFE0000 ) != 0 ) 2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project while( ( ( normL >> -expL ) & 0xFFFE0000 ) != 0 ) expL--; 3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project normL >>= -expL; 3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 3037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project while( ( ( normL << expL ) & 0xFFFF0000 ) == 0 ) expL++; 3057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project normL <<= expL; 3067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* fL is positive and occupies only 16 bits - a product with int16 fits in int32 */ 3097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project fL = ( uint32 )0xFFFFFFFF / normL; 3107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* multiply with factor */ 3127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( ( ( int32 )dstL[ iL ] * fL ) >> 15 ) + 1 ) >> 1; 3137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* set exponent */ 3157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE = expL - 16; 3167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* 3187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 testNormL = bts_Flt16Vec_norm( cpA, ptrA ); 3207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project printf( "test norm %f\n", ( float )testNormL / ( 1 << -ptrA->expE ) ); 3217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project*/ 3237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_setZero( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA ) 3287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_Int16Arr_fill( cpA, &ptrA->arrE, 0 ); 3307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE = 0; 3317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_mul( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA, int32 valA, int16 expA ) 3367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 valL = valA; 3387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16 expL = expA; 3397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( valL == 0 ) 3417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Flt16Vec_setZero( cpA, ptrA ); 3437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return; 3447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 3467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 3487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeL = ptrA->arrE.sizeE; 3497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16* dstL = ptrA->arrE.arrPtrE; 3507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* adjust valL to maximum 16 bit accuracy */ 3527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 absValL = valL > 0 ? valL : -valL; 3537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( absValL & 0xFFFF8000 ) != 0 ) 3547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 shrL = 0; 3567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project while( ( absValL & 0xFFFF8000 ) != 0 ) 3577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project absValL >>= 1; 3597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project shrL++; 3607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( shrL > 0 ) 3637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project valL = ( ( valL >> ( shrL - 1 ) ) + 1 ) >> 1; 3657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project expL += shrL; 3667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( valL >= 0x08000 ) valL = 0x07FFF; /* saturate */ 3677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 3707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 shlL = 0; 3727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project while( ( absValL & 0xFFFFC000 ) == 0 ) 3737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project absValL <<= 1; 3757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project shlL++; 3767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project valL <<= shlL; 3797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project expL -= shlL; 3807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) 3837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project dstL[ iL ] = ( ( ( ( int32 )dstL[ iL ] * valL ) >> 15 ) + 1 ) >> 1; 3857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE += expL + 16; 3877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_dotPtrd( struct bbs_Context* cpA, struct bts_Flt16Vec* vp1A, struct bts_Flt16Vec* vp2A, int32* manPtrA, int32* expPtrA ) 3937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_DEF_fNameL( "void bts_Flt16Vec_dotPtrd( struct bbs_Context* cpA, struct bts_Flt16Vec* vp1A, struct bts_Flt16Vec* vp2A, int32* matPtrA, int32* expPtrA )" ) 3957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 iL; 3967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint16 sizeL = vp1A->arrE.sizeE; 3977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const int16* arr1L = vp1A->arrE.arrPtrE; 3987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const int16* arr2L = vp2A->arrE.arrPtrE; 3997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16 shrm1L = -1; /* shift minus 1 */ 4007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 sumL; 4017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( vp1A->arrE.sizeE != vp2A->arrE.sizeE ) 4037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_ERROR1( "%s:\nVectors have different size", fNameL ); 4057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return; 4067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sumL = 0; 4097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* shrm1L == -1 */ 4107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) 4117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sumL += ( int32 )arr1L[ iL ] * ( int32 )arr2L[ iL ]; 4137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( ( ( sumL > 0 ) ? sumL : -sumL ) & 0xC0000000 ) != 0 ) break; 4147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( iL < sizeL ) 4177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* danger of overflow: increase shift; adjust sum */ 4197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project shrm1L++; 4207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sumL = ( ( sumL >> 1 ) + 1 ) >> 1; 4217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* shrm1L == 0 */ 4237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) 4247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sumL += ( int32 )( ( arr1L[ iL ] + 1 ) >> 1 ) * ( int32 )( ( arr2L[ iL ] + 1 ) >> 1 ); 4267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( ( ( sumL > 0 ) ? sumL : -sumL ) & 0xC0000000 ) != 0 ) break; 4277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) 4307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( ( ( sumL > 0 ) ? sumL : -sumL ) & 0xC0000000 ) != 0 ) 4327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* danger of overflow: increase shift; adjust sum */ 4347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project shrm1L++; 4357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sumL = ( ( sumL >> 1 ) + 1 ) >> 1; 4367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project sumL += ( int32 )( ( ( arr1L[ iL ] >> shrm1L ) + 1 ) >> 1 ) * ( int32 )( ( ( arr2L[ iL ] >> shrm1L ) + 1 ) >> 1 ); 4397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( manPtrA != NULL ) *manPtrA = sumL; 4437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( expPtrA != NULL ) *expPtrA = vp1A->expE + vp2A->expE + ( ( shrm1L + 1 ) << 1 ); 4447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Vec_append( struct bbs_Context* cpA, struct bts_Flt16Vec* ptrA, struct bts_Flt16Vec* srcPtrA ) 4497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 4507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->arrE.sizeE == 0 ) 4517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Flt16Vec_copy( cpA, ptrA, srcPtrA ); 4537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 4557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 idxL = ptrA->arrE.sizeE; 4577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Flt16Vec_size( cpA, ptrA, idxL + srcPtrA->arrE.sizeE ); 4587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* copy data */ 4607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbs_memcpy16( ptrA->arrE.arrPtrE + idxL, srcPtrA->arrE.arrPtrE, srcPtrA->arrE.sizeE ); 4617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* equalize exponent */ 4637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->expE > srcPtrA->expE ) 4647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 4667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeL = srcPtrA->arrE.sizeE; 4677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 shrL = ptrA->expE - srcPtrA->expE; 4687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16* dstL = ptrA->arrE.arrPtrE + idxL; 4697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( dstL[ iL ] >> ( shrL - 1 ) ) + 1 ) >> 1; 4707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else if( ptrA->expE < srcPtrA->expE ) 4727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 4737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 iL; 4747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 sizeL = idxL; 4757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project uint32 shrL = srcPtrA->expE - ptrA->expE; 4767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int16* dstL = ptrA->arrE.arrPtrE; 4777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project for( iL = 0; iL < sizeL; iL++ ) dstL[ iL ] = ( ( dstL[ iL ] >> ( shrL - 1 ) ) + 1 ) >> 1; 4787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->expE = srcPtrA->expE; 4797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 4817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 4827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 4847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 4857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 4867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 487