1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     math_Config.h
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: 17675 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_MATH_CONFIG_H_
17 #define NN_MATH_CONFIG_H_
18 
19 #include <nn/types.h>
20 
21 #define NN_MATH_WARNING NN_WARNING
22 #define NN_MATH_REPORT NN_LOG
23 
24 // NN_SWITCH_ENABLE_MEMBER_NAME_SHORTCUT を定義しておくと、NN_MATH_USE_ANONYMOUS_STRUCT が有効になる。
25 
26 #if defined(NN_SWITCH_ENABLE_MEMBER_NAME_SHORTCUT)
27   #define NN_MATH_USE_ANONYMOUS_STRUCT
28 #endif
29 
30 #ifndef NN_MATH_MINMAXLT_ASSERT
31 #define NN_MATH_MINMAXLT_ASSERT(exp, min, max) \
32             NN_ASSERTMSG( (exp) >= (min) && (exp) < (max), #exp " is out of bounds(%d)\n%d <= "#exp" < %d not satisfied.", static_cast<int>(exp), static_cast<int>(min), static_cast<int>(max))
33 #endif
34 
35 #define NN_MATH_AS_INLINE
36 
37 #if defined(NN_MATH_AS_INLINE)
38   #define NN_MATH_INLINE inline
39 #else
40   #define NN_MATH_INLINE
41 #endif
42 
43 
44 /*
45 #if defined( NN_HARDWARE_CTR ) && ! defined( NN_BUILD_NOOPT )
46 
47 #if ! defined( NN_MATH_UNUSE_ASM ) && ! defined( NN_MATH_USE_ASM )
48   #define NN_MATH_USE_ASM
49 #endif
50 
51 #endif
52 */
53 
54 //#define D_BENCH_FUNC      // 設定時API呼び出しでCコード使用、関数個別計測で使用
55                             // 未設定時API呼び出しで最速コード使用、API計測で使用
56 #define D_MEASURE_SWITCH    // 関数内にコンパイルスイッチが存在する場合のソース切り替え
57                             // 設定時対象となる関数を"C_FAST"で計測
58                             // 未設定時対象となる関数を"C_FAST_ALGO"で計測
59 
60 //------------------------------------------------------------------------------
61 #define D_ORG               (1) // オリジナルソースコード
62 #define D_FAST_C            (2) // C言語による最適化コード
63 #define D_FAST_ASM          (3) // アセンブラ化による最適化コード
64 #define D_FAST_C_ALGO       (4) // アルゴリズム改修による最適化コード
65 #define D_FAST_ASM_ALGO     (5) // アセンブラ化、アルゴリズム回収での最適化コード
66 
67 #if defined( D_BENCH_FUNC ) || defined( NN_BUILD_NOOPT )
68 //-----------------------------------------------------------------------------
69 // ベンチマーク測定設定
70 #define HERMITE_5_CONFIG                                    D_ORG
71 #define HERMITE_6_CONFIG                                    D_ORG
72 #define MTX33COPY_CONFIG                                    D_ORG
73 #define MTX33MADD_CONFIG                                    D_ORG
74 #define MTX33MULT_CONFIG                                    D_ORG
75 #define MTX33TOMTX34_CONFIG                                 D_ORG
76 #define MTX34ADD_CONFIG                                     D_ORG
77 #define MTX34CAMERAROTATE_CONFIG                            D_ORG
78 #define MTX34COPY_CONFIG                                    D_ORG
79 #define MTX34INVERSE_CONFIG                                 D_ORG
80 #define MTX34INVTRANSPOSE_34TO34_CONFIG                     D_ORG
81 #define MTX34LOOKAT_VEC3_CONFIG                             D_ORG
82 #define MTX34LOOKAT_F32_CONFIG                              D_ORG
83 #define MTX34MADD_CONFIG                                    D_ORG
84 #define MTX34MULT_34_CONFIG                                 D_ORG
85 #define MTX34MULT_F32_CONFIG                                D_ORG
86 #define MTX34MULTSCALE_RIGHT_CONFIG                         D_ORG
87 #define MTX34MULTSCALE_LEFT_CONFIG                          D_ORG
88 #define MTX34MULTTRANSLATE_RIGHT_CONFIG                     D_ORG
89 #define MTX34MULTTRANSLATE_LEFT_CONFIG                      D_ORG
90 #define MTX34ROTXYZFIDX_CONFIG                              D_ORG
91 #define MTX34SCALE_CONFIG                                   D_ORG
92 #define MTX34TOMTX33_CONFIG                                 D_ORG
93 #define MTX34TOQUAT_CONFIG                                  D_ORG
94 #define MTX34TRANSLATE_CONFIG                               D_ORG
95 #define MTX34TRANSPOSE_34TO34_CONFIG                        D_ORG
96 #define MTX34TRANSPOSE_34TO43_CONFIG                        D_ORG
97 #define MTX43ADD_CONFIG                                     D_ORG
98 #define MTX43COPY_CONFIG                                    D_ORG
99 #define MTX43MULT_43_CONFIG                                 D_ORG
100 #define MTX43MULT_F32_CONFIG                                D_ORG
101 #define MTX43TRANSPOSE_CONFIG                               D_ORG
102 #define MTX44ADD_ASM_CONFIG                                 D_ORG
103 #define MTX44COPY_CONFIG                                    D_ORG
104 #define MTX44FRUSTUM_CONFIG                                 D_ORG
105 #define MTX44INVERSE_CONFIG                                 D_ORG
106 #define MTX44MULT_44_CONFIG                                 D_ORG
107 #define MTX44MULT_F32_CONFIG                                D_ORG
108 #define MTX44MULTSCALE_RIGHT_CONFIG                         D_ORG
109 #define MTX44MULTSCALE_LEFT_CONFIG                          D_ORG
110 #define MTX44MULTTRANSLATE_RIGHT_CONFIG                     D_ORG
111 #define MTX44MULTTRANSLATE_LEFT_CONFIG                      D_ORG
112 #define MTX44ORTHO_CONFIG                                   D_ORG
113 #define MTX44ROTXYZFIDX_CONFIG                              D_ORG
114 #define MTX44TEXTUREMATRIXFORMAX_CONFIG                     D_ORG
115 #define MTX44TEXTUREMATRIXFORMAYA_CONFIG                    D_ORG
116 #define MTX44TEXTUREMATRIXFORSOFTIMAGE_CONFIG               D_ORG
117 #define MTX44SCALE_CONFIG                                   D_ORG
118 #define MTX44TRANSLATE_CONFIG                               D_ORG
119 #define MTX44TRANSPOSE_44_CONFIG                            D_ORG
120 #define QUATINVERSE_CONFIG                                  D_ORG
121 #define QUATMULT_CONFIG                                     D_ORG
122 #define QUATNORMALIZE_CONFIG                                D_ORG
123 #define QUATTOMTX34_CONFIG                                  D_ORG
124 #define VEC3NORMALIZE__CONFIG                               D_ORG
125 #define VEC3TRANSFORM_33XVEC3_CONFIG                        D_ORG
126 #define VEC3TRANSFORM_34XVEC3_CONFIG                        D_ORG
127 #define VEC3TRANSFORM_44XVEC3_CONFIG                        D_ORG
128 #define MTX44PIVOT_CONFIG                                   D_ORG
129 
130 #ifdef D_MEASURE_SWITCH
131 #define MTX34ROTAXISRAD__CONFIG                             D_ORG
132 #define MTX44PERSPECTIVERAD_CONFIG                          D_ORG
133 #define MTX44ROTAXISRAD__CONFIG                             D_ORG
134 #else
135 #define MTX34ROTAXISRAD__CONFIG                             D_FAST_C_ALGO
136 #define MTX44PERSPECTIVERAD_CONFIG                          D_FAST_C_ALGO
137 #define MTX44ROTAXISRAD__CONFIG                             D_FAST_C_ALGO
138 
139 #endif
140 
141 //-----------------------------------------------------------------------------
142 
143 #else
144 //-----------------------------------------------------------------------------
145 // 最速設定
146 #define HERMITE_5_CONFIG                                    D_FAST_C
147 #define HERMITE_6_CONFIG                                    D_FAST_C
148 #define MTX33COPY_CONFIG                                    D_FAST_ASM
149 #define MTX33MADD_CONFIG                                    D_FAST_ASM
150 #define MTX33MULT_CONFIG                                    D_FAST_ASM
151 #define MTX33TOMTX34_CONFIG                                 D_FAST_C
152 #define MTX34ADD_CONFIG                                     D_FAST_ASM
153 #define MTX34CAMERAROTATE_CONFIG                            D_FAST_C
154 #define MTX34COPY_CONFIG                                    D_FAST_ASM
155 #define MTX34INVERSE_CONFIG                                 D_FAST_ASM
156 #define MTX34INVTRANSPOSE_34TO34_CONFIG                     D_FAST_ASM
157 #define MTX34LOOKAT_VEC3_CONFIG                             D_FAST_C
158 #define MTX34LOOKAT_F32_CONFIG                              D_FAST_C
159 #define MTX34MADD_CONFIG                                    D_FAST_ASM
160 #define MTX34MULT_34_CONFIG                                 D_FAST_ASM
161 #define MTX34MULT_F32_CONFIG                                D_FAST_ASM
162 #define MTX34MULTSCALE_RIGHT_CONFIG                         D_FAST_ASM
163 #define MTX34MULTSCALE_LEFT_CONFIG                          D_FAST_ASM
164 #define MTX34MULTTRANSLATE_RIGHT_CONFIG                     D_FAST_ASM
165 #define MTX34MULTTRANSLATE_LEFT_CONFIG                      D_FAST_ASM
166 #define MTX34ROTXYZFIDX_CONFIG                              D_FAST_C
167 #define MTX34SCALE_CONFIG                                   D_FAST_C
168 #define MTX34TOMTX33_CONFIG                                 D_FAST_ASM
169 #define MTX34TOQUAT_CONFIG                                  D_FAST_C
170 #define MTX34TRANSLATE_CONFIG                               D_FAST_C
171 #define MTX34TRANSPOSE_34TO34_CONFIG                        D_FAST_ASM
172 #define MTX34TRANSPOSE_34TO43_CONFIG                        D_FAST_ASM
173 #define MTX43ADD_CONFIG                                     D_FAST_ASM
174 #define MTX43COPY_CONFIG                                    D_FAST_ASM
175 #define MTX43MULT_43_CONFIG                                 D_FAST_ASM
176 #define MTX43MULT_F32_CONFIG                                D_FAST_ASM
177 #define MTX43TRANSPOSE_CONFIG                               D_FAST_ASM
178 #define MTX44ADD_ASM_CONFIG                                 D_FAST_ASM
179 #define MTX44COPY_CONFIG                                    D_FAST_ASM
180 #define MTX44FRUSTUM_CONFIG                                 D_FAST_C
181 #define MTX44INVERSE_CONFIG                                 D_FAST_C_ALGO
182 #define MTX44MULT_44_CONFIG                                 D_FAST_ASM
183 #define MTX44MULT_F32_CONFIG                                D_FAST_ASM
184 #define MTX44MULTSCALE_RIGHT_CONFIG                         D_FAST_ASM
185 #define MTX44MULTSCALE_LEFT_CONFIG                          D_FAST_ASM
186 #define MTX44MULTTRANSLATE_RIGHT_CONFIG                     D_FAST_ASM
187 #define MTX44MULTTRANSLATE_LEFT_CONFIG                      D_FAST_ASM
188 #define MTX44ORTHO_CONFIG                                   D_FAST_C
189 #define MTX44ROTXYZFIDX_CONFIG                              D_FAST_C
190 #define MTX44SCALE_CONFIG                                   D_FAST_C
191 #define MTX44TEXTUREMATRIXFORMAX_CONFIG                     D_FAST_C
192 #define MTX44TEXTUREMATRIXFORMAYA_CONFIG                    D_FAST_C
193 #define MTX44TEXTUREMATRIXFORSOFTIMAGE_CONFIG               D_FAST_C
194 #define MTX44TRANSLATE_CONFIG                               D_FAST_C
195 #define MTX44TRANSPOSE_44_CONFIG                            D_FAST_ASM
196 #define QUATINVERSE_CONFIG                                  D_FAST_C
197 #define QUATMULT_CONFIG                                     D_FAST_C
198 #define QUATNORMALIZE_CONFIG                                D_FAST_C
199 #define QUATTOMTX34_CONFIG                                  D_FAST_C
200 #define VEC3NORMALIZE__CONFIG                               D_FAST_C
201 #define VEC3TRANSFORM_33XVEC3_CONFIG                        D_FAST_ASM
202 #define VEC3TRANSFORM_34XVEC3_CONFIG                        D_FAST_ASM
203 #define VEC3TRANSFORM_44XVEC3_CONFIG                        D_FAST_ASM
204 #define MTX44PIVOT_CONFIG                                   D_FAST_C
205 
206 #define MTX34ROTAXISRAD__CONFIG                             D_FAST_C_ALGO
207 #define MTX44PERSPECTIVERAD_CONFIG                          D_FAST_C_ALGO
208 #define MTX44ROTAXISRAD__CONFIG                             D_FAST_C_ALGO
209 
210 //-----------------------------------------------------------------------------
211 #endif
212 
213 /* NN_MATH_CONFIG_H_ */
214 #endif
215