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