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#ifndef bts_FLT16MAT3D_EM_H
187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#define bts_FLT16MAT3D_EM_H
197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- includes ----------------------------------------------------------- */
217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Context.h"
237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Basic.h"
247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_BasicEm/Phase.h"
257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_TensorEm/Int16Vec3D.h"
267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#include "b_TensorEm/Flt16Vec3D.h"
277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- related objects  --------------------------------------------------- */
297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- typedefs ----------------------------------------------------------- */
317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- constants ---------------------------------------------------------- */
337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- object definition -------------------------------------------------- */
357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** 3d matrix with floating point */
377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Mat3D
387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project{
397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* ---- private data --------------------------------------------------- */
417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/* ---- public data ---------------------------------------------------- */
437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** xx component */
457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 xxE;
467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** xy component */
487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 xyE;
497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** xz component */
517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 xzE;
527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
537f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** yx component */
547f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 yxE;
557f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
567f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** yy component */
577f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 yyE;
587f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
597f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** yz component */
607f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 yzE;
617f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
627f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** zx component */
637f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 zxE;
647f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
657f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** zy component */
667f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 zyE;
677f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
687f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** zz component */
697f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 zzE;
707f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
717f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	/** point position */
727f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project	int16 bbpE;
737f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project};
747f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
757f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- associated objects ------------------------------------------------- */
767f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
777f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- external functions ------------------------------------------------- */
787f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
797f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ constructor/destructor } ------------------------------------- */
807f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
817f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** initializes matrix */
827f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Mat3D_init( struct bts_Flt16Mat3D* ptrA );
837f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
847f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** destroys matrix */
857f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Mat3D_exit( struct bts_Flt16Mat3D* ptrA );
867f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
877f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ operators } -------------------------------------------------- */
887f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
897f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ query functions } -------------------------------------------- */
907f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
917f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ modify functions } ------------------------------------------- */
927f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
937f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ memory I/O } ------------------------------------------------- */
947f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
957f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** size object needs when written to memory */
967f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Mat3D_memSize( struct bbs_Context* cpA,
977f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   const struct bts_Flt16Mat3D* ptrA );
987f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
997f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** writes object to memory; returns number of bytes written */
1007f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Mat3D_memWrite( struct bbs_Context* cpA,
1017f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							    const struct bts_Flt16Mat3D* ptrA,
1027f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								uint16* memPtrA );
1037f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1047f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** reads object from memory; returns number of bytes read */
1057f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectuint32 bts_Flt16Mat3D_memRead( struct bbs_Context* cpA,
1067f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   struct bts_Flt16Mat3D* ptrA,
1077f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project							   const uint16* memPtrA );
1087f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1097f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/* ---- \ghd{ exec functions } --------------------------------------------- */
1107f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1117f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** creates identity matrix */
1127f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Mat3D bts_Flt16Mat3D_createIdentity( void );
1137f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1147f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** creates scale matrix */
1157f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Mat3D bts_Flt16Mat3D_createScale( int32 scaleA, int32 scaleBbpA );
1167f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1177f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** creates matrix from 16 bit values */
1187f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Mat3D bts_Flt16Mat3D_create16( int16 xxA, int16 xyA, int16 xzA,
1197f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											   int16 yxA, int16 yyA, int16 yzA,
1207f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											   int16 zxA, int16 zyA, int16 zzA,
1217f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											   int16 bbpA );
1227f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1237f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** creates matrix from 32 bit values (automatic adjustment of bbp value) */
1247f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Mat3D bts_Flt16Mat3D_create32( int32 xxA, int32 xyA, int32 xzA,
1257f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											   int32 yxA, int32 yyA, int32 yzA,
1267f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											   int32 zxA, int32 zyA, int32 zzA,
1277f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project											   int32 bbpA );
1287f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1297f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** scales matrix by a factor */
1307f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectvoid bts_Flt16Mat3D_scale( struct bts_Flt16Mat3D* ptrA, int32 scaleA, int32 scaleBbpA );
1317f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1327f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** multiplies matrix with vecA; returns resulting vector */
1337f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#ifndef HW_EE /* causes internal compiler error in ee-gcc */
1347f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Int16Vec3D bts_Flt16Mat3D_map( const struct bts_Flt16Mat3D* matPtrA,
1357f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								          const struct bts_Int16Vec3D* vecPtrA );
1367f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif
1377f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** Multiplies matrix with float vecA; returns resulting vector.
1387f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project *  The point position of returned vector is the same as of the input vector.
1397f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project */
1407f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Vec3D bts_Flt16Mat3D_mapFlt( const struct bts_Flt16Mat3D* matPtrA,
1417f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								             const struct bts_Flt16Vec3D* vecPtrA );
1427f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1437f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** multiplies matrix with matA; returns resulting matrix */
1447f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Mat3D bts_Flt16Mat3D_mul( const struct bts_Flt16Mat3D* mat1PtrA,
1457f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project								          const struct bts_Flt16Mat3D* mat2PtrA );
1467f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1477f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project/** multiplies matrix with matA; returns pointer to resulting matrix */
1487f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Projectstruct bts_Flt16Mat3D* bts_Flt16Mat3D_mulTo( struct bts_Flt16Mat3D* mat1PtrA,
1497f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project				                             const struct bts_Flt16Mat3D* mat2PtrA );
1507f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
1517f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project#endif /* bts_FLT16MAT3D_EM_H */
1527f81d9b6fa7f2ec161b682622db577a28c90b49fThe Android Open Source Project
153