1 /* Copyright (c) 2014-2017 Apple, Inc. All rights reserved.
2  *
3  *      Function                        Result
4  *      ------------------------------------------------------------------
5  *
6  *      simd_diagonal_matrix(x)         A square matrix with the vector x
7  *                                      as its diagonal.
8  *
9  *      simd_matrix(c0, c1, ... )       A matrix with the specified vectors
10  *                                      as columns.
11  *
12  *      simd_matrix_from_rows(r0, r1, ... )  A matrix with the specified vectors
13  *                                      as rows.
14  *
15  *      simd_mul(a,x)                   Scalar product a*x.
16  *
17  *      simd_linear_combination(a,x,b,y)  a*x + b*y.
18  *
19  *      simd_add(x,y)                   Macro wrapping linear_combination
20  *                                      to compute x + y.
21  *
22  *      simd_sub(x,y)                   Macro wrapping linear_combination
23  *                                      to compute x - y.
24  *
25  *      simd_transpose(x)               Transpose of the matrix x.
26  *
27  *      simd_trace(x)                   Trace of the matrix x.
28  *
29  *      simd_determinant(x)             Determinant of the matrix x.
30  *
31  *      simd_inverse(x)                 Inverse of x if x is non-singular.  If
32  *                                      x is singular, the result is undefined.
33  *
34  *      simd_mul(x,y)                   If x is a matrix, returns the matrix
35  *                                      product x*y, where y is either a matrix
36  *                                      or a column vector.  If x is a vector,
37  *                                      returns the product x*y where x is
38  *                                      interpreted as a row vector.
39  *
40  *      simd_equal(x,y)                 Returns true if and only if every
41  *                                      element of x is exactly equal to the
42  *                                      corresponding element of y.
43  *
44  *      simd_almost_equal_elements(x,y,tol)
45  *                                      Returns true if and only if for each
46  *                                      entry xij in x, the corresponding
47  *                                      element yij in y satisfies
48  *                                      |xij - yij| <= tol.
49  *
50  *      simd_almost_equal_elements_relative(x,y,tol)
51  *                                      Returns true if and only if for each
52  *                                      entry xij in x, the corresponding
53  *                                      element yij in y satisfies
54  *                                      |xij - yij| <= tol*|xij|.
55  *
56  *  The header also defines a few useful global matrix objects:
57  *  matrix_identity_floatNxM and matrix_identity_doubleNxM, may be used to get
58  *  an identity matrix of the specified size.
59  *
60  *  In C++, we are able to use namespacing to make the functions more concise;
61  *  we also overload some common arithmetic operators to work with the matrix
62  *  types:
63  *
64  *      C++ Function                    Equivalent C Function
65  *      --------------------------------------------------------------------
66  *      simd::inverse                   simd_inverse
67  *      simd::transpose                 simd_transpose
68  *      operator+                       simd_add
69  *      operator-                       simd_sub
70  *      operator+=                      N/A
71  *      operator-=                      N/A
72  *      operator*                       simd_mul or simd_mul
73  *      operator*=                      simd_mul or simd_mul
74  *      operator==                      simd_equal
75  *      operator!=                      !simd_equal
76  *      simd::almost_equal_elements     simd_almost_equal_elements
77  *      simd::almost_equal_elements_relative  simd_almost_equal_elements_relative
78  *
79  *  <simd/matrix_types.h> provides constructors for C++ matrix types.
80  */
81 
82 #ifndef SIMD_MATRIX_HEADER
83 #define SIMD_MATRIX_HEADER
84 
85 #include <simd/base.h>
86 #if SIMD_COMPILER_HAS_REQUIRED_FEATURES
87 #include <simd/matrix_types.h>
88 #include <simd/geometry.h>
89 #include <simd/extern.h>
90 #include <simd/logic.h>
91 
92 #ifdef __cplusplus
93     extern "C" {
94 #endif
95 
96 extern const simd_float2x2 matrix_identity_float2x2  __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
97 extern const simd_float3x3 matrix_identity_float3x3  __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
98 extern const simd_float4x4 matrix_identity_float4x4  __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
99 extern const simd_double2x2 matrix_identity_double2x2 __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
100 extern const simd_double3x3 matrix_identity_double3x3 __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
101 extern const simd_double4x4 matrix_identity_double4x4 __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
102 
103 static simd_float2x2 SIMD_CFUNC simd_diagonal_matrix(simd_float2 __x);
104 static simd_float3x3 SIMD_CFUNC simd_diagonal_matrix(simd_float3 __x);
105 static simd_float4x4 SIMD_CFUNC simd_diagonal_matrix(simd_float4 __x);
106 static simd_double2x2 SIMD_CFUNC simd_diagonal_matrix(simd_double2 __x);
107 static simd_double3x3 SIMD_CFUNC simd_diagonal_matrix(simd_double3 __x);
108 static simd_double4x4 SIMD_CFUNC simd_diagonal_matrix(simd_double4 __x);
109 #define matrix_from_diagonal simd_diagonal_matrix
110 
111 static simd_float2x2 SIMD_CFUNC simd_matrix(simd_float2 col0, simd_float2 col1);
112 static simd_float3x2 SIMD_CFUNC simd_matrix(simd_float2 col0, simd_float2 col1, simd_float2 col2);
113 static simd_float4x2 SIMD_CFUNC simd_matrix(simd_float2 col0, simd_float2 col1, simd_float2 col2, simd_float2 col3);
114 static simd_float2x3 SIMD_CFUNC simd_matrix(simd_float3 col0, simd_float3 col1);
115 static simd_float3x3 SIMD_CFUNC simd_matrix(simd_float3 col0, simd_float3 col1, simd_float3 col2);
116 static simd_float4x3 SIMD_CFUNC simd_matrix(simd_float3 col0, simd_float3 col1, simd_float3 col2, simd_float3 col3);
117 static simd_float2x4 SIMD_CFUNC simd_matrix(simd_float4 col0, simd_float4 col1);
118 static simd_float3x4 SIMD_CFUNC simd_matrix(simd_float4 col0, simd_float4 col1, simd_float4 col2);
119 static simd_float4x4 SIMD_CFUNC simd_matrix(simd_float4 col0, simd_float4 col1, simd_float4 col2, simd_float4 col3);
120 static simd_double2x2 SIMD_CFUNC simd_matrix(simd_double2 col0, simd_double2 col1);
121 static simd_double3x2 SIMD_CFUNC simd_matrix(simd_double2 col0, simd_double2 col1, simd_double2 col2);
122 static simd_double4x2 SIMD_CFUNC simd_matrix(simd_double2 col0, simd_double2 col1, simd_double2 col2, simd_double2 col3);
123 static simd_double2x3 SIMD_CFUNC simd_matrix(simd_double3 col0, simd_double3 col1);
124 static simd_double3x3 SIMD_CFUNC simd_matrix(simd_double3 col0, simd_double3 col1, simd_double3 col2);
125 static simd_double4x3 SIMD_CFUNC simd_matrix(simd_double3 col0, simd_double3 col1, simd_double3 col2, simd_double3 col3);
126 static simd_double2x4 SIMD_CFUNC simd_matrix(simd_double4 col0, simd_double4 col1);
127 static simd_double3x4 SIMD_CFUNC simd_matrix(simd_double4 col0, simd_double4 col1, simd_double4 col2);
128 static simd_double4x4 SIMD_CFUNC simd_matrix(simd_double4 col0, simd_double4 col1, simd_double4 col2, simd_double4 col3);
129 #define matrix_from_columns simd_matrix
130 
131 static simd_float2x2 SIMD_CFUNC simd_matrix_from_rows(simd_float2 row0, simd_float2 row1);
132 static simd_float2x3 SIMD_CFUNC simd_matrix_from_rows(simd_float2 row0, simd_float2 row1, simd_float2 row2);
133 static simd_float2x4 SIMD_CFUNC simd_matrix_from_rows(simd_float2 row0, simd_float2 row1, simd_float2 row2, simd_float2 row3);
134 static simd_float3x2 SIMD_CFUNC simd_matrix_from_rows(simd_float3 row0, simd_float3 row1);
135 static simd_float3x3 SIMD_CFUNC simd_matrix_from_rows(simd_float3 row0, simd_float3 row1, simd_float3 row2);
136 static simd_float3x4 SIMD_CFUNC simd_matrix_from_rows(simd_float3 row0, simd_float3 row1, simd_float3 row2, simd_float3 row3);
137 static simd_float4x2 SIMD_CFUNC simd_matrix_from_rows(simd_float4 row0, simd_float4 row1);
138 static simd_float4x3 SIMD_CFUNC simd_matrix_from_rows(simd_float4 row0, simd_float4 row1, simd_float4 row2);
139 static simd_float4x4 SIMD_CFUNC simd_matrix_from_rows(simd_float4 row0, simd_float4 row1, simd_float4 row2, simd_float4 row3);
140 static simd_double2x2 SIMD_CFUNC simd_matrix_from_rows(simd_double2 row0, simd_double2 row1);
141 static simd_double2x3 SIMD_CFUNC simd_matrix_from_rows(simd_double2 row0, simd_double2 row1, simd_double2 row2);
142 static simd_double2x4 SIMD_CFUNC simd_matrix_from_rows(simd_double2 row0, simd_double2 row1, simd_double2 row2, simd_double2 row3);
143 static simd_double3x2 SIMD_CFUNC simd_matrix_from_rows(simd_double3 row0, simd_double3 row1);
144 static simd_double3x3 SIMD_CFUNC simd_matrix_from_rows(simd_double3 row0, simd_double3 row1, simd_double3 row2);
145 static simd_double3x4 SIMD_CFUNC simd_matrix_from_rows(simd_double3 row0, simd_double3 row1, simd_double3 row2, simd_double3 row3);
146 static simd_double4x2 SIMD_CFUNC simd_matrix_from_rows(simd_double4 row0, simd_double4 row1);
147 static simd_double4x3 SIMD_CFUNC simd_matrix_from_rows(simd_double4 row0, simd_double4 row1, simd_double4 row2);
148 static simd_double4x4 SIMD_CFUNC simd_matrix_from_rows(simd_double4 row0, simd_double4 row1, simd_double4 row2, simd_double4 row3);
149 #define matrix_from_rows simd_matrix_from_rows
150 
151 static  simd_float3x3 SIMD_NOINLINE simd_matrix3x3(simd_quatf q);
152 static  simd_float4x4 SIMD_NOINLINE simd_matrix4x4(simd_quatf q);
153 static simd_double3x3 SIMD_NOINLINE simd_matrix3x3(simd_quatd q);
154 static simd_double4x4 SIMD_NOINLINE simd_matrix4x4(simd_quatd q);
155 
156 static simd_float2x2 SIMD_CFUNC simd_mul(float __a, simd_float2x2 __x);
157 static simd_float3x2 SIMD_CFUNC simd_mul(float __a, simd_float3x2 __x);
158 static simd_float4x2 SIMD_CFUNC simd_mul(float __a, simd_float4x2 __x);
159 static simd_float2x3 SIMD_CFUNC simd_mul(float __a, simd_float2x3 __x);
160 static simd_float3x3 SIMD_CFUNC simd_mul(float __a, simd_float3x3 __x);
161 static simd_float4x3 SIMD_CFUNC simd_mul(float __a, simd_float4x3 __x);
162 static simd_float2x4 SIMD_CFUNC simd_mul(float __a, simd_float2x4 __x);
163 static simd_float3x4 SIMD_CFUNC simd_mul(float __a, simd_float3x4 __x);
164 static simd_float4x4 SIMD_CFUNC simd_mul(float __a, simd_float4x4 __x);
165 static simd_double2x2 SIMD_CFUNC simd_mul(double __a, simd_double2x2 __x);
166 static simd_double3x2 SIMD_CFUNC simd_mul(double __a, simd_double3x2 __x);
167 static simd_double4x2 SIMD_CFUNC simd_mul(double __a, simd_double4x2 __x);
168 static simd_double2x3 SIMD_CFUNC simd_mul(double __a, simd_double2x3 __x);
169 static simd_double3x3 SIMD_CFUNC simd_mul(double __a, simd_double3x3 __x);
170 static simd_double4x3 SIMD_CFUNC simd_mul(double __a, simd_double4x3 __x);
171 static simd_double2x4 SIMD_CFUNC simd_mul(double __a, simd_double2x4 __x);
172 static simd_double3x4 SIMD_CFUNC simd_mul(double __a, simd_double3x4 __x);
173 static simd_double4x4 SIMD_CFUNC simd_mul(double __a, simd_double4x4 __x);
174 
175 static simd_float2x2 SIMD_CFUNC simd_linear_combination(float __a, simd_float2x2 __x, float __b, simd_float2x2 __y);
176 static simd_float3x2 SIMD_CFUNC simd_linear_combination(float __a, simd_float3x2 __x, float __b, simd_float3x2 __y);
177 static simd_float4x2 SIMD_CFUNC simd_linear_combination(float __a, simd_float4x2 __x, float __b, simd_float4x2 __y);
178 static simd_float2x3 SIMD_CFUNC simd_linear_combination(float __a, simd_float2x3 __x, float __b, simd_float2x3 __y);
179 static simd_float3x3 SIMD_CFUNC simd_linear_combination(float __a, simd_float3x3 __x, float __b, simd_float3x3 __y);
180 static simd_float4x3 SIMD_CFUNC simd_linear_combination(float __a, simd_float4x3 __x, float __b, simd_float4x3 __y);
181 static simd_float2x4 SIMD_CFUNC simd_linear_combination(float __a, simd_float2x4 __x, float __b, simd_float2x4 __y);
182 static simd_float3x4 SIMD_CFUNC simd_linear_combination(float __a, simd_float3x4 __x, float __b, simd_float3x4 __y);
183 static simd_float4x4 SIMD_CFUNC simd_linear_combination(float __a, simd_float4x4 __x, float __b, simd_float4x4 __y);
184 static simd_double2x2 SIMD_CFUNC simd_linear_combination(double __a, simd_double2x2 __x, double __b, simd_double2x2 __y);
185 static simd_double3x2 SIMD_CFUNC simd_linear_combination(double __a, simd_double3x2 __x, double __b, simd_double3x2 __y);
186 static simd_double4x2 SIMD_CFUNC simd_linear_combination(double __a, simd_double4x2 __x, double __b, simd_double4x2 __y);
187 static simd_double2x3 SIMD_CFUNC simd_linear_combination(double __a, simd_double2x3 __x, double __b, simd_double2x3 __y);
188 static simd_double3x3 SIMD_CFUNC simd_linear_combination(double __a, simd_double3x3 __x, double __b, simd_double3x3 __y);
189 static simd_double4x3 SIMD_CFUNC simd_linear_combination(double __a, simd_double4x3 __x, double __b, simd_double4x3 __y);
190 static simd_double2x4 SIMD_CFUNC simd_linear_combination(double __a, simd_double2x4 __x, double __b, simd_double2x4 __y);
191 static simd_double3x4 SIMD_CFUNC simd_linear_combination(double __a, simd_double3x4 __x, double __b, simd_double3x4 __y);
192 static simd_double4x4 SIMD_CFUNC simd_linear_combination(double __a, simd_double4x4 __x, double __b, simd_double4x4 __y);
193 #define matrix_linear_combination simd_linear_combination
194 
195 static simd_float2x2 SIMD_CFUNC simd_add(simd_float2x2 __x, simd_float2x2 __y);
196 static simd_float3x2 SIMD_CFUNC simd_add(simd_float3x2 __x, simd_float3x2 __y);
197 static simd_float4x2 SIMD_CFUNC simd_add(simd_float4x2 __x, simd_float4x2 __y);
198 static simd_float2x3 SIMD_CFUNC simd_add(simd_float2x3 __x, simd_float2x3 __y);
199 static simd_float3x3 SIMD_CFUNC simd_add(simd_float3x3 __x, simd_float3x3 __y);
200 static simd_float4x3 SIMD_CFUNC simd_add(simd_float4x3 __x, simd_float4x3 __y);
201 static simd_float2x4 SIMD_CFUNC simd_add(simd_float2x4 __x, simd_float2x4 __y);
202 static simd_float3x4 SIMD_CFUNC simd_add(simd_float3x4 __x, simd_float3x4 __y);
203 static simd_float4x4 SIMD_CFUNC simd_add(simd_float4x4 __x, simd_float4x4 __y);
204 static simd_double2x2 SIMD_CFUNC simd_add(simd_double2x2 __x, simd_double2x2 __y);
205 static simd_double3x2 SIMD_CFUNC simd_add(simd_double3x2 __x, simd_double3x2 __y);
206 static simd_double4x2 SIMD_CFUNC simd_add(simd_double4x2 __x, simd_double4x2 __y);
207 static simd_double2x3 SIMD_CFUNC simd_add(simd_double2x3 __x, simd_double2x3 __y);
208 static simd_double3x3 SIMD_CFUNC simd_add(simd_double3x3 __x, simd_double3x3 __y);
209 static simd_double4x3 SIMD_CFUNC simd_add(simd_double4x3 __x, simd_double4x3 __y);
210 static simd_double2x4 SIMD_CFUNC simd_add(simd_double2x4 __x, simd_double2x4 __y);
211 static simd_double3x4 SIMD_CFUNC simd_add(simd_double3x4 __x, simd_double3x4 __y);
212 static simd_double4x4 SIMD_CFUNC simd_add(simd_double4x4 __x, simd_double4x4 __y);
213 #define matrix_add simd_add
214 
215 static simd_float2x2 SIMD_CFUNC simd_sub(simd_float2x2 __x, simd_float2x2 __y);
216 static simd_float3x2 SIMD_CFUNC simd_sub(simd_float3x2 __x, simd_float3x2 __y);
217 static simd_float4x2 SIMD_CFUNC simd_sub(simd_float4x2 __x, simd_float4x2 __y);
218 static simd_float2x3 SIMD_CFUNC simd_sub(simd_float2x3 __x, simd_float2x3 __y);
219 static simd_float3x3 SIMD_CFUNC simd_sub(simd_float3x3 __x, simd_float3x3 __y);
220 static simd_float4x3 SIMD_CFUNC simd_sub(simd_float4x3 __x, simd_float4x3 __y);
221 static simd_float2x4 SIMD_CFUNC simd_sub(simd_float2x4 __x, simd_float2x4 __y);
222 static simd_float3x4 SIMD_CFUNC simd_sub(simd_float3x4 __x, simd_float3x4 __y);
223 static simd_float4x4 SIMD_CFUNC simd_sub(simd_float4x4 __x, simd_float4x4 __y);
224 static simd_double2x2 SIMD_CFUNC simd_sub(simd_double2x2 __x, simd_double2x2 __y);
225 static simd_double3x2 SIMD_CFUNC simd_sub(simd_double3x2 __x, simd_double3x2 __y);
226 static simd_double4x2 SIMD_CFUNC simd_sub(simd_double4x2 __x, simd_double4x2 __y);
227 static simd_double2x3 SIMD_CFUNC simd_sub(simd_double2x3 __x, simd_double2x3 __y);
228 static simd_double3x3 SIMD_CFUNC simd_sub(simd_double3x3 __x, simd_double3x3 __y);
229 static simd_double4x3 SIMD_CFUNC simd_sub(simd_double4x3 __x, simd_double4x3 __y);
230 static simd_double2x4 SIMD_CFUNC simd_sub(simd_double2x4 __x, simd_double2x4 __y);
231 static simd_double3x4 SIMD_CFUNC simd_sub(simd_double3x4 __x, simd_double3x4 __y);
232 static simd_double4x4 SIMD_CFUNC simd_sub(simd_double4x4 __x, simd_double4x4 __y);
233 #define matrix_sub simd_sub
234 
235 static simd_float2x2 SIMD_CFUNC simd_transpose(simd_float2x2 __x);
236 static simd_float2x3 SIMD_CFUNC simd_transpose(simd_float3x2 __x);
237 static simd_float2x4 SIMD_CFUNC simd_transpose(simd_float4x2 __x);
238 static simd_float3x2 SIMD_CFUNC simd_transpose(simd_float2x3 __x);
239 static simd_float3x3 SIMD_CFUNC simd_transpose(simd_float3x3 __x);
240 static simd_float3x4 SIMD_CFUNC simd_transpose(simd_float4x3 __x);
241 static simd_float4x2 SIMD_CFUNC simd_transpose(simd_float2x4 __x);
242 static simd_float4x3 SIMD_CFUNC simd_transpose(simd_float3x4 __x);
243 static simd_float4x4 SIMD_CFUNC simd_transpose(simd_float4x4 __x);
244 static simd_double2x2 SIMD_CFUNC simd_transpose(simd_double2x2 __x);
245 static simd_double2x3 SIMD_CFUNC simd_transpose(simd_double3x2 __x);
246 static simd_double2x4 SIMD_CFUNC simd_transpose(simd_double4x2 __x);
247 static simd_double3x2 SIMD_CFUNC simd_transpose(simd_double2x3 __x);
248 static simd_double3x3 SIMD_CFUNC simd_transpose(simd_double3x3 __x);
249 static simd_double3x4 SIMD_CFUNC simd_transpose(simd_double4x3 __x);
250 static simd_double4x2 SIMD_CFUNC simd_transpose(simd_double2x4 __x);
251 static simd_double4x3 SIMD_CFUNC simd_transpose(simd_double3x4 __x);
252 static simd_double4x4 SIMD_CFUNC simd_transpose(simd_double4x4 __x);
253 #define matrix_transpose simd_transpose
254 
255 static float SIMD_CFUNC simd_trace(simd_float2x2 __x);
256 static float SIMD_CFUNC simd_trace(simd_float3x3 __x);
257 static float SIMD_CFUNC simd_trace(simd_float4x4 __x);
258 static double SIMD_CFUNC simd_trace(simd_double2x2 __x);
259 static double SIMD_CFUNC simd_trace(simd_double3x3 __x);
260 static double SIMD_CFUNC simd_trace(simd_double4x4 __x);
261 #define matrix_trace simd_trace
262 
263 static float SIMD_CFUNC simd_determinant(simd_float2x2 __x);
264 static float SIMD_CFUNC simd_determinant(simd_float3x3 __x);
265 static float SIMD_CFUNC simd_determinant(simd_float4x4 __x);
266 static double SIMD_CFUNC simd_determinant(simd_double2x2 __x);
267 static double SIMD_CFUNC simd_determinant(simd_double3x3 __x);
268 static double SIMD_CFUNC simd_determinant(simd_double4x4 __x);
269 #define matrix_determinant simd_determinant
270 
271 static simd_float2x2 SIMD_CFUNC simd_inverse(simd_float2x2 __x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
272 static simd_float3x3 SIMD_CFUNC simd_inverse(simd_float3x3 __x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
273 static simd_float4x4 SIMD_CFUNC simd_inverse(simd_float4x4 __x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
274 static simd_double2x2 SIMD_CFUNC simd_inverse(simd_double2x2 __x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
275 static simd_double3x3 SIMD_CFUNC simd_inverse(simd_double3x3 __x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
276 static simd_double4x4 SIMD_CFUNC simd_inverse(simd_double4x4 __x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0));
277 #define matrix_invert simd_inverse
278 
279 static simd_float2 SIMD_CFUNC simd_mul(simd_float2x2 __x, simd_float2 __y);
280 static simd_float2 SIMD_CFUNC simd_mul(simd_float3x2 __x, simd_float3 __y);
281 static simd_float2 SIMD_CFUNC simd_mul(simd_float4x2 __x, simd_float4 __y);
282 static simd_float3 SIMD_CFUNC simd_mul(simd_float2x3 __x, simd_float2 __y);
283 static simd_float3 SIMD_CFUNC simd_mul(simd_float3x3 __x, simd_float3 __y);
284 static simd_float3 SIMD_CFUNC simd_mul(simd_float4x3 __x, simd_float4 __y);
285 static simd_float4 SIMD_CFUNC simd_mul(simd_float2x4 __x, simd_float2 __y);
286 static simd_float4 SIMD_CFUNC simd_mul(simd_float3x4 __x, simd_float3 __y);
287 static simd_float4 SIMD_CFUNC simd_mul(simd_float4x4 __x, simd_float4 __y);
288 static simd_double2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double2 __y);
289 static simd_double2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double3 __y);
290 static simd_double2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double4 __y);
291 static simd_double3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double2 __y);
292 static simd_double3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double3 __y);
293 static simd_double3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double4 __y);
294 static simd_double4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double2 __y);
295 static simd_double4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double3 __y);
296 static simd_double4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double4 __y);
297 static simd_float2 SIMD_CFUNC simd_mul(simd_float2 __x, simd_float2x2 __y);
298 static simd_float3 SIMD_CFUNC simd_mul(simd_float2 __x, simd_float3x2 __y);
299 static simd_float4 SIMD_CFUNC simd_mul(simd_float2 __x, simd_float4x2 __y);
300 static simd_float2 SIMD_CFUNC simd_mul(simd_float3 __x, simd_float2x3 __y);
301 static simd_float3 SIMD_CFUNC simd_mul(simd_float3 __x, simd_float3x3 __y);
302 static simd_float4 SIMD_CFUNC simd_mul(simd_float3 __x, simd_float4x3 __y);
303 static simd_float2 SIMD_CFUNC simd_mul(simd_float4 __x, simd_float2x4 __y);
304 static simd_float3 SIMD_CFUNC simd_mul(simd_float4 __x, simd_float3x4 __y);
305 static simd_float4 SIMD_CFUNC simd_mul(simd_float4 __x, simd_float4x4 __y);
306 static simd_double2 SIMD_CFUNC simd_mul(simd_double2 __x, simd_double2x2 __y);
307 static simd_double3 SIMD_CFUNC simd_mul(simd_double2 __x, simd_double3x2 __y);
308 static simd_double4 SIMD_CFUNC simd_mul(simd_double2 __x, simd_double4x2 __y);
309 static simd_double2 SIMD_CFUNC simd_mul(simd_double3 __x, simd_double2x3 __y);
310 static simd_double3 SIMD_CFUNC simd_mul(simd_double3 __x, simd_double3x3 __y);
311 static simd_double4 SIMD_CFUNC simd_mul(simd_double3 __x, simd_double4x3 __y);
312 static simd_double2 SIMD_CFUNC simd_mul(simd_double4 __x, simd_double2x4 __y);
313 static simd_double3 SIMD_CFUNC simd_mul(simd_double4 __x, simd_double3x4 __y);
314 static simd_double4 SIMD_CFUNC simd_mul(simd_double4 __x, simd_double4x4 __y);
315 static simd_float2x2 SIMD_CFUNC simd_mul(simd_float2x2 __x, simd_float2x2 __y);
316 static simd_float3x2 SIMD_CFUNC simd_mul(simd_float2x2 __x, simd_float3x2 __y);
317 static simd_float4x2 SIMD_CFUNC simd_mul(simd_float2x2 __x, simd_float4x2 __y);
318 static simd_float2x3 SIMD_CFUNC simd_mul(simd_float2x3 __x, simd_float2x2 __y);
319 static simd_float3x3 SIMD_CFUNC simd_mul(simd_float2x3 __x, simd_float3x2 __y);
320 static simd_float4x3 SIMD_CFUNC simd_mul(simd_float2x3 __x, simd_float4x2 __y);
321 static simd_float2x4 SIMD_CFUNC simd_mul(simd_float2x4 __x, simd_float2x2 __y);
322 static simd_float3x4 SIMD_CFUNC simd_mul(simd_float2x4 __x, simd_float3x2 __y);
323 static simd_float4x4 SIMD_CFUNC simd_mul(simd_float2x4 __x, simd_float4x2 __y);
324 static simd_double2x2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double2x2 __y);
325 static simd_double3x2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double3x2 __y);
326 static simd_double4x2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double4x2 __y);
327 static simd_double2x3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double2x2 __y);
328 static simd_double3x3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double3x2 __y);
329 static simd_double4x3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double4x2 __y);
330 static simd_double2x4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double2x2 __y);
331 static simd_double3x4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double3x2 __y);
332 static simd_double4x4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double4x2 __y);
333 static simd_float2x2 SIMD_CFUNC simd_mul(simd_float3x2 __x, simd_float2x3 __y);
334 static simd_float3x2 SIMD_CFUNC simd_mul(simd_float3x2 __x, simd_float3x3 __y);
335 static simd_float4x2 SIMD_CFUNC simd_mul(simd_float3x2 __x, simd_float4x3 __y);
336 static simd_float2x3 SIMD_CFUNC simd_mul(simd_float3x3 __x, simd_float2x3 __y);
337 static simd_float3x3 SIMD_CFUNC simd_mul(simd_float3x3 __x, simd_float3x3 __y);
338 static simd_float4x3 SIMD_CFUNC simd_mul(simd_float3x3 __x, simd_float4x3 __y);
339 static simd_float2x4 SIMD_CFUNC simd_mul(simd_float3x4 __x, simd_float2x3 __y);
340 static simd_float3x4 SIMD_CFUNC simd_mul(simd_float3x4 __x, simd_float3x3 __y);
341 static simd_float4x4 SIMD_CFUNC simd_mul(simd_float3x4 __x, simd_float4x3 __y);
342 static simd_double2x2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double2x3 __y);
343 static simd_double3x2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double3x3 __y);
344 static simd_double4x2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double4x3 __y);
345 static simd_double2x3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double2x3 __y);
346 static simd_double3x3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double3x3 __y);
347 static simd_double4x3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double4x3 __y);
348 static simd_double2x4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double2x3 __y);
349 static simd_double3x4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double3x3 __y);
350 static simd_double4x4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double4x3 __y);
351 static simd_float2x2 SIMD_CFUNC simd_mul(simd_float4x2 __x, simd_float2x4 __y);
352 static simd_float3x2 SIMD_CFUNC simd_mul(simd_float4x2 __x, simd_float3x4 __y);
353 static simd_float4x2 SIMD_CFUNC simd_mul(simd_float4x2 __x, simd_float4x4 __y);
354 static simd_float2x3 SIMD_CFUNC simd_mul(simd_float4x3 __x, simd_float2x4 __y);
355 static simd_float3x3 SIMD_CFUNC simd_mul(simd_float4x3 __x, simd_float3x4 __y);
356 static simd_float4x3 SIMD_CFUNC simd_mul(simd_float4x3 __x, simd_float4x4 __y);
357 static simd_float2x4 SIMD_CFUNC simd_mul(simd_float4x4 __x, simd_float2x4 __y);
358 static simd_float3x4 SIMD_CFUNC simd_mul(simd_float4x4 __x, simd_float3x4 __y);
359 static simd_float4x4 SIMD_CFUNC simd_mul(simd_float4x4 __x, simd_float4x4 __y);
360 static simd_double2x2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double2x4 __y);
361 static simd_double3x2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double3x4 __y);
362 static simd_double4x2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double4x4 __y);
363 static simd_double2x3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double2x4 __y);
364 static simd_double3x3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double3x4 __y);
365 static simd_double4x3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double4x4 __y);
366 static simd_double2x4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double2x4 __y);
367 static simd_double3x4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double3x4 __y);
368 static simd_double4x4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double4x4 __y);
369 
370 static simd_bool SIMD_CFUNC simd_equal(simd_float2x2 __x, simd_float2x2 __y);
371 static simd_bool SIMD_CFUNC simd_equal(simd_float2x3 __x, simd_float2x3 __y);
372 static simd_bool SIMD_CFUNC simd_equal(simd_float2x4 __x, simd_float2x4 __y);
373 static simd_bool SIMD_CFUNC simd_equal(simd_float3x2 __x, simd_float3x2 __y);
374 static simd_bool SIMD_CFUNC simd_equal(simd_float3x3 __x, simd_float3x3 __y);
375 static simd_bool SIMD_CFUNC simd_equal(simd_float3x4 __x, simd_float3x4 __y);
376 static simd_bool SIMD_CFUNC simd_equal(simd_float4x2 __x, simd_float4x2 __y);
377 static simd_bool SIMD_CFUNC simd_equal(simd_float4x3 __x, simd_float4x3 __y);
378 static simd_bool SIMD_CFUNC simd_equal(simd_float4x4 __x, simd_float4x4 __y);
379 static simd_bool SIMD_CFUNC simd_equal(simd_double2x2 __x, simd_double2x2 __y);
380 static simd_bool SIMD_CFUNC simd_equal(simd_double2x3 __x, simd_double2x3 __y);
381 static simd_bool SIMD_CFUNC simd_equal(simd_double2x4 __x, simd_double2x4 __y);
382 static simd_bool SIMD_CFUNC simd_equal(simd_double3x2 __x, simd_double3x2 __y);
383 static simd_bool SIMD_CFUNC simd_equal(simd_double3x3 __x, simd_double3x3 __y);
384 static simd_bool SIMD_CFUNC simd_equal(simd_double3x4 __x, simd_double3x4 __y);
385 static simd_bool SIMD_CFUNC simd_equal(simd_double4x2 __x, simd_double4x2 __y);
386 static simd_bool SIMD_CFUNC simd_equal(simd_double4x3 __x, simd_double4x3 __y);
387 static simd_bool SIMD_CFUNC simd_equal(simd_double4x4 __x, simd_double4x4 __y);
388 #define matrix_equal simd_equal
389 
390 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float2x2 __x, simd_float2x2 __y, float __tol);
391 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float2x3 __x, simd_float2x3 __y, float __tol);
392 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float2x4 __x, simd_float2x4 __y, float __tol);
393 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float3x2 __x, simd_float3x2 __y, float __tol);
394 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float3x3 __x, simd_float3x3 __y, float __tol);
395 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float3x4 __x, simd_float3x4 __y, float __tol);
396 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float4x2 __x, simd_float4x2 __y, float __tol);
397 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float4x3 __x, simd_float4x3 __y, float __tol);
398 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float4x4 __x, simd_float4x4 __y, float __tol);
399 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double2x2 __x, simd_double2x2 __y, double __tol);
400 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double2x3 __x, simd_double2x3 __y, double __tol);
401 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double2x4 __x, simd_double2x4 __y, double __tol);
402 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double3x2 __x, simd_double3x2 __y, double __tol);
403 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double3x3 __x, simd_double3x3 __y, double __tol);
404 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double3x4 __x, simd_double3x4 __y, double __tol);
405 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double4x2 __x, simd_double4x2 __y, double __tol);
406 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double4x3 __x, simd_double4x3 __y, double __tol);
407 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double4x4 __x, simd_double4x4 __y, double __tol);
408 #define matrix_almost_equal_elements simd_almost_equal_elements
409 
410 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float2x2 __x, simd_float2x2 __y, float __tol);
411 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float2x3 __x, simd_float2x3 __y, float __tol);
412 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float2x4 __x, simd_float2x4 __y, float __tol);
413 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float3x2 __x, simd_float3x2 __y, float __tol);
414 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float3x3 __x, simd_float3x3 __y, float __tol);
415 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float3x4 __x, simd_float3x4 __y, float __tol);
416 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float4x2 __x, simd_float4x2 __y, float __tol);
417 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float4x3 __x, simd_float4x3 __y, float __tol);
418 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float4x4 __x, simd_float4x4 __y, float __tol);
419 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double2x2 __x, simd_double2x2 __y, double __tol);
420 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double2x3 __x, simd_double2x3 __y, double __tol);
421 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double2x4 __x, simd_double2x4 __y, double __tol);
422 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double3x2 __x, simd_double3x2 __y, double __tol);
423 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double3x3 __x, simd_double3x3 __y, double __tol);
424 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double3x4 __x, simd_double3x4 __y, double __tol);
425 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double4x2 __x, simd_double4x2 __y, double __tol);
426 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double4x3 __x, simd_double4x3 __y, double __tol);
427 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double4x4 __x, simd_double4x4 __y, double __tol);
428 #define matrix_almost_equal_elements_relative simd_almost_equal_elements_relative
429 
430 #ifdef __cplusplus
431 } /* extern "C" */
432 
433 namespace simd {
434   static SIMD_CPPFUNC float2x2 operator+(const float2x2 x, const float2x2 y) { return float2x2(::simd_linear_combination(1, x, 1, y)); }
435   static SIMD_CPPFUNC float2x3 operator+(const float2x3 x, const float2x3 y) { return float2x3(::simd_linear_combination(1, x, 1, y)); }
436   static SIMD_CPPFUNC float2x4 operator+(const float2x4 x, const float2x4 y) { return float2x4(::simd_linear_combination(1, x, 1, y)); }
437   static SIMD_CPPFUNC float3x2 operator+(const float3x2 x, const float3x2 y) { return float3x2(::simd_linear_combination(1, x, 1, y)); }
438   static SIMD_CPPFUNC float3x3 operator+(const float3x3 x, const float3x3 y) { return float3x3(::simd_linear_combination(1, x, 1, y)); }
439   static SIMD_CPPFUNC float3x4 operator+(const float3x4 x, const float3x4 y) { return float3x4(::simd_linear_combination(1, x, 1, y)); }
440   static SIMD_CPPFUNC float4x2 operator+(const float4x2 x, const float4x2 y) { return float4x2(::simd_linear_combination(1, x, 1, y)); }
441   static SIMD_CPPFUNC float4x3 operator+(const float4x3 x, const float4x3 y) { return float4x3(::simd_linear_combination(1, x, 1, y)); }
442   static SIMD_CPPFUNC float4x4 operator+(const float4x4 x, const float4x4 y) { return float4x4(::simd_linear_combination(1, x, 1, y)); }
443 
444   static SIMD_CPPFUNC float2x2 operator-(const float2x2 x, const float2x2 y) { return float2x2(::simd_linear_combination(1, x, -1, y)); }
445   static SIMD_CPPFUNC float2x3 operator-(const float2x3 x, const float2x3 y) { return float2x3(::simd_linear_combination(1, x, -1, y)); }
446   static SIMD_CPPFUNC float2x4 operator-(const float2x4 x, const float2x4 y) { return float2x4(::simd_linear_combination(1, x, -1, y)); }
447   static SIMD_CPPFUNC float3x2 operator-(const float3x2 x, const float3x2 y) { return float3x2(::simd_linear_combination(1, x, -1, y)); }
448   static SIMD_CPPFUNC float3x3 operator-(const float3x3 x, const float3x3 y) { return float3x3(::simd_linear_combination(1, x, -1, y)); }
449   static SIMD_CPPFUNC float3x4 operator-(const float3x4 x, const float3x4 y) { return float3x4(::simd_linear_combination(1, x, -1, y)); }
450   static SIMD_CPPFUNC float4x2 operator-(const float4x2 x, const float4x2 y) { return float4x2(::simd_linear_combination(1, x, -1, y)); }
451   static SIMD_CPPFUNC float4x3 operator-(const float4x3 x, const float4x3 y) { return float4x3(::simd_linear_combination(1, x, -1, y)); }
452   static SIMD_CPPFUNC float4x4 operator-(const float4x4 x, const float4x4 y) { return float4x4(::simd_linear_combination(1, x, -1, y)); }
453 
454   static SIMD_CPPFUNC float2x2& operator+=(float2x2& x, const float2x2 y) { x = x + y; return x; }
455   static SIMD_CPPFUNC float2x3& operator+=(float2x3& x, const float2x3 y) { x = x + y; return x; }
456   static SIMD_CPPFUNC float2x4& operator+=(float2x4& x, const float2x4 y) { x = x + y; return x; }
457   static SIMD_CPPFUNC float3x2& operator+=(float3x2& x, const float3x2 y) { x = x + y; return x; }
458   static SIMD_CPPFUNC float3x3& operator+=(float3x3& x, const float3x3 y) { x = x + y; return x; }
459   static SIMD_CPPFUNC float3x4& operator+=(float3x4& x, const float3x4 y) { x = x + y; return x; }
460   static SIMD_CPPFUNC float4x2& operator+=(float4x2& x, const float4x2 y) { x = x + y; return x; }
461   static SIMD_CPPFUNC float4x3& operator+=(float4x3& x, const float4x3 y) { x = x + y; return x; }
462   static SIMD_CPPFUNC float4x4& operator+=(float4x4& x, const float4x4 y) { x = x + y; return x; }
463 
464   static SIMD_CPPFUNC float2x2& operator-=(float2x2& x, const float2x2 y) { x = x - y; return x; }
465   static SIMD_CPPFUNC float2x3& operator-=(float2x3& x, const float2x3 y) { x = x - y; return x; }
466   static SIMD_CPPFUNC float2x4& operator-=(float2x4& x, const float2x4 y) { x = x - y; return x; }
467   static SIMD_CPPFUNC float3x2& operator-=(float3x2& x, const float3x2 y) { x = x - y; return x; }
468   static SIMD_CPPFUNC float3x3& operator-=(float3x3& x, const float3x3 y) { x = x - y; return x; }
469   static SIMD_CPPFUNC float3x4& operator-=(float3x4& x, const float3x4 y) { x = x - y; return x; }
470   static SIMD_CPPFUNC float4x2& operator-=(float4x2& x, const float4x2 y) { x = x - y; return x; }
471   static SIMD_CPPFUNC float4x3& operator-=(float4x3& x, const float4x3 y) { x = x - y; return x; }
472   static SIMD_CPPFUNC float4x4& operator-=(float4x4& x, const float4x4 y) { x = x - y; return x; }
473 
transpose(const float2x2 x)474   static SIMD_CPPFUNC float2x2 transpose(const float2x2 x) { return ::simd_transpose(x); }
transpose(const float3x2 x)475   static SIMD_CPPFUNC float2x3 transpose(const float3x2 x) { return ::simd_transpose(x); }
transpose(const float4x2 x)476   static SIMD_CPPFUNC float2x4 transpose(const float4x2 x) { return ::simd_transpose(x); }
transpose(const float2x3 x)477   static SIMD_CPPFUNC float3x2 transpose(const float2x3 x) { return ::simd_transpose(x); }
transpose(const float3x3 x)478   static SIMD_CPPFUNC float3x3 transpose(const float3x3 x) { return ::simd_transpose(x); }
transpose(const float4x3 x)479   static SIMD_CPPFUNC float3x4 transpose(const float4x3 x) { return ::simd_transpose(x); }
transpose(const float2x4 x)480   static SIMD_CPPFUNC float4x2 transpose(const float2x4 x) { return ::simd_transpose(x); }
transpose(const float3x4 x)481   static SIMD_CPPFUNC float4x3 transpose(const float3x4 x) { return ::simd_transpose(x); }
transpose(const float4x4 x)482   static SIMD_CPPFUNC float4x4 transpose(const float4x4 x) { return ::simd_transpose(x); }
483 
trace(const float2x2 x)484   static SIMD_CPPFUNC float trace(const float2x2 x) { return ::simd_trace(x); }
trace(const float3x3 x)485   static SIMD_CPPFUNC float trace(const float3x3 x) { return ::simd_trace(x); }
trace(const float4x4 x)486   static SIMD_CPPFUNC float trace(const float4x4 x) { return ::simd_trace(x); }
487 
determinant(const float2x2 x)488   static SIMD_CPPFUNC float determinant(const float2x2 x) { return ::simd_determinant(x); }
determinant(const float3x3 x)489   static SIMD_CPPFUNC float determinant(const float3x3 x) { return ::simd_determinant(x); }
determinant(const float4x4 x)490   static SIMD_CPPFUNC float determinant(const float4x4 x) { return ::simd_determinant(x); }
491 
492 #pragma clang diagnostic push
493 #pragma clang diagnostic ignored "-Wgcc-compat"
inverse(const float2x2 x)494   static SIMD_CPPFUNC float2x2 inverse(const float2x2 x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) { return ::simd_inverse(x); }
inverse(const float3x3 x)495   static SIMD_CPPFUNC float3x3 inverse(const float3x3 x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) { return ::simd_inverse(x); }
inverse(const float4x4 x)496   static SIMD_CPPFUNC float4x4 inverse(const float4x4 x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) { return ::simd_inverse(x); }
497 #pragma clang diagnostic pop
498 
499   static SIMD_CPPFUNC float2x2 operator*(const float a, const float2x2 x) { return ::simd_mul(a, x); }
500   static SIMD_CPPFUNC float2x3 operator*(const float a, const float2x3 x) { return ::simd_mul(a, x); }
501   static SIMD_CPPFUNC float2x4 operator*(const float a, const float2x4 x) { return ::simd_mul(a, x); }
502   static SIMD_CPPFUNC float3x2 operator*(const float a, const float3x2 x) { return ::simd_mul(a, x); }
503   static SIMD_CPPFUNC float3x3 operator*(const float a, const float3x3 x) { return ::simd_mul(a, x); }
504   static SIMD_CPPFUNC float3x4 operator*(const float a, const float3x4 x) { return ::simd_mul(a, x); }
505   static SIMD_CPPFUNC float4x2 operator*(const float a, const float4x2 x) { return ::simd_mul(a, x); }
506   static SIMD_CPPFUNC float4x3 operator*(const float a, const float4x3 x) { return ::simd_mul(a, x); }
507   static SIMD_CPPFUNC float4x4 operator*(const float a, const float4x4 x) { return ::simd_mul(a, x); }
508   static SIMD_CPPFUNC float2x2 operator*(const float2x2 x, const float a) { return ::simd_mul(a, x); }
509   static SIMD_CPPFUNC float2x3 operator*(const float2x3 x, const float a) { return ::simd_mul(a, x); }
510   static SIMD_CPPFUNC float2x4 operator*(const float2x4 x, const float a) { return ::simd_mul(a, x); }
511   static SIMD_CPPFUNC float3x2 operator*(const float3x2 x, const float a) { return ::simd_mul(a, x); }
512   static SIMD_CPPFUNC float3x3 operator*(const float3x3 x, const float a) { return ::simd_mul(a, x); }
513   static SIMD_CPPFUNC float3x4 operator*(const float3x4 x, const float a) { return ::simd_mul(a, x); }
514   static SIMD_CPPFUNC float4x2 operator*(const float4x2 x, const float a) { return ::simd_mul(a, x); }
515   static SIMD_CPPFUNC float4x3 operator*(const float4x3 x, const float a) { return ::simd_mul(a, x); }
516   static SIMD_CPPFUNC float4x4 operator*(const float4x4 x, const float a) { return ::simd_mul(a, x); }
517   static SIMD_CPPFUNC float2x2& operator*=(float2x2& x, const float a) { x = ::simd_mul(a, x); return x; }
518   static SIMD_CPPFUNC float2x3& operator*=(float2x3& x, const float a) { x = ::simd_mul(a, x); return x; }
519   static SIMD_CPPFUNC float2x4& operator*=(float2x4& x, const float a) { x = ::simd_mul(a, x); return x; }
520   static SIMD_CPPFUNC float3x2& operator*=(float3x2& x, const float a) { x = ::simd_mul(a, x); return x; }
521   static SIMD_CPPFUNC float3x3& operator*=(float3x3& x, const float a) { x = ::simd_mul(a, x); return x; }
522   static SIMD_CPPFUNC float3x4& operator*=(float3x4& x, const float a) { x = ::simd_mul(a, x); return x; }
523   static SIMD_CPPFUNC float4x2& operator*=(float4x2& x, const float a) { x = ::simd_mul(a, x); return x; }
524   static SIMD_CPPFUNC float4x3& operator*=(float4x3& x, const float a) { x = ::simd_mul(a, x); return x; }
525   static SIMD_CPPFUNC float4x4& operator*=(float4x4& x, const float a) { x = ::simd_mul(a, x); return x; }
526 
527   static SIMD_CPPFUNC float2 operator*(const float2 x, const float2x2 y) { return ::simd_mul(x, y); }
528   static SIMD_CPPFUNC float3 operator*(const float2 x, const float3x2 y) { return ::simd_mul(x, y); }
529   static SIMD_CPPFUNC float4 operator*(const float2 x, const float4x2 y) { return ::simd_mul(x, y); }
530   static SIMD_CPPFUNC float2 operator*(const float3 x, const float2x3 y) { return ::simd_mul(x, y); }
531   static SIMD_CPPFUNC float3 operator*(const float3 x, const float3x3 y) { return ::simd_mul(x, y); }
532   static SIMD_CPPFUNC float4 operator*(const float3 x, const float4x3 y) { return ::simd_mul(x, y); }
533   static SIMD_CPPFUNC float2 operator*(const float4 x, const float2x4 y) { return ::simd_mul(x, y); }
534   static SIMD_CPPFUNC float3 operator*(const float4 x, const float3x4 y) { return ::simd_mul(x, y); }
535   static SIMD_CPPFUNC float4 operator*(const float4 x, const float4x4 y) { return ::simd_mul(x, y); }
536   static SIMD_CPPFUNC float2 operator*(const float2x2 x, const float2 y) { return ::simd_mul(x, y); }
537   static SIMD_CPPFUNC float2 operator*(const float3x2 x, const float3 y) { return ::simd_mul(x, y); }
538   static SIMD_CPPFUNC float2 operator*(const float4x2 x, const float4 y) { return ::simd_mul(x, y); }
539   static SIMD_CPPFUNC float3 operator*(const float2x3 x, const float2 y) { return ::simd_mul(x, y); }
540   static SIMD_CPPFUNC float3 operator*(const float3x3 x, const float3 y) { return ::simd_mul(x, y); }
541   static SIMD_CPPFUNC float3 operator*(const float4x3 x, const float4 y) { return ::simd_mul(x, y); }
542   static SIMD_CPPFUNC float4 operator*(const float2x4 x, const float2 y) { return ::simd_mul(x, y); }
543   static SIMD_CPPFUNC float4 operator*(const float3x4 x, const float3 y) { return ::simd_mul(x, y); }
544   static SIMD_CPPFUNC float4 operator*(const float4x4 x, const float4 y) { return ::simd_mul(x, y); }
545   static SIMD_CPPFUNC float2& operator*=(float2& x, const float2x2 y) { x = ::simd_mul(x, y); return x; }
546   static SIMD_CPPFUNC float3& operator*=(float3& x, const float3x3 y) { x = ::simd_mul(x, y); return x; }
547   static SIMD_CPPFUNC float4& operator*=(float4& x, const float4x4 y) { x = ::simd_mul(x, y); return x; }
548 
549   static SIMD_CPPFUNC float2x2 operator*(const float2x2 x, const float2x2 y) { return ::simd_mul(x, y); }
550   static SIMD_CPPFUNC float3x2 operator*(const float2x2 x, const float3x2 y) { return ::simd_mul(x, y); }
551   static SIMD_CPPFUNC float4x2 operator*(const float2x2 x, const float4x2 y) { return ::simd_mul(x, y); }
552   static SIMD_CPPFUNC float2x3 operator*(const float2x3 x, const float2x2 y) { return ::simd_mul(x, y); }
553   static SIMD_CPPFUNC float3x3 operator*(const float2x3 x, const float3x2 y) { return ::simd_mul(x, y); }
554   static SIMD_CPPFUNC float4x3 operator*(const float2x3 x, const float4x2 y) { return ::simd_mul(x, y); }
555   static SIMD_CPPFUNC float2x4 operator*(const float2x4 x, const float2x2 y) { return ::simd_mul(x, y); }
556   static SIMD_CPPFUNC float3x4 operator*(const float2x4 x, const float3x2 y) { return ::simd_mul(x, y); }
557   static SIMD_CPPFUNC float4x4 operator*(const float2x4 x, const float4x2 y) { return ::simd_mul(x, y); }
558   static SIMD_CPPFUNC float2x2 operator*(const float3x2 x, const float2x3 y) { return ::simd_mul(x, y); }
559   static SIMD_CPPFUNC float3x2 operator*(const float3x2 x, const float3x3 y) { return ::simd_mul(x, y); }
560   static SIMD_CPPFUNC float4x2 operator*(const float3x2 x, const float4x3 y) { return ::simd_mul(x, y); }
561   static SIMD_CPPFUNC float2x3 operator*(const float3x3 x, const float2x3 y) { return ::simd_mul(x, y); }
562   static SIMD_CPPFUNC float3x3 operator*(const float3x3 x, const float3x3 y) { return ::simd_mul(x, y); }
563   static SIMD_CPPFUNC float4x3 operator*(const float3x3 x, const float4x3 y) { return ::simd_mul(x, y); }
564   static SIMD_CPPFUNC float2x4 operator*(const float3x4 x, const float2x3 y) { return ::simd_mul(x, y); }
565   static SIMD_CPPFUNC float3x4 operator*(const float3x4 x, const float3x3 y) { return ::simd_mul(x, y); }
566   static SIMD_CPPFUNC float4x4 operator*(const float3x4 x, const float4x3 y) { return ::simd_mul(x, y); }
567   static SIMD_CPPFUNC float2x2 operator*(const float4x2 x, const float2x4 y) { return ::simd_mul(x, y); }
568   static SIMD_CPPFUNC float3x2 operator*(const float4x2 x, const float3x4 y) { return ::simd_mul(x, y); }
569   static SIMD_CPPFUNC float4x2 operator*(const float4x2 x, const float4x4 y) { return ::simd_mul(x, y); }
570   static SIMD_CPPFUNC float2x3 operator*(const float4x3 x, const float2x4 y) { return ::simd_mul(x, y); }
571   static SIMD_CPPFUNC float3x3 operator*(const float4x3 x, const float3x4 y) { return ::simd_mul(x, y); }
572   static SIMD_CPPFUNC float4x3 operator*(const float4x3 x, const float4x4 y) { return ::simd_mul(x, y); }
573   static SIMD_CPPFUNC float2x4 operator*(const float4x4 x, const float2x4 y) { return ::simd_mul(x, y); }
574   static SIMD_CPPFUNC float3x4 operator*(const float4x4 x, const float3x4 y) { return ::simd_mul(x, y); }
575   static SIMD_CPPFUNC float4x4 operator*(const float4x4 x, const float4x4 y) { return ::simd_mul(x, y); }
576   static SIMD_CPPFUNC float2x2& operator*=(float2x2& x, const float2x2 y) { x = ::simd_mul(x, y); return x; }
577   static SIMD_CPPFUNC float2x3& operator*=(float2x3& x, const float2x2 y) { x = ::simd_mul(x, y); return x; }
578   static SIMD_CPPFUNC float2x4& operator*=(float2x4& x, const float2x2 y) { x = ::simd_mul(x, y); return x; }
579   static SIMD_CPPFUNC float3x2& operator*=(float3x2& x, const float3x3 y) { x = ::simd_mul(x, y); return x; }
580   static SIMD_CPPFUNC float3x3& operator*=(float3x3& x, const float3x3 y) { x = ::simd_mul(x, y); return x; }
581   static SIMD_CPPFUNC float3x4& operator*=(float3x4& x, const float3x3 y) { x = ::simd_mul(x, y); return x; }
582   static SIMD_CPPFUNC float4x2& operator*=(float4x2& x, const float4x4 y) { x = ::simd_mul(x, y); return x; }
583   static SIMD_CPPFUNC float4x3& operator*=(float4x3& x, const float4x4 y) { x = ::simd_mul(x, y); return x; }
584   static SIMD_CPPFUNC float4x4& operator*=(float4x4& x, const float4x4 y) { x = ::simd_mul(x, y); return x; }
585 
586   static SIMD_CPPFUNC bool operator==(const float2x2& x, const float2x2& y) { return ::simd_equal(x, y); }
587   static SIMD_CPPFUNC bool operator==(const float2x3& x, const float2x3& y) { return ::simd_equal(x, y); }
588   static SIMD_CPPFUNC bool operator==(const float2x4& x, const float2x4& y) { return ::simd_equal(x, y); }
589   static SIMD_CPPFUNC bool operator==(const float3x2& x, const float3x2& y) { return ::simd_equal(x, y); }
590   static SIMD_CPPFUNC bool operator==(const float3x3& x, const float3x3& y) { return ::simd_equal(x, y); }
591   static SIMD_CPPFUNC bool operator==(const float3x4& x, const float3x4& y) { return ::simd_equal(x, y); }
592   static SIMD_CPPFUNC bool operator==(const float4x2& x, const float4x2& y) { return ::simd_equal(x, y); }
593   static SIMD_CPPFUNC bool operator==(const float4x3& x, const float4x3& y) { return ::simd_equal(x, y); }
594   static SIMD_CPPFUNC bool operator==(const float4x4& x, const float4x4& y) { return ::simd_equal(x, y); }
595 
596   static SIMD_CPPFUNC bool operator!=(const float2x2& x, const float2x2& y) { return !(x == y); }
597   static SIMD_CPPFUNC bool operator!=(const float2x3& x, const float2x3& y) { return !(x == y); }
598   static SIMD_CPPFUNC bool operator!=(const float2x4& x, const float2x4& y) { return !(x == y); }
599   static SIMD_CPPFUNC bool operator!=(const float3x2& x, const float3x2& y) { return !(x == y); }
600   static SIMD_CPPFUNC bool operator!=(const float3x3& x, const float3x3& y) { return !(x == y); }
601   static SIMD_CPPFUNC bool operator!=(const float3x4& x, const float3x4& y) { return !(x == y); }
602   static SIMD_CPPFUNC bool operator!=(const float4x2& x, const float4x2& y) { return !(x == y); }
603   static SIMD_CPPFUNC bool operator!=(const float4x3& x, const float4x3& y) { return !(x == y); }
604   static SIMD_CPPFUNC bool operator!=(const float4x4& x, const float4x4& y) { return !(x == y); }
605 
almost_equal_elements(const float2x2 x,const float2x2 y,const float tol)606   static SIMD_CPPFUNC bool almost_equal_elements(const float2x2 x, const float2x2 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float2x3 x,const float2x3 y,const float tol)607   static SIMD_CPPFUNC bool almost_equal_elements(const float2x3 x, const float2x3 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float2x4 x,const float2x4 y,const float tol)608   static SIMD_CPPFUNC bool almost_equal_elements(const float2x4 x, const float2x4 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float3x2 x,const float3x2 y,const float tol)609   static SIMD_CPPFUNC bool almost_equal_elements(const float3x2 x, const float3x2 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float3x3 x,const float3x3 y,const float tol)610   static SIMD_CPPFUNC bool almost_equal_elements(const float3x3 x, const float3x3 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float3x4 x,const float3x4 y,const float tol)611   static SIMD_CPPFUNC bool almost_equal_elements(const float3x4 x, const float3x4 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float4x2 x,const float4x2 y,const float tol)612   static SIMD_CPPFUNC bool almost_equal_elements(const float4x2 x, const float4x2 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float4x3 x,const float4x3 y,const float tol)613   static SIMD_CPPFUNC bool almost_equal_elements(const float4x3 x, const float4x3 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const float4x4 x,const float4x4 y,const float tol)614   static SIMD_CPPFUNC bool almost_equal_elements(const float4x4 x, const float4x4 y, const float tol) { return ::simd_almost_equal_elements(x, y, tol); }
615 
almost_equal_elements_relative(const float2x2 x,const float2x2 y,const float tol)616   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float2x2 x, const float2x2 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float2x3 x,const float2x3 y,const float tol)617   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float2x3 x, const float2x3 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float2x4 x,const float2x4 y,const float tol)618   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float2x4 x, const float2x4 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float3x2 x,const float3x2 y,const float tol)619   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float3x2 x, const float3x2 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float3x3 x,const float3x3 y,const float tol)620   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float3x3 x, const float3x3 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float3x4 x,const float3x4 y,const float tol)621   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float3x4 x, const float3x4 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float4x2 x,const float4x2 y,const float tol)622   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float4x2 x, const float4x2 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float4x3 x,const float4x3 y,const float tol)623   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float4x3 x, const float4x3 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const float4x4 x,const float4x4 y,const float tol)624   static SIMD_CPPFUNC bool almost_equal_elements_relative(const float4x4 x, const float4x4 y, const float tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
625 
626   static SIMD_CPPFUNC double2x2 operator+(const double2x2 x, const double2x2 y) { return double2x2(::simd_linear_combination(1, x, 1, y)); }
627   static SIMD_CPPFUNC double2x3 operator+(const double2x3 x, const double2x3 y) { return double2x3(::simd_linear_combination(1, x, 1, y)); }
628   static SIMD_CPPFUNC double2x4 operator+(const double2x4 x, const double2x4 y) { return double2x4(::simd_linear_combination(1, x, 1, y)); }
629   static SIMD_CPPFUNC double3x2 operator+(const double3x2 x, const double3x2 y) { return double3x2(::simd_linear_combination(1, x, 1, y)); }
630   static SIMD_CPPFUNC double3x3 operator+(const double3x3 x, const double3x3 y) { return double3x3(::simd_linear_combination(1, x, 1, y)); }
631   static SIMD_CPPFUNC double3x4 operator+(const double3x4 x, const double3x4 y) { return double3x4(::simd_linear_combination(1, x, 1, y)); }
632   static SIMD_CPPFUNC double4x2 operator+(const double4x2 x, const double4x2 y) { return double4x2(::simd_linear_combination(1, x, 1, y)); }
633   static SIMD_CPPFUNC double4x3 operator+(const double4x3 x, const double4x3 y) { return double4x3(::simd_linear_combination(1, x, 1, y)); }
634   static SIMD_CPPFUNC double4x4 operator+(const double4x4 x, const double4x4 y) { return double4x4(::simd_linear_combination(1, x, 1, y)); }
635 
636   static SIMD_CPPFUNC double2x2 operator-(const double2x2 x, const double2x2 y) { return double2x2(::simd_linear_combination(1, x, -1, y)); }
637   static SIMD_CPPFUNC double2x3 operator-(const double2x3 x, const double2x3 y) { return double2x3(::simd_linear_combination(1, x, -1, y)); }
638   static SIMD_CPPFUNC double2x4 operator-(const double2x4 x, const double2x4 y) { return double2x4(::simd_linear_combination(1, x, -1, y)); }
639   static SIMD_CPPFUNC double3x2 operator-(const double3x2 x, const double3x2 y) { return double3x2(::simd_linear_combination(1, x, -1, y)); }
640   static SIMD_CPPFUNC double3x3 operator-(const double3x3 x, const double3x3 y) { return double3x3(::simd_linear_combination(1, x, -1, y)); }
641   static SIMD_CPPFUNC double3x4 operator-(const double3x4 x, const double3x4 y) { return double3x4(::simd_linear_combination(1, x, -1, y)); }
642   static SIMD_CPPFUNC double4x2 operator-(const double4x2 x, const double4x2 y) { return double4x2(::simd_linear_combination(1, x, -1, y)); }
643   static SIMD_CPPFUNC double4x3 operator-(const double4x3 x, const double4x3 y) { return double4x3(::simd_linear_combination(1, x, -1, y)); }
644   static SIMD_CPPFUNC double4x4 operator-(const double4x4 x, const double4x4 y) { return double4x4(::simd_linear_combination(1, x, -1, y)); }
645 
646   static SIMD_CPPFUNC double2x2& operator+=(double2x2& x, const double2x2 y) { x = x + y; return x; }
647   static SIMD_CPPFUNC double2x3& operator+=(double2x3& x, const double2x3 y) { x = x + y; return x; }
648   static SIMD_CPPFUNC double2x4& operator+=(double2x4& x, const double2x4 y) { x = x + y; return x; }
649   static SIMD_CPPFUNC double3x2& operator+=(double3x2& x, const double3x2 y) { x = x + y; return x; }
650   static SIMD_CPPFUNC double3x3& operator+=(double3x3& x, const double3x3 y) { x = x + y; return x; }
651   static SIMD_CPPFUNC double3x4& operator+=(double3x4& x, const double3x4 y) { x = x + y; return x; }
652   static SIMD_CPPFUNC double4x2& operator+=(double4x2& x, const double4x2 y) { x = x + y; return x; }
653   static SIMD_CPPFUNC double4x3& operator+=(double4x3& x, const double4x3 y) { x = x + y; return x; }
654   static SIMD_CPPFUNC double4x4& operator+=(double4x4& x, const double4x4 y) { x = x + y; return x; }
655 
656   static SIMD_CPPFUNC double2x2& operator-=(double2x2& x, const double2x2 y) { x = x - y; return x; }
657   static SIMD_CPPFUNC double2x3& operator-=(double2x3& x, const double2x3 y) { x = x - y; return x; }
658   static SIMD_CPPFUNC double2x4& operator-=(double2x4& x, const double2x4 y) { x = x - y; return x; }
659   static SIMD_CPPFUNC double3x2& operator-=(double3x2& x, const double3x2 y) { x = x - y; return x; }
660   static SIMD_CPPFUNC double3x3& operator-=(double3x3& x, const double3x3 y) { x = x - y; return x; }
661   static SIMD_CPPFUNC double3x4& operator-=(double3x4& x, const double3x4 y) { x = x - y; return x; }
662   static SIMD_CPPFUNC double4x2& operator-=(double4x2& x, const double4x2 y) { x = x - y; return x; }
663   static SIMD_CPPFUNC double4x3& operator-=(double4x3& x, const double4x3 y) { x = x - y; return x; }
664   static SIMD_CPPFUNC double4x4& operator-=(double4x4& x, const double4x4 y) { x = x - y; return x; }
665 
transpose(const double2x2 x)666   static SIMD_CPPFUNC double2x2 transpose(const double2x2 x) { return ::simd_transpose(x); }
transpose(const double3x2 x)667   static SIMD_CPPFUNC double2x3 transpose(const double3x2 x) { return ::simd_transpose(x); }
transpose(const double4x2 x)668   static SIMD_CPPFUNC double2x4 transpose(const double4x2 x) { return ::simd_transpose(x); }
transpose(const double2x3 x)669   static SIMD_CPPFUNC double3x2 transpose(const double2x3 x) { return ::simd_transpose(x); }
transpose(const double3x3 x)670   static SIMD_CPPFUNC double3x3 transpose(const double3x3 x) { return ::simd_transpose(x); }
transpose(const double4x3 x)671   static SIMD_CPPFUNC double3x4 transpose(const double4x3 x) { return ::simd_transpose(x); }
transpose(const double2x4 x)672   static SIMD_CPPFUNC double4x2 transpose(const double2x4 x) { return ::simd_transpose(x); }
transpose(const double3x4 x)673   static SIMD_CPPFUNC double4x3 transpose(const double3x4 x) { return ::simd_transpose(x); }
transpose(const double4x4 x)674   static SIMD_CPPFUNC double4x4 transpose(const double4x4 x) { return ::simd_transpose(x); }
675 
trace(const double2x2 x)676   static SIMD_CPPFUNC double trace(const double2x2 x) { return ::simd_trace(x); }
trace(const double3x3 x)677   static SIMD_CPPFUNC double trace(const double3x3 x) { return ::simd_trace(x); }
trace(const double4x4 x)678   static SIMD_CPPFUNC double trace(const double4x4 x) { return ::simd_trace(x); }
679 
determinant(const double2x2 x)680   static SIMD_CPPFUNC double determinant(const double2x2 x) { return ::simd_determinant(x); }
determinant(const double3x3 x)681   static SIMD_CPPFUNC double determinant(const double3x3 x) { return ::simd_determinant(x); }
determinant(const double4x4 x)682   static SIMD_CPPFUNC double determinant(const double4x4 x) { return ::simd_determinant(x); }
683 
684 #pragma clang diagnostic push
685 #pragma clang diagnostic ignored "-Wgcc-compat"
inverse(const double2x2 x)686   static SIMD_CPPFUNC double2x2 inverse(const double2x2 x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) { return ::simd_inverse(x); }
inverse(const double3x3 x)687   static SIMD_CPPFUNC double3x3 inverse(const double3x3 x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) { return ::simd_inverse(x); }
inverse(const double4x4 x)688   static SIMD_CPPFUNC double4x4 inverse(const double4x4 x) __API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) { return ::simd_inverse(x); }
689 #pragma clang diagnostic pop
690 
691   static SIMD_CPPFUNC double2x2 operator*(const double a, const double2x2 x) { return ::simd_mul(a, x); }
692   static SIMD_CPPFUNC double2x3 operator*(const double a, const double2x3 x) { return ::simd_mul(a, x); }
693   static SIMD_CPPFUNC double2x4 operator*(const double a, const double2x4 x) { return ::simd_mul(a, x); }
694   static SIMD_CPPFUNC double3x2 operator*(const double a, const double3x2 x) { return ::simd_mul(a, x); }
695   static SIMD_CPPFUNC double3x3 operator*(const double a, const double3x3 x) { return ::simd_mul(a, x); }
696   static SIMD_CPPFUNC double3x4 operator*(const double a, const double3x4 x) { return ::simd_mul(a, x); }
697   static SIMD_CPPFUNC double4x2 operator*(const double a, const double4x2 x) { return ::simd_mul(a, x); }
698   static SIMD_CPPFUNC double4x3 operator*(const double a, const double4x3 x) { return ::simd_mul(a, x); }
699   static SIMD_CPPFUNC double4x4 operator*(const double a, const double4x4 x) { return ::simd_mul(a, x); }
700   static SIMD_CPPFUNC double2x2 operator*(const double2x2 x, const double a) { return ::simd_mul(a, x); }
701   static SIMD_CPPFUNC double2x3 operator*(const double2x3 x, const double a) { return ::simd_mul(a, x); }
702   static SIMD_CPPFUNC double2x4 operator*(const double2x4 x, const double a) { return ::simd_mul(a, x); }
703   static SIMD_CPPFUNC double3x2 operator*(const double3x2 x, const double a) { return ::simd_mul(a, x); }
704   static SIMD_CPPFUNC double3x3 operator*(const double3x3 x, const double a) { return ::simd_mul(a, x); }
705   static SIMD_CPPFUNC double3x4 operator*(const double3x4 x, const double a) { return ::simd_mul(a, x); }
706   static SIMD_CPPFUNC double4x2 operator*(const double4x2 x, const double a) { return ::simd_mul(a, x); }
707   static SIMD_CPPFUNC double4x3 operator*(const double4x3 x, const double a) { return ::simd_mul(a, x); }
708   static SIMD_CPPFUNC double4x4 operator*(const double4x4 x, const double a) { return ::simd_mul(a, x); }
709   static SIMD_CPPFUNC double2x2& operator*=(double2x2& x, const double a) { x = ::simd_mul(a, x); return x; }
710   static SIMD_CPPFUNC double2x3& operator*=(double2x3& x, const double a) { x = ::simd_mul(a, x); return x; }
711   static SIMD_CPPFUNC double2x4& operator*=(double2x4& x, const double a) { x = ::simd_mul(a, x); return x; }
712   static SIMD_CPPFUNC double3x2& operator*=(double3x2& x, const double a) { x = ::simd_mul(a, x); return x; }
713   static SIMD_CPPFUNC double3x3& operator*=(double3x3& x, const double a) { x = ::simd_mul(a, x); return x; }
714   static SIMD_CPPFUNC double3x4& operator*=(double3x4& x, const double a) { x = ::simd_mul(a, x); return x; }
715   static SIMD_CPPFUNC double4x2& operator*=(double4x2& x, const double a) { x = ::simd_mul(a, x); return x; }
716   static SIMD_CPPFUNC double4x3& operator*=(double4x3& x, const double a) { x = ::simd_mul(a, x); return x; }
717   static SIMD_CPPFUNC double4x4& operator*=(double4x4& x, const double a) { x = ::simd_mul(a, x); return x; }
718 
719   static SIMD_CPPFUNC double2 operator*(const double2 x, const double2x2 y) { return ::simd_mul(x, y); }
720   static SIMD_CPPFUNC double3 operator*(const double2 x, const double3x2 y) { return ::simd_mul(x, y); }
721   static SIMD_CPPFUNC double4 operator*(const double2 x, const double4x2 y) { return ::simd_mul(x, y); }
722   static SIMD_CPPFUNC double2 operator*(const double3 x, const double2x3 y) { return ::simd_mul(x, y); }
723   static SIMD_CPPFUNC double3 operator*(const double3 x, const double3x3 y) { return ::simd_mul(x, y); }
724   static SIMD_CPPFUNC double4 operator*(const double3 x, const double4x3 y) { return ::simd_mul(x, y); }
725   static SIMD_CPPFUNC double2 operator*(const double4 x, const double2x4 y) { return ::simd_mul(x, y); }
726   static SIMD_CPPFUNC double3 operator*(const double4 x, const double3x4 y) { return ::simd_mul(x, y); }
727   static SIMD_CPPFUNC double4 operator*(const double4 x, const double4x4 y) { return ::simd_mul(x, y); }
728   static SIMD_CPPFUNC double2 operator*(const double2x2 x, const double2 y) { return ::simd_mul(x, y); }
729   static SIMD_CPPFUNC double2 operator*(const double3x2 x, const double3 y) { return ::simd_mul(x, y); }
730   static SIMD_CPPFUNC double2 operator*(const double4x2 x, const double4 y) { return ::simd_mul(x, y); }
731   static SIMD_CPPFUNC double3 operator*(const double2x3 x, const double2 y) { return ::simd_mul(x, y); }
732   static SIMD_CPPFUNC double3 operator*(const double3x3 x, const double3 y) { return ::simd_mul(x, y); }
733   static SIMD_CPPFUNC double3 operator*(const double4x3 x, const double4 y) { return ::simd_mul(x, y); }
734   static SIMD_CPPFUNC double4 operator*(const double2x4 x, const double2 y) { return ::simd_mul(x, y); }
735   static SIMD_CPPFUNC double4 operator*(const double3x4 x, const double3 y) { return ::simd_mul(x, y); }
736   static SIMD_CPPFUNC double4 operator*(const double4x4 x, const double4 y) { return ::simd_mul(x, y); }
737   static SIMD_CPPFUNC double2& operator*=(double2& x, const double2x2 y) { x = ::simd_mul(x, y); return x; }
738   static SIMD_CPPFUNC double3& operator*=(double3& x, const double3x3 y) { x = ::simd_mul(x, y); return x; }
739   static SIMD_CPPFUNC double4& operator*=(double4& x, const double4x4 y) { x = ::simd_mul(x, y); return x; }
740 
741   static SIMD_CPPFUNC double2x2 operator*(const double2x2 x, const double2x2 y) { return ::simd_mul(x, y); }
742   static SIMD_CPPFUNC double3x2 operator*(const double2x2 x, const double3x2 y) { return ::simd_mul(x, y); }
743   static SIMD_CPPFUNC double4x2 operator*(const double2x2 x, const double4x2 y) { return ::simd_mul(x, y); }
744   static SIMD_CPPFUNC double2x3 operator*(const double2x3 x, const double2x2 y) { return ::simd_mul(x, y); }
745   static SIMD_CPPFUNC double3x3 operator*(const double2x3 x, const double3x2 y) { return ::simd_mul(x, y); }
746   static SIMD_CPPFUNC double4x3 operator*(const double2x3 x, const double4x2 y) { return ::simd_mul(x, y); }
747   static SIMD_CPPFUNC double2x4 operator*(const double2x4 x, const double2x2 y) { return ::simd_mul(x, y); }
748   static SIMD_CPPFUNC double3x4 operator*(const double2x4 x, const double3x2 y) { return ::simd_mul(x, y); }
749   static SIMD_CPPFUNC double4x4 operator*(const double2x4 x, const double4x2 y) { return ::simd_mul(x, y); }
750   static SIMD_CPPFUNC double2x2 operator*(const double3x2 x, const double2x3 y) { return ::simd_mul(x, y); }
751   static SIMD_CPPFUNC double3x2 operator*(const double3x2 x, const double3x3 y) { return ::simd_mul(x, y); }
752   static SIMD_CPPFUNC double4x2 operator*(const double3x2 x, const double4x3 y) { return ::simd_mul(x, y); }
753   static SIMD_CPPFUNC double2x3 operator*(const double3x3 x, const double2x3 y) { return ::simd_mul(x, y); }
754   static SIMD_CPPFUNC double3x3 operator*(const double3x3 x, const double3x3 y) { return ::simd_mul(x, y); }
755   static SIMD_CPPFUNC double4x3 operator*(const double3x3 x, const double4x3 y) { return ::simd_mul(x, y); }
756   static SIMD_CPPFUNC double2x4 operator*(const double3x4 x, const double2x3 y) { return ::simd_mul(x, y); }
757   static SIMD_CPPFUNC double3x4 operator*(const double3x4 x, const double3x3 y) { return ::simd_mul(x, y); }
758   static SIMD_CPPFUNC double4x4 operator*(const double3x4 x, const double4x3 y) { return ::simd_mul(x, y); }
759   static SIMD_CPPFUNC double2x2 operator*(const double4x2 x, const double2x4 y) { return ::simd_mul(x, y); }
760   static SIMD_CPPFUNC double3x2 operator*(const double4x2 x, const double3x4 y) { return ::simd_mul(x, y); }
761   static SIMD_CPPFUNC double4x2 operator*(const double4x2 x, const double4x4 y) { return ::simd_mul(x, y); }
762   static SIMD_CPPFUNC double2x3 operator*(const double4x3 x, const double2x4 y) { return ::simd_mul(x, y); }
763   static SIMD_CPPFUNC double3x3 operator*(const double4x3 x, const double3x4 y) { return ::simd_mul(x, y); }
764   static SIMD_CPPFUNC double4x3 operator*(const double4x3 x, const double4x4 y) { return ::simd_mul(x, y); }
765   static SIMD_CPPFUNC double2x4 operator*(const double4x4 x, const double2x4 y) { return ::simd_mul(x, y); }
766   static SIMD_CPPFUNC double3x4 operator*(const double4x4 x, const double3x4 y) { return ::simd_mul(x, y); }
767   static SIMD_CPPFUNC double4x4 operator*(const double4x4 x, const double4x4 y) { return ::simd_mul(x, y); }
768   static SIMD_CPPFUNC double2x2& operator*=(double2x2& x, const double2x2 y) { x = ::simd_mul(x, y); return x; }
769   static SIMD_CPPFUNC double2x3& operator*=(double2x3& x, const double2x2 y) { x = ::simd_mul(x, y); return x; }
770   static SIMD_CPPFUNC double2x4& operator*=(double2x4& x, const double2x2 y) { x = ::simd_mul(x, y); return x; }
771   static SIMD_CPPFUNC double3x2& operator*=(double3x2& x, const double3x3 y) { x = ::simd_mul(x, y); return x; }
772   static SIMD_CPPFUNC double3x3& operator*=(double3x3& x, const double3x3 y) { x = ::simd_mul(x, y); return x; }
773   static SIMD_CPPFUNC double3x4& operator*=(double3x4& x, const double3x3 y) { x = ::simd_mul(x, y); return x; }
774   static SIMD_CPPFUNC double4x2& operator*=(double4x2& x, const double4x4 y) { x = ::simd_mul(x, y); return x; }
775   static SIMD_CPPFUNC double4x3& operator*=(double4x3& x, const double4x4 y) { x = ::simd_mul(x, y); return x; }
776   static SIMD_CPPFUNC double4x4& operator*=(double4x4& x, const double4x4 y) { x = ::simd_mul(x, y); return x; }
777 
778   static SIMD_CPPFUNC bool operator==(const double2x2& x, const double2x2& y) { return ::simd_equal(x, y); }
779   static SIMD_CPPFUNC bool operator==(const double2x3& x, const double2x3& y) { return ::simd_equal(x, y); }
780   static SIMD_CPPFUNC bool operator==(const double2x4& x, const double2x4& y) { return ::simd_equal(x, y); }
781   static SIMD_CPPFUNC bool operator==(const double3x2& x, const double3x2& y) { return ::simd_equal(x, y); }
782   static SIMD_CPPFUNC bool operator==(const double3x3& x, const double3x3& y) { return ::simd_equal(x, y); }
783   static SIMD_CPPFUNC bool operator==(const double3x4& x, const double3x4& y) { return ::simd_equal(x, y); }
784   static SIMD_CPPFUNC bool operator==(const double4x2& x, const double4x2& y) { return ::simd_equal(x, y); }
785   static SIMD_CPPFUNC bool operator==(const double4x3& x, const double4x3& y) { return ::simd_equal(x, y); }
786   static SIMD_CPPFUNC bool operator==(const double4x4& x, const double4x4& y) { return ::simd_equal(x, y); }
787 
788   static SIMD_CPPFUNC bool operator!=(const double2x2& x, const double2x2& y) { return !(x == y); }
789   static SIMD_CPPFUNC bool operator!=(const double2x3& x, const double2x3& y) { return !(x == y); }
790   static SIMD_CPPFUNC bool operator!=(const double2x4& x, const double2x4& y) { return !(x == y); }
791   static SIMD_CPPFUNC bool operator!=(const double3x2& x, const double3x2& y) { return !(x == y); }
792   static SIMD_CPPFUNC bool operator!=(const double3x3& x, const double3x3& y) { return !(x == y); }
793   static SIMD_CPPFUNC bool operator!=(const double3x4& x, const double3x4& y) { return !(x == y); }
794   static SIMD_CPPFUNC bool operator!=(const double4x2& x, const double4x2& y) { return !(x == y); }
795   static SIMD_CPPFUNC bool operator!=(const double4x3& x, const double4x3& y) { return !(x == y); }
796   static SIMD_CPPFUNC bool operator!=(const double4x4& x, const double4x4& y) { return !(x == y); }
797 
almost_equal_elements(const double2x2 x,const double2x2 y,const double tol)798   static SIMD_CPPFUNC bool almost_equal_elements(const double2x2 x, const double2x2 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double2x3 x,const double2x3 y,const double tol)799   static SIMD_CPPFUNC bool almost_equal_elements(const double2x3 x, const double2x3 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double2x4 x,const double2x4 y,const double tol)800   static SIMD_CPPFUNC bool almost_equal_elements(const double2x4 x, const double2x4 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double3x2 x,const double3x2 y,const double tol)801   static SIMD_CPPFUNC bool almost_equal_elements(const double3x2 x, const double3x2 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double3x3 x,const double3x3 y,const double tol)802   static SIMD_CPPFUNC bool almost_equal_elements(const double3x3 x, const double3x3 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double3x4 x,const double3x4 y,const double tol)803   static SIMD_CPPFUNC bool almost_equal_elements(const double3x4 x, const double3x4 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double4x2 x,const double4x2 y,const double tol)804   static SIMD_CPPFUNC bool almost_equal_elements(const double4x2 x, const double4x2 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double4x3 x,const double4x3 y,const double tol)805   static SIMD_CPPFUNC bool almost_equal_elements(const double4x3 x, const double4x3 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
almost_equal_elements(const double4x4 x,const double4x4 y,const double tol)806   static SIMD_CPPFUNC bool almost_equal_elements(const double4x4 x, const double4x4 y, const double tol) { return ::simd_almost_equal_elements(x, y, tol); }
807 
almost_equal_elements_relative(const double2x2 x,const double2x2 y,const double tol)808   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double2x2 x, const double2x2 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double2x3 x,const double2x3 y,const double tol)809   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double2x3 x, const double2x3 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double2x4 x,const double2x4 y,const double tol)810   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double2x4 x, const double2x4 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double3x2 x,const double3x2 y,const double tol)811   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double3x2 x, const double3x2 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double3x3 x,const double3x3 y,const double tol)812   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double3x3 x, const double3x3 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double3x4 x,const double3x4 y,const double tol)813   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double3x4 x, const double3x4 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double4x2 x,const double4x2 y,const double tol)814   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double4x2 x, const double4x2 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double4x3 x,const double4x3 y,const double tol)815   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double4x3 x, const double4x3 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
almost_equal_elements_relative(const double4x4 x,const double4x4 y,const double tol)816   static SIMD_CPPFUNC bool almost_equal_elements_relative(const double4x4 x, const double4x4 y, const double tol) { return ::simd_almost_equal_elements_relative(x, y, tol); }
817 }
818 
819 extern "C" {
820 #endif /* __cplusplus */
821 
822 #pragma mark - Implementation
823 
simd_diagonal_matrix(simd_float2 __x)824 static  simd_float2x2 SIMD_CFUNC simd_diagonal_matrix(simd_float2  __x) {  simd_float2x2 __r = { .columns[0] = {__x.x,0}, .columns[1] = {0,__x.y} }; return __r; }
simd_diagonal_matrix(simd_double2 __x)825 static simd_double2x2 SIMD_CFUNC simd_diagonal_matrix(simd_double2 __x) { simd_double2x2 __r = { .columns[0] = {__x.x,0}, .columns[1] = {0,__x.y} }; return __r; }
simd_diagonal_matrix(simd_float3 __x)826 static  simd_float3x3 SIMD_CFUNC simd_diagonal_matrix(simd_float3  __x) {  simd_float3x3 __r = { .columns[0] = {__x.x,0,0}, .columns[1] = {0,__x.y,0}, .columns[2] = {0,0,__x.z} }; return __r; }
simd_diagonal_matrix(simd_double3 __x)827 static simd_double3x3 SIMD_CFUNC simd_diagonal_matrix(simd_double3 __x) { simd_double3x3 __r = { .columns[0] = {__x.x,0,0}, .columns[1] = {0,__x.y,0}, .columns[2] = {0,0,__x.z} }; return __r; }
simd_diagonal_matrix(simd_float4 __x)828 static  simd_float4x4 SIMD_CFUNC simd_diagonal_matrix(simd_float4  __x) {  simd_float4x4 __r = { .columns[0] = {__x.x,0,0,0}, .columns[1] = {0,__x.y,0,0}, .columns[2] = {0,0,__x.z,0}, .columns[3] = {0,0,0,__x.w} }; return __r; }
simd_diagonal_matrix(simd_double4 __x)829 static simd_double4x4 SIMD_CFUNC simd_diagonal_matrix(simd_double4 __x) { simd_double4x4 __r = { .columns[0] = {__x.x,0,0,0}, .columns[1] = {0,__x.y,0,0}, .columns[2] = {0,0,__x.z,0}, .columns[3] = {0,0,0,__x.w} }; return __r; }
830 
simd_matrix(simd_float2 col0,simd_float2 col1)831 static  simd_float2x2 SIMD_CFUNC simd_matrix(simd_float2  col0, simd_float2  col1) {  simd_float2x2 __r = { .columns[0] = col0, .columns[1] = col1 }; return __r; }
simd_matrix(simd_float3 col0,simd_float3 col1)832 static  simd_float2x3 SIMD_CFUNC simd_matrix(simd_float3  col0, simd_float3  col1) {  simd_float2x3 __r = { .columns[0] = col0, .columns[1] = col1 }; return __r; }
simd_matrix(simd_float4 col0,simd_float4 col1)833 static  simd_float2x4 SIMD_CFUNC simd_matrix(simd_float4  col0, simd_float4  col1) {  simd_float2x4 __r = { .columns[0] = col0, .columns[1] = col1 }; return __r; }
simd_matrix(simd_double2 col0,simd_double2 col1)834 static simd_double2x2 SIMD_CFUNC simd_matrix(simd_double2 col0, simd_double2 col1) { simd_double2x2 __r = { .columns[0] = col0, .columns[1] = col1 }; return __r; }
simd_matrix(simd_double3 col0,simd_double3 col1)835 static simd_double2x3 SIMD_CFUNC simd_matrix(simd_double3 col0, simd_double3 col1) { simd_double2x3 __r = { .columns[0] = col0, .columns[1] = col1 }; return __r; }
simd_matrix(simd_double4 col0,simd_double4 col1)836 static simd_double2x4 SIMD_CFUNC simd_matrix(simd_double4 col0, simd_double4 col1) { simd_double2x4 __r = { .columns[0] = col0, .columns[1] = col1 }; return __r; }
simd_matrix(simd_float2 col0,simd_float2 col1,simd_float2 col2)837 static  simd_float3x2 SIMD_CFUNC simd_matrix(simd_float2  col0, simd_float2  col1, simd_float2  col2) {  simd_float3x2 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2 }; return __r; }
simd_matrix(simd_float3 col0,simd_float3 col1,simd_float3 col2)838 static  simd_float3x3 SIMD_CFUNC simd_matrix(simd_float3  col0, simd_float3  col1, simd_float3  col2) {  simd_float3x3 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2 }; return __r; }
simd_matrix(simd_float4 col0,simd_float4 col1,simd_float4 col2)839 static  simd_float3x4 SIMD_CFUNC simd_matrix(simd_float4  col0, simd_float4  col1, simd_float4  col2) {  simd_float3x4 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2 }; return __r; }
simd_matrix(simd_double2 col0,simd_double2 col1,simd_double2 col2)840 static simd_double3x2 SIMD_CFUNC simd_matrix(simd_double2 col0, simd_double2 col1, simd_double2 col2) { simd_double3x2 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2 }; return __r; }
simd_matrix(simd_double3 col0,simd_double3 col1,simd_double3 col2)841 static simd_double3x3 SIMD_CFUNC simd_matrix(simd_double3 col0, simd_double3 col1, simd_double3 col2) { simd_double3x3 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2 }; return __r; }
simd_matrix(simd_double4 col0,simd_double4 col1,simd_double4 col2)842 static simd_double3x4 SIMD_CFUNC simd_matrix(simd_double4 col0, simd_double4 col1, simd_double4 col2) { simd_double3x4 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2 }; return __r; }
simd_matrix(simd_float2 col0,simd_float2 col1,simd_float2 col2,simd_float2 col3)843 static  simd_float4x2 SIMD_CFUNC simd_matrix(simd_float2  col0, simd_float2  col1, simd_float2  col2, simd_float2  col3) {  simd_float4x2 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2, .columns[3] = col3 }; return __r; }
simd_matrix(simd_float3 col0,simd_float3 col1,simd_float3 col2,simd_float3 col3)844 static  simd_float4x3 SIMD_CFUNC simd_matrix(simd_float3  col0, simd_float3  col1, simd_float3  col2, simd_float3  col3) {  simd_float4x3 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2, .columns[3] = col3 }; return __r; }
simd_matrix(simd_float4 col0,simd_float4 col1,simd_float4 col2,simd_float4 col3)845 static  simd_float4x4 SIMD_CFUNC simd_matrix(simd_float4  col0, simd_float4  col1, simd_float4  col2, simd_float4  col3) {  simd_float4x4 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2, .columns[3] = col3 }; return __r; }
simd_matrix(simd_double2 col0,simd_double2 col1,simd_double2 col2,simd_double2 col3)846 static simd_double4x2 SIMD_CFUNC simd_matrix(simd_double2 col0, simd_double2 col1, simd_double2 col2, simd_double2 col3) { simd_double4x2 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2, .columns[3] = col3 }; return __r; }
simd_matrix(simd_double3 col0,simd_double3 col1,simd_double3 col2,simd_double3 col3)847 static simd_double4x3 SIMD_CFUNC simd_matrix(simd_double3 col0, simd_double3 col1, simd_double3 col2, simd_double3 col3) { simd_double4x3 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2, .columns[3] = col3 }; return __r; }
simd_matrix(simd_double4 col0,simd_double4 col1,simd_double4 col2,simd_double4 col3)848 static simd_double4x4 SIMD_CFUNC simd_matrix(simd_double4 col0, simd_double4 col1, simd_double4 col2, simd_double4 col3) { simd_double4x4 __r = { .columns[0] = col0, .columns[1] = col1, .columns[2] = col2, .columns[3] = col3 }; return __r; }
849 
simd_matrix_from_rows(simd_float2 row0,simd_float2 row1)850 static  simd_float2x2 SIMD_CFUNC simd_matrix_from_rows(simd_float2  row0, simd_float2  row1) { return simd_transpose(simd_matrix(row0, row1)); }
simd_matrix_from_rows(simd_float3 row0,simd_float3 row1)851 static  simd_float3x2 SIMD_CFUNC simd_matrix_from_rows(simd_float3  row0, simd_float3  row1) { return simd_transpose(simd_matrix(row0, row1)); }
simd_matrix_from_rows(simd_float4 row0,simd_float4 row1)852 static  simd_float4x2 SIMD_CFUNC simd_matrix_from_rows(simd_float4  row0, simd_float4  row1) { return simd_transpose(simd_matrix(row0, row1)); }
simd_matrix_from_rows(simd_double2 row0,simd_double2 row1)853 static simd_double2x2 SIMD_CFUNC simd_matrix_from_rows(simd_double2 row0, simd_double2 row1) { return simd_transpose(simd_matrix(row0, row1)); }
simd_matrix_from_rows(simd_double3 row0,simd_double3 row1)854 static simd_double3x2 SIMD_CFUNC simd_matrix_from_rows(simd_double3 row0, simd_double3 row1) { return simd_transpose(simd_matrix(row0, row1)); }
simd_matrix_from_rows(simd_double4 row0,simd_double4 row1)855 static simd_double4x2 SIMD_CFUNC simd_matrix_from_rows(simd_double4 row0, simd_double4 row1) { return simd_transpose(simd_matrix(row0, row1)); }
simd_matrix_from_rows(simd_float2 row0,simd_float2 row1,simd_float2 row2)856 static  simd_float2x3 SIMD_CFUNC simd_matrix_from_rows(simd_float2  row0, simd_float2  row1, simd_float2  row2) { return simd_transpose(simd_matrix(row0, row1, row2)); }
simd_matrix_from_rows(simd_float3 row0,simd_float3 row1,simd_float3 row2)857 static  simd_float3x3 SIMD_CFUNC simd_matrix_from_rows(simd_float3  row0, simd_float3  row1, simd_float3  row2) { return simd_transpose(simd_matrix(row0, row1, row2)); }
simd_matrix_from_rows(simd_float4 row0,simd_float4 row1,simd_float4 row2)858 static  simd_float4x3 SIMD_CFUNC simd_matrix_from_rows(simd_float4  row0, simd_float4  row1, simd_float4  row2) { return simd_transpose(simd_matrix(row0, row1, row2)); }
simd_matrix_from_rows(simd_double2 row0,simd_double2 row1,simd_double2 row2)859 static simd_double2x3 SIMD_CFUNC simd_matrix_from_rows(simd_double2 row0, simd_double2 row1, simd_double2 row2) { return simd_transpose(simd_matrix(row0, row1, row2)); }
simd_matrix_from_rows(simd_double3 row0,simd_double3 row1,simd_double3 row2)860 static simd_double3x3 SIMD_CFUNC simd_matrix_from_rows(simd_double3 row0, simd_double3 row1, simd_double3 row2) { return simd_transpose(simd_matrix(row0, row1, row2)); }
simd_matrix_from_rows(simd_double4 row0,simd_double4 row1,simd_double4 row2)861 static simd_double4x3 SIMD_CFUNC simd_matrix_from_rows(simd_double4 row0, simd_double4 row1, simd_double4 row2) { return simd_transpose(simd_matrix(row0, row1, row2)); }
simd_matrix_from_rows(simd_float2 row0,simd_float2 row1,simd_float2 row2,simd_float2 row3)862 static  simd_float2x4 SIMD_CFUNC simd_matrix_from_rows(simd_float2  row0, simd_float2  row1, simd_float2  row2, simd_float2  row3) { return simd_transpose(simd_matrix(row0, row1, row2, row3)); }
simd_matrix_from_rows(simd_float3 row0,simd_float3 row1,simd_float3 row2,simd_float3 row3)863 static  simd_float3x4 SIMD_CFUNC simd_matrix_from_rows(simd_float3  row0, simd_float3  row1, simd_float3  row2, simd_float3  row3) { return simd_transpose(simd_matrix(row0, row1, row2, row3)); }
simd_matrix_from_rows(simd_float4 row0,simd_float4 row1,simd_float4 row2,simd_float4 row3)864 static  simd_float4x4 SIMD_CFUNC simd_matrix_from_rows(simd_float4  row0, simd_float4  row1, simd_float4  row2, simd_float4  row3) { return simd_transpose(simd_matrix(row0, row1, row2, row3)); }
simd_matrix_from_rows(simd_double2 row0,simd_double2 row1,simd_double2 row2,simd_double2 row3)865 static simd_double2x4 SIMD_CFUNC simd_matrix_from_rows(simd_double2 row0, simd_double2 row1, simd_double2 row2, simd_double2 row3) { return simd_transpose(simd_matrix(row0, row1, row2, row3)); }
simd_matrix_from_rows(simd_double3 row0,simd_double3 row1,simd_double3 row2,simd_double3 row3)866 static simd_double3x4 SIMD_CFUNC simd_matrix_from_rows(simd_double3 row0, simd_double3 row1, simd_double3 row2, simd_double3 row3) { return simd_transpose(simd_matrix(row0, row1, row2, row3)); }
simd_matrix_from_rows(simd_double4 row0,simd_double4 row1,simd_double4 row2,simd_double4 row3)867 static simd_double4x4 SIMD_CFUNC simd_matrix_from_rows(simd_double4 row0, simd_double4 row1, simd_double4 row2, simd_double4 row3) { return simd_transpose(simd_matrix(row0, row1, row2, row3)); }
868 
simd_matrix3x3(simd_quatf q)869 static  simd_float3x3 SIMD_NOINLINE simd_matrix3x3(simd_quatf q) {
870   simd_float4x4 r = simd_matrix4x4(q);
871   return (simd_float3x3){ r.columns[0].xyz, r.columns[1].xyz, r.columns[2].xyz };
872 }
873 
simd_matrix4x4(simd_quatf q)874 static  simd_float4x4 SIMD_NOINLINE simd_matrix4x4(simd_quatf q) {
875   simd_float4 v = q.vector;
876   simd_float4x4 r = {
877     .columns[0] = { 1 - 2*(v.y*v.y + v.z*v.z),
878                         2*(v.x*v.y + v.z*v.w),
879                         2*(v.x*v.z - v.y*v.w), 0 },
880     .columns[1] = {     2*(v.x*v.y - v.z*v.w),
881                     1 - 2*(v.z*v.z + v.x*v.x),
882                         2*(v.y*v.z + v.x*v.w), 0 },
883     .columns[2] = {     2*(v.z*v.x + v.y*v.w),
884                         2*(v.y*v.z - v.x*v.w),
885                     1 - 2*(v.y*v.y + v.x*v.x), 0 },
886     .columns[3] = { 0, 0, 0, 1 }
887   };
888   return r;
889 }
890 
simd_matrix3x3(simd_quatd q)891 static simd_double3x3 SIMD_NOINLINE simd_matrix3x3(simd_quatd q) {
892   simd_double4x4 r = simd_matrix4x4(q);
893   return (simd_double3x3){ r.columns[0].xyz, r.columns[1].xyz, r.columns[2].xyz };
894 }
895 
simd_matrix4x4(simd_quatd q)896 static simd_double4x4 SIMD_NOINLINE simd_matrix4x4(simd_quatd q) {
897   simd_double4 v = q.vector;
898   simd_double4x4 r = {
899     .columns[0] = { 1 - 2*(v.y*v.y + v.z*v.z),
900                         2*(v.x*v.y + v.z*v.w),
901                         2*(v.x*v.z - v.y*v.w), 0 },
902     .columns[1] = {     2*(v.x*v.y - v.z*v.w),
903                     1 - 2*(v.z*v.z + v.x*v.x),
904                         2*(v.y*v.z + v.x*v.w), 0 },
905     .columns[2] = {     2*(v.z*v.x + v.y*v.w),
906                         2*(v.y*v.z - v.x*v.w),
907                     1 - 2*(v.y*v.y + v.x*v.x), 0 },
908     .columns[3] = { 0, 0, 0, 1 }
909   };
910   return r;
911 }
912 
matrix_scale(float __a,simd_float2x2 __x)913 static  simd_float2x2 SIMD_CFUNC matrix_scale(float  __a,  simd_float2x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
matrix_scale(float __a,simd_float3x2 __x)914 static  simd_float3x2 SIMD_CFUNC matrix_scale(float  __a,  simd_float3x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
matrix_scale(float __a,simd_float4x2 __x)915 static  simd_float4x2 SIMD_CFUNC matrix_scale(float  __a,  simd_float4x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
matrix_scale(float __a,simd_float2x3 __x)916 static  simd_float2x3 SIMD_CFUNC matrix_scale(float  __a,  simd_float2x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
matrix_scale(float __a,simd_float3x3 __x)917 static  simd_float3x3 SIMD_CFUNC matrix_scale(float  __a,  simd_float3x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
matrix_scale(float __a,simd_float4x3 __x)918 static  simd_float4x3 SIMD_CFUNC matrix_scale(float  __a,  simd_float4x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
matrix_scale(float __a,simd_float2x4 __x)919 static  simd_float2x4 SIMD_CFUNC matrix_scale(float  __a,  simd_float2x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
matrix_scale(float __a,simd_float3x4 __x)920 static  simd_float3x4 SIMD_CFUNC matrix_scale(float  __a,  simd_float3x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
matrix_scale(float __a,simd_float4x4 __x)921 static  simd_float4x4 SIMD_CFUNC matrix_scale(float  __a,  simd_float4x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
matrix_scale(double __a,simd_double2x2 __x)922 static simd_double2x2 SIMD_CFUNC matrix_scale(double __a, simd_double2x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
matrix_scale(double __a,simd_double3x2 __x)923 static simd_double3x2 SIMD_CFUNC matrix_scale(double __a, simd_double3x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
matrix_scale(double __a,simd_double4x2 __x)924 static simd_double4x2 SIMD_CFUNC matrix_scale(double __a, simd_double4x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
matrix_scale(double __a,simd_double2x3 __x)925 static simd_double2x3 SIMD_CFUNC matrix_scale(double __a, simd_double2x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
matrix_scale(double __a,simd_double3x3 __x)926 static simd_double3x3 SIMD_CFUNC matrix_scale(double __a, simd_double3x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
matrix_scale(double __a,simd_double4x3 __x)927 static simd_double4x3 SIMD_CFUNC matrix_scale(double __a, simd_double4x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
matrix_scale(double __a,simd_double2x4 __x)928 static simd_double2x4 SIMD_CFUNC matrix_scale(double __a, simd_double2x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
matrix_scale(double __a,simd_double3x4 __x)929 static simd_double3x4 SIMD_CFUNC matrix_scale(double __a, simd_double3x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
matrix_scale(double __a,simd_double4x4 __x)930 static simd_double4x4 SIMD_CFUNC matrix_scale(double __a, simd_double4x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
931 
simd_mul(float __a,simd_float2x2 __x)932 static  simd_float2x2 SIMD_CFUNC simd_mul(float  __a,  simd_float2x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
simd_mul(float __a,simd_float3x2 __x)933 static  simd_float3x2 SIMD_CFUNC simd_mul(float  __a,  simd_float3x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
simd_mul(float __a,simd_float4x2 __x)934 static  simd_float4x2 SIMD_CFUNC simd_mul(float  __a,  simd_float4x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
simd_mul(float __a,simd_float2x3 __x)935 static  simd_float2x3 SIMD_CFUNC simd_mul(float  __a,  simd_float2x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
simd_mul(float __a,simd_float3x3 __x)936 static  simd_float3x3 SIMD_CFUNC simd_mul(float  __a,  simd_float3x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
simd_mul(float __a,simd_float4x3 __x)937 static  simd_float4x3 SIMD_CFUNC simd_mul(float  __a,  simd_float4x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
simd_mul(float __a,simd_float2x4 __x)938 static  simd_float2x4 SIMD_CFUNC simd_mul(float  __a,  simd_float2x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
simd_mul(float __a,simd_float3x4 __x)939 static  simd_float3x4 SIMD_CFUNC simd_mul(float  __a,  simd_float3x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
simd_mul(float __a,simd_float4x4 __x)940 static  simd_float4x4 SIMD_CFUNC simd_mul(float  __a,  simd_float4x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
simd_mul(double __a,simd_double2x2 __x)941 static simd_double2x2 SIMD_CFUNC simd_mul(double __a, simd_double2x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
simd_mul(double __a,simd_double3x2 __x)942 static simd_double3x2 SIMD_CFUNC simd_mul(double __a, simd_double3x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
simd_mul(double __a,simd_double4x2 __x)943 static simd_double4x2 SIMD_CFUNC simd_mul(double __a, simd_double4x2 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
simd_mul(double __a,simd_double2x3 __x)944 static simd_double2x3 SIMD_CFUNC simd_mul(double __a, simd_double2x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
simd_mul(double __a,simd_double3x3 __x)945 static simd_double3x3 SIMD_CFUNC simd_mul(double __a, simd_double3x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
simd_mul(double __a,simd_double4x3 __x)946 static simd_double4x3 SIMD_CFUNC simd_mul(double __a, simd_double4x3 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
simd_mul(double __a,simd_double2x4 __x)947 static simd_double2x4 SIMD_CFUNC simd_mul(double __a, simd_double2x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; return __x; }
simd_mul(double __a,simd_double3x4 __x)948 static simd_double3x4 SIMD_CFUNC simd_mul(double __a, simd_double3x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; return __x; }
simd_mul(double __a,simd_double4x4 __x)949 static simd_double4x4 SIMD_CFUNC simd_mul(double __a, simd_double4x4 __x) { __x.columns[0] *= __a; __x.columns[1] *= __a; __x.columns[2] *= __a; __x.columns[3] *= __a; return __x; }
950 
simd_linear_combination(float __a,simd_float2x2 __x,float __b,simd_float2x2 __y)951 static  simd_float2x2 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float2x2 __x, float  __b,  simd_float2x2 __y) {
952     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
953     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
954     return __x;
955 }
simd_linear_combination(float __a,simd_float3x2 __x,float __b,simd_float3x2 __y)956 static  simd_float3x2 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float3x2 __x, float  __b,  simd_float3x2 __y) {
957     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
958     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
959     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
960     return __x;
961 }
simd_linear_combination(float __a,simd_float4x2 __x,float __b,simd_float4x2 __y)962 static  simd_float4x2 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float4x2 __x, float  __b,  simd_float4x2 __y) {
963     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
964     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
965     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
966     __x.columns[3] = __a*__x.columns[3] + __b*__y.columns[3];
967     return __x;
968 }
simd_linear_combination(float __a,simd_float2x3 __x,float __b,simd_float2x3 __y)969 static  simd_float2x3 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float2x3 __x, float  __b,  simd_float2x3 __y) {
970     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
971     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
972     return __x;
973 }
simd_linear_combination(float __a,simd_float3x3 __x,float __b,simd_float3x3 __y)974 static  simd_float3x3 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float3x3 __x, float  __b,  simd_float3x3 __y) {
975     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
976     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
977     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
978     return __x;
979 }
simd_linear_combination(float __a,simd_float4x3 __x,float __b,simd_float4x3 __y)980 static  simd_float4x3 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float4x3 __x, float  __b,  simd_float4x3 __y) {
981     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
982     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
983     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
984     __x.columns[3] = __a*__x.columns[3] + __b*__y.columns[3];
985     return __x;
986 }
simd_linear_combination(float __a,simd_float2x4 __x,float __b,simd_float2x4 __y)987 static  simd_float2x4 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float2x4 __x, float  __b,  simd_float2x4 __y) {
988     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
989     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
990     return __x;
991 }
simd_linear_combination(float __a,simd_float3x4 __x,float __b,simd_float3x4 __y)992 static  simd_float3x4 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float3x4 __x, float  __b,  simd_float3x4 __y) {
993     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
994     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
995     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
996     return __x;
997 }
simd_linear_combination(float __a,simd_float4x4 __x,float __b,simd_float4x4 __y)998 static  simd_float4x4 SIMD_CFUNC simd_linear_combination(float  __a,  simd_float4x4 __x, float  __b,  simd_float4x4 __y) {
999     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1000     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1001     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
1002     __x.columns[3] = __a*__x.columns[3] + __b*__y.columns[3];
1003     return __x;
1004 }
simd_linear_combination(double __a,simd_double2x2 __x,double __b,simd_double2x2 __y)1005 static simd_double2x2 SIMD_CFUNC simd_linear_combination(double __a, simd_double2x2 __x, double __b, simd_double2x2 __y) {
1006     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1007     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1008     return __x;
1009 }
simd_linear_combination(double __a,simd_double3x2 __x,double __b,simd_double3x2 __y)1010 static simd_double3x2 SIMD_CFUNC simd_linear_combination(double __a, simd_double3x2 __x, double __b, simd_double3x2 __y) {
1011     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1012     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1013     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
1014     return __x;
1015 }
simd_linear_combination(double __a,simd_double4x2 __x,double __b,simd_double4x2 __y)1016 static simd_double4x2 SIMD_CFUNC simd_linear_combination(double __a, simd_double4x2 __x, double __b, simd_double4x2 __y) {
1017     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1018     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1019     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
1020     __x.columns[3] = __a*__x.columns[3] + __b*__y.columns[3];
1021     return __x;
1022 }
simd_linear_combination(double __a,simd_double2x3 __x,double __b,simd_double2x3 __y)1023 static simd_double2x3 SIMD_CFUNC simd_linear_combination(double __a, simd_double2x3 __x, double __b, simd_double2x3 __y) {
1024     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1025     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1026     return __x;
1027 }
simd_linear_combination(double __a,simd_double3x3 __x,double __b,simd_double3x3 __y)1028 static simd_double3x3 SIMD_CFUNC simd_linear_combination(double __a, simd_double3x3 __x, double __b, simd_double3x3 __y) {
1029     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1030     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1031     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
1032     return __x;
1033 }
simd_linear_combination(double __a,simd_double4x3 __x,double __b,simd_double4x3 __y)1034 static simd_double4x3 SIMD_CFUNC simd_linear_combination(double __a, simd_double4x3 __x, double __b, simd_double4x3 __y) {
1035     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1036     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1037     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
1038     __x.columns[3] = __a*__x.columns[3] + __b*__y.columns[3];
1039     return __x;
1040 }
simd_linear_combination(double __a,simd_double2x4 __x,double __b,simd_double2x4 __y)1041 static simd_double2x4 SIMD_CFUNC simd_linear_combination(double __a, simd_double2x4 __x, double __b, simd_double2x4 __y) {
1042     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1043     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1044     return __x;
1045 }
simd_linear_combination(double __a,simd_double3x4 __x,double __b,simd_double3x4 __y)1046 static simd_double3x4 SIMD_CFUNC simd_linear_combination(double __a, simd_double3x4 __x, double __b, simd_double3x4 __y) {
1047     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1048     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1049     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
1050     return __x;
1051 }
simd_linear_combination(double __a,simd_double4x4 __x,double __b,simd_double4x4 __y)1052 static simd_double4x4 SIMD_CFUNC simd_linear_combination(double __a, simd_double4x4 __x, double __b, simd_double4x4 __y) {
1053     __x.columns[0] = __a*__x.columns[0] + __b*__y.columns[0];
1054     __x.columns[1] = __a*__x.columns[1] + __b*__y.columns[1];
1055     __x.columns[2] = __a*__x.columns[2] + __b*__y.columns[2];
1056     __x.columns[3] = __a*__x.columns[3] + __b*__y.columns[3];
1057     return __x;
1058 }
1059 
simd_add(simd_float2x2 __x,simd_float2x2 __y)1060 static simd_float2x2 SIMD_CFUNC simd_add(simd_float2x2 __x, simd_float2x2 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float3x2 __x,simd_float3x2 __y)1061 static simd_float3x2 SIMD_CFUNC simd_add(simd_float3x2 __x, simd_float3x2 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float4x2 __x,simd_float4x2 __y)1062 static simd_float4x2 SIMD_CFUNC simd_add(simd_float4x2 __x, simd_float4x2 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float2x3 __x,simd_float2x3 __y)1063 static simd_float2x3 SIMD_CFUNC simd_add(simd_float2x3 __x, simd_float2x3 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float3x3 __x,simd_float3x3 __y)1064 static simd_float3x3 SIMD_CFUNC simd_add(simd_float3x3 __x, simd_float3x3 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float4x3 __x,simd_float4x3 __y)1065 static simd_float4x3 SIMD_CFUNC simd_add(simd_float4x3 __x, simd_float4x3 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float2x4 __x,simd_float2x4 __y)1066 static simd_float2x4 SIMD_CFUNC simd_add(simd_float2x4 __x, simd_float2x4 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float3x4 __x,simd_float3x4 __y)1067 static simd_float3x4 SIMD_CFUNC simd_add(simd_float3x4 __x, simd_float3x4 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_float4x4 __x,simd_float4x4 __y)1068 static simd_float4x4 SIMD_CFUNC simd_add(simd_float4x4 __x, simd_float4x4 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double2x2 __x,simd_double2x2 __y)1069 static simd_double2x2 SIMD_CFUNC simd_add(simd_double2x2 __x, simd_double2x2 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double3x2 __x,simd_double3x2 __y)1070 static simd_double3x2 SIMD_CFUNC simd_add(simd_double3x2 __x, simd_double3x2 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double4x2 __x,simd_double4x2 __y)1071 static simd_double4x2 SIMD_CFUNC simd_add(simd_double4x2 __x, simd_double4x2 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double2x3 __x,simd_double2x3 __y)1072 static simd_double2x3 SIMD_CFUNC simd_add(simd_double2x3 __x, simd_double2x3 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double3x3 __x,simd_double3x3 __y)1073 static simd_double3x3 SIMD_CFUNC simd_add(simd_double3x3 __x, simd_double3x3 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double4x3 __x,simd_double4x3 __y)1074 static simd_double4x3 SIMD_CFUNC simd_add(simd_double4x3 __x, simd_double4x3 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double2x4 __x,simd_double2x4 __y)1075 static simd_double2x4 SIMD_CFUNC simd_add(simd_double2x4 __x, simd_double2x4 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double3x4 __x,simd_double3x4 __y)1076 static simd_double3x4 SIMD_CFUNC simd_add(simd_double3x4 __x, simd_double3x4 __y) { return simd_linear_combination(1, __x, 1, __y); }
simd_add(simd_double4x4 __x,simd_double4x4 __y)1077 static simd_double4x4 SIMD_CFUNC simd_add(simd_double4x4 __x, simd_double4x4 __y) { return simd_linear_combination(1, __x, 1, __y); }
1078 
simd_sub(simd_float2x2 __x,simd_float2x2 __y)1079 static simd_float2x2 SIMD_CFUNC simd_sub(simd_float2x2 __x, simd_float2x2 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float3x2 __x,simd_float3x2 __y)1080 static simd_float3x2 SIMD_CFUNC simd_sub(simd_float3x2 __x, simd_float3x2 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float4x2 __x,simd_float4x2 __y)1081 static simd_float4x2 SIMD_CFUNC simd_sub(simd_float4x2 __x, simd_float4x2 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float2x3 __x,simd_float2x3 __y)1082 static simd_float2x3 SIMD_CFUNC simd_sub(simd_float2x3 __x, simd_float2x3 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float3x3 __x,simd_float3x3 __y)1083 static simd_float3x3 SIMD_CFUNC simd_sub(simd_float3x3 __x, simd_float3x3 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float4x3 __x,simd_float4x3 __y)1084 static simd_float4x3 SIMD_CFUNC simd_sub(simd_float4x3 __x, simd_float4x3 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float2x4 __x,simd_float2x4 __y)1085 static simd_float2x4 SIMD_CFUNC simd_sub(simd_float2x4 __x, simd_float2x4 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float3x4 __x,simd_float3x4 __y)1086 static simd_float3x4 SIMD_CFUNC simd_sub(simd_float3x4 __x, simd_float3x4 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_float4x4 __x,simd_float4x4 __y)1087 static simd_float4x4 SIMD_CFUNC simd_sub(simd_float4x4 __x, simd_float4x4 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double2x2 __x,simd_double2x2 __y)1088 static simd_double2x2 SIMD_CFUNC simd_sub(simd_double2x2 __x, simd_double2x2 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double3x2 __x,simd_double3x2 __y)1089 static simd_double3x2 SIMD_CFUNC simd_sub(simd_double3x2 __x, simd_double3x2 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double4x2 __x,simd_double4x2 __y)1090 static simd_double4x2 SIMD_CFUNC simd_sub(simd_double4x2 __x, simd_double4x2 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double2x3 __x,simd_double2x3 __y)1091 static simd_double2x3 SIMD_CFUNC simd_sub(simd_double2x3 __x, simd_double2x3 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double3x3 __x,simd_double3x3 __y)1092 static simd_double3x3 SIMD_CFUNC simd_sub(simd_double3x3 __x, simd_double3x3 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double4x3 __x,simd_double4x3 __y)1093 static simd_double4x3 SIMD_CFUNC simd_sub(simd_double4x3 __x, simd_double4x3 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double2x4 __x,simd_double2x4 __y)1094 static simd_double2x4 SIMD_CFUNC simd_sub(simd_double2x4 __x, simd_double2x4 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double3x4 __x,simd_double3x4 __y)1095 static simd_double3x4 SIMD_CFUNC simd_sub(simd_double3x4 __x, simd_double3x4 __y) { return simd_linear_combination(1, __x, -1, __y); }
simd_sub(simd_double4x4 __x,simd_double4x4 __y)1096 static simd_double4x4 SIMD_CFUNC simd_sub(simd_double4x4 __x, simd_double4x4 __y) { return simd_linear_combination(1, __x, -1, __y); }
1097 
simd_transpose(simd_float2x2 __x)1098 static simd_float2x2 SIMD_CFUNC simd_transpose(simd_float2x2 __x) {
1099 #if defined __SSE__
1100     simd_float4 __x0, __x1;
1101     __x0.xy = __x.columns[0];
1102     __x1.xy = __x.columns[1];
1103     simd_float4 __r01 = _mm_unpacklo_ps(__x0, __x1);
1104     return simd_matrix(__r01.lo, __r01.hi);
1105 #else
1106     return simd_matrix((simd_float2){__x.columns[0][0], __x.columns[1][0]},
1107                                (simd_float2){__x.columns[0][1], __x.columns[1][1]});
1108 #endif
1109 }
1110 
simd_transpose(simd_float2x3 __x)1111 static simd_float3x2 SIMD_CFUNC simd_transpose(simd_float2x3 __x) {
1112 #if defined __SSE__
1113     simd_float4 __x0, __x1;
1114     __x0.xyz = __x.columns[0];
1115     __x1.xyz = __x.columns[1];
1116     simd_float4 __r01 = _mm_unpacklo_ps(__x0, __x1);
1117     simd_float4 __r2x = _mm_unpackhi_ps(__x0, __x1);
1118     return simd_matrix(__r01.lo, __r01.hi, __r2x.lo);
1119 #else
1120     return simd_matrix((simd_float2){__x.columns[0][0], __x.columns[1][0]},
1121                                (simd_float2){__x.columns[0][1], __x.columns[1][1]},
1122                                (simd_float2){__x.columns[0][2], __x.columns[1][2]});
1123 #endif
1124 }
1125 
simd_transpose(simd_float2x4 __x)1126 static simd_float4x2 SIMD_CFUNC simd_transpose(simd_float2x4 __x) {
1127 #if defined __SSE__
1128     simd_float4 __r01 = _mm_unpacklo_ps(__x.columns[0], __x.columns[1]);
1129     simd_float4 __r23 = _mm_unpackhi_ps(__x.columns[0], __x.columns[1]);
1130     return simd_matrix(__r01.lo, __r01.hi, __r23.lo, __r23.hi);
1131 #else
1132     return simd_matrix((simd_float2){__x.columns[0][0], __x.columns[1][0]},
1133                                (simd_float2){__x.columns[0][1], __x.columns[1][1]},
1134                                (simd_float2){__x.columns[0][2], __x.columns[1][2]},
1135                                (simd_float2){__x.columns[0][3], __x.columns[1][3]});
1136 #endif
1137 }
1138 
simd_transpose(simd_float3x2 __x)1139 static simd_float2x3 SIMD_CFUNC simd_transpose(simd_float3x2 __x) {
1140 #if defined __SSE__
1141     simd_float4 __x0, __x1, __x2;
1142     __x0.xy = __x.columns[0];
1143     __x1.xy = __x.columns[1];
1144     __x2.xy = __x.columns[2];
1145     simd_float4 __t = _mm_unpacklo_ps(__x0, __x1);
1146     simd_float4 __r0 = _mm_shuffle_ps(__t,__x2,0xc4);
1147     simd_float4 __r1 = _mm_shuffle_ps(__t,__x2,0xde);
1148     return simd_matrix(__r0.xyz, __r1.xyz);
1149 #else
1150     return simd_matrix((simd_float3){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0]},
1151                                (simd_float3){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1]});
1152 #endif
1153 }
1154 
simd_transpose(simd_float3x3 __x)1155 static simd_float3x3 SIMD_CFUNC simd_transpose(simd_float3x3 __x) {
1156 #if defined __SSE__
1157     simd_float4 __x0, __x1, __x2;
1158     __x0.xyz = __x.columns[0];
1159     __x1.xyz = __x.columns[1];
1160     __x2.xyz = __x.columns[2];
1161     simd_float4 __t0 = _mm_unpacklo_ps(__x0, __x1);
1162     simd_float4 __t1 = _mm_unpackhi_ps(__x0, __x1);
1163     simd_float4 __r0 = __t0; __r0.hi = __x2.lo;
1164     simd_float4 __r1 = _mm_shuffle_ps(__t0, __x2, 0xde);
1165     simd_float4 __r2 = __x2; __r2.lo = __t1.lo;
1166     return simd_matrix(__r0.xyz, __r1.xyz, __r2.xyz);
1167 #else
1168     return simd_matrix((simd_float3){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0]},
1169                                (simd_float3){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1]},
1170                                (simd_float3){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2]});
1171 #endif
1172 }
1173 
simd_transpose(simd_float3x4 __x)1174 static simd_float4x3 SIMD_CFUNC simd_transpose(simd_float3x4 __x) {
1175 #if defined __SSE__
1176     simd_float4 __t0 = _mm_unpacklo_ps(__x.columns[0],__x.columns[1]); /* 00 10 01 11 */
1177     simd_float4 __t1 = _mm_unpackhi_ps(__x.columns[0],__x.columns[1]); /* 02 12 03 13 */
1178     simd_float4 __r0 = __t0; __r0.hi = __x.columns[2].lo;
1179     simd_float4 __r1 = _mm_shuffle_ps(__t0, __x.columns[2], 0xde);
1180     simd_float4 __r2 = __x.columns[2]; __r2.lo = __t1.lo;
1181     simd_float4 __r3 = _mm_shuffle_ps(__t1, __x.columns[2], 0xfe);
1182     return simd_matrix(__r0.xyz, __r1.xyz, __r2.xyz, __r3.xyz);
1183 #else
1184     return simd_matrix((simd_float3){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0]},
1185                                (simd_float3){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1]},
1186                                (simd_float3){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2]},
1187                                (simd_float3){__x.columns[0][3], __x.columns[1][3], __x.columns[2][3]});
1188 #endif
1189 }
1190 
simd_transpose(simd_float4x2 __x)1191 static simd_float2x4 SIMD_CFUNC simd_transpose(simd_float4x2 __x) {
1192 #if defined __SSE__
1193     simd_float4 __x0, __x1, __x2, __x3;
1194     __x0.xy = __x.columns[0];
1195     __x1.xy = __x.columns[1];
1196     __x2.xy = __x.columns[2];
1197     __x3.xy = __x.columns[3];
1198     simd_float4 __t0 = _mm_unpacklo_ps(__x0,__x2);
1199     simd_float4 __t1 = _mm_unpacklo_ps(__x1,__x3);
1200     simd_float4 __r0 = _mm_unpacklo_ps(__t0,__t1);
1201     simd_float4 __r1 = _mm_unpackhi_ps(__t0,__t1);
1202     return simd_matrix(__r0,__r1);
1203 #else
1204     return simd_matrix((simd_float4){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0], __x.columns[3][0]},
1205                                (simd_float4){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1], __x.columns[3][1]});
1206 #endif
1207 }
1208 
simd_transpose(simd_float4x3 __x)1209 static simd_float3x4 SIMD_CFUNC simd_transpose(simd_float4x3 __x) {
1210 #if defined __SSE__
1211     simd_float4 __x0, __x1, __x2, __x3;
1212     __x0.xyz = __x.columns[0];
1213     __x1.xyz = __x.columns[1];
1214     __x2.xyz = __x.columns[2];
1215     __x3.xyz = __x.columns[3];
1216     simd_float4 __t0 = _mm_unpacklo_ps(__x0,__x2);
1217     simd_float4 __t1 = _mm_unpackhi_ps(__x0,__x2);
1218     simd_float4 __t2 = _mm_unpacklo_ps(__x1,__x3);
1219     simd_float4 __t3 = _mm_unpackhi_ps(__x1,__x3);
1220     simd_float4 __r0 = _mm_unpacklo_ps(__t0,__t2);
1221     simd_float4 __r1 = _mm_unpackhi_ps(__t0,__t2);
1222     simd_float4 __r2 = _mm_unpacklo_ps(__t1,__t3);
1223     return simd_matrix(__r0,__r1,__r2);
1224 #else
1225     return simd_matrix((simd_float4){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0], __x.columns[3][0]},
1226                                (simd_float4){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1], __x.columns[3][1]},
1227                                (simd_float4){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2], __x.columns[3][2]});
1228 #endif
1229 }
1230 
simd_transpose(simd_float4x4 __x)1231 static simd_float4x4 SIMD_CFUNC simd_transpose(simd_float4x4 __x) {
1232 #if defined __SSE__
1233     simd_float4 __t0 = _mm_unpacklo_ps(__x.columns[0],__x.columns[2]);
1234     simd_float4 __t1 = _mm_unpackhi_ps(__x.columns[0],__x.columns[2]);
1235     simd_float4 __t2 = _mm_unpacklo_ps(__x.columns[1],__x.columns[3]);
1236     simd_float4 __t3 = _mm_unpackhi_ps(__x.columns[1],__x.columns[3]);
1237     simd_float4 __r0 = _mm_unpacklo_ps(__t0,__t2);
1238     simd_float4 __r1 = _mm_unpackhi_ps(__t0,__t2);
1239     simd_float4 __r2 = _mm_unpacklo_ps(__t1,__t3);
1240     simd_float4 __r3 = _mm_unpackhi_ps(__t1,__t3);
1241     return simd_matrix(__r0,__r1,__r2,__r3);
1242 #else
1243     return simd_matrix((simd_float4){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0], __x.columns[3][0]},
1244                                (simd_float4){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1], __x.columns[3][1]},
1245                                (simd_float4){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2], __x.columns[3][2]},
1246                                (simd_float4){__x.columns[0][3], __x.columns[1][3], __x.columns[2][3], __x.columns[3][3]});
1247 #endif
1248 }
1249 
simd_transpose(simd_double2x2 __x)1250 static simd_double2x2 SIMD_CFUNC simd_transpose(simd_double2x2 __x) {
1251     return simd_matrix((simd_double2){__x.columns[0][0], __x.columns[1][0]},
1252                                (simd_double2){__x.columns[0][1], __x.columns[1][1]});
1253 }
1254 
simd_transpose(simd_double2x3 __x)1255 static simd_double3x2 SIMD_CFUNC simd_transpose(simd_double2x3 __x) {
1256     return simd_matrix((simd_double2){__x.columns[0][0], __x.columns[1][0]},
1257                                (simd_double2){__x.columns[0][1], __x.columns[1][1]},
1258                                (simd_double2){__x.columns[0][2], __x.columns[1][2]});
1259 }
1260 
simd_transpose(simd_double2x4 __x)1261 static simd_double4x2 SIMD_CFUNC simd_transpose(simd_double2x4 __x) {
1262     return simd_matrix((simd_double2){__x.columns[0][0], __x.columns[1][0]},
1263                                (simd_double2){__x.columns[0][1], __x.columns[1][1]},
1264                                (simd_double2){__x.columns[0][2], __x.columns[1][2]},
1265                                (simd_double2){__x.columns[0][3], __x.columns[1][3]});
1266 }
1267 
simd_transpose(simd_double3x2 __x)1268 static simd_double2x3 SIMD_CFUNC simd_transpose(simd_double3x2 __x) {
1269     return simd_matrix((simd_double3){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0]},
1270                                (simd_double3){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1]});
1271 }
1272 
simd_transpose(simd_double3x3 __x)1273 static simd_double3x3 SIMD_CFUNC simd_transpose(simd_double3x3 __x) {
1274     return simd_matrix((simd_double3){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0]},
1275                                (simd_double3){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1]},
1276                                (simd_double3){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2]});
1277 }
1278 
simd_transpose(simd_double3x4 __x)1279 static simd_double4x3 SIMD_CFUNC simd_transpose(simd_double3x4 __x) {
1280     return simd_matrix((simd_double3){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0]},
1281                                (simd_double3){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1]},
1282                                (simd_double3){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2]},
1283                                (simd_double3){__x.columns[0][3], __x.columns[1][3], __x.columns[2][3]});
1284 }
1285 
simd_transpose(simd_double4x2 __x)1286 static simd_double2x4 SIMD_CFUNC simd_transpose(simd_double4x2 __x) {
1287     return simd_matrix((simd_double4){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0], __x.columns[3][0]},
1288                                (simd_double4){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1], __x.columns[3][1]});
1289 }
1290 
simd_transpose(simd_double4x3 __x)1291 static simd_double3x4 SIMD_CFUNC simd_transpose(simd_double4x3 __x) {
1292     return simd_matrix((simd_double4){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0], __x.columns[3][0]},
1293                                (simd_double4){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1], __x.columns[3][1]},
1294                                (simd_double4){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2], __x.columns[3][2]});
1295 }
1296 
simd_transpose(simd_double4x4 __x)1297 static simd_double4x4 SIMD_CFUNC simd_transpose(simd_double4x4 __x) {
1298     return simd_matrix((simd_double4){__x.columns[0][0], __x.columns[1][0], __x.columns[2][0], __x.columns[3][0]},
1299                                (simd_double4){__x.columns[0][1], __x.columns[1][1], __x.columns[2][1], __x.columns[3][1]},
1300                                (simd_double4){__x.columns[0][2], __x.columns[1][2], __x.columns[2][2], __x.columns[3][2]},
1301                                (simd_double4){__x.columns[0][3], __x.columns[1][3], __x.columns[2][3], __x.columns[3][3]});
1302 }
1303 
__rotate1(simd_float3 __x)1304 static  simd_float3 SIMD_CFUNC __rotate1( simd_float3 __x) { return __builtin_shufflevector(__x,__x,1,2,0); }
__rotate2(simd_float3 __x)1305 static  simd_float3 SIMD_CFUNC __rotate2( simd_float3 __x) { return __builtin_shufflevector(__x,__x,2,0,1); }
__rotate1(simd_float4 __x)1306 static  simd_float4 SIMD_CFUNC __rotate1( simd_float4 __x) { return __builtin_shufflevector(__x,__x,1,2,3,0); }
__rotate2(simd_float4 __x)1307 static  simd_float4 SIMD_CFUNC __rotate2( simd_float4 __x) { return __builtin_shufflevector(__x,__x,2,3,0,1); }
__rotate3(simd_float4 __x)1308 static  simd_float4 SIMD_CFUNC __rotate3( simd_float4 __x) { return __builtin_shufflevector(__x,__x,3,0,1,2); }
__rotate1(simd_double3 __x)1309 static simd_double3 SIMD_CFUNC __rotate1(simd_double3 __x) { return __builtin_shufflevector(__x,__x,1,2,0); }
__rotate2(simd_double3 __x)1310 static simd_double3 SIMD_CFUNC __rotate2(simd_double3 __x) { return __builtin_shufflevector(__x,__x,2,0,1); }
__rotate1(simd_double4 __x)1311 static simd_double4 SIMD_CFUNC __rotate1(simd_double4 __x) { return __builtin_shufflevector(__x,__x,1,2,3,0); }
__rotate2(simd_double4 __x)1312 static simd_double4 SIMD_CFUNC __rotate2(simd_double4 __x) { return __builtin_shufflevector(__x,__x,2,3,0,1); }
__rotate3(simd_double4 __x)1313 static simd_double4 SIMD_CFUNC __rotate3(simd_double4 __x) { return __builtin_shufflevector(__x,__x,3,0,1,2); }
1314 
simd_trace(simd_float2x2 __x)1315 static  float SIMD_CFUNC simd_trace( simd_float2x2 __x) { return __x.columns[0][0] + __x.columns[1][1]; }
simd_trace(simd_double2x2 __x)1316 static double SIMD_CFUNC simd_trace(simd_double2x2 __x) { return __x.columns[0][0] + __x.columns[1][1]; }
simd_trace(simd_float3x3 __x)1317 static  float SIMD_CFUNC simd_trace( simd_float3x3 __x) { return __x.columns[0][0] + __x.columns[1][1] + __x.columns[2][2]; }
simd_trace(simd_double3x3 __x)1318 static double SIMD_CFUNC simd_trace(simd_double3x3 __x) { return __x.columns[0][0] + __x.columns[1][1] + __x.columns[2][2]; }
simd_trace(simd_float4x4 __x)1319 static  float SIMD_CFUNC simd_trace( simd_float4x4 __x) { return __x.columns[0][0] + __x.columns[1][1] + __x.columns[2][2] + __x.columns[3][3]; }
simd_trace(simd_double4x4 __x)1320 static double SIMD_CFUNC simd_trace(simd_double4x4 __x) { return __x.columns[0][0] + __x.columns[1][1] + __x.columns[2][2] + __x.columns[3][3]; }
1321 
simd_determinant(simd_float2x2 __x)1322 static  float SIMD_CFUNC simd_determinant( simd_float2x2 __x) { return __x.columns[0][0]*__x.columns[1][1] - __x.columns[0][1]*__x.columns[1][0]; }
simd_determinant(simd_double2x2 __x)1323 static double SIMD_CFUNC simd_determinant(simd_double2x2 __x) { return __x.columns[0][0]*__x.columns[1][1] - __x.columns[0][1]*__x.columns[1][0]; }
simd_determinant(simd_float3x3 __x)1324 static  float SIMD_CFUNC simd_determinant( simd_float3x3 __x) { return simd_reduce_add(__x.columns[0]*(__rotate1(__x.columns[1])*__rotate2(__x.columns[2]) - __rotate2(__x.columns[1])*__rotate1(__x.columns[2]))); }
simd_determinant(simd_double3x3 __x)1325 static double SIMD_CFUNC simd_determinant(simd_double3x3 __x) { return simd_reduce_add(__x.columns[0]*(__rotate1(__x.columns[1])*__rotate2(__x.columns[2]) - __rotate2(__x.columns[1])*__rotate1(__x.columns[2]))); }
simd_determinant(simd_float4x4 __x)1326 static  float SIMD_CFUNC simd_determinant( simd_float4x4 __x) {
1327     simd_float4 codet = __x.columns[0]*(__rotate1(__x.columns[1])*(__rotate2(__x.columns[2])*__rotate3(__x.columns[3])-__rotate3(__x.columns[2])*__rotate2(__x.columns[3])) +
1328                                           __rotate2(__x.columns[1])*(__rotate3(__x.columns[2])*__rotate1(__x.columns[3])-__rotate1(__x.columns[2])*__rotate3(__x.columns[3])) +
1329                                           __rotate3(__x.columns[1])*(__rotate1(__x.columns[2])*__rotate2(__x.columns[3])-__rotate2(__x.columns[2])*__rotate1(__x.columns[3])));
1330     return simd_reduce_add(codet.even - codet.odd);
1331 }
simd_determinant(simd_double4x4 __x)1332 static double SIMD_CFUNC simd_determinant(simd_double4x4 __x) {
1333     simd_double4 codet = __x.columns[0]*(__rotate1(__x.columns[1])*(__rotate2(__x.columns[2])*__rotate3(__x.columns[3])-__rotate3(__x.columns[2])*__rotate2(__x.columns[3])) +
1334                                            __rotate2(__x.columns[1])*(__rotate3(__x.columns[2])*__rotate1(__x.columns[3])-__rotate1(__x.columns[2])*__rotate3(__x.columns[3])) +
1335                                            __rotate3(__x.columns[1])*(__rotate1(__x.columns[2])*__rotate2(__x.columns[3])-__rotate2(__x.columns[2])*__rotate1(__x.columns[3])));
1336     return simd_reduce_add(codet.even - codet.odd);
1337 }
1338 
simd_inverse(simd_float2x2 __x)1339 static  simd_float2x2 SIMD_CFUNC simd_inverse( simd_float2x2 __x) { return __invert_f2(__x); }
simd_inverse(simd_float3x3 __x)1340 static  simd_float3x3 SIMD_CFUNC simd_inverse( simd_float3x3 __x) { return __invert_f3(__x); }
simd_inverse(simd_float4x4 __x)1341 static  simd_float4x4 SIMD_CFUNC simd_inverse( simd_float4x4 __x) { return __invert_f4(__x); }
simd_inverse(simd_double2x2 __x)1342 static simd_double2x2 SIMD_CFUNC simd_inverse(simd_double2x2 __x) { return __invert_d2(__x); }
simd_inverse(simd_double3x3 __x)1343 static simd_double3x3 SIMD_CFUNC simd_inverse(simd_double3x3 __x) { return __invert_d3(__x); }
simd_inverse(simd_double4x4 __x)1344 static simd_double4x4 SIMD_CFUNC simd_inverse(simd_double4x4 __x) { return __invert_d4(__x); }
1345 
simd_mul(simd_float2x2 __x,simd_float2 __y)1346 static  simd_float2 SIMD_CFUNC simd_mul( simd_float2x2 __x,  simd_float2 __y) {  simd_float2 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); return __r; }
simd_mul(simd_float2x3 __x,simd_float2 __y)1347 static  simd_float3 SIMD_CFUNC simd_mul( simd_float2x3 __x,  simd_float2 __y) {  simd_float3 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); return __r; }
simd_mul(simd_float2x4 __x,simd_float2 __y)1348 static  simd_float4 SIMD_CFUNC simd_mul( simd_float2x4 __x,  simd_float2 __y) {  simd_float4 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); return __r; }
simd_mul(simd_float3x2 __x,simd_float3 __y)1349 static  simd_float2 SIMD_CFUNC simd_mul( simd_float3x2 __x,  simd_float3 __y) {  simd_float2 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); return __r; }
simd_mul(simd_float3x3 __x,simd_float3 __y)1350 static  simd_float3 SIMD_CFUNC simd_mul( simd_float3x3 __x,  simd_float3 __y) {  simd_float3 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); return __r; }
simd_mul(simd_float3x4 __x,simd_float3 __y)1351 static  simd_float4 SIMD_CFUNC simd_mul( simd_float3x4 __x,  simd_float3 __y) {  simd_float4 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); return __r; }
simd_mul(simd_float4x2 __x,simd_float4 __y)1352 static  simd_float2 SIMD_CFUNC simd_mul( simd_float4x2 __x,  simd_float4 __y) {  simd_float2 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); __r = simd_muladd( __x.columns[3], __y[3],__r); return __r; }
simd_mul(simd_float4x3 __x,simd_float4 __y)1353 static  simd_float3 SIMD_CFUNC simd_mul( simd_float4x3 __x,  simd_float4 __y) {  simd_float3 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); __r = simd_muladd( __x.columns[3], __y[3],__r); return __r; }
simd_mul(simd_float4x4 __x,simd_float4 __y)1354 static  simd_float4 SIMD_CFUNC simd_mul( simd_float4x4 __x,  simd_float4 __y) {  simd_float4 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); __r = simd_muladd( __x.columns[3], __y[3],__r); return __r; }
simd_mul(simd_double2x2 __x,simd_double2 __y)1355 static simd_double2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double2 __y) { simd_double2 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); return __r; }
simd_mul(simd_double2x3 __x,simd_double2 __y)1356 static simd_double3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double2 __y) { simd_double3 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); return __r; }
simd_mul(simd_double2x4 __x,simd_double2 __y)1357 static simd_double4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double2 __y) { simd_double4 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); return __r; }
simd_mul(simd_double3x2 __x,simd_double3 __y)1358 static simd_double2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double3 __y) { simd_double2 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); return __r; }
simd_mul(simd_double3x3 __x,simd_double3 __y)1359 static simd_double3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double3 __y) { simd_double3 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); return __r; }
simd_mul(simd_double3x4 __x,simd_double3 __y)1360 static simd_double4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double3 __y) { simd_double4 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); return __r; }
simd_mul(simd_double4x2 __x,simd_double4 __y)1361 static simd_double2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double4 __y) { simd_double2 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); __r = simd_muladd( __x.columns[3], __y[3],__r); return __r; }
simd_mul(simd_double4x3 __x,simd_double4 __y)1362 static simd_double3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double4 __y) { simd_double3 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); __r = simd_muladd( __x.columns[3], __y[3],__r); return __r; }
simd_mul(simd_double4x4 __x,simd_double4 __y)1363 static simd_double4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double4 __y) { simd_double4 __r = __x.columns[0]*__y[0]; __r = simd_muladd( __x.columns[1], __y[1],__r); __r = simd_muladd( __x.columns[2], __y[2],__r); __r = simd_muladd( __x.columns[3], __y[3],__r); return __r; }
1364 
simd_mul(simd_float2 __x,simd_float2x2 __y)1365 static  simd_float2 SIMD_CFUNC simd_mul( simd_float2 __x,  simd_float2x2 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float2 __x,simd_float3x2 __y)1366 static  simd_float3 SIMD_CFUNC simd_mul( simd_float2 __x,  simd_float3x2 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float2 __x,simd_float4x2 __y)1367 static  simd_float4 SIMD_CFUNC simd_mul( simd_float2 __x,  simd_float4x2 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float3 __x,simd_float2x3 __y)1368 static  simd_float2 SIMD_CFUNC simd_mul( simd_float3 __x,  simd_float2x3 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float3 __x,simd_float3x3 __y)1369 static  simd_float3 SIMD_CFUNC simd_mul( simd_float3 __x,  simd_float3x3 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float3 __x,simd_float4x3 __y)1370 static  simd_float4 SIMD_CFUNC simd_mul( simd_float3 __x,  simd_float4x3 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float4 __x,simd_float2x4 __y)1371 static  simd_float2 SIMD_CFUNC simd_mul( simd_float4 __x,  simd_float2x4 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float4 __x,simd_float3x4 __y)1372 static  simd_float3 SIMD_CFUNC simd_mul( simd_float4 __x,  simd_float3x4 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_float4 __x,simd_float4x4 __y)1373 static  simd_float4 SIMD_CFUNC simd_mul( simd_float4 __x,  simd_float4x4 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double2 __x,simd_double2x2 __y)1374 static simd_double2 SIMD_CFUNC simd_mul(simd_double2 __x, simd_double2x2 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double2 __x,simd_double3x2 __y)1375 static simd_double3 SIMD_CFUNC simd_mul(simd_double2 __x, simd_double3x2 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double2 __x,simd_double4x2 __y)1376 static simd_double4 SIMD_CFUNC simd_mul(simd_double2 __x, simd_double4x2 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double3 __x,simd_double2x3 __y)1377 static simd_double2 SIMD_CFUNC simd_mul(simd_double3 __x, simd_double2x3 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double3 __x,simd_double3x3 __y)1378 static simd_double3 SIMD_CFUNC simd_mul(simd_double3 __x, simd_double3x3 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double3 __x,simd_double4x3 __y)1379 static simd_double4 SIMD_CFUNC simd_mul(simd_double3 __x, simd_double4x3 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double4 __x,simd_double2x4 __y)1380 static simd_double2 SIMD_CFUNC simd_mul(simd_double4 __x, simd_double2x4 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double4 __x,simd_double3x4 __y)1381 static simd_double3 SIMD_CFUNC simd_mul(simd_double4 __x, simd_double3x4 __y) { return simd_mul(simd_transpose(__y), __x); }
simd_mul(simd_double4 __x,simd_double4x4 __y)1382 static simd_double4 SIMD_CFUNC simd_mul(simd_double4 __x, simd_double4x4 __y) { return simd_mul(simd_transpose(__y), __x); }
1383 
simd_mul(simd_float2x2 __x,simd_float2x2 __y)1384 static  simd_float2x2 SIMD_CFUNC simd_mul( simd_float2x2 __x,  simd_float2x2 __y) {  simd_float2x2 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x2 __x,simd_double2x2 __y)1385 static simd_double2x2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double2x2 __y) { simd_double2x2 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float2x3 __x,simd_float2x2 __y)1386 static  simd_float2x3 SIMD_CFUNC simd_mul( simd_float2x3 __x,  simd_float2x2 __y) {  simd_float2x3 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x3 __x,simd_double2x2 __y)1387 static simd_double2x3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double2x2 __y) { simd_double2x3 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float2x4 __x,simd_float2x2 __y)1388 static  simd_float2x4 SIMD_CFUNC simd_mul( simd_float2x4 __x,  simd_float2x2 __y) {  simd_float2x4 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x4 __x,simd_double2x2 __y)1389 static simd_double2x4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double2x2 __y) { simd_double2x4 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x2 __x,simd_float2x3 __y)1390 static  simd_float2x2 SIMD_CFUNC simd_mul( simd_float3x2 __x,  simd_float2x3 __y) {  simd_float2x2 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x2 __x,simd_double2x3 __y)1391 static simd_double2x2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double2x3 __y) { simd_double2x2 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x3 __x,simd_float2x3 __y)1392 static  simd_float2x3 SIMD_CFUNC simd_mul( simd_float3x3 __x,  simd_float2x3 __y) {  simd_float2x3 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x3 __x,simd_double2x3 __y)1393 static simd_double2x3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double2x3 __y) { simd_double2x3 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x4 __x,simd_float2x3 __y)1394 static  simd_float2x4 SIMD_CFUNC simd_mul( simd_float3x4 __x,  simd_float2x3 __y) {  simd_float2x4 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x4 __x,simd_double2x3 __y)1395 static simd_double2x4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double2x3 __y) { simd_double2x4 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x2 __x,simd_float2x4 __y)1396 static  simd_float2x2 SIMD_CFUNC simd_mul( simd_float4x2 __x,  simd_float2x4 __y) {  simd_float2x2 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x2 __x,simd_double2x4 __y)1397 static simd_double2x2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double2x4 __y) { simd_double2x2 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x3 __x,simd_float2x4 __y)1398 static  simd_float2x3 SIMD_CFUNC simd_mul( simd_float4x3 __x,  simd_float2x4 __y) {  simd_float2x3 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x3 __x,simd_double2x4 __y)1399 static simd_double2x3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double2x4 __y) { simd_double2x3 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x4 __x,simd_float2x4 __y)1400 static  simd_float2x4 SIMD_CFUNC simd_mul( simd_float4x4 __x,  simd_float2x4 __y) {  simd_float2x4 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x4 __x,simd_double2x4 __y)1401 static simd_double2x4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double2x4 __y) { simd_double2x4 __r; for (int i=0; i<2; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
1402 
simd_mul(simd_float2x2 __x,simd_float3x2 __y)1403 static  simd_float3x2 SIMD_CFUNC simd_mul( simd_float2x2 __x,  simd_float3x2 __y) {  simd_float3x2 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x2 __x,simd_double3x2 __y)1404 static simd_double3x2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double3x2 __y) { simd_double3x2 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float2x3 __x,simd_float3x2 __y)1405 static  simd_float3x3 SIMD_CFUNC simd_mul( simd_float2x3 __x,  simd_float3x2 __y) {  simd_float3x3 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x3 __x,simd_double3x2 __y)1406 static simd_double3x3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double3x2 __y) { simd_double3x3 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float2x4 __x,simd_float3x2 __y)1407 static  simd_float3x4 SIMD_CFUNC simd_mul( simd_float2x4 __x,  simd_float3x2 __y) {  simd_float3x4 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x4 __x,simd_double3x2 __y)1408 static simd_double3x4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double3x2 __y) { simd_double3x4 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x2 __x,simd_float3x3 __y)1409 static  simd_float3x2 SIMD_CFUNC simd_mul( simd_float3x2 __x,  simd_float3x3 __y) {  simd_float3x2 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x2 __x,simd_double3x3 __y)1410 static simd_double3x2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double3x3 __y) { simd_double3x2 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x3 __x,simd_float3x3 __y)1411 static  simd_float3x3 SIMD_CFUNC simd_mul( simd_float3x3 __x,  simd_float3x3 __y) {  simd_float3x3 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x3 __x,simd_double3x3 __y)1412 static simd_double3x3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double3x3 __y) { simd_double3x3 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x4 __x,simd_float3x3 __y)1413 static  simd_float3x4 SIMD_CFUNC simd_mul( simd_float3x4 __x,  simd_float3x3 __y) {  simd_float3x4 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x4 __x,simd_double3x3 __y)1414 static simd_double3x4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double3x3 __y) { simd_double3x4 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x2 __x,simd_float3x4 __y)1415 static  simd_float3x2 SIMD_CFUNC simd_mul( simd_float4x2 __x,  simd_float3x4 __y) {  simd_float3x2 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x2 __x,simd_double3x4 __y)1416 static simd_double3x2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double3x4 __y) { simd_double3x2 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x3 __x,simd_float3x4 __y)1417 static  simd_float3x3 SIMD_CFUNC simd_mul( simd_float4x3 __x,  simd_float3x4 __y) {  simd_float3x3 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x3 __x,simd_double3x4 __y)1418 static simd_double3x3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double3x4 __y) { simd_double3x3 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x4 __x,simd_float3x4 __y)1419 static  simd_float3x4 SIMD_CFUNC simd_mul( simd_float4x4 __x,  simd_float3x4 __y) {  simd_float3x4 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x4 __x,simd_double3x4 __y)1420 static simd_double3x4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double3x4 __y) { simd_double3x4 __r; for (int i=0; i<3; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
1421 
simd_mul(simd_float2x2 __x,simd_float4x2 __y)1422 static  simd_float4x2 SIMD_CFUNC simd_mul( simd_float2x2 __x,  simd_float4x2 __y) {  simd_float4x2 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x2 __x,simd_double4x2 __y)1423 static simd_double4x2 SIMD_CFUNC simd_mul(simd_double2x2 __x, simd_double4x2 __y) { simd_double4x2 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float2x3 __x,simd_float4x2 __y)1424 static  simd_float4x3 SIMD_CFUNC simd_mul( simd_float2x3 __x,  simd_float4x2 __y) {  simd_float4x3 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x3 __x,simd_double4x2 __y)1425 static simd_double4x3 SIMD_CFUNC simd_mul(simd_double2x3 __x, simd_double4x2 __y) { simd_double4x3 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float2x4 __x,simd_float4x2 __y)1426 static  simd_float4x4 SIMD_CFUNC simd_mul( simd_float2x4 __x,  simd_float4x2 __y) {  simd_float4x4 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double2x4 __x,simd_double4x2 __y)1427 static simd_double4x4 SIMD_CFUNC simd_mul(simd_double2x4 __x, simd_double4x2 __y) { simd_double4x4 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x2 __x,simd_float4x3 __y)1428 static  simd_float4x2 SIMD_CFUNC simd_mul( simd_float3x2 __x,  simd_float4x3 __y) {  simd_float4x2 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x2 __x,simd_double4x3 __y)1429 static simd_double4x2 SIMD_CFUNC simd_mul(simd_double3x2 __x, simd_double4x3 __y) { simd_double4x2 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x3 __x,simd_float4x3 __y)1430 static  simd_float4x3 SIMD_CFUNC simd_mul( simd_float3x3 __x,  simd_float4x3 __y) {  simd_float4x3 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x3 __x,simd_double4x3 __y)1431 static simd_double4x3 SIMD_CFUNC simd_mul(simd_double3x3 __x, simd_double4x3 __y) { simd_double4x3 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float3x4 __x,simd_float4x3 __y)1432 static  simd_float4x4 SIMD_CFUNC simd_mul( simd_float3x4 __x,  simd_float4x3 __y) {  simd_float4x4 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double3x4 __x,simd_double4x3 __y)1433 static simd_double4x4 SIMD_CFUNC simd_mul(simd_double3x4 __x, simd_double4x3 __y) { simd_double4x4 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x2 __x,simd_float4x4 __y)1434 static  simd_float4x2 SIMD_CFUNC simd_mul( simd_float4x2 __x,  simd_float4x4 __y) {  simd_float4x2 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x2 __x,simd_double4x4 __y)1435 static simd_double4x2 SIMD_CFUNC simd_mul(simd_double4x2 __x, simd_double4x4 __y) { simd_double4x2 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x3 __x,simd_float4x4 __y)1436 static  simd_float4x3 SIMD_CFUNC simd_mul( simd_float4x3 __x,  simd_float4x4 __y) {  simd_float4x3 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x3 __x,simd_double4x4 __y)1437 static simd_double4x3 SIMD_CFUNC simd_mul(simd_double4x3 __x, simd_double4x4 __y) { simd_double4x3 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_float4x4 __x,simd_float4x4 __y)1438 static  simd_float4x4 SIMD_CFUNC simd_mul( simd_float4x4 __x,  simd_float4x4 __y) {  simd_float4x4 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
simd_mul(simd_double4x4 __x,simd_double4x4 __y)1439 static simd_double4x4 SIMD_CFUNC simd_mul(simd_double4x4 __x, simd_double4x4 __y) { simd_double4x4 __r; for (int i=0; i<4; ++i) __r.columns[i] = simd_mul(__x, __y.columns[i]); return __r; }
1440 
matrix_multiply(simd_float2x2 __x,simd_float2 __y)1441 static  simd_float2 SIMD_CFUNC matrix_multiply( simd_float2x2 __x,  simd_float2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x3 __x,simd_float2 __y)1442 static  simd_float3 SIMD_CFUNC matrix_multiply( simd_float2x3 __x,  simd_float2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x4 __x,simd_float2 __y)1443 static  simd_float4 SIMD_CFUNC matrix_multiply( simd_float2x4 __x,  simd_float2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x2 __x,simd_float3 __y)1444 static  simd_float2 SIMD_CFUNC matrix_multiply( simd_float3x2 __x,  simd_float3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x3 __x,simd_float3 __y)1445 static  simd_float3 SIMD_CFUNC matrix_multiply( simd_float3x3 __x,  simd_float3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x4 __x,simd_float3 __y)1446 static  simd_float4 SIMD_CFUNC matrix_multiply( simd_float3x4 __x,  simd_float3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x2 __x,simd_float4 __y)1447 static  simd_float2 SIMD_CFUNC matrix_multiply( simd_float4x2 __x,  simd_float4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x3 __x,simd_float4 __y)1448 static  simd_float3 SIMD_CFUNC matrix_multiply( simd_float4x3 __x,  simd_float4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x4 __x,simd_float4 __y)1449 static  simd_float4 SIMD_CFUNC matrix_multiply( simd_float4x4 __x,  simd_float4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x2 __x,simd_double2 __y)1450 static simd_double2 SIMD_CFUNC matrix_multiply(simd_double2x2 __x, simd_double2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x3 __x,simd_double2 __y)1451 static simd_double3 SIMD_CFUNC matrix_multiply(simd_double2x3 __x, simd_double2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x4 __x,simd_double2 __y)1452 static simd_double4 SIMD_CFUNC matrix_multiply(simd_double2x4 __x, simd_double2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x2 __x,simd_double3 __y)1453 static simd_double2 SIMD_CFUNC matrix_multiply(simd_double3x2 __x, simd_double3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x3 __x,simd_double3 __y)1454 static simd_double3 SIMD_CFUNC matrix_multiply(simd_double3x3 __x, simd_double3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x4 __x,simd_double3 __y)1455 static simd_double4 SIMD_CFUNC matrix_multiply(simd_double3x4 __x, simd_double3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x2 __x,simd_double4 __y)1456 static simd_double2 SIMD_CFUNC matrix_multiply(simd_double4x2 __x, simd_double4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x3 __x,simd_double4 __y)1457 static simd_double3 SIMD_CFUNC matrix_multiply(simd_double4x3 __x, simd_double4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x4 __x,simd_double4 __y)1458 static simd_double4 SIMD_CFUNC matrix_multiply(simd_double4x4 __x, simd_double4 __y) { return simd_mul(__x, __y); }
1459 
matrix_multiply(simd_float2 __x,simd_float2x2 __y)1460 static  simd_float2 SIMD_CFUNC matrix_multiply( simd_float2 __x,  simd_float2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2 __x,simd_float3x2 __y)1461 static  simd_float3 SIMD_CFUNC matrix_multiply( simd_float2 __x,  simd_float3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2 __x,simd_float4x2 __y)1462 static  simd_float4 SIMD_CFUNC matrix_multiply( simd_float2 __x,  simd_float4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3 __x,simd_float2x3 __y)1463 static  simd_float2 SIMD_CFUNC matrix_multiply( simd_float3 __x,  simd_float2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3 __x,simd_float3x3 __y)1464 static  simd_float3 SIMD_CFUNC matrix_multiply( simd_float3 __x,  simd_float3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3 __x,simd_float4x3 __y)1465 static  simd_float4 SIMD_CFUNC matrix_multiply( simd_float3 __x,  simd_float4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4 __x,simd_float2x4 __y)1466 static  simd_float2 SIMD_CFUNC matrix_multiply( simd_float4 __x,  simd_float2x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4 __x,simd_float3x4 __y)1467 static  simd_float3 SIMD_CFUNC matrix_multiply( simd_float4 __x,  simd_float3x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4 __x,simd_float4x4 __y)1468 static  simd_float4 SIMD_CFUNC matrix_multiply( simd_float4 __x,  simd_float4x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2 __x,simd_double2x2 __y)1469 static simd_double2 SIMD_CFUNC matrix_multiply(simd_double2 __x, simd_double2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2 __x,simd_double3x2 __y)1470 static simd_double3 SIMD_CFUNC matrix_multiply(simd_double2 __x, simd_double3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2 __x,simd_double4x2 __y)1471 static simd_double4 SIMD_CFUNC matrix_multiply(simd_double2 __x, simd_double4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3 __x,simd_double2x3 __y)1472 static simd_double2 SIMD_CFUNC matrix_multiply(simd_double3 __x, simd_double2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3 __x,simd_double3x3 __y)1473 static simd_double3 SIMD_CFUNC matrix_multiply(simd_double3 __x, simd_double3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3 __x,simd_double4x3 __y)1474 static simd_double4 SIMD_CFUNC matrix_multiply(simd_double3 __x, simd_double4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4 __x,simd_double2x4 __y)1475 static simd_double2 SIMD_CFUNC matrix_multiply(simd_double4 __x, simd_double2x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4 __x,simd_double3x4 __y)1476 static simd_double3 SIMD_CFUNC matrix_multiply(simd_double4 __x, simd_double3x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4 __x,simd_double4x4 __y)1477 static simd_double4 SIMD_CFUNC matrix_multiply(simd_double4 __x, simd_double4x4 __y) { return simd_mul(__x, __y); }
1478 
matrix_multiply(simd_float2x2 __x,simd_float2x2 __y)1479 static  simd_float2x2 SIMD_CFUNC matrix_multiply( simd_float2x2 __x,  simd_float2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x2 __x,simd_double2x2 __y)1480 static simd_double2x2 SIMD_CFUNC matrix_multiply(simd_double2x2 __x, simd_double2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x3 __x,simd_float2x2 __y)1481 static  simd_float2x3 SIMD_CFUNC matrix_multiply( simd_float2x3 __x,  simd_float2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x3 __x,simd_double2x2 __y)1482 static simd_double2x3 SIMD_CFUNC matrix_multiply(simd_double2x3 __x, simd_double2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x4 __x,simd_float2x2 __y)1483 static  simd_float2x4 SIMD_CFUNC matrix_multiply( simd_float2x4 __x,  simd_float2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x4 __x,simd_double2x2 __y)1484 static simd_double2x4 SIMD_CFUNC matrix_multiply(simd_double2x4 __x, simd_double2x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x2 __x,simd_float2x3 __y)1485 static  simd_float2x2 SIMD_CFUNC matrix_multiply( simd_float3x2 __x,  simd_float2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x2 __x,simd_double2x3 __y)1486 static simd_double2x2 SIMD_CFUNC matrix_multiply(simd_double3x2 __x, simd_double2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x3 __x,simd_float2x3 __y)1487 static  simd_float2x3 SIMD_CFUNC matrix_multiply( simd_float3x3 __x,  simd_float2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x3 __x,simd_double2x3 __y)1488 static simd_double2x3 SIMD_CFUNC matrix_multiply(simd_double3x3 __x, simd_double2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x4 __x,simd_float2x3 __y)1489 static  simd_float2x4 SIMD_CFUNC matrix_multiply( simd_float3x4 __x,  simd_float2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x4 __x,simd_double2x3 __y)1490 static simd_double2x4 SIMD_CFUNC matrix_multiply(simd_double3x4 __x, simd_double2x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x2 __x,simd_float2x4 __y)1491 static  simd_float2x2 SIMD_CFUNC matrix_multiply( simd_float4x2 __x,  simd_float2x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x2 __x,simd_double2x4 __y)1492 static simd_double2x2 SIMD_CFUNC matrix_multiply(simd_double4x2 __x, simd_double2x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x3 __x,simd_float2x4 __y)1493 static  simd_float2x3 SIMD_CFUNC matrix_multiply( simd_float4x3 __x,  simd_float2x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x3 __x,simd_double2x4 __y)1494 static simd_double2x3 SIMD_CFUNC matrix_multiply(simd_double4x3 __x, simd_double2x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x4 __x,simd_float2x4 __y)1495 static  simd_float2x4 SIMD_CFUNC matrix_multiply( simd_float4x4 __x,  simd_float2x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x4 __x,simd_double2x4 __y)1496 static simd_double2x4 SIMD_CFUNC matrix_multiply(simd_double4x4 __x, simd_double2x4 __y) { return simd_mul(__x, __y); }
1497 
matrix_multiply(simd_float2x2 __x,simd_float3x2 __y)1498 static  simd_float3x2 SIMD_CFUNC matrix_multiply( simd_float2x2 __x,  simd_float3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x2 __x,simd_double3x2 __y)1499 static simd_double3x2 SIMD_CFUNC matrix_multiply(simd_double2x2 __x, simd_double3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x3 __x,simd_float3x2 __y)1500 static  simd_float3x3 SIMD_CFUNC matrix_multiply( simd_float2x3 __x,  simd_float3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x3 __x,simd_double3x2 __y)1501 static simd_double3x3 SIMD_CFUNC matrix_multiply(simd_double2x3 __x, simd_double3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x4 __x,simd_float3x2 __y)1502 static  simd_float3x4 SIMD_CFUNC matrix_multiply( simd_float2x4 __x,  simd_float3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x4 __x,simd_double3x2 __y)1503 static simd_double3x4 SIMD_CFUNC matrix_multiply(simd_double2x4 __x, simd_double3x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x2 __x,simd_float3x3 __y)1504 static  simd_float3x2 SIMD_CFUNC matrix_multiply( simd_float3x2 __x,  simd_float3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x2 __x,simd_double3x3 __y)1505 static simd_double3x2 SIMD_CFUNC matrix_multiply(simd_double3x2 __x, simd_double3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x3 __x,simd_float3x3 __y)1506 static  simd_float3x3 SIMD_CFUNC matrix_multiply( simd_float3x3 __x,  simd_float3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x3 __x,simd_double3x3 __y)1507 static simd_double3x3 SIMD_CFUNC matrix_multiply(simd_double3x3 __x, simd_double3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x4 __x,simd_float3x3 __y)1508 static  simd_float3x4 SIMD_CFUNC matrix_multiply( simd_float3x4 __x,  simd_float3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x4 __x,simd_double3x3 __y)1509 static simd_double3x4 SIMD_CFUNC matrix_multiply(simd_double3x4 __x, simd_double3x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x2 __x,simd_float3x4 __y)1510 static  simd_float3x2 SIMD_CFUNC matrix_multiply( simd_float4x2 __x,  simd_float3x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x2 __x,simd_double3x4 __y)1511 static simd_double3x2 SIMD_CFUNC matrix_multiply(simd_double4x2 __x, simd_double3x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x3 __x,simd_float3x4 __y)1512 static  simd_float3x3 SIMD_CFUNC matrix_multiply( simd_float4x3 __x,  simd_float3x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x3 __x,simd_double3x4 __y)1513 static simd_double3x3 SIMD_CFUNC matrix_multiply(simd_double4x3 __x, simd_double3x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x4 __x,simd_float3x4 __y)1514 static  simd_float3x4 SIMD_CFUNC matrix_multiply( simd_float4x4 __x,  simd_float3x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x4 __x,simd_double3x4 __y)1515 static simd_double3x4 SIMD_CFUNC matrix_multiply(simd_double4x4 __x, simd_double3x4 __y) { return simd_mul(__x, __y); }
1516 
matrix_multiply(simd_float2x2 __x,simd_float4x2 __y)1517 static  simd_float4x2 SIMD_CFUNC matrix_multiply( simd_float2x2 __x,  simd_float4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x2 __x,simd_double4x2 __y)1518 static simd_double4x2 SIMD_CFUNC matrix_multiply(simd_double2x2 __x, simd_double4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x3 __x,simd_float4x2 __y)1519 static  simd_float4x3 SIMD_CFUNC matrix_multiply( simd_float2x3 __x,  simd_float4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x3 __x,simd_double4x2 __y)1520 static simd_double4x3 SIMD_CFUNC matrix_multiply(simd_double2x3 __x, simd_double4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float2x4 __x,simd_float4x2 __y)1521 static  simd_float4x4 SIMD_CFUNC matrix_multiply( simd_float2x4 __x,  simd_float4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double2x4 __x,simd_double4x2 __y)1522 static simd_double4x4 SIMD_CFUNC matrix_multiply(simd_double2x4 __x, simd_double4x2 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x2 __x,simd_float4x3 __y)1523 static  simd_float4x2 SIMD_CFUNC matrix_multiply( simd_float3x2 __x,  simd_float4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x2 __x,simd_double4x3 __y)1524 static simd_double4x2 SIMD_CFUNC matrix_multiply(simd_double3x2 __x, simd_double4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x3 __x,simd_float4x3 __y)1525 static  simd_float4x3 SIMD_CFUNC matrix_multiply( simd_float3x3 __x,  simd_float4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x3 __x,simd_double4x3 __y)1526 static simd_double4x3 SIMD_CFUNC matrix_multiply(simd_double3x3 __x, simd_double4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float3x4 __x,simd_float4x3 __y)1527 static  simd_float4x4 SIMD_CFUNC matrix_multiply( simd_float3x4 __x,  simd_float4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double3x4 __x,simd_double4x3 __y)1528 static simd_double4x4 SIMD_CFUNC matrix_multiply(simd_double3x4 __x, simd_double4x3 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x2 __x,simd_float4x4 __y)1529 static  simd_float4x2 SIMD_CFUNC matrix_multiply( simd_float4x2 __x,  simd_float4x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x2 __x,simd_double4x4 __y)1530 static simd_double4x2 SIMD_CFUNC matrix_multiply(simd_double4x2 __x, simd_double4x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x3 __x,simd_float4x4 __y)1531 static  simd_float4x3 SIMD_CFUNC matrix_multiply( simd_float4x3 __x,  simd_float4x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x3 __x,simd_double4x4 __y)1532 static simd_double4x3 SIMD_CFUNC matrix_multiply(simd_double4x3 __x, simd_double4x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_float4x4 __x,simd_float4x4 __y)1533 static  simd_float4x4 SIMD_CFUNC matrix_multiply( simd_float4x4 __x,  simd_float4x4 __y) { return simd_mul(__x, __y); }
matrix_multiply(simd_double4x4 __x,simd_double4x4 __y)1534 static simd_double4x4 SIMD_CFUNC matrix_multiply(simd_double4x4 __x, simd_double4x4 __y) { return simd_mul(__x, __y); }
1535 
simd_equal(simd_float2x2 __x,simd_float2x2 __y)1536 static simd_bool SIMD_CFUNC simd_equal(simd_float2x2 __x, simd_float2x2 __y) {
1537     return simd_all((__x.columns[0] == __y.columns[0]) &
1538                       (__x.columns[1] == __y.columns[1]));
1539 }
simd_equal(simd_float2x3 __x,simd_float2x3 __y)1540 static simd_bool SIMD_CFUNC simd_equal(simd_float2x3 __x, simd_float2x3 __y) {
1541     return simd_all((__x.columns[0] == __y.columns[0]) &
1542                       (__x.columns[1] == __y.columns[1]));
1543 }
simd_equal(simd_float2x4 __x,simd_float2x4 __y)1544 static simd_bool SIMD_CFUNC simd_equal(simd_float2x4 __x, simd_float2x4 __y) {
1545     return simd_all((__x.columns[0] == __y.columns[0]) &
1546                       (__x.columns[1] == __y.columns[1]));
1547 }
simd_equal(simd_float3x2 __x,simd_float3x2 __y)1548 static simd_bool SIMD_CFUNC simd_equal(simd_float3x2 __x, simd_float3x2 __y) {
1549     return simd_all((__x.columns[0] == __y.columns[0]) &
1550                       (__x.columns[1] == __y.columns[1]) &
1551                       (__x.columns[2] == __y.columns[2]));
1552 }
simd_equal(simd_float3x3 __x,simd_float3x3 __y)1553 static simd_bool SIMD_CFUNC simd_equal(simd_float3x3 __x, simd_float3x3 __y) {
1554     return simd_all((__x.columns[0] == __y.columns[0]) &
1555                       (__x.columns[1] == __y.columns[1]) &
1556                       (__x.columns[2] == __y.columns[2]));
1557 }
simd_equal(simd_float3x4 __x,simd_float3x4 __y)1558 static simd_bool SIMD_CFUNC simd_equal(simd_float3x4 __x, simd_float3x4 __y) {
1559     return simd_all((__x.columns[0] == __y.columns[0]) &
1560                       (__x.columns[1] == __y.columns[1]) &
1561                       (__x.columns[2] == __y.columns[2]));
1562 }
simd_equal(simd_float4x2 __x,simd_float4x2 __y)1563 static simd_bool SIMD_CFUNC simd_equal(simd_float4x2 __x, simd_float4x2 __y) {
1564     return simd_all((__x.columns[0] == __y.columns[0]) &
1565                       (__x.columns[1] == __y.columns[1]) &
1566                       (__x.columns[2] == __y.columns[2]) &
1567                       (__x.columns[3] == __y.columns[3]));
1568 }
simd_equal(simd_float4x3 __x,simd_float4x3 __y)1569 static simd_bool SIMD_CFUNC simd_equal(simd_float4x3 __x, simd_float4x3 __y) {
1570     return simd_all((__x.columns[0] == __y.columns[0]) &
1571                       (__x.columns[1] == __y.columns[1]) &
1572                       (__x.columns[2] == __y.columns[2]) &
1573                       (__x.columns[3] == __y.columns[3]));
1574 }
simd_equal(simd_float4x4 __x,simd_float4x4 __y)1575 static simd_bool SIMD_CFUNC simd_equal(simd_float4x4 __x, simd_float4x4 __y) {
1576     return simd_all((__x.columns[0] == __y.columns[0]) &
1577                       (__x.columns[1] == __y.columns[1]) &
1578                       (__x.columns[2] == __y.columns[2]) &
1579                       (__x.columns[3] == __y.columns[3]));
1580 }
simd_equal(simd_double2x2 __x,simd_double2x2 __y)1581 static simd_bool SIMD_CFUNC simd_equal(simd_double2x2 __x, simd_double2x2 __y) {
1582     return simd_all((__x.columns[0] == __y.columns[0]) &
1583                       (__x.columns[1] == __y.columns[1]));
1584 }
simd_equal(simd_double2x3 __x,simd_double2x3 __y)1585 static simd_bool SIMD_CFUNC simd_equal(simd_double2x3 __x, simd_double2x3 __y) {
1586     return simd_all((__x.columns[0] == __y.columns[0]) &
1587                       (__x.columns[1] == __y.columns[1]));
1588 }
simd_equal(simd_double2x4 __x,simd_double2x4 __y)1589 static simd_bool SIMD_CFUNC simd_equal(simd_double2x4 __x, simd_double2x4 __y) {
1590     return simd_all((__x.columns[0] == __y.columns[0]) &
1591                       (__x.columns[1] == __y.columns[1]));
1592 }
simd_equal(simd_double3x2 __x,simd_double3x2 __y)1593 static simd_bool SIMD_CFUNC simd_equal(simd_double3x2 __x, simd_double3x2 __y) {
1594     return simd_all((__x.columns[0] == __y.columns[0]) &
1595                       (__x.columns[1] == __y.columns[1]) &
1596                       (__x.columns[2] == __y.columns[2]));
1597 }
simd_equal(simd_double3x3 __x,simd_double3x3 __y)1598 static simd_bool SIMD_CFUNC simd_equal(simd_double3x3 __x, simd_double3x3 __y) {
1599     return simd_all((__x.columns[0] == __y.columns[0]) &
1600                       (__x.columns[1] == __y.columns[1]) &
1601                       (__x.columns[2] == __y.columns[2]));
1602 }
simd_equal(simd_double3x4 __x,simd_double3x4 __y)1603 static simd_bool SIMD_CFUNC simd_equal(simd_double3x4 __x, simd_double3x4 __y) {
1604     return simd_all((__x.columns[0] == __y.columns[0]) &
1605                       (__x.columns[1] == __y.columns[1]) &
1606                       (__x.columns[2] == __y.columns[2]));
1607 }
simd_equal(simd_double4x2 __x,simd_double4x2 __y)1608 static simd_bool SIMD_CFUNC simd_equal(simd_double4x2 __x, simd_double4x2 __y) {
1609     return simd_all((__x.columns[0] == __y.columns[0]) &
1610                       (__x.columns[1] == __y.columns[1]) &
1611                       (__x.columns[2] == __y.columns[2]) &
1612                       (__x.columns[3] == __y.columns[3]));
1613 }
simd_equal(simd_double4x3 __x,simd_double4x3 __y)1614 static simd_bool SIMD_CFUNC simd_equal(simd_double4x3 __x, simd_double4x3 __y) {
1615     return simd_all((__x.columns[0] == __y.columns[0]) &
1616                       (__x.columns[1] == __y.columns[1]) &
1617                       (__x.columns[2] == __y.columns[2]) &
1618                       (__x.columns[3] == __y.columns[3]));
1619 }
simd_equal(simd_double4x4 __x,simd_double4x4 __y)1620 static simd_bool SIMD_CFUNC simd_equal(simd_double4x4 __x, simd_double4x4 __y) {
1621     return simd_all((__x.columns[0] == __y.columns[0]) &
1622                       (__x.columns[1] == __y.columns[1]) &
1623                       (__x.columns[2] == __y.columns[2]) &
1624                       (__x.columns[3] == __y.columns[3]));
1625 }
1626 
simd_almost_equal_elements(simd_float2x2 __x,simd_float2x2 __y,float __tol)1627 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float2x2 __x, simd_float2x2 __y, float __tol) {
1628     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1629                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol));
1630 }
simd_almost_equal_elements(simd_float2x3 __x,simd_float2x3 __y,float __tol)1631 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float2x3 __x, simd_float2x3 __y, float __tol) {
1632     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1633                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol));
1634 }
simd_almost_equal_elements(simd_float2x4 __x,simd_float2x4 __y,float __tol)1635 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float2x4 __x, simd_float2x4 __y, float __tol) {
1636     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1637                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol));
1638 }
simd_almost_equal_elements(simd_float3x2 __x,simd_float3x2 __y,float __tol)1639 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float3x2 __x, simd_float3x2 __y, float __tol) {
1640     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1641                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1642                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol));
1643 }
simd_almost_equal_elements(simd_float3x3 __x,simd_float3x3 __y,float __tol)1644 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float3x3 __x, simd_float3x3 __y, float __tol) {
1645     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1646                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1647                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol));
1648 }
simd_almost_equal_elements(simd_float3x4 __x,simd_float3x4 __y,float __tol)1649 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float3x4 __x, simd_float3x4 __y, float __tol) {
1650     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1651                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1652                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol));
1653 }
simd_almost_equal_elements(simd_float4x2 __x,simd_float4x2 __y,float __tol)1654 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float4x2 __x, simd_float4x2 __y, float __tol) {
1655     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1656                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1657                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol) &
1658                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol));
1659 }
simd_almost_equal_elements(simd_float4x3 __x,simd_float4x3 __y,float __tol)1660 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float4x3 __x, simd_float4x3 __y, float __tol) {
1661     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1662                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1663                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol) &
1664                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol));
1665 }
simd_almost_equal_elements(simd_float4x4 __x,simd_float4x4 __y,float __tol)1666 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_float4x4 __x, simd_float4x4 __y, float __tol) {
1667     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1668                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1669                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol) &
1670                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol));
1671 }
simd_almost_equal_elements(simd_double2x2 __x,simd_double2x2 __y,double __tol)1672 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double2x2 __x, simd_double2x2 __y, double __tol) {
1673     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1674                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol));
1675 }
simd_almost_equal_elements(simd_double2x3 __x,simd_double2x3 __y,double __tol)1676 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double2x3 __x, simd_double2x3 __y, double __tol) {
1677     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1678                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol));
1679 }
simd_almost_equal_elements(simd_double2x4 __x,simd_double2x4 __y,double __tol)1680 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double2x4 __x, simd_double2x4 __y, double __tol) {
1681     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1682                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol));
1683 }
simd_almost_equal_elements(simd_double3x2 __x,simd_double3x2 __y,double __tol)1684 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double3x2 __x, simd_double3x2 __y, double __tol) {
1685     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1686                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1687                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol));
1688 }
simd_almost_equal_elements(simd_double3x3 __x,simd_double3x3 __y,double __tol)1689 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double3x3 __x, simd_double3x3 __y, double __tol) {
1690     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1691                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1692                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol));
1693 }
simd_almost_equal_elements(simd_double3x4 __x,simd_double3x4 __y,double __tol)1694 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double3x4 __x, simd_double3x4 __y, double __tol) {
1695     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1696                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1697                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol));
1698 }
simd_almost_equal_elements(simd_double4x2 __x,simd_double4x2 __y,double __tol)1699 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double4x2 __x, simd_double4x2 __y, double __tol) {
1700     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1701                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1702                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol) &
1703                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol));
1704 }
simd_almost_equal_elements(simd_double4x3 __x,simd_double4x3 __y,double __tol)1705 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double4x3 __x, simd_double4x3 __y, double __tol) {
1706     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1707                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1708                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol) &
1709                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol));
1710 }
simd_almost_equal_elements(simd_double4x4 __x,simd_double4x4 __y,double __tol)1711 static simd_bool SIMD_CFUNC simd_almost_equal_elements(simd_double4x4 __x, simd_double4x4 __y, double __tol) {
1712     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol) &
1713                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol) &
1714                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol) &
1715                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol));
1716 }
1717 
simd_almost_equal_elements_relative(simd_float2x2 __x,simd_float2x2 __y,float __tol)1718 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float2x2 __x, simd_float2x2 __y, float __tol) {
1719     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1720                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])));
1721 }
simd_almost_equal_elements_relative(simd_float2x3 __x,simd_float2x3 __y,float __tol)1722 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float2x3 __x, simd_float2x3 __y, float __tol) {
1723     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1724                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])));
1725 }
simd_almost_equal_elements_relative(simd_float2x4 __x,simd_float2x4 __y,float __tol)1726 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float2x4 __x, simd_float2x4 __y, float __tol) {
1727     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1728                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])));
1729 }
simd_almost_equal_elements_relative(simd_float3x2 __x,simd_float3x2 __y,float __tol)1730 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float3x2 __x, simd_float3x2 __y, float __tol) {
1731     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1732                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1733                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])));
1734 }
simd_almost_equal_elements_relative(simd_float3x3 __x,simd_float3x3 __y,float __tol)1735 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float3x3 __x, simd_float3x3 __y, float __tol) {
1736     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1737                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1738                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])));
1739 }
simd_almost_equal_elements_relative(simd_float3x4 __x,simd_float3x4 __y,float __tol)1740 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float3x4 __x, simd_float3x4 __y, float __tol) {
1741     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1742                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1743                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])));
1744 }
simd_almost_equal_elements_relative(simd_float4x2 __x,simd_float4x2 __y,float __tol)1745 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float4x2 __x, simd_float4x2 __y, float __tol) {
1746     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1747                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1748                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])) &
1749                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol*__tg_fabs(__x.columns[3])));
1750 }
simd_almost_equal_elements_relative(simd_float4x3 __x,simd_float4x3 __y,float __tol)1751 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float4x3 __x, simd_float4x3 __y, float __tol) {
1752     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1753                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1754                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])) &
1755                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol*__tg_fabs(__x.columns[3])));
1756 }
simd_almost_equal_elements_relative(simd_float4x4 __x,simd_float4x4 __y,float __tol)1757 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_float4x4 __x, simd_float4x4 __y, float __tol) {
1758     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1759                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1760                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])) &
1761                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol*__tg_fabs(__x.columns[3])));
1762 }
simd_almost_equal_elements_relative(simd_double2x2 __x,simd_double2x2 __y,double __tol)1763 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double2x2 __x, simd_double2x2 __y, double __tol) {
1764     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1765                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])));
1766 }
simd_almost_equal_elements_relative(simd_double2x3 __x,simd_double2x3 __y,double __tol)1767 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double2x3 __x, simd_double2x3 __y, double __tol) {
1768     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1769                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])));
1770 }
simd_almost_equal_elements_relative(simd_double2x4 __x,simd_double2x4 __y,double __tol)1771 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double2x4 __x, simd_double2x4 __y, double __tol) {
1772     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1773                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])));
1774 }
simd_almost_equal_elements_relative(simd_double3x2 __x,simd_double3x2 __y,double __tol)1775 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double3x2 __x, simd_double3x2 __y, double __tol) {
1776     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1777                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1778                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])));
1779 }
simd_almost_equal_elements_relative(simd_double3x3 __x,simd_double3x3 __y,double __tol)1780 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double3x3 __x, simd_double3x3 __y, double __tol) {
1781     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1782                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1783                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])));
1784 }
simd_almost_equal_elements_relative(simd_double3x4 __x,simd_double3x4 __y,double __tol)1785 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double3x4 __x, simd_double3x4 __y, double __tol) {
1786     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1787                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1788                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])));
1789 }
simd_almost_equal_elements_relative(simd_double4x2 __x,simd_double4x2 __y,double __tol)1790 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double4x2 __x, simd_double4x2 __y, double __tol) {
1791     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1792                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1793                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])) &
1794                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol*__tg_fabs(__x.columns[3])));
1795 }
simd_almost_equal_elements_relative(simd_double4x3 __x,simd_double4x3 __y,double __tol)1796 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double4x3 __x, simd_double4x3 __y, double __tol) {
1797     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1798                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1799                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])) &
1800                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol*__tg_fabs(__x.columns[3])));
1801 }
simd_almost_equal_elements_relative(simd_double4x4 __x,simd_double4x4 __y,double __tol)1802 static simd_bool SIMD_CFUNC simd_almost_equal_elements_relative(simd_double4x4 __x, simd_double4x4 __y, double __tol) {
1803     return simd_all((__tg_fabs(__x.columns[0] - __y.columns[0]) <= __tol*__tg_fabs(__x.columns[0])) &
1804                       (__tg_fabs(__x.columns[1] - __y.columns[1]) <= __tol*__tg_fabs(__x.columns[1])) &
1805                       (__tg_fabs(__x.columns[2] - __y.columns[2]) <= __tol*__tg_fabs(__x.columns[2])) &
1806                       (__tg_fabs(__x.columns[3] - __y.columns[3]) <= __tol*__tg_fabs(__x.columns[3])));
1807 }
1808 
1809 #ifdef __cplusplus
1810 }
1811 #endif
1812 #endif /* SIMD_COMPILER_HAS_REQUIRED_FEATURES */
1813 #endif /* __SIMD_HEADER__ */