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