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#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