1/*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: math_Matrix43.ipp 4 5 Copyright (C)2009-2010 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Revision: 13623 $ 14 *---------------------------------------------------------------------------*/ 15 16namespace nn { 17namespace math { 18namespace ARMv6 { 19/* Please see man pages for details 20 21 22*/ 23 24/* 25 26 27 28 29 30 31 */ 32NN_MATH_INLINE MTX43* 33MTX43CopyC(MTX43* pOut, const MTX43* p) 34{ 35 NN_NULL_ASSERT( pOut ); 36 NN_NULL_ASSERT( p ); 37 38 if (pOut != p) 39 { 40 *pOut = *p; 41 } 42 43 return pOut; 44} 45 46/* 47 48 49 50 51 52 53 54 */ 55NN_MATH_INLINE MTX43* 56MTX43AddC(MTX43* pOut, const MTX43* p1, const MTX43* p2) 57{ 58 NN_NULL_ASSERT( pOut ); 59 NN_NULL_ASSERT( p1 ); 60 NN_NULL_ASSERT( p2 ); 61 62 pOut->f._00 = p1->f._00 + p2->f._00; 63 pOut->f._01 = p1->f._01 + p2->f._01; 64 pOut->f._02 = p1->f._02 + p2->f._02; 65 66 pOut->f._10 = p1->f._10 + p2->f._10; 67 pOut->f._11 = p1->f._11 + p2->f._11; 68 pOut->f._12 = p1->f._12 + p2->f._12; 69 70 pOut->f._20 = p1->f._20 + p2->f._20; 71 pOut->f._21 = p1->f._21 + p2->f._21; 72 pOut->f._22 = p1->f._22 + p2->f._22; 73 74 pOut->f._30 = p1->f._30 + p2->f._30; 75 pOut->f._31 = p1->f._31 + p2->f._31; 76 pOut->f._32 = p1->f._32 + p2->f._32; 77 78 return pOut; 79} 80 81/* 82 83 84 85 86 87 88 89 */ 90NN_MATH_INLINE MTX43* 91MTX43MultC(MTX43* pOut, const MTX43* __restrict p1, const MTX43* __restrict p2) 92{ 93 NN_NULL_ASSERT( pOut ); 94 NN_NULL_ASSERT( p1 ); 95 NN_NULL_ASSERT( p2 ); 96 97 MTX43 mTmp; 98 99 MTX43* __restrict pDst = ( pOut == p1 || pOut == p2 ) ? &mTmp : pOut; 100 101 pDst->f._00 = p1->f._00 * p2->f._00 + p1->f._01 * p2->f._10 + p1->f._02 * p2->f._20; 102 pDst->f._01 = p1->f._00 * p2->f._01 + p1->f._01 * p2->f._11 + p1->f._02 * p2->f._21; 103 pDst->f._02 = p1->f._00 * p2->f._02 + p1->f._01 * p2->f._12 + p1->f._02 * p2->f._22; 104 105 pDst->f._10 = p1->f._10 * p2->f._00 + p1->f._11 * p2->f._10 + p1->f._12 * p2->f._20; 106 pDst->f._11 = p1->f._10 * p2->f._01 + p1->f._11 * p2->f._11 + p1->f._12 * p2->f._21; 107 pDst->f._12 = p1->f._10 * p2->f._02 + p1->f._11 * p2->f._12 + p1->f._12 * p2->f._22; 108 109 pDst->f._20 = p1->f._20 * p2->f._00 + p1->f._21 * p2->f._10 + p1->f._22 * p2->f._20; 110 pDst->f._21 = p1->f._20 * p2->f._01 + p1->f._21 * p2->f._11 + p1->f._22 * p2->f._21; 111 pDst->f._22 = p1->f._20 * p2->f._02 + p1->f._21 * p2->f._12 + p1->f._22 * p2->f._22; 112 113 pDst->f._30 = p1->f._30 * p2->f._00 + p1->f._31 * p2->f._10 + p1->f._32 * p2->f._20 + p2->f._30; 114 pDst->f._31 = p1->f._30 * p2->f._01 + p1->f._31 * p2->f._11 + p1->f._32 * p2->f._21 + p2->f._31; 115 pDst->f._32 = p1->f._30 * p2->f._02 + p1->f._31 * p2->f._12 + p1->f._32 * p2->f._22 + p2->f._32; 116 117 if ( pDst != pOut ) 118 { 119 MTX43Copy( pOut, pDst ); 120 } 121 122 return pOut; 123} 124 125/* 126 127 128 129 130 131 132 133 */ 134NN_MATH_INLINE MTX43* 135MTX43MultC(MTX43* pOut, const MTX43* p, f32 f) 136{ 137 NN_NULL_ASSERT( pOut ); 138 NN_NULL_ASSERT( p ); 139 140 pOut->f._00 = p->f._00 * f; 141 pOut->f._01 = p->f._01 * f; 142 pOut->f._02 = p->f._02 * f; 143 144 pOut->f._10 = p->f._10 * f; 145 pOut->f._11 = p->f._11 * f; 146 pOut->f._12 = p->f._12 * f; 147 148 pOut->f._20 = p->f._20 * f; 149 pOut->f._21 = p->f._21 * f; 150 pOut->f._22 = p->f._22 * f; 151 152 pOut->f._30 = p->f._30 * f; 153 pOut->f._31 = p->f._31 * f; 154 pOut->f._32 = p->f._32 * f; 155 156 return pOut; 157} 158 159/* 160 161*/ 162} // namespace ARMv6 163} // namespace math 164} // namespace nn 165