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