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