1 | #include <functional> |
2 | #include "taichi/ir/frontend_ir.h" |
3 | #include "taichi/ir/ir.h" |
4 | #include "taichi/ir/expression_ops.h" |
5 | |
6 | namespace taichi::lang { |
7 | |
8 | template <typename Tf, typename Ti> |
9 | Expr svd_bitwise_or(const Expr &a, const Expr &b) { |
10 | return bit_cast<Tf>(bit_cast<Ti>(a) | bit_cast<Ti>(b)); |
11 | } |
12 | |
13 | template <typename Tf, typename Ti> |
14 | Expr svd_bitwise_xor(const Expr &a, const Expr &b) { |
15 | return bit_cast<Tf>(bit_cast<Ti>(a) ^ bit_cast<Ti>(b)); |
16 | } |
17 | |
18 | template <typename Tf, typename Ti> |
19 | Expr svd_bitwise_and(const Expr &a, const Expr &b) { |
20 | return bit_cast<Tf>(bit_cast<Ti>(a) & bit_cast<Ti>(b)); |
21 | } |
22 | |
23 | template <typename Tf, typename Ti> |
24 | std::tuple<Expr, |
25 | Expr, |
26 | Expr, |
27 | Expr, |
28 | Expr, |
29 | Expr, |
30 | Expr, |
31 | Expr, |
32 | Expr, |
33 | Expr, |
34 | Expr, |
35 | Expr, |
36 | Expr, |
37 | Expr, |
38 | Expr, |
39 | Expr, |
40 | Expr, |
41 | Expr, |
42 | Expr, |
43 | Expr, |
44 | Expr> |
45 | sifakis_svd_export(ASTBuilder *ast_builder, const Expr &mat, int num_iters) { |
46 | auto expanded_exprs = ast_builder->expand_exprs({mat}); |
47 | TI_ASSERT(expanded_exprs.size() == 9); |
48 | |
49 | Expr a00 = expanded_exprs[0]; |
50 | Expr a01 = expanded_exprs[1]; |
51 | Expr a02 = expanded_exprs[2]; |
52 | Expr a10 = expanded_exprs[3]; |
53 | Expr a11 = expanded_exprs[4]; |
54 | Expr a12 = expanded_exprs[5]; |
55 | Expr a20 = expanded_exprs[6]; |
56 | Expr a21 = expanded_exprs[7]; |
57 | Expr a22 = expanded_exprs[8]; |
58 | |
59 | static_assert(sizeof(Tf) == sizeof(Ti), "" ); |
60 | constexpr Tf Four_Gamma_Squared = 5.82842712474619f; |
61 | constexpr Tf Sine_Pi_Over_Eight = 0.3826834323650897f; |
62 | constexpr Tf Cosine_Pi_Over_Eight = 0.9238795325112867f; |
63 | |
64 | std::string tb = "" ; |
65 | auto Var = [ast_builder, tb](const taichi::lang::Expr &x) { |
66 | return ast_builder->make_var(x, tb); |
67 | }; |
68 | |
69 | auto Sfour_gamma_squared = Var(Expr(Tf(0.0))); |
70 | auto Ssine_pi_over_eight = Var(Expr(Tf(0.0))); |
71 | auto Scosine_pi_over_eight = Var(Expr(Tf(0.0))); |
72 | auto Sone_half = Var(Expr(Tf(0.0))); |
73 | auto Sone = Var(Expr(Tf(0.0))); |
74 | auto Stiny_number = Var(Expr(Tf(0.0))); |
75 | auto Ssmall_number = Var(Expr(Tf(0.0))); |
76 | auto Sa11 = Var(Expr(Tf(0.0))); |
77 | auto Sa21 = Var(Expr(Tf(0.0))); |
78 | auto Sa31 = Var(Expr(Tf(0.0))); |
79 | auto Sa12 = Var(Expr(Tf(0.0))); |
80 | auto Sa22 = Var(Expr(Tf(0.0))); |
81 | auto Sa32 = Var(Expr(Tf(0.0))); |
82 | auto Sa13 = Var(Expr(Tf(0.0))); |
83 | auto Sa23 = Var(Expr(Tf(0.0))); |
84 | auto Sa33 = Var(Expr(Tf(0.0))); |
85 | auto Sv11 = Var(Expr(Tf(0.0))); |
86 | auto Sv21 = Var(Expr(Tf(0.0))); |
87 | auto Sv31 = Var(Expr(Tf(0.0))); |
88 | auto Sv12 = Var(Expr(Tf(0.0))); |
89 | auto Sv22 = Var(Expr(Tf(0.0))); |
90 | auto Sv32 = Var(Expr(Tf(0.0))); |
91 | auto Sv13 = Var(Expr(Tf(0.0))); |
92 | auto Sv23 = Var(Expr(Tf(0.0))); |
93 | auto Sv33 = Var(Expr(Tf(0.0))); |
94 | auto Su11 = Var(Expr(Tf(0.0))); |
95 | auto Su21 = Var(Expr(Tf(0.0))); |
96 | auto Su31 = Var(Expr(Tf(0.0))); |
97 | auto Su12 = Var(Expr(Tf(0.0))); |
98 | auto Su22 = Var(Expr(Tf(0.0))); |
99 | auto Su32 = Var(Expr(Tf(0.0))); |
100 | auto Su13 = Var(Expr(Tf(0.0))); |
101 | auto Su23 = Var(Expr(Tf(0.0))); |
102 | auto Su33 = Var(Expr(Tf(0.0))); |
103 | auto Sc = Var(Expr(Tf(0.0))); |
104 | auto Ss = Var(Expr(Tf(0.0))); |
105 | auto Sch = Var(Expr(Tf(0.0))); |
106 | auto Ssh = Var(Expr(Tf(0.0))); |
107 | auto Stmp1 = Var(Expr(Tf(0.0))); |
108 | auto Stmp2 = Var(Expr(Tf(0.0))); |
109 | auto Stmp3 = Var(Expr(Tf(0.0))); |
110 | auto Stmp4 = Var(Expr(Tf(0.0))); |
111 | auto Stmp5 = Var(Expr(Tf(0.0))); |
112 | auto Sqvs = Var(Expr(Tf(0.0))); |
113 | auto Sqvvx = Var(Expr(Tf(0.0))); |
114 | auto Sqvvy = Var(Expr(Tf(0.0))); |
115 | auto Sqvvz = Var(Expr(Tf(0.0))); |
116 | auto Ss11 = Var(Expr(Tf(0.0))); |
117 | auto Ss21 = Var(Expr(Tf(0.0))); |
118 | auto Ss31 = Var(Expr(Tf(0.0))); |
119 | auto Ss22 = Var(Expr(Tf(0.0))); |
120 | auto Ss32 = Var(Expr(Tf(0.0))); |
121 | auto Ss33 = Var(Expr(Tf(0.0))); |
122 | ast_builder->insert_assignment(Sfour_gamma_squared, Expr(Four_Gamma_Squared)); |
123 | ast_builder->insert_assignment(Ssine_pi_over_eight, Expr(Sine_Pi_Over_Eight)); |
124 | ast_builder->insert_assignment(Scosine_pi_over_eight, |
125 | Expr(Cosine_Pi_Over_Eight)); |
126 | ast_builder->insert_assignment(Sone_half, Expr(Tf(0.5f))); |
127 | ast_builder->insert_assignment(Sone, Expr(Tf(1.0f))); |
128 | ast_builder->insert_assignment(Stiny_number, Expr(Tf(1.e-20f))); |
129 | ast_builder->insert_assignment(Ssmall_number, Expr(Tf(1.e-12f))); |
130 | ast_builder->insert_assignment(Sa11, a00); |
131 | ast_builder->insert_assignment(Sa21, a10); |
132 | ast_builder->insert_assignment(Sa31, a20); |
133 | ast_builder->insert_assignment(Sa12, a01); |
134 | ast_builder->insert_assignment(Sa22, a11); |
135 | ast_builder->insert_assignment(Sa32, a21); |
136 | ast_builder->insert_assignment(Sa13, a02); |
137 | ast_builder->insert_assignment(Sa23, a12); |
138 | ast_builder->insert_assignment(Sa33, a22); |
139 | ast_builder->insert_assignment(Sqvs, Expr(Tf(1.0f))); |
140 | ast_builder->insert_assignment(Sqvvx, Expr(Tf(0.0f))); |
141 | ast_builder->insert_assignment(Sqvvy, Expr(Tf(0.0f))); |
142 | ast_builder->insert_assignment(Sqvvz, Expr(Tf(0.0f))); |
143 | ast_builder->insert_assignment(Ss11, Sa11 * Sa11); |
144 | ast_builder->insert_assignment(Stmp1, Sa21 * Sa21); |
145 | ast_builder->insert_assignment(Ss11, Stmp1 + Ss11); |
146 | ast_builder->insert_assignment(Stmp1, Sa31 * Sa31); |
147 | ast_builder->insert_assignment(Ss11, Stmp1 + Ss11); |
148 | ast_builder->insert_assignment(Ss21, Sa12 * Sa11); |
149 | ast_builder->insert_assignment(Stmp1, Sa22 * Sa21); |
150 | ast_builder->insert_assignment(Ss21, Stmp1 + Ss21); |
151 | ast_builder->insert_assignment(Stmp1, Sa32 * Sa31); |
152 | ast_builder->insert_assignment(Ss21, Stmp1 + Ss21); |
153 | ast_builder->insert_assignment(Ss31, Sa13 * Sa11); |
154 | ast_builder->insert_assignment(Stmp1, Sa23 * Sa21); |
155 | ast_builder->insert_assignment(Ss31, Stmp1 + Ss31); |
156 | ast_builder->insert_assignment(Stmp1, Sa33 * Sa31); |
157 | ast_builder->insert_assignment(Ss31, Stmp1 + Ss31); |
158 | ast_builder->insert_assignment(Ss22, Sa12 * Sa12); |
159 | ast_builder->insert_assignment(Stmp1, Sa22 * Sa22); |
160 | ast_builder->insert_assignment(Ss22, Stmp1 + Ss22); |
161 | ast_builder->insert_assignment(Stmp1, Sa32 * Sa32); |
162 | ast_builder->insert_assignment(Ss22, Stmp1 + Ss22); |
163 | ast_builder->insert_assignment(Ss32, Sa13 * Sa12); |
164 | ast_builder->insert_assignment(Stmp1, Sa23 * Sa22); |
165 | ast_builder->insert_assignment(Ss32, Stmp1 + Ss32); |
166 | ast_builder->insert_assignment(Stmp1, Sa33 * Sa32); |
167 | ast_builder->insert_assignment(Ss32, Stmp1 + Ss32); |
168 | ast_builder->insert_assignment(Ss33, Sa13 * Sa13); |
169 | ast_builder->insert_assignment(Stmp1, Sa23 * Sa23); |
170 | ast_builder->insert_assignment(Ss33, Stmp1 + Ss33); |
171 | ast_builder->insert_assignment(Stmp1, Sa33 * Sa33); |
172 | ast_builder->insert_assignment(Ss33, Stmp1 + Ss33); |
173 | ast_builder->strictly_serialize(); |
174 | ast_builder->insert_for(Expr(0), Expr(num_iters), [&](Expr sweep) { |
175 | ast_builder->insert_assignment(Ssh, Ss21 * Sone_half); |
176 | ast_builder->insert_assignment(Stmp5, Ss11 - Ss22); |
177 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
178 | ast_builder->insert_assignment( |
179 | Stmp1, |
180 | bit_cast<Tf>(expr_select(Stmp2 >= Stiny_number, |
181 | Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
182 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Stmp1, Ssh)); |
183 | ast_builder->insert_assignment(Sch, svd_bitwise_and<Tf, Ti>(Stmp1, Stmp5)); |
184 | ast_builder->insert_assignment( |
185 | Stmp2, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Sone)); |
186 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp2)); |
187 | ast_builder->insert_assignment(Stmp1, Ssh * Ssh); |
188 | ast_builder->insert_assignment(Stmp2, Sch * Sch); |
189 | ast_builder->insert_assignment(Stmp3, Stmp1 + Stmp2); |
190 | ast_builder->insert_assignment(Stmp4, rsqrt(Stmp3)); |
191 | ast_builder->insert_assignment(Ssh, Stmp4 * Ssh); |
192 | ast_builder->insert_assignment(Sch, Stmp4 * Sch); |
193 | ast_builder->insert_assignment(Stmp1, Sfour_gamma_squared * Stmp1); |
194 | ast_builder->insert_assignment( |
195 | Stmp1, bit_cast<Tf>(expr_select( |
196 | Stmp2 <= Stmp1, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
197 | ast_builder->insert_assignment( |
198 | Stmp2, svd_bitwise_and<Tf, Ti>(Ssine_pi_over_eight, Stmp1)); |
199 | ast_builder->insert_assignment( |
200 | Ssh, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Ssh)); |
201 | ast_builder->insert_assignment(Ssh, svd_bitwise_or<Tf, Ti>(Ssh, Stmp2)); |
202 | ast_builder->insert_assignment( |
203 | Stmp2, svd_bitwise_and<Tf, Ti>(Scosine_pi_over_eight, Stmp1)); |
204 | ast_builder->insert_assignment( |
205 | Sch, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Sch)); |
206 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp2)); |
207 | ast_builder->insert_assignment(Stmp1, Ssh * Ssh); |
208 | ast_builder->insert_assignment(Stmp2, Sch * Sch); |
209 | ast_builder->insert_assignment(Sc, Stmp2 - Stmp1); |
210 | ast_builder->insert_assignment(Ss, Sch * Ssh); |
211 | ast_builder->insert_assignment(Ss, Ss + Ss); |
212 | ast_builder->insert_assignment(Stmp3, Stmp1 + Stmp2); |
213 | ast_builder->insert_assignment(Ss33, Ss33 * Stmp3); |
214 | ast_builder->insert_assignment(Ss31, Ss31 * Stmp3); |
215 | ast_builder->insert_assignment(Ss32, Ss32 * Stmp3); |
216 | ast_builder->insert_assignment(Ss33, Ss33 * Stmp3); |
217 | ast_builder->insert_assignment(Stmp1, Ss * Ss31); |
218 | ast_builder->insert_assignment(Stmp2, Ss * Ss32); |
219 | ast_builder->insert_assignment(Ss31, Sc * Ss31); |
220 | ast_builder->insert_assignment(Ss32, Sc * Ss32); |
221 | ast_builder->insert_assignment(Ss31, Stmp2 + Ss31); |
222 | ast_builder->insert_assignment(Ss32, Ss32 - Stmp1); |
223 | ast_builder->insert_assignment(Stmp2, Ss * Ss); |
224 | ast_builder->insert_assignment(Stmp1, Ss22 * Stmp2); |
225 | ast_builder->insert_assignment(Stmp3, Ss11 * Stmp2); |
226 | ast_builder->insert_assignment(Stmp4, Sc * Sc); |
227 | ast_builder->insert_assignment(Ss11, Ss11 * Stmp4); |
228 | ast_builder->insert_assignment(Ss22, Ss22 * Stmp4); |
229 | ast_builder->insert_assignment(Ss11, Ss11 + Stmp1); |
230 | ast_builder->insert_assignment(Ss22, Ss22 + Stmp3); |
231 | ast_builder->insert_assignment(Stmp4, Stmp4 - Stmp2); |
232 | ast_builder->insert_assignment(Stmp2, Ss21 + Ss21); |
233 | ast_builder->insert_assignment(Ss21, Ss21 * Stmp4); |
234 | ast_builder->insert_assignment(Stmp4, Sc * Ss); |
235 | ast_builder->insert_assignment(Stmp2, Stmp2 * Stmp4); |
236 | ast_builder->insert_assignment(Stmp5, Stmp5 * Stmp4); |
237 | ast_builder->insert_assignment(Ss11, Ss11 + Stmp2); |
238 | ast_builder->insert_assignment(Ss21, Ss21 - Stmp5); |
239 | ast_builder->insert_assignment(Ss22, Ss22 - Stmp2); |
240 | ast_builder->insert_assignment(Stmp1, Ssh * Sqvvx); |
241 | ast_builder->insert_assignment(Stmp2, Ssh * Sqvvy); |
242 | ast_builder->insert_assignment(Stmp3, Ssh * Sqvvz); |
243 | ast_builder->insert_assignment(Ssh, Ssh * Sqvs); |
244 | ast_builder->insert_assignment(Sqvs, Sch * Sqvs); |
245 | ast_builder->insert_assignment(Sqvvx, Sch * Sqvvx); |
246 | ast_builder->insert_assignment(Sqvvy, Sch * Sqvvy); |
247 | ast_builder->insert_assignment(Sqvvz, Sch * Sqvvz); |
248 | ast_builder->insert_assignment(Sqvvz, Sqvvz + Ssh); |
249 | ast_builder->insert_assignment(Sqvs, Sqvs - Stmp3); |
250 | ast_builder->insert_assignment(Sqvvx, Sqvvx + Stmp2); |
251 | ast_builder->insert_assignment(Sqvvy, Sqvvy - Stmp1); |
252 | ast_builder->insert_assignment(Ssh, Ss32 * Sone_half); |
253 | ast_builder->insert_assignment(Stmp5, Ss22 - Ss33); |
254 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
255 | ast_builder->insert_assignment( |
256 | Stmp1, |
257 | bit_cast<Tf>(expr_select(Stmp2 >= Stiny_number, |
258 | Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
259 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Stmp1, Ssh)); |
260 | ast_builder->insert_assignment(Sch, svd_bitwise_and<Tf, Ti>(Stmp1, Stmp5)); |
261 | ast_builder->insert_assignment( |
262 | Stmp2, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Sone)); |
263 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp2)); |
264 | ast_builder->insert_assignment(Stmp1, Ssh * Ssh); |
265 | ast_builder->insert_assignment(Stmp2, Sch * Sch); |
266 | ast_builder->insert_assignment(Stmp3, Stmp1 + Stmp2); |
267 | ast_builder->insert_assignment(Stmp4, rsqrt(Stmp3)); |
268 | ast_builder->insert_assignment(Ssh, Stmp4 * Ssh); |
269 | ast_builder->insert_assignment(Sch, Stmp4 * Sch); |
270 | ast_builder->insert_assignment(Stmp1, Sfour_gamma_squared * Stmp1); |
271 | ast_builder->insert_assignment( |
272 | Stmp1, bit_cast<Tf>(expr_select( |
273 | Stmp2 <= Stmp1, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
274 | ast_builder->insert_assignment( |
275 | Stmp2, svd_bitwise_and<Tf, Ti>(Ssine_pi_over_eight, Stmp1)); |
276 | ast_builder->insert_assignment( |
277 | Ssh, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Ssh)); |
278 | ast_builder->insert_assignment(Ssh, svd_bitwise_or<Tf, Ti>(Ssh, Stmp2)); |
279 | ast_builder->insert_assignment( |
280 | Stmp2, svd_bitwise_and<Tf, Ti>(Scosine_pi_over_eight, Stmp1)); |
281 | ast_builder->insert_assignment( |
282 | Sch, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Sch)); |
283 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp2)); |
284 | ast_builder->insert_assignment(Stmp1, Ssh * Ssh); |
285 | ast_builder->insert_assignment(Stmp2, Sch * Sch); |
286 | ast_builder->insert_assignment(Sc, Stmp2 - Stmp1); |
287 | ast_builder->insert_assignment(Ss, Sch * Ssh); |
288 | ast_builder->insert_assignment(Ss, Ss + Ss); |
289 | ast_builder->insert_assignment(Stmp3, Stmp1 + Stmp2); |
290 | ast_builder->insert_assignment(Ss11, Ss11 * Stmp3); |
291 | ast_builder->insert_assignment(Ss21, Ss21 * Stmp3); |
292 | ast_builder->insert_assignment(Ss31, Ss31 * Stmp3); |
293 | ast_builder->insert_assignment(Ss11, Ss11 * Stmp3); |
294 | ast_builder->insert_assignment(Stmp1, Ss * Ss21); |
295 | ast_builder->insert_assignment(Stmp2, Ss * Ss31); |
296 | ast_builder->insert_assignment(Ss21, Sc * Ss21); |
297 | ast_builder->insert_assignment(Ss31, Sc * Ss31); |
298 | ast_builder->insert_assignment(Ss21, Stmp2 + Ss21); |
299 | ast_builder->insert_assignment(Ss31, Ss31 - Stmp1); |
300 | ast_builder->insert_assignment(Stmp2, Ss * Ss); |
301 | ast_builder->insert_assignment(Stmp1, Ss33 * Stmp2); |
302 | ast_builder->insert_assignment(Stmp3, Ss22 * Stmp2); |
303 | ast_builder->insert_assignment(Stmp4, Sc * Sc); |
304 | ast_builder->insert_assignment(Ss22, Ss22 * Stmp4); |
305 | ast_builder->insert_assignment(Ss33, Ss33 * Stmp4); |
306 | ast_builder->insert_assignment(Ss22, Ss22 + Stmp1); |
307 | ast_builder->insert_assignment(Ss33, Ss33 + Stmp3); |
308 | ast_builder->insert_assignment(Stmp4, Stmp4 - Stmp2); |
309 | ast_builder->insert_assignment(Stmp2, Ss32 + Ss32); |
310 | ast_builder->insert_assignment(Ss32, Ss32 * Stmp4); |
311 | ast_builder->insert_assignment(Stmp4, Sc * Ss); |
312 | ast_builder->insert_assignment(Stmp2, Stmp2 * Stmp4); |
313 | ast_builder->insert_assignment(Stmp5, Stmp5 * Stmp4); |
314 | ast_builder->insert_assignment(Ss22, Ss22 + Stmp2); |
315 | ast_builder->insert_assignment(Ss32, Ss32 - Stmp5); |
316 | ast_builder->insert_assignment(Ss33, Ss33 - Stmp2); |
317 | ast_builder->insert_assignment(Stmp1, Ssh * Sqvvx); |
318 | ast_builder->insert_assignment(Stmp2, Ssh * Sqvvy); |
319 | ast_builder->insert_assignment(Stmp3, Ssh * Sqvvz); |
320 | ast_builder->insert_assignment(Ssh, Ssh * Sqvs); |
321 | ast_builder->insert_assignment(Sqvs, Sch * Sqvs); |
322 | ast_builder->insert_assignment(Sqvvx, Sch * Sqvvx); |
323 | ast_builder->insert_assignment(Sqvvy, Sch * Sqvvy); |
324 | ast_builder->insert_assignment(Sqvvz, Sch * Sqvvz); |
325 | ast_builder->insert_assignment(Sqvvx, Sqvvx + Ssh); |
326 | ast_builder->insert_assignment(Sqvs, Sqvs - Stmp1); |
327 | ast_builder->insert_assignment(Sqvvy, Sqvvy + Stmp3); |
328 | ast_builder->insert_assignment(Sqvvz, Sqvvz - Stmp2); |
329 | ast_builder->insert_assignment(Ssh, Ss31 * Sone_half); |
330 | ast_builder->insert_assignment(Stmp5, Ss33 - Ss11); |
331 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
332 | ast_builder->insert_assignment( |
333 | Stmp1, |
334 | bit_cast<Tf>(expr_select(Stmp2 >= Stiny_number, |
335 | Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
336 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Stmp1, Ssh)); |
337 | ast_builder->insert_assignment(Sch, svd_bitwise_and<Tf, Ti>(Stmp1, Stmp5)); |
338 | ast_builder->insert_assignment( |
339 | Stmp2, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Sone)); |
340 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp2)); |
341 | ast_builder->insert_assignment(Stmp1, Ssh * Ssh); |
342 | ast_builder->insert_assignment(Stmp2, Sch * Sch); |
343 | ast_builder->insert_assignment(Stmp3, Stmp1 + Stmp2); |
344 | ast_builder->insert_assignment(Stmp4, rsqrt(Stmp3)); |
345 | ast_builder->insert_assignment(Ssh, Stmp4 * Ssh); |
346 | ast_builder->insert_assignment(Sch, Stmp4 * Sch); |
347 | ast_builder->insert_assignment(Stmp1, Sfour_gamma_squared * Stmp1); |
348 | ast_builder->insert_assignment( |
349 | Stmp1, bit_cast<Tf>(expr_select( |
350 | Stmp2 <= Stmp1, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
351 | ast_builder->insert_assignment( |
352 | Stmp2, svd_bitwise_and<Tf, Ti>(Ssine_pi_over_eight, Stmp1)); |
353 | ast_builder->insert_assignment( |
354 | Ssh, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Ssh)); |
355 | ast_builder->insert_assignment(Ssh, svd_bitwise_or<Tf, Ti>(Ssh, Stmp2)); |
356 | ast_builder->insert_assignment( |
357 | Stmp2, svd_bitwise_and<Tf, Ti>(Scosine_pi_over_eight, Stmp1)); |
358 | ast_builder->insert_assignment( |
359 | Sch, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp1)), Sch)); |
360 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp2)); |
361 | ast_builder->insert_assignment(Stmp1, Ssh * Ssh); |
362 | ast_builder->insert_assignment(Stmp2, Sch * Sch); |
363 | ast_builder->insert_assignment(Sc, Stmp2 - Stmp1); |
364 | ast_builder->insert_assignment(Ss, Sch * Ssh); |
365 | ast_builder->insert_assignment(Ss, Ss + Ss); |
366 | ast_builder->insert_assignment(Stmp3, Stmp1 + Stmp2); |
367 | ast_builder->insert_assignment(Ss22, Ss22 * Stmp3); |
368 | ast_builder->insert_assignment(Ss32, Ss32 * Stmp3); |
369 | ast_builder->insert_assignment(Ss21, Ss21 * Stmp3); |
370 | ast_builder->insert_assignment(Ss22, Ss22 * Stmp3); |
371 | ast_builder->insert_assignment(Stmp1, Ss * Ss32); |
372 | ast_builder->insert_assignment(Stmp2, Ss * Ss21); |
373 | ast_builder->insert_assignment(Ss32, Sc * Ss32); |
374 | ast_builder->insert_assignment(Ss21, Sc * Ss21); |
375 | ast_builder->insert_assignment(Ss32, Stmp2 + Ss32); |
376 | ast_builder->insert_assignment(Ss21, Ss21 - Stmp1); |
377 | ast_builder->insert_assignment(Stmp2, Ss * Ss); |
378 | ast_builder->insert_assignment(Stmp1, Ss11 * Stmp2); |
379 | ast_builder->insert_assignment(Stmp3, Ss33 * Stmp2); |
380 | ast_builder->insert_assignment(Stmp4, Sc * Sc); |
381 | ast_builder->insert_assignment(Ss33, Ss33 * Stmp4); |
382 | ast_builder->insert_assignment(Ss11, Ss11 * Stmp4); |
383 | ast_builder->insert_assignment(Ss33, Ss33 + Stmp1); |
384 | ast_builder->insert_assignment(Ss11, Ss11 + Stmp3); |
385 | ast_builder->insert_assignment(Stmp4, Stmp4 - Stmp2); |
386 | ast_builder->insert_assignment(Stmp2, Ss31 + Ss31); |
387 | ast_builder->insert_assignment(Ss31, Ss31 * Stmp4); |
388 | ast_builder->insert_assignment(Stmp4, Sc * Ss); |
389 | ast_builder->insert_assignment(Stmp2, Stmp2 * Stmp4); |
390 | ast_builder->insert_assignment(Stmp5, Stmp5 * Stmp4); |
391 | ast_builder->insert_assignment(Ss33, Ss33 + Stmp2); |
392 | ast_builder->insert_assignment(Ss31, Ss31 - Stmp5); |
393 | ast_builder->insert_assignment(Ss11, Ss11 - Stmp2); |
394 | ast_builder->insert_assignment(Stmp1, Ssh * Sqvvx); |
395 | ast_builder->insert_assignment(Stmp2, Ssh * Sqvvy); |
396 | ast_builder->insert_assignment(Stmp3, Ssh * Sqvvz); |
397 | ast_builder->insert_assignment(Ssh, Ssh * Sqvs); |
398 | ast_builder->insert_assignment(Sqvs, Sch * Sqvs); |
399 | ast_builder->insert_assignment(Sqvvx, Sch * Sqvvx); |
400 | ast_builder->insert_assignment(Sqvvy, Sch * Sqvvy); |
401 | ast_builder->insert_assignment(Sqvvz, Sch * Sqvvz); |
402 | ast_builder->insert_assignment(Sqvvy, Sqvvy + Ssh); |
403 | ast_builder->insert_assignment(Sqvs, Sqvs - Stmp2); |
404 | ast_builder->insert_assignment(Sqvvz, Sqvvz + Stmp1); |
405 | ast_builder->insert_assignment(Sqvvx, Sqvvx - Stmp3); |
406 | }); |
407 | ast_builder->insert_assignment(Stmp2, Sqvs * Sqvs); |
408 | ast_builder->insert_assignment(Stmp1, Sqvvx * Sqvvx); |
409 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
410 | ast_builder->insert_assignment(Stmp1, Sqvvy * Sqvvy); |
411 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
412 | ast_builder->insert_assignment(Stmp1, Sqvvz * Sqvvz); |
413 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
414 | ast_builder->insert_assignment(Stmp1, rsqrt(Stmp2)); |
415 | ast_builder->insert_assignment(Stmp4, Stmp1 * Sone_half); |
416 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp4); |
417 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp3); |
418 | ast_builder->insert_assignment(Stmp3, Stmp2 * Stmp3); |
419 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
420 | ast_builder->insert_assignment(Stmp1, Stmp1 - Stmp3); |
421 | ast_builder->insert_assignment(Sqvs, Sqvs * Stmp1); |
422 | ast_builder->insert_assignment(Sqvvx, Sqvvx * Stmp1); |
423 | ast_builder->insert_assignment(Sqvvy, Sqvvy * Stmp1); |
424 | ast_builder->insert_assignment(Sqvvz, Sqvvz * Stmp1); |
425 | ast_builder->insert_assignment(Stmp1, Sqvvx * Sqvvx); |
426 | ast_builder->insert_assignment(Stmp2, Sqvvy * Sqvvy); |
427 | ast_builder->insert_assignment(Stmp3, Sqvvz * Sqvvz); |
428 | ast_builder->insert_assignment(Sv11, Sqvs * Sqvs); |
429 | ast_builder->insert_assignment(Sv22, Sv11 - Stmp1); |
430 | ast_builder->insert_assignment(Sv33, Sv22 - Stmp2); |
431 | ast_builder->insert_assignment(Sv33, Sv33 + Stmp3); |
432 | ast_builder->insert_assignment(Sv22, Sv22 + Stmp2); |
433 | ast_builder->insert_assignment(Sv22, Sv22 - Stmp3); |
434 | ast_builder->insert_assignment(Sv11, Sv11 + Stmp1); |
435 | ast_builder->insert_assignment(Sv11, Sv11 - Stmp2); |
436 | ast_builder->insert_assignment(Sv11, Sv11 - Stmp3); |
437 | ast_builder->insert_assignment(Stmp1, Sqvvx + Sqvvx); |
438 | ast_builder->insert_assignment(Stmp2, Sqvvy + Sqvvy); |
439 | ast_builder->insert_assignment(Stmp3, Sqvvz + Sqvvz); |
440 | ast_builder->insert_assignment(Sv32, Sqvs * Stmp1); |
441 | ast_builder->insert_assignment(Sv13, Sqvs * Stmp2); |
442 | ast_builder->insert_assignment(Sv21, Sqvs * Stmp3); |
443 | ast_builder->insert_assignment(Stmp1, Sqvvy * Stmp1); |
444 | ast_builder->insert_assignment(Stmp2, Sqvvz * Stmp2); |
445 | ast_builder->insert_assignment(Stmp3, Sqvvx * Stmp3); |
446 | ast_builder->insert_assignment(Sv12, Stmp1 - Sv21); |
447 | ast_builder->insert_assignment(Sv23, Stmp2 - Sv32); |
448 | ast_builder->insert_assignment(Sv31, Stmp3 - Sv13); |
449 | ast_builder->insert_assignment(Sv21, Stmp1 + Sv21); |
450 | ast_builder->insert_assignment(Sv32, Stmp2 + Sv32); |
451 | ast_builder->insert_assignment(Sv13, Stmp3 + Sv13); |
452 | ast_builder->insert_assignment(Stmp2, Sa12); |
453 | ast_builder->insert_assignment(Stmp3, Sa13); |
454 | ast_builder->insert_assignment(Sa12, Sv12 * Sa11); |
455 | ast_builder->insert_assignment(Sa13, Sv13 * Sa11); |
456 | ast_builder->insert_assignment(Sa11, Sv11 * Sa11); |
457 | ast_builder->insert_assignment(Stmp1, Sv21 * Stmp2); |
458 | ast_builder->insert_assignment(Sa11, Sa11 + Stmp1); |
459 | ast_builder->insert_assignment(Stmp1, Sv31 * Stmp3); |
460 | ast_builder->insert_assignment(Sa11, Sa11 + Stmp1); |
461 | ast_builder->insert_assignment(Stmp1, Sv22 * Stmp2); |
462 | ast_builder->insert_assignment(Sa12, Sa12 + Stmp1); |
463 | ast_builder->insert_assignment(Stmp1, Sv32 * Stmp3); |
464 | ast_builder->insert_assignment(Sa12, Sa12 + Stmp1); |
465 | ast_builder->insert_assignment(Stmp1, Sv23 * Stmp2); |
466 | ast_builder->insert_assignment(Sa13, Sa13 + Stmp1); |
467 | ast_builder->insert_assignment(Stmp1, Sv33 * Stmp3); |
468 | ast_builder->insert_assignment(Sa13, Sa13 + Stmp1); |
469 | ast_builder->insert_assignment(Stmp2, Sa22); |
470 | ast_builder->insert_assignment(Stmp3, Sa23); |
471 | ast_builder->insert_assignment(Sa22, Sv12 * Sa21); |
472 | ast_builder->insert_assignment(Sa23, Sv13 * Sa21); |
473 | ast_builder->insert_assignment(Sa21, Sv11 * Sa21); |
474 | ast_builder->insert_assignment(Stmp1, Sv21 * Stmp2); |
475 | ast_builder->insert_assignment(Sa21, Sa21 + Stmp1); |
476 | ast_builder->insert_assignment(Stmp1, Sv31 * Stmp3); |
477 | ast_builder->insert_assignment(Sa21, Sa21 + Stmp1); |
478 | ast_builder->insert_assignment(Stmp1, Sv22 * Stmp2); |
479 | ast_builder->insert_assignment(Sa22, Sa22 + Stmp1); |
480 | ast_builder->insert_assignment(Stmp1, Sv32 * Stmp3); |
481 | ast_builder->insert_assignment(Sa22, Sa22 + Stmp1); |
482 | ast_builder->insert_assignment(Stmp1, Sv23 * Stmp2); |
483 | ast_builder->insert_assignment(Sa23, Sa23 + Stmp1); |
484 | ast_builder->insert_assignment(Stmp1, Sv33 * Stmp3); |
485 | ast_builder->insert_assignment(Sa23, Sa23 + Stmp1); |
486 | ast_builder->insert_assignment(Stmp2, Sa32); |
487 | ast_builder->insert_assignment(Stmp3, Sa33); |
488 | ast_builder->insert_assignment(Sa32, Sv12 * Sa31); |
489 | ast_builder->insert_assignment(Sa33, Sv13 * Sa31); |
490 | ast_builder->insert_assignment(Sa31, Sv11 * Sa31); |
491 | ast_builder->insert_assignment(Stmp1, Sv21 * Stmp2); |
492 | ast_builder->insert_assignment(Sa31, Sa31 + Stmp1); |
493 | ast_builder->insert_assignment(Stmp1, Sv31 * Stmp3); |
494 | ast_builder->insert_assignment(Sa31, Sa31 + Stmp1); |
495 | ast_builder->insert_assignment(Stmp1, Sv22 * Stmp2); |
496 | ast_builder->insert_assignment(Sa32, Sa32 + Stmp1); |
497 | ast_builder->insert_assignment(Stmp1, Sv32 * Stmp3); |
498 | ast_builder->insert_assignment(Sa32, Sa32 + Stmp1); |
499 | ast_builder->insert_assignment(Stmp1, Sv23 * Stmp2); |
500 | ast_builder->insert_assignment(Sa33, Sa33 + Stmp1); |
501 | ast_builder->insert_assignment(Stmp1, Sv33 * Stmp3); |
502 | ast_builder->insert_assignment(Sa33, Sa33 + Stmp1); |
503 | ast_builder->insert_assignment(Stmp1, Sa11 * Sa11); |
504 | ast_builder->insert_assignment(Stmp4, Sa21 * Sa21); |
505 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
506 | ast_builder->insert_assignment(Stmp4, Sa31 * Sa31); |
507 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
508 | ast_builder->insert_assignment(Stmp2, Sa12 * Sa12); |
509 | ast_builder->insert_assignment(Stmp4, Sa22 * Sa22); |
510 | ast_builder->insert_assignment(Stmp2, Stmp2 + Stmp4); |
511 | ast_builder->insert_assignment(Stmp4, Sa32 * Sa32); |
512 | ast_builder->insert_assignment(Stmp2, Stmp2 + Stmp4); |
513 | ast_builder->insert_assignment(Stmp3, Sa13 * Sa13); |
514 | ast_builder->insert_assignment(Stmp4, Sa23 * Sa23); |
515 | ast_builder->insert_assignment(Stmp3, Stmp3 + Stmp4); |
516 | ast_builder->insert_assignment(Stmp4, Sa33 * Sa33); |
517 | ast_builder->insert_assignment(Stmp3, Stmp3 + Stmp4); |
518 | ast_builder->insert_assignment( |
519 | Stmp4, bit_cast<Tf>(expr_select( |
520 | Stmp1 < Stmp2, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
521 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa11, Sa12)); |
522 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
523 | ast_builder->insert_assignment(Sa11, svd_bitwise_xor<Tf, Ti>(Sa11, Stmp5)); |
524 | ast_builder->insert_assignment(Sa12, svd_bitwise_xor<Tf, Ti>(Sa12, Stmp5)); |
525 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa21, Sa22)); |
526 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
527 | ast_builder->insert_assignment(Sa21, svd_bitwise_xor<Tf, Ti>(Sa21, Stmp5)); |
528 | ast_builder->insert_assignment(Sa22, svd_bitwise_xor<Tf, Ti>(Sa22, Stmp5)); |
529 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa31, Sa32)); |
530 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
531 | ast_builder->insert_assignment(Sa31, svd_bitwise_xor<Tf, Ti>(Sa31, Stmp5)); |
532 | ast_builder->insert_assignment(Sa32, svd_bitwise_xor<Tf, Ti>(Sa32, Stmp5)); |
533 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv11, Sv12)); |
534 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
535 | ast_builder->insert_assignment(Sv11, svd_bitwise_xor<Tf, Ti>(Sv11, Stmp5)); |
536 | ast_builder->insert_assignment(Sv12, svd_bitwise_xor<Tf, Ti>(Sv12, Stmp5)); |
537 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv21, Sv22)); |
538 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
539 | ast_builder->insert_assignment(Sv21, svd_bitwise_xor<Tf, Ti>(Sv21, Stmp5)); |
540 | ast_builder->insert_assignment(Sv22, svd_bitwise_xor<Tf, Ti>(Sv22, Stmp5)); |
541 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv31, Sv32)); |
542 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
543 | ast_builder->insert_assignment(Sv31, svd_bitwise_xor<Tf, Ti>(Sv31, Stmp5)); |
544 | ast_builder->insert_assignment(Sv32, svd_bitwise_xor<Tf, Ti>(Sv32, Stmp5)); |
545 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Stmp1, Stmp2)); |
546 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
547 | ast_builder->insert_assignment(Stmp1, svd_bitwise_xor<Tf, Ti>(Stmp1, Stmp5)); |
548 | ast_builder->insert_assignment(Stmp2, svd_bitwise_xor<Tf, Ti>(Stmp2, Stmp5)); |
549 | ast_builder->insert_assignment(Stmp5, Expr(Tf(-2.0f))); |
550 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
551 | ast_builder->insert_assignment(Stmp4, Expr(Tf(1.0f))); |
552 | ast_builder->insert_assignment(Stmp4, Stmp4 + Stmp5); |
553 | ast_builder->insert_assignment(Sa12, Sa12 * Stmp4); |
554 | ast_builder->insert_assignment(Sa22, Sa22 * Stmp4); |
555 | ast_builder->insert_assignment(Sa32, Sa32 * Stmp4); |
556 | ast_builder->insert_assignment(Sv12, Sv12 * Stmp4); |
557 | ast_builder->insert_assignment(Sv22, Sv22 * Stmp4); |
558 | ast_builder->insert_assignment(Sv32, Sv32 * Stmp4); |
559 | ast_builder->insert_assignment( |
560 | Stmp4, bit_cast<Tf>(expr_select( |
561 | Stmp1 < Stmp3, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
562 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa11, Sa13)); |
563 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
564 | ast_builder->insert_assignment(Sa11, svd_bitwise_xor<Tf, Ti>(Sa11, Stmp5)); |
565 | ast_builder->insert_assignment(Sa13, svd_bitwise_xor<Tf, Ti>(Sa13, Stmp5)); |
566 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa21, Sa23)); |
567 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
568 | ast_builder->insert_assignment(Sa21, svd_bitwise_xor<Tf, Ti>(Sa21, Stmp5)); |
569 | ast_builder->insert_assignment(Sa23, svd_bitwise_xor<Tf, Ti>(Sa23, Stmp5)); |
570 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa31, Sa33)); |
571 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
572 | ast_builder->insert_assignment(Sa31, svd_bitwise_xor<Tf, Ti>(Sa31, Stmp5)); |
573 | ast_builder->insert_assignment(Sa33, svd_bitwise_xor<Tf, Ti>(Sa33, Stmp5)); |
574 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv11, Sv13)); |
575 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
576 | ast_builder->insert_assignment(Sv11, svd_bitwise_xor<Tf, Ti>(Sv11, Stmp5)); |
577 | ast_builder->insert_assignment(Sv13, svd_bitwise_xor<Tf, Ti>(Sv13, Stmp5)); |
578 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv21, Sv23)); |
579 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
580 | ast_builder->insert_assignment(Sv21, svd_bitwise_xor<Tf, Ti>(Sv21, Stmp5)); |
581 | ast_builder->insert_assignment(Sv23, svd_bitwise_xor<Tf, Ti>(Sv23, Stmp5)); |
582 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv31, Sv33)); |
583 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
584 | ast_builder->insert_assignment(Sv31, svd_bitwise_xor<Tf, Ti>(Sv31, Stmp5)); |
585 | ast_builder->insert_assignment(Sv33, svd_bitwise_xor<Tf, Ti>(Sv33, Stmp5)); |
586 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Stmp1, Stmp3)); |
587 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
588 | ast_builder->insert_assignment(Stmp1, svd_bitwise_xor<Tf, Ti>(Stmp1, Stmp5)); |
589 | ast_builder->insert_assignment(Stmp3, svd_bitwise_xor<Tf, Ti>(Stmp3, Stmp5)); |
590 | ast_builder->insert_assignment(Stmp5, Expr(Tf(-2.0f))); |
591 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
592 | ast_builder->insert_assignment(Stmp4, Expr(Tf(1.0f))); |
593 | ast_builder->insert_assignment(Stmp4, Stmp4 + Stmp5); |
594 | ast_builder->insert_assignment(Sa11, Sa11 * Stmp4); |
595 | ast_builder->insert_assignment(Sa21, Sa21 * Stmp4); |
596 | ast_builder->insert_assignment(Sa31, Sa31 * Stmp4); |
597 | ast_builder->insert_assignment(Sv11, Sv11 * Stmp4); |
598 | ast_builder->insert_assignment(Sv21, Sv21 * Stmp4); |
599 | ast_builder->insert_assignment(Sv31, Sv31 * Stmp4); |
600 | ast_builder->insert_assignment( |
601 | Stmp4, bit_cast<Tf>(expr_select( |
602 | Stmp2 < Stmp3, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
603 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa12, Sa13)); |
604 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
605 | ast_builder->insert_assignment(Sa12, svd_bitwise_xor<Tf, Ti>(Sa12, Stmp5)); |
606 | ast_builder->insert_assignment(Sa13, svd_bitwise_xor<Tf, Ti>(Sa13, Stmp5)); |
607 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa22, Sa23)); |
608 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
609 | ast_builder->insert_assignment(Sa22, svd_bitwise_xor<Tf, Ti>(Sa22, Stmp5)); |
610 | ast_builder->insert_assignment(Sa23, svd_bitwise_xor<Tf, Ti>(Sa23, Stmp5)); |
611 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sa32, Sa33)); |
612 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
613 | ast_builder->insert_assignment(Sa32, svd_bitwise_xor<Tf, Ti>(Sa32, Stmp5)); |
614 | ast_builder->insert_assignment(Sa33, svd_bitwise_xor<Tf, Ti>(Sa33, Stmp5)); |
615 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv12, Sv13)); |
616 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
617 | ast_builder->insert_assignment(Sv12, svd_bitwise_xor<Tf, Ti>(Sv12, Stmp5)); |
618 | ast_builder->insert_assignment(Sv13, svd_bitwise_xor<Tf, Ti>(Sv13, Stmp5)); |
619 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv22, Sv23)); |
620 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
621 | ast_builder->insert_assignment(Sv22, svd_bitwise_xor<Tf, Ti>(Sv22, Stmp5)); |
622 | ast_builder->insert_assignment(Sv23, svd_bitwise_xor<Tf, Ti>(Sv23, Stmp5)); |
623 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Sv32, Sv33)); |
624 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
625 | ast_builder->insert_assignment(Sv32, svd_bitwise_xor<Tf, Ti>(Sv32, Stmp5)); |
626 | ast_builder->insert_assignment(Sv33, svd_bitwise_xor<Tf, Ti>(Sv33, Stmp5)); |
627 | ast_builder->insert_assignment(Stmp5, svd_bitwise_xor<Tf, Ti>(Stmp2, Stmp3)); |
628 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
629 | ast_builder->insert_assignment(Stmp2, svd_bitwise_xor<Tf, Ti>(Stmp2, Stmp5)); |
630 | ast_builder->insert_assignment(Stmp3, svd_bitwise_xor<Tf, Ti>(Stmp3, Stmp5)); |
631 | ast_builder->insert_assignment(Stmp5, Expr(Tf(-2.0f))); |
632 | ast_builder->insert_assignment(Stmp5, svd_bitwise_and<Tf, Ti>(Stmp5, Stmp4)); |
633 | ast_builder->insert_assignment(Stmp4, Expr(Tf(1.0f))); |
634 | ast_builder->insert_assignment(Stmp4, Stmp4 + Stmp5); |
635 | ast_builder->insert_assignment(Sa13, Sa13 * Stmp4); |
636 | ast_builder->insert_assignment(Sa23, Sa23 * Stmp4); |
637 | ast_builder->insert_assignment(Sa33, Sa33 * Stmp4); |
638 | ast_builder->insert_assignment(Sv13, Sv13 * Stmp4); |
639 | ast_builder->insert_assignment(Sv23, Sv23 * Stmp4); |
640 | ast_builder->insert_assignment(Sv33, Sv33 * Stmp4); |
641 | ast_builder->insert_assignment(Su11, Expr(Tf(1.0f))); |
642 | ast_builder->insert_assignment(Su21, Expr(Tf(0.0f))); |
643 | ast_builder->insert_assignment(Su31, Expr(Tf(0.0f))); |
644 | ast_builder->insert_assignment(Su12, Expr(Tf(0.0f))); |
645 | ast_builder->insert_assignment(Su22, Expr(Tf(1.0f))); |
646 | ast_builder->insert_assignment(Su32, Expr(Tf(0.0f))); |
647 | ast_builder->insert_assignment(Su13, Expr(Tf(0.0f))); |
648 | ast_builder->insert_assignment(Su23, Expr(Tf(0.0f))); |
649 | ast_builder->insert_assignment(Su33, Expr(Tf(1.0f))); |
650 | ast_builder->insert_assignment(Ssh, Sa21 * Sa21); |
651 | ast_builder->insert_assignment( |
652 | Ssh, bit_cast<Tf>(expr_select(Ssh >= Ssmall_number, |
653 | Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
654 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Ssh, Sa21)); |
655 | ast_builder->insert_assignment(Stmp5, Expr(Tf(0.0f))); |
656 | ast_builder->insert_assignment(Sch, Stmp5 - Sa11); |
657 | ast_builder->insert_assignment(Sch, max(Sch, Sa11)); |
658 | ast_builder->insert_assignment(Sch, max(Sch, Ssmall_number)); |
659 | ast_builder->insert_assignment( |
660 | Stmp5, bit_cast<Tf>(expr_select( |
661 | Sa11 >= Stmp5, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
662 | ast_builder->insert_assignment(Stmp1, Sch * Sch); |
663 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
664 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
665 | ast_builder->insert_assignment(Stmp1, rsqrt(Stmp2)); |
666 | ast_builder->insert_assignment(Stmp4, Stmp1 * Sone_half); |
667 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp4); |
668 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp3); |
669 | ast_builder->insert_assignment(Stmp3, Stmp2 * Stmp3); |
670 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
671 | ast_builder->insert_assignment(Stmp1, Stmp1 - Stmp3); |
672 | ast_builder->insert_assignment(Stmp1, Stmp1 * Stmp2); |
673 | ast_builder->insert_assignment(Sch, Sch + Stmp1); |
674 | ast_builder->insert_assignment( |
675 | Stmp1, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp5)), Ssh)); |
676 | ast_builder->insert_assignment( |
677 | Stmp2, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp5)), Sch)); |
678 | ast_builder->insert_assignment(Sch, svd_bitwise_and<Tf, Ti>(Stmp5, Sch)); |
679 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Stmp5, Ssh)); |
680 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp1)); |
681 | ast_builder->insert_assignment(Ssh, svd_bitwise_or<Tf, Ti>(Ssh, Stmp2)); |
682 | ast_builder->insert_assignment(Stmp1, Sch * Sch); |
683 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
684 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
685 | ast_builder->insert_assignment(Stmp1, rsqrt(Stmp2)); |
686 | ast_builder->insert_assignment(Stmp4, Stmp1 * Sone_half); |
687 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp4); |
688 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp3); |
689 | ast_builder->insert_assignment(Stmp3, Stmp2 * Stmp3); |
690 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
691 | ast_builder->insert_assignment(Stmp1, Stmp1 - Stmp3); |
692 | ast_builder->insert_assignment(Sch, Sch * Stmp1); |
693 | ast_builder->insert_assignment(Ssh, Ssh * Stmp1); |
694 | ast_builder->insert_assignment(Sc, Sch * Sch); |
695 | ast_builder->insert_assignment(Ss, Ssh * Ssh); |
696 | ast_builder->insert_assignment(Sc, Sc - Ss); |
697 | ast_builder->insert_assignment(Ss, Ssh * Sch); |
698 | ast_builder->insert_assignment(Ss, Ss + Ss); |
699 | ast_builder->insert_assignment(Stmp1, Ss * Sa11); |
700 | ast_builder->insert_assignment(Stmp2, Ss * Sa21); |
701 | ast_builder->insert_assignment(Sa11, Sc * Sa11); |
702 | ast_builder->insert_assignment(Sa21, Sc * Sa21); |
703 | ast_builder->insert_assignment(Sa11, Sa11 + Stmp2); |
704 | ast_builder->insert_assignment(Sa21, Sa21 - Stmp1); |
705 | ast_builder->insert_assignment(Stmp1, Ss * Sa12); |
706 | ast_builder->insert_assignment(Stmp2, Ss * Sa22); |
707 | ast_builder->insert_assignment(Sa12, Sc * Sa12); |
708 | ast_builder->insert_assignment(Sa22, Sc * Sa22); |
709 | ast_builder->insert_assignment(Sa12, Sa12 + Stmp2); |
710 | ast_builder->insert_assignment(Sa22, Sa22 - Stmp1); |
711 | ast_builder->insert_assignment(Stmp1, Ss * Sa13); |
712 | ast_builder->insert_assignment(Stmp2, Ss * Sa23); |
713 | ast_builder->insert_assignment(Sa13, Sc * Sa13); |
714 | ast_builder->insert_assignment(Sa23, Sc * Sa23); |
715 | ast_builder->insert_assignment(Sa13, Sa13 + Stmp2); |
716 | ast_builder->insert_assignment(Sa23, Sa23 - Stmp1); |
717 | ast_builder->insert_assignment(Stmp1, Ss * Su11); |
718 | ast_builder->insert_assignment(Stmp2, Ss * Su12); |
719 | ast_builder->insert_assignment(Su11, Sc * Su11); |
720 | ast_builder->insert_assignment(Su12, Sc * Su12); |
721 | ast_builder->insert_assignment(Su11, Su11 + Stmp2); |
722 | ast_builder->insert_assignment(Su12, Su12 - Stmp1); |
723 | ast_builder->insert_assignment(Stmp1, Ss * Su21); |
724 | ast_builder->insert_assignment(Stmp2, Ss * Su22); |
725 | ast_builder->insert_assignment(Su21, Sc * Su21); |
726 | ast_builder->insert_assignment(Su22, Sc * Su22); |
727 | ast_builder->insert_assignment(Su21, Su21 + Stmp2); |
728 | ast_builder->insert_assignment(Su22, Su22 - Stmp1); |
729 | ast_builder->insert_assignment(Stmp1, Ss * Su31); |
730 | ast_builder->insert_assignment(Stmp2, Ss * Su32); |
731 | ast_builder->insert_assignment(Su31, Sc * Su31); |
732 | ast_builder->insert_assignment(Su32, Sc * Su32); |
733 | ast_builder->insert_assignment(Su31, Su31 + Stmp2); |
734 | ast_builder->insert_assignment(Su32, Su32 - Stmp1); |
735 | ast_builder->insert_assignment(Ssh, Sa31 * Sa31); |
736 | ast_builder->insert_assignment( |
737 | Ssh, bit_cast<Tf>(expr_select(Ssh >= Ssmall_number, |
738 | Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
739 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Ssh, Sa31)); |
740 | ast_builder->insert_assignment(Stmp5, Expr(Tf(0.0f))); |
741 | ast_builder->insert_assignment(Sch, Stmp5 - Sa11); |
742 | ast_builder->insert_assignment(Sch, max(Sch, Sa11)); |
743 | ast_builder->insert_assignment(Sch, max(Sch, Ssmall_number)); |
744 | ast_builder->insert_assignment( |
745 | Stmp5, bit_cast<Tf>(expr_select( |
746 | Sa11 >= Stmp5, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
747 | ast_builder->insert_assignment(Stmp1, Sch * Sch); |
748 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
749 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
750 | ast_builder->insert_assignment(Stmp1, rsqrt(Stmp2)); |
751 | ast_builder->insert_assignment(Stmp4, Stmp1 * Sone_half); |
752 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp4); |
753 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp3); |
754 | ast_builder->insert_assignment(Stmp3, Stmp2 * Stmp3); |
755 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
756 | ast_builder->insert_assignment(Stmp1, Stmp1 - Stmp3); |
757 | ast_builder->insert_assignment(Stmp1, Stmp1 * Stmp2); |
758 | ast_builder->insert_assignment(Sch, Sch + Stmp1); |
759 | ast_builder->insert_assignment( |
760 | Stmp1, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp5)), Ssh)); |
761 | ast_builder->insert_assignment( |
762 | Stmp2, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp5)), Sch)); |
763 | ast_builder->insert_assignment(Sch, svd_bitwise_and<Tf, Ti>(Stmp5, Sch)); |
764 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Stmp5, Ssh)); |
765 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp1)); |
766 | ast_builder->insert_assignment(Ssh, svd_bitwise_or<Tf, Ti>(Ssh, Stmp2)); |
767 | ast_builder->insert_assignment(Stmp1, Sch * Sch); |
768 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
769 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
770 | ast_builder->insert_assignment(Stmp1, rsqrt(Stmp2)); |
771 | ast_builder->insert_assignment(Stmp4, Stmp1 * Sone_half); |
772 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp4); |
773 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp3); |
774 | ast_builder->insert_assignment(Stmp3, Stmp2 * Stmp3); |
775 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
776 | ast_builder->insert_assignment(Stmp1, Stmp1 - Stmp3); |
777 | ast_builder->insert_assignment(Sch, Sch * Stmp1); |
778 | ast_builder->insert_assignment(Ssh, Ssh * Stmp1); |
779 | ast_builder->insert_assignment(Sc, Sch * Sch); |
780 | ast_builder->insert_assignment(Ss, Ssh * Ssh); |
781 | ast_builder->insert_assignment(Sc, Sc - Ss); |
782 | ast_builder->insert_assignment(Ss, Ssh * Sch); |
783 | ast_builder->insert_assignment(Ss, Ss + Ss); |
784 | ast_builder->insert_assignment(Stmp1, Ss * Sa11); |
785 | ast_builder->insert_assignment(Stmp2, Ss * Sa31); |
786 | ast_builder->insert_assignment(Sa11, Sc * Sa11); |
787 | ast_builder->insert_assignment(Sa31, Sc * Sa31); |
788 | ast_builder->insert_assignment(Sa11, Sa11 + Stmp2); |
789 | ast_builder->insert_assignment(Sa31, Sa31 - Stmp1); |
790 | ast_builder->insert_assignment(Stmp1, Ss * Sa12); |
791 | ast_builder->insert_assignment(Stmp2, Ss * Sa32); |
792 | ast_builder->insert_assignment(Sa12, Sc * Sa12); |
793 | ast_builder->insert_assignment(Sa32, Sc * Sa32); |
794 | ast_builder->insert_assignment(Sa12, Sa12 + Stmp2); |
795 | ast_builder->insert_assignment(Sa32, Sa32 - Stmp1); |
796 | ast_builder->insert_assignment(Stmp1, Ss * Sa13); |
797 | ast_builder->insert_assignment(Stmp2, Ss * Sa33); |
798 | ast_builder->insert_assignment(Sa13, Sc * Sa13); |
799 | ast_builder->insert_assignment(Sa33, Sc * Sa33); |
800 | ast_builder->insert_assignment(Sa13, Sa13 + Stmp2); |
801 | ast_builder->insert_assignment(Sa33, Sa33 - Stmp1); |
802 | ast_builder->insert_assignment(Stmp1, Ss * Su11); |
803 | ast_builder->insert_assignment(Stmp2, Ss * Su13); |
804 | ast_builder->insert_assignment(Su11, Sc * Su11); |
805 | ast_builder->insert_assignment(Su13, Sc * Su13); |
806 | ast_builder->insert_assignment(Su11, Su11 + Stmp2); |
807 | ast_builder->insert_assignment(Su13, Su13 - Stmp1); |
808 | ast_builder->insert_assignment(Stmp1, Ss * Su21); |
809 | ast_builder->insert_assignment(Stmp2, Ss * Su23); |
810 | ast_builder->insert_assignment(Su21, Sc * Su21); |
811 | ast_builder->insert_assignment(Su23, Sc * Su23); |
812 | ast_builder->insert_assignment(Su21, Su21 + Stmp2); |
813 | ast_builder->insert_assignment(Su23, Su23 - Stmp1); |
814 | ast_builder->insert_assignment(Stmp1, Ss * Su31); |
815 | ast_builder->insert_assignment(Stmp2, Ss * Su33); |
816 | ast_builder->insert_assignment(Su31, Sc * Su31); |
817 | ast_builder->insert_assignment(Su33, Sc * Su33); |
818 | ast_builder->insert_assignment(Su31, Su31 + Stmp2); |
819 | ast_builder->insert_assignment(Su33, Su33 - Stmp1); |
820 | ast_builder->insert_assignment(Ssh, Sa32 * Sa32); |
821 | ast_builder->insert_assignment( |
822 | Ssh, bit_cast<Tf>(expr_select(Ssh >= Ssmall_number, |
823 | Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
824 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Ssh, Sa32)); |
825 | ast_builder->insert_assignment(Stmp5, Expr(Tf(0.0f))); |
826 | ast_builder->insert_assignment(Sch, Stmp5 - Sa22); |
827 | ast_builder->insert_assignment(Sch, max(Sch, Sa22)); |
828 | ast_builder->insert_assignment(Sch, max(Sch, Ssmall_number)); |
829 | ast_builder->insert_assignment( |
830 | Stmp5, bit_cast<Tf>(expr_select( |
831 | Sa22 >= Stmp5, Expr(Ti(int32(0xffffffff))), Expr(Ti(0))))); |
832 | ast_builder->insert_assignment(Stmp1, Sch * Sch); |
833 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
834 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
835 | ast_builder->insert_assignment(Stmp1, rsqrt(Stmp2)); |
836 | ast_builder->insert_assignment(Stmp4, Stmp1 * Sone_half); |
837 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp4); |
838 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp3); |
839 | ast_builder->insert_assignment(Stmp3, Stmp2 * Stmp3); |
840 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
841 | ast_builder->insert_assignment(Stmp1, Stmp1 - Stmp3); |
842 | ast_builder->insert_assignment(Stmp1, Stmp1 * Stmp2); |
843 | ast_builder->insert_assignment(Sch, Sch + Stmp1); |
844 | ast_builder->insert_assignment( |
845 | Stmp1, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp5)), Ssh)); |
846 | ast_builder->insert_assignment( |
847 | Stmp2, svd_bitwise_and<Tf, Ti>(Expr(~bit_cast<Ti>(Stmp5)), Sch)); |
848 | ast_builder->insert_assignment(Sch, svd_bitwise_and<Tf, Ti>(Stmp5, Sch)); |
849 | ast_builder->insert_assignment(Ssh, svd_bitwise_and<Tf, Ti>(Stmp5, Ssh)); |
850 | ast_builder->insert_assignment(Sch, svd_bitwise_or<Tf, Ti>(Sch, Stmp1)); |
851 | ast_builder->insert_assignment(Ssh, svd_bitwise_or<Tf, Ti>(Ssh, Stmp2)); |
852 | ast_builder->insert_assignment(Stmp1, Sch * Sch); |
853 | ast_builder->insert_assignment(Stmp2, Ssh * Ssh); |
854 | ast_builder->insert_assignment(Stmp2, Stmp1 + Stmp2); |
855 | ast_builder->insert_assignment(Stmp1, rsqrt(Stmp2)); |
856 | ast_builder->insert_assignment(Stmp4, Stmp1 * Sone_half); |
857 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp4); |
858 | ast_builder->insert_assignment(Stmp3, Stmp1 * Stmp3); |
859 | ast_builder->insert_assignment(Stmp3, Stmp2 * Stmp3); |
860 | ast_builder->insert_assignment(Stmp1, Stmp1 + Stmp4); |
861 | ast_builder->insert_assignment(Stmp1, Stmp1 - Stmp3); |
862 | ast_builder->insert_assignment(Sch, Sch * Stmp1); |
863 | ast_builder->insert_assignment(Ssh, Ssh * Stmp1); |
864 | ast_builder->insert_assignment(Sc, Sch * Sch); |
865 | ast_builder->insert_assignment(Ss, Ssh * Ssh); |
866 | ast_builder->insert_assignment(Sc, Sc - Ss); |
867 | ast_builder->insert_assignment(Ss, Ssh * Sch); |
868 | ast_builder->insert_assignment(Ss, Ss + Ss); |
869 | ast_builder->insert_assignment(Stmp1, Ss * Sa21); |
870 | ast_builder->insert_assignment(Stmp2, Ss * Sa31); |
871 | ast_builder->insert_assignment(Sa21, Sc * Sa21); |
872 | ast_builder->insert_assignment(Sa31, Sc * Sa31); |
873 | ast_builder->insert_assignment(Sa21, Sa21 + Stmp2); |
874 | ast_builder->insert_assignment(Sa31, Sa31 - Stmp1); |
875 | ast_builder->insert_assignment(Stmp1, Ss * Sa22); |
876 | ast_builder->insert_assignment(Stmp2, Ss * Sa32); |
877 | ast_builder->insert_assignment(Sa22, Sc * Sa22); |
878 | ast_builder->insert_assignment(Sa32, Sc * Sa32); |
879 | ast_builder->insert_assignment(Sa22, Sa22 + Stmp2); |
880 | ast_builder->insert_assignment(Sa32, Sa32 - Stmp1); |
881 | ast_builder->insert_assignment(Stmp1, Ss * Sa23); |
882 | ast_builder->insert_assignment(Stmp2, Ss * Sa33); |
883 | ast_builder->insert_assignment(Sa23, Sc * Sa23); |
884 | ast_builder->insert_assignment(Sa33, Sc * Sa33); |
885 | ast_builder->insert_assignment(Sa23, Sa23 + Stmp2); |
886 | ast_builder->insert_assignment(Sa33, Sa33 - Stmp1); |
887 | ast_builder->insert_assignment(Stmp1, Ss * Su12); |
888 | ast_builder->insert_assignment(Stmp2, Ss * Su13); |
889 | ast_builder->insert_assignment(Su12, Sc * Su12); |
890 | ast_builder->insert_assignment(Su13, Sc * Su13); |
891 | ast_builder->insert_assignment(Su12, Su12 + Stmp2); |
892 | ast_builder->insert_assignment(Su13, Su13 - Stmp1); |
893 | ast_builder->insert_assignment(Stmp1, Ss * Su22); |
894 | ast_builder->insert_assignment(Stmp2, Ss * Su23); |
895 | ast_builder->insert_assignment(Su22, Sc * Su22); |
896 | ast_builder->insert_assignment(Su23, Sc * Su23); |
897 | ast_builder->insert_assignment(Su22, Su22 + Stmp2); |
898 | ast_builder->insert_assignment(Su23, Su23 - Stmp1); |
899 | ast_builder->insert_assignment(Stmp1, Ss * Su32); |
900 | ast_builder->insert_assignment(Stmp2, Ss * Su33); |
901 | ast_builder->insert_assignment(Su32, Sc * Su32); |
902 | ast_builder->insert_assignment(Su33, Sc * Su33); |
903 | ast_builder->insert_assignment(Su32, Su32 + Stmp2); |
904 | ast_builder->insert_assignment(Su33, Su33 - Stmp1); |
905 | return std::make_tuple(Su11, Su12, Su13, Su21, Su22, Su23, Su31, Su32, Su33, |
906 | Sv11, Sv12, Sv13, Sv21, Sv22, Sv23, Sv31, Sv32, Sv33, |
907 | Sa11, Sa22, Sa33); |
908 | } |
909 | |
910 | } // namespace taichi::lang |
911 | |