1 /*---------------------------------------------------------------------------*
2 Project: Horizon
3 File: math_Types.h
4
5 Copyright (C)2009-2012 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 $Rev: 47498 $
14 *---------------------------------------------------------------------------*/
15
16 #ifndef NN_MATH_TYPES_H_
17 #define NN_MATH_TYPES_H_
18
19 #include <nn/types.h>
20 #include <nn/math/math_Config.h>
21 #include <nn/math/math_Triangular.h>
22 #include <nn/math/math_Vector2.h>
23 #include <nn/math/math_Vector3.h>
24 #include <nn/math/math_Vector4.h>
25 #include <nn/math/math_Quaternion.h>
26 #include <nn/math/math_Matrix22.h>
27 #include <nn/math/math_Matrix23.h>
28 #include <nn/math/math_Matrix33.h>
29 #include <nn/math/math_Matrix34.h>
30 #include <nn/math/math_Matrix44.h>
31 #include <nn/math/math_Matrix43.h>
32 #include <nn/math/math_Transform.h>
33
34 #include <nn/math/ARMv6/math_Types.h>
35
36 #include <cstring>
37
38 namespace nn {
39 namespace math {
40
41 /* =======================================================================
42 Class definitions
43 ======================================================================== */
44 struct VEC2;
45 struct VEC3;
46 struct VEC4;
47 struct QUAT;
48 struct MTX34;
49 struct MTX43;
50
51 /* Please see man pages for details
52
53
54 */
55
56 /* ------------------------------------------------------------------------
57 MatrixUtility
58 ------------------------------------------------------------------------ */
59
60 /*
61
62
63
64
65
66
67 */
68 NN_MATH_INLINE MTX22* MTX23ToMTX22(MTX22* pOut, const MTX23* pM);
69
70 /*
71
72
73
74
75
76
77 */
78 NN_MATH_INLINE MTX23* MTX22ToMTX23(MTX23* pOut, const MTX22* pM);
79
80 /*
81
82
83
84
85
86
87 */
88 NN_FORCE_INLINE MTX34* MTX33ToMTX34(MTX34* pOut, const MTX33* pM);
89
90 /*
91
92
93
94
95
96
97 */
98 NN_FORCE_INLINE MTX33* MTX34ToMTX33(MTX33* pOut, const MTX34* pM);
99
100 /*
101
102
103
104
105
106
107 */
108 NN_FORCE_INLINE MTX34* QUATToMTX34(MTX34* pOut, const QUAT* pQ);
109
110 /*
111
112
113
114
115
116
117 */
118 NN_FORCE_INLINE MTX34* QUATToMTX34Partially(MTX34* pOut, const QUAT* pQ);
119
120 /*
121
122
123
124
125
126
127 */
128 NN_FORCE_INLINE QUAT* MTX34ToQUAT(QUAT* pOut, const MTX34* pMtx);
129
130 /*
131
132 */
133 /* Please see man pages for details
134
135
136 */
137
138 /*
139
140
141
142
143
144
145
146
147 */
148 NN_FORCE_INLINE MTX43* MTX34Transpose(MTX43* pOut, const MTX34* p);
149
150 /*
151
152 */
153 /* Please see man pages for details
154
155
156 */
157
158
159 /*
160
161
162
163
164
165
166 */
167 NN_FORCE_INLINE MTX34* MTX43Transpose(MTX34* pOut, const MTX43* p);
168
169 /*
170
171 */
172
173 NN_FORCE_INLINE MTX34*
MTX33ToMTX34(MTX34 * pOut,const MTX33 * pM)174 MTX33ToMTX34(MTX34* pOut, const MTX33* pM)
175 {
176 #if defined( NN_HARDWARE_CTR )
177 #if (MTX33TOMTX34_CONFIG == D_ORG)
178 return ARMv6::MTX33ToMTX34C(pOut, pM);
179 #elif (MTX33TOMTX34_CONFIG == D_FAST_C)
180 return ARMv6::MTX33ToMTX34C_FAST(pOut, pM);
181 #elif (MTX33TOMTX34_CONFIG == D_FAST_ASM)
182 #elif (MTX33TOMTX34_CONFIG == D_FAST_C_ALGO)
183 #elif (MTX33TOMTX34_CONFIG == D_FAST_ASM_ALGO)
184 #endif
185 #else
186 #endif
187 }
188
189 NN_FORCE_INLINE MTX33*
MTX34ToMTX33(MTX33 * pOut,const MTX34 * pM)190 MTX34ToMTX33(MTX33* pOut, const MTX34* pM)
191 {
192 #if defined( NN_HARDWARE_CTR )
193 #if (MTX34TOMTX33_CONFIG == D_ORG)
194 return ARMv6::MTX34ToMTX33C(pOut, pM);
195 #elif (MTX34TOMTX33_CONFIG == D_FAST_C)
196 #elif (MTX34TOMTX33_CONFIG == D_FAST_ASM)
197 return ARMv6::MTX34ToMTX33Asm(pOut, pM);
198 #elif (MTX34TOMTX33_CONFIG == D_FAST_C_ALGO)
199 #elif (MTX34TOMTX33_CONFIG == D_FAST_ASM_ALGO)
200 #endif
201 #else
202 #endif
203 }
204
205 NN_FORCE_INLINE QUAT*
MTX34ToQUAT(QUAT * pOut,const MTX34 * pMtx)206 MTX34ToQUAT(QUAT* pOut, const MTX34* pMtx)
207 {
208 #if defined( NN_HARDWARE_CTR )
209 #if (MTX34TOQUAT_CONFIG == D_ORG)
210 return ARMv6::MTX34ToQUATC(pOut, pMtx);
211 #elif (MTX34TOQUAT_CONFIG == D_FAST_C)
212 return ARMv6::MTX34ToQUATC_FAST(pOut, pMtx);
213 #elif (MTX34TOQUAT_CONFIG == D_FAST_ASM)
214 #elif (MTX34TOQUAT_CONFIG == D_FAST_C_ALGO)
215 #elif (MTX34TOQUAT_CONFIG == D_FAST_ASM_ALGO)
216 #endif
217 #else
218 #endif
219 }
220
221 NN_FORCE_INLINE MTX34*
QUATToMTX34(MTX34 * pOut,const QUAT * pQ)222 QUATToMTX34(MTX34* pOut, const QUAT* pQ)
223 {
224 #if defined( NN_HARDWARE_CTR )
225 #if (QUATTOMTX34_CONFIG == D_ORG)
226 return ARMv6::QUATToMTX34C(pOut, pQ);
227 #elif (QUATTOMTX34_CONFIG == D_FAST_C)
228 return ARMv6::QUATToMTX34C_FAST(pOut, pQ);
229 #elif (QUATTOMTX34_CONFIG == D_FAST_ASM)
230 #elif (QUATTOMTX34_CONFIG == D_FAST_C_ALGO)
231 #elif (QUATTOMTX34_CONFIG == D_FAST_ASM_ALGO)
232 #endif
233 #else
234 #endif // #if defined( NN_HARDWARE_CTR )
235 }
236
237 NN_FORCE_INLINE MTX34*
QUATToMTX34Partially(MTX34 * pOut,const QUAT * pQ)238 QUATToMTX34Partially(MTX34* pOut, const QUAT* pQ)
239 {
240 #if defined( NN_HARDWARE_CTR )
241 #if (QUATTOMTX34_CONFIG == D_ORG)
242 return ARMv6::QUATToMTX34C(pOut, pQ, false);
243 #elif (QUATTOMTX34_CONFIG == D_FAST_C)
244 return ARMv6::QUATToMTX34C_FAST(pOut, pQ, false);
245 #elif (QUATTOMTX34_CONFIG == D_FAST_ASM)
246 #elif (QUATTOMTX34_CONFIG == D_FAST_C_ALGO)
247 #elif (QUATTOMTX34_CONFIG == D_FAST_ASM_ALGO)
248 #endif
249 #else
250 #endif // #if defined( NN_HARDWARE_CTR )
251 }
252
253 NN_FORCE_INLINE MTX43*
MTX34Transpose(MTX43 * pOut,const MTX34 * p)254 MTX34Transpose(MTX43* pOut, const MTX34* p)
255 {
256 #if defined( NN_HARDWARE_CTR )
257 #if (MTX34TRANSPOSE_34TO43_CONFIG == D_ORG)
258 return ARMv6::MTX34TransposeC(pOut, p);
259 #elif (MTX34TRANSPOSE_34TO43_CONFIG == D_FAST_C)
260 #elif (MTX34TRANSPOSE_34TO43_CONFIG == D_FAST_ASM)
261 return ARMv6::MTX34TransposeAsm(pOut, p);
262 #elif (MTX34TRANSPOSE_34TO43_CONFIG == D_FAST_C_ALGO)
263 #elif (MTX34TRANSPOSE_34TO43_CONFIG == D_FAST_ASM_ALGO)
264 #endif
265 #else
266 #endif
267 }
268
269 NN_FORCE_INLINE MTX34*
MTX43Transpose(MTX34 * pOut,const MTX43 * p)270 MTX43Transpose(MTX34* pOut, const MTX43* p)
271 {
272 #if defined( NN_HARDWARE_CTR )
273 #if (MTX43TRANSPOSE_CONFIG == D_ORG)
274 return ARMv6::MTX43TransposeC(pOut, p);
275 #elif (MTX43TRANSPOSE_CONFIG == D_FAST_C)
276 #elif (MTX43TRANSPOSE_CONFIG == D_FAST_ASM)
277 return ARMv6::MTX43TransposeAsm(pOut, p);
278 #elif (MTX43TRANSPOSE_CONFIG == D_FAST_C_ALGO)
279 #elif (MTX43TRANSPOSE_CONFIG == D_FAST_ASM_ALGO)
280 #endif
281 #else
282 #endif
283
284 }
285
286 } // namespace math
287 } // namespace nn
288
289
290 #if defined(NN_MATH_AS_INLINE)
291 #include <nn/math/inline/math_Types.ipp>
292 #include <nn/math/ARMv6/inline/math_Types.ipp>
293 #endif
294
295 namespace nn {
296 namespace math {
297
298 //Overload referencing the -- const argument
MTX23ToMTX22(MTX22 * pOut,const MTX23 & m)299 inline MTX22* MTX23ToMTX22(MTX22* pOut, const MTX23& m) { return MTX23ToMTX22(pOut, &m); }
MTX22ToMTX23(MTX23 * pOut,const MTX22 & m)300 inline MTX23* MTX22ToMTX23(MTX23* pOut, const MTX22& m) { return MTX22ToMTX23( pOut, &m ); }
MTX34ToMTX33(MTX33 * pOut,const MTX34 & m)301 inline MTX33* MTX34ToMTX33(MTX33* pOut, const MTX34& m) { return MTX34ToMTX33( pOut, &m ); }
MTX33ToMTX34(MTX34 * pOut,const MTX33 & m)302 inline MTX34* MTX33ToMTX34(MTX34* pOut, const MTX33& m) { return MTX33ToMTX34( pOut, &m ); }
MTX34ToQUAT(QUAT * pOut,const MTX34 & mtx)303 inline QUAT* MTX34ToQUAT(QUAT* pOut, const MTX34& mtx) { return MTX34ToQUAT( pOut, &mtx ); }
QUATToMTX34(MTX34 * pOut,const QUAT & q)304 inline MTX34* QUATToMTX34(MTX34* pOut, const QUAT& q) { return QUATToMTX34( pOut, &q ); }
MTX43Transpose(MTX34 * pOut,const MTX43 & m)305 inline MTX34* MTX43Transpose(MTX34* pOut, const MTX43& m) { return MTX43Transpose( pOut, &m ); }
MTX34Transpose(MTX43 * pOut,const MTX34 & m)306 inline MTX43* MTX34Transpose(MTX43* pOut, const MTX34& m) { return MTX34Transpose( pOut, &m ); }
307
308 } // namespace math
309 } // namespace nn
310
311 #endif
312
313
314