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