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/Flt16Vec2D.h" 207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_TensorEm/Functions.h" 217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Math.h" 227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Memory.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_Flt16Vec2D_init( struct bts_Flt16Vec2D* ptrA ) 437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = 0; 457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE = 0; 467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->bbpE = 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_Flt16Vec2D_exit( struct bts_Flt16Vec2D* ptrA ) 527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = 0; 547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE = 0; 557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->bbpE = 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_Flt16Vec2D_copy( struct bts_Flt16Vec2D* ptrA, const struct bts_Flt16Vec2D* srcPtrA ) 697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->bbpE = srcPtrA->bbpE; 717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->xE = srcPtrA->xE; 727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project ptrA->yE = srcPtrA->yE; 737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectflag bts_Flt16Vec2D_equal( const struct bts_Flt16Vec2D* ptrA, const struct bts_Flt16Vec2D* srcPtrA ) 787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 bbpDiffL = ptrA->bbpE - srcPtrA->bbpE; 807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( bbpDiffL == 0 ) 817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->xE != srcPtrA->xE ) return FALSE; 837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->yE != srcPtrA->yE ) return FALSE; 847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( bbpDiffL > 0 ) 887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL = ( int32 ) srcPtrA->xE << bbpDiffL; 907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yL = ( int32 ) srcPtrA->yE << bbpDiffL; 917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->xE != xL ) return FALSE; 927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->yE != yL ) return FALSE; 937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* check if bits were lost by the shifting */ 947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( srcPtrA->xE != ( xL >> bbpDiffL ) ) return FALSE; 957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( srcPtrA->yE != ( yL >> bbpDiffL ) ) return FALSE; 967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( bbpDiffL < 0 ) 1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL = ( int32 ) ptrA->xE << -bbpDiffL; 1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yL = ( int32 ) ptrA->yE << -bbpDiffL; 1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( xL != srcPtrA->xE ) return FALSE; 1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( yL != srcPtrA->yE ) return FALSE; 1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project /* check if bits were lost by the shifting */ 1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->xE != ( xL >> -bbpDiffL ) ) return FALSE; 1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ptrA->yE != ( yL >> -bbpDiffL ) ) return FALSE; 1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return TRUE; 1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */ 1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */ 1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ I/O } -------------------------------------------------------- */ 1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 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/* ---- \ghd{ exec functions } --------------------------------------------- */ 1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* */ 1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_Flt16Vec2D_create16( int16 xA, int16 yA, int16 bbpA ) 1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec2D vecL; 1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.xE = xA; 1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.yE = yA; 1537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.bbpE = bbpA; 1547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return vecL; 1557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_Flt16Vec2D_createVec16( struct bts_Int16Vec2D vecA, int16 bbpA ) 1607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec2D vecL; 1627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.xE = vecA.xE; 1637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.yE = vecA.yE; 1647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.bbpE = bbpA; 1657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return vecL; 1667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 1697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_Flt16Vec2D_create32( int32 xA, int32 yA, int32 bbpA ) 1717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 1727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec2D vecL; 1737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( ( xA | yA ) == 0 ) 1747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.xE = 0; 1767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.yE = 0; 1777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.bbpE = 0; 1787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 1807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 shiftL = bts_maxAbsIntLog2Of2( xA, yA ) - 13; 1827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( shiftL > 0 ) 1847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 sh1L = shiftL - 1; 1867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.xE = ( ( xA >> sh1L ) + 1 ) >> 1; 1877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.yE = ( ( yA >> sh1L ) + 1 ) >> 1; 1887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 1907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 1917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.xE = xA << -shiftL; 1927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.yE = yA << -shiftL; 1937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.bbpE = bbpA - shiftL; 1957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 1967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return vecL; 1977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 1987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 1997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectint32 bts_Flt16Vec2D_dotPrd( const struct bts_Flt16Vec2D* vec1PtrA, 2027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Flt16Vec2D* vec2PtrA ) 2037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return ( int32 ) vec1PtrA->xE * vec2PtrA->xE + ( int32 ) vec1PtrA->yE * vec2PtrA->yE; 2057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Vec2D_norm2( const struct bts_Flt16Vec2D* ptrA ) 2107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE; 2127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint16 bts_Flt16Vec2D_norm( const struct bts_Flt16Vec2D* ptrA ) 2177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE ); 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_Flt16Vec2D_normalize( struct bts_Flt16Vec2D* ptrA ) 2247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 normL = bbs_sqrt32( ( int32 ) ptrA->xE * ptrA->xE + ( int32 ) ptrA->yE * ptrA->yE ); 2267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL = ( ( int32 ) ptrA->xE << 16 ) / normL; 2277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yL = ( ( int32 ) ptrA->yE << 16 ) / normL; 2287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *ptrA = bts_Flt16Vec2D_create32( xL, yL, 16 ); 2297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_Flt16Vec2D_normalized( const struct bts_Flt16Vec2D* ptrA ) 2347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Flt16Vec2D vecL = *ptrA; 2367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bts_Flt16Vec2D_normalize( &vecL ); 2377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return vecL; 2387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectphase16 bts_Flt16Vec2D_angle( const struct bts_Flt16Vec2D* vecPtrA ) 2437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bbs_phase16( vecPtrA->xE, vecPtrA->yE ); 2457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectphase16 bts_Flt16Vec2D_enclosedAngle( const struct bts_Flt16Vec2D* vec1PtrA, 2507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project const struct bts_Flt16Vec2D* vec2PtrA ) 2517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL = ( int32 ) vec1PtrA->xE * vec2PtrA->xE + ( int32 ) vec1PtrA->yE * vec2PtrA->yE; 2537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yL = ( int32 ) vec1PtrA->yE * vec2PtrA->xE - ( int32 ) vec1PtrA->xE * vec2PtrA->yE; 2547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bbs_phase16( xL, yL ); 2557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_Flt16Vec2D_add( struct bts_Flt16Vec2D vec1A, struct bts_Flt16Vec2D vec2A ) 2607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL, yL, bbpL; 2627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 shiftL = vec1A.bbpE - vec2A.bbpE; 2637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( shiftL > 0 ) 2657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project xL = ( ( int32 ) vec2A.xE << shiftL ) + vec1A.xE; 2677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project yL = ( ( int32 ) vec2A.yE << shiftL ) + vec1A.yE; 2687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbpL = vec1A.bbpE; 2697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 2717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project xL = ( ( int32 ) vec1A.xE << -shiftL ) + vec2A.xE; 2737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project yL = ( ( int32 ) vec1A.yE << -shiftL ) + vec2A.yE; 2747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbpL = vec2A.bbpE; 2757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bts_Flt16Vec2D_create32( xL, yL, bbpL ); 2787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 2797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 2817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_Flt16Vec2D_sub( struct bts_Flt16Vec2D vec1A, struct bts_Flt16Vec2D vec2A ) 2837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 2847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL, yL, bbpL; 2857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 shiftL = vec1A.bbpE - vec2A.bbpE; 2867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 2877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( shiftL > 0 ) 2887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project xL = ( int32 ) vec1A.xE - ( ( int32 ) vec2A.xE << shiftL ); 2907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project yL = ( int32 ) vec1A.yE - ( ( int32 ) vec2A.yE << shiftL ); 2917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbpL = vec1A.bbpE; 2927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 2947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 2957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project xL = ( ( int32 ) vec1A.xE << -shiftL ) - vec2A.xE; 2967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project yL = ( ( int32 ) vec1A.yE << -shiftL ) - vec2A.yE; 2977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project bbpL = vec2A.bbpE; 2987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 2997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bts_Flt16Vec2D_create32( xL, yL, bbpL ); 3017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec2D bts_Flt16Vec2D_mul( struct bts_Flt16Vec2D vecA, int16 factorA, int32 bbpFactorA ) 3067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 xL = ( int32 ) vecA.xE * factorA; 3087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 yL = ( int32 ) vecA.yE * factorA; 3097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return bts_Flt16Vec2D_create32( xL, yL, bbpFactorA + vecA.bbpE ); 3107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ------------------------------------------------------------------------- */ 3137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Int16Vec2D bts_Flt16Vec2D_int16Vec2D( struct bts_Flt16Vec2D vecA, int32 dstBbpA ) 3157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{ 3167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project struct bts_Int16Vec2D vecL; 3177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project int32 shiftL = vecA.bbpE - dstBbpA; 3187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project if( shiftL > 0 ) 3207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.xE = ( ( vecA.xE >> ( shiftL - 1 ) ) + 1 ) >> 1; 3227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.yE = ( ( vecA.yE >> ( shiftL - 1 ) ) + 1 ) >> 1; 3237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project else 3257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project { 3267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.xE = vecA.xE << ( -shiftL ); 3277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project vecL.yE = vecA.yE << ( -shiftL ); 3287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project } 3297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project return vecL; 3317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project} 3327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ========================================================================= */ 3347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 3357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project 336