1 ir_function_signature *
umul64(void * mem_ctx,builtin_available_predicate avail)2 umul64(void *mem_ctx, builtin_available_predicate avail)
3 {
4    ir_function_signature *const sig =
5       new(mem_ctx) ir_function_signature(glsl_type::uvec2_type, avail);
6    ir_factory body(&sig->body, mem_ctx);
7    sig->is_defined = true;
8 
9    exec_list sig_parameters;
10 
11    ir_variable *const r0001 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "a", ir_var_function_in);
12    sig_parameters.push_tail(r0001);
13    ir_variable *const r0002 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "b", ir_var_function_in);
14    sig_parameters.push_tail(r0002);
15    ir_variable *const r0003 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "result", ir_var_auto);
16    body.emit(r0003);
17    body.emit(assign(r0003, imul_high(swizzle_x(r0001), swizzle_x(r0002)), 0x02));
18 
19    body.emit(assign(r0003, mul(swizzle_x(r0001), swizzle_x(r0002)), 0x01));
20 
21    ir_expression *const r0004 = mul(swizzle_x(r0001), swizzle_y(r0002));
22    ir_expression *const r0005 = mul(swizzle_y(r0001), swizzle_x(r0002));
23    ir_expression *const r0006 = add(r0004, r0005);
24    body.emit(assign(r0003, add(swizzle_y(r0003), r0006), 0x02));
25 
26    body.emit(ret(r0003));
27 
28    sig->replace_parameters(&sig_parameters);
29    return sig;
30 }
31 ir_function_signature *
sign64(void * mem_ctx,builtin_available_predicate avail)32 sign64(void *mem_ctx, builtin_available_predicate avail)
33 {
34    ir_function_signature *const sig =
35       new(mem_ctx) ir_function_signature(glsl_type::ivec2_type, avail);
36    ir_factory body(&sig->body, mem_ctx);
37    sig->is_defined = true;
38 
39    exec_list sig_parameters;
40 
41    ir_variable *const r0007 = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "a", ir_var_function_in);
42    sig_parameters.push_tail(r0007);
43    ir_variable *const r0008 = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "result", ir_var_auto);
44    body.emit(r0008);
45    body.emit(assign(r0008, rshift(swizzle_y(r0007), body.constant(int(31))), 0x02));
46 
47    ir_expression *const r0009 = bit_or(swizzle_x(r0007), swizzle_y(r0007));
48    ir_expression *const r000A = nequal(r0009, body.constant(int(0)));
49    ir_expression *const r000B = expr(ir_unop_b2i, r000A);
50    body.emit(assign(r0008, bit_or(swizzle_y(r0008), r000B), 0x01));
51 
52    body.emit(ret(r0008));
53 
54    sig->replace_parameters(&sig_parameters);
55    return sig;
56 }
57 ir_function_signature *
udivmod64(void * mem_ctx,builtin_available_predicate avail)58 udivmod64(void *mem_ctx, builtin_available_predicate avail)
59 {
60    ir_function_signature *const sig =
61       new(mem_ctx) ir_function_signature(glsl_type::uvec4_type, avail);
62    ir_factory body(&sig->body, mem_ctx);
63    sig->is_defined = true;
64 
65    exec_list sig_parameters;
66 
67    ir_variable *const r000C = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "n", ir_var_function_in);
68    sig_parameters.push_tail(r000C);
69    ir_variable *const r000D = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "d", ir_var_function_in);
70    sig_parameters.push_tail(r000D);
71    ir_variable *const r000E = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
72    body.emit(r000E);
73    ir_variable *const r000F = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto);
74    body.emit(r000F);
75    ir_variable *const r0010 = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto);
76    body.emit(r0010);
77    ir_variable *const r0011 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto);
78    body.emit(r0011);
79    body.emit(assign(r0011, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03));
80 
81    ir_expression *const r0012 = expr(ir_unop_find_msb, swizzle_y(r000D));
82    body.emit(assign(r0010, add(r0012, body.constant(int(32))), 0x01));
83 
84    /* IF CONDITION */
85    ir_expression *const r0014 = equal(swizzle_y(r000D), body.constant(0u));
86    ir_expression *const r0015 = gequal(swizzle_y(r000C), swizzle_x(r000D));
87    ir_expression *const r0016 = logic_and(r0014, r0015);
88    ir_if *f0013 = new(mem_ctx) ir_if(operand(r0016).val);
89    exec_list *const f0013_parent_instructions = body.instructions;
90 
91       /* THEN INSTRUCTIONS */
92       body.instructions = &f0013->then_instructions;
93 
94       ir_variable *const r0017 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
95       body.emit(r0017);
96       ir_variable *const r0018 = body.make_temp(glsl_type::int_type, "findMSB_retval");
97       body.emit(assign(r0018, expr(ir_unop_find_msb, swizzle_x(r000D)), 0x01));
98 
99       body.emit(assign(r0010, r0018, 0x01));
100 
101       body.emit(assign(r0017, body.constant(int(31)), 0x01));
102 
103       /* LOOP BEGIN */
104       ir_loop *f0019 = new(mem_ctx) ir_loop();
105       exec_list *const f0019_parent_instructions = body.instructions;
106 
107          body.instructions = &f0019->body_instructions;
108 
109          /* IF CONDITION */
110          ir_expression *const r001B = less(r0017, body.constant(int(1)));
111          ir_if *f001A = new(mem_ctx) ir_if(operand(r001B).val);
112          exec_list *const f001A_parent_instructions = body.instructions;
113 
114             /* THEN INSTRUCTIONS */
115             body.instructions = &f001A->then_instructions;
116 
117             body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
118 
119 
120          body.instructions = f001A_parent_instructions;
121          body.emit(f001A);
122 
123          /* END IF */
124 
125          /* IF CONDITION */
126          ir_expression *const r001D = sub(body.constant(int(31)), r0017);
127          ir_expression *const r001E = lequal(r0018, r001D);
128          ir_expression *const r001F = lshift(swizzle_x(r000D), r0017);
129          ir_expression *const r0020 = lequal(r001F, swizzle_y(r000C));
130          ir_expression *const r0021 = logic_and(r001E, r0020);
131          ir_if *f001C = new(mem_ctx) ir_if(operand(r0021).val);
132          exec_list *const f001C_parent_instructions = body.instructions;
133 
134             /* THEN INSTRUCTIONS */
135             body.instructions = &f001C->then_instructions;
136 
137             ir_expression *const r0022 = lshift(swizzle_x(r000D), r0017);
138             body.emit(assign(r000C, sub(swizzle_y(r000C), r0022), 0x02));
139 
140             ir_expression *const r0023 = lshift(body.constant(1u), r0017);
141             body.emit(assign(r0011, bit_or(swizzle_y(r0011), r0023), 0x02));
142 
143 
144          body.instructions = f001C_parent_instructions;
145          body.emit(f001C);
146 
147          /* END IF */
148 
149          body.emit(assign(r0017, add(r0017, body.constant(int(-1))), 0x01));
150 
151       /* LOOP END */
152 
153       body.instructions = f0019_parent_instructions;
154       body.emit(f0019);
155 
156       /* IF CONDITION */
157       ir_expression *const r0025 = lequal(swizzle_x(r000D), swizzle_y(r000C));
158       ir_if *f0024 = new(mem_ctx) ir_if(operand(r0025).val);
159       exec_list *const f0024_parent_instructions = body.instructions;
160 
161          /* THEN INSTRUCTIONS */
162          body.instructions = &f0024->then_instructions;
163 
164          body.emit(assign(r000C, sub(swizzle_y(r000C), swizzle_x(r000D)), 0x02));
165 
166          body.emit(assign(r0011, bit_or(swizzle_y(r0011), body.constant(1u)), 0x02));
167 
168 
169       body.instructions = f0024_parent_instructions;
170       body.emit(f0024);
171 
172       /* END IF */
173 
174 
175    body.instructions = f0013_parent_instructions;
176    body.emit(f0013);
177 
178    /* END IF */
179 
180    ir_variable *const r0026 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval");
181    body.emit(assign(r0026, expr(ir_unop_pack_uint_2x32, r000D), 0x01));
182 
183    body.emit(assign(r000F, expr(ir_unop_pack_uint_2x32, r000C), 0x01));
184 
185    body.emit(assign(r000E, body.constant(int(31)), 0x01));
186 
187    /* LOOP BEGIN */
188    ir_loop *f0027 = new(mem_ctx) ir_loop();
189    exec_list *const f0027_parent_instructions = body.instructions;
190 
191       body.instructions = &f0027->body_instructions;
192 
193       /* IF CONDITION */
194       ir_expression *const r0029 = less(r000E, body.constant(int(1)));
195       ir_if *f0028 = new(mem_ctx) ir_if(operand(r0029).val);
196       exec_list *const f0028_parent_instructions = body.instructions;
197 
198          /* THEN INSTRUCTIONS */
199          body.instructions = &f0028->then_instructions;
200 
201          body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
202 
203 
204       body.instructions = f0028_parent_instructions;
205       body.emit(f0028);
206 
207       /* END IF */
208 
209       /* IF CONDITION */
210       ir_expression *const r002B = sub(body.constant(int(63)), r000E);
211       ir_expression *const r002C = lequal(r0010, r002B);
212       ir_expression *const r002D = lshift(r0026, r000E);
213       ir_expression *const r002E = lequal(r002D, r000F);
214       ir_expression *const r002F = logic_and(r002C, r002E);
215       ir_if *f002A = new(mem_ctx) ir_if(operand(r002F).val);
216       exec_list *const f002A_parent_instructions = body.instructions;
217 
218          /* THEN INSTRUCTIONS */
219          body.instructions = &f002A->then_instructions;
220 
221          ir_expression *const r0030 = lshift(r0026, r000E);
222          body.emit(assign(r000F, sub(r000F, r0030), 0x01));
223 
224          ir_expression *const r0031 = lshift(body.constant(1u), r000E);
225          body.emit(assign(r0011, bit_or(swizzle_x(r0011), r0031), 0x01));
226 
227 
228       body.instructions = f002A_parent_instructions;
229       body.emit(f002A);
230 
231       /* END IF */
232 
233       body.emit(assign(r000E, add(r000E, body.constant(int(-1))), 0x01));
234 
235    /* LOOP END */
236 
237    body.instructions = f0027_parent_instructions;
238    body.emit(f0027);
239 
240    /* IF CONDITION */
241    ir_expression *const r0033 = lequal(r0026, r000F);
242    ir_if *f0032 = new(mem_ctx) ir_if(operand(r0033).val);
243    exec_list *const f0032_parent_instructions = body.instructions;
244 
245       /* THEN INSTRUCTIONS */
246       body.instructions = &f0032->then_instructions;
247 
248       body.emit(assign(r000F, sub(r000F, r0026), 0x01));
249 
250       body.emit(assign(r0011, bit_or(swizzle_x(r0011), body.constant(1u)), 0x01));
251 
252 
253    body.instructions = f0032_parent_instructions;
254    body.emit(f0032);
255 
256    /* END IF */
257 
258    ir_variable *const r0034 = body.make_temp(glsl_type::uvec4_type, "vec_ctor");
259    body.emit(assign(r0034, r0011, 0x03));
260 
261    body.emit(assign(r0034, expr(ir_unop_unpack_uint_2x32, r000F), 0x0c));
262 
263    body.emit(ret(r0034));
264 
265    sig->replace_parameters(&sig_parameters);
266    return sig;
267 }
268 ir_function_signature *
udiv64(void * mem_ctx,builtin_available_predicate avail)269 udiv64(void *mem_ctx, builtin_available_predicate avail)
270 {
271    ir_function_signature *const sig =
272       new(mem_ctx) ir_function_signature(glsl_type::uvec2_type, avail);
273    ir_factory body(&sig->body, mem_ctx);
274    sig->is_defined = true;
275 
276    exec_list sig_parameters;
277 
278    ir_variable *const r0035 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "n", ir_var_function_in);
279    sig_parameters.push_tail(r0035);
280    ir_variable *const r0036 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "d", ir_var_function_in);
281    sig_parameters.push_tail(r0036);
282    ir_variable *const r0037 = body.make_temp(glsl_type::uvec2_type, "n");
283    body.emit(assign(r0037, r0035, 0x03));
284 
285    ir_variable *const r0038 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
286    body.emit(r0038);
287    ir_variable *const r0039 = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto);
288    body.emit(r0039);
289    ir_variable *const r003A = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto);
290    body.emit(r003A);
291    ir_variable *const r003B = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto);
292    body.emit(r003B);
293    body.emit(assign(r003B, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03));
294 
295    ir_expression *const r003C = expr(ir_unop_find_msb, swizzle_y(r0036));
296    body.emit(assign(r003A, add(r003C, body.constant(int(32))), 0x01));
297 
298    /* IF CONDITION */
299    ir_expression *const r003E = equal(swizzle_y(r0036), body.constant(0u));
300    ir_expression *const r003F = gequal(swizzle_y(r0035), swizzle_x(r0036));
301    ir_expression *const r0040 = logic_and(r003E, r003F);
302    ir_if *f003D = new(mem_ctx) ir_if(operand(r0040).val);
303    exec_list *const f003D_parent_instructions = body.instructions;
304 
305       /* THEN INSTRUCTIONS */
306       body.instructions = &f003D->then_instructions;
307 
308       ir_variable *const r0041 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
309       body.emit(r0041);
310       ir_variable *const r0042 = body.make_temp(glsl_type::int_type, "findMSB_retval");
311       body.emit(assign(r0042, expr(ir_unop_find_msb, swizzle_x(r0036)), 0x01));
312 
313       body.emit(assign(r003A, r0042, 0x01));
314 
315       body.emit(assign(r0041, body.constant(int(31)), 0x01));
316 
317       /* LOOP BEGIN */
318       ir_loop *f0043 = new(mem_ctx) ir_loop();
319       exec_list *const f0043_parent_instructions = body.instructions;
320 
321          body.instructions = &f0043->body_instructions;
322 
323          /* IF CONDITION */
324          ir_expression *const r0045 = less(r0041, body.constant(int(1)));
325          ir_if *f0044 = new(mem_ctx) ir_if(operand(r0045).val);
326          exec_list *const f0044_parent_instructions = body.instructions;
327 
328             /* THEN INSTRUCTIONS */
329             body.instructions = &f0044->then_instructions;
330 
331             body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
332 
333 
334          body.instructions = f0044_parent_instructions;
335          body.emit(f0044);
336 
337          /* END IF */
338 
339          /* IF CONDITION */
340          ir_expression *const r0047 = sub(body.constant(int(31)), r0041);
341          ir_expression *const r0048 = lequal(r0042, r0047);
342          ir_expression *const r0049 = lshift(swizzle_x(r0036), r0041);
343          ir_expression *const r004A = lequal(r0049, swizzle_y(r0037));
344          ir_expression *const r004B = logic_and(r0048, r004A);
345          ir_if *f0046 = new(mem_ctx) ir_if(operand(r004B).val);
346          exec_list *const f0046_parent_instructions = body.instructions;
347 
348             /* THEN INSTRUCTIONS */
349             body.instructions = &f0046->then_instructions;
350 
351             ir_expression *const r004C = lshift(swizzle_x(r0036), r0041);
352             body.emit(assign(r0037, sub(swizzle_y(r0037), r004C), 0x02));
353 
354             ir_expression *const r004D = lshift(body.constant(1u), r0041);
355             body.emit(assign(r003B, bit_or(swizzle_y(r003B), r004D), 0x02));
356 
357 
358          body.instructions = f0046_parent_instructions;
359          body.emit(f0046);
360 
361          /* END IF */
362 
363          body.emit(assign(r0041, add(r0041, body.constant(int(-1))), 0x01));
364 
365       /* LOOP END */
366 
367       body.instructions = f0043_parent_instructions;
368       body.emit(f0043);
369 
370       /* IF CONDITION */
371       ir_expression *const r004F = lequal(swizzle_x(r0036), swizzle_y(r0037));
372       ir_if *f004E = new(mem_ctx) ir_if(operand(r004F).val);
373       exec_list *const f004E_parent_instructions = body.instructions;
374 
375          /* THEN INSTRUCTIONS */
376          body.instructions = &f004E->then_instructions;
377 
378          body.emit(assign(r0037, sub(swizzle_y(r0037), swizzle_x(r0036)), 0x02));
379 
380          body.emit(assign(r003B, bit_or(swizzle_y(r003B), body.constant(1u)), 0x02));
381 
382 
383       body.instructions = f004E_parent_instructions;
384       body.emit(f004E);
385 
386       /* END IF */
387 
388 
389    body.instructions = f003D_parent_instructions;
390    body.emit(f003D);
391 
392    /* END IF */
393 
394    ir_variable *const r0050 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval");
395    body.emit(assign(r0050, expr(ir_unop_pack_uint_2x32, r0036), 0x01));
396 
397    body.emit(assign(r0039, expr(ir_unop_pack_uint_2x32, r0037), 0x01));
398 
399    body.emit(assign(r0038, body.constant(int(31)), 0x01));
400 
401    /* LOOP BEGIN */
402    ir_loop *f0051 = new(mem_ctx) ir_loop();
403    exec_list *const f0051_parent_instructions = body.instructions;
404 
405       body.instructions = &f0051->body_instructions;
406 
407       /* IF CONDITION */
408       ir_expression *const r0053 = less(r0038, body.constant(int(1)));
409       ir_if *f0052 = new(mem_ctx) ir_if(operand(r0053).val);
410       exec_list *const f0052_parent_instructions = body.instructions;
411 
412          /* THEN INSTRUCTIONS */
413          body.instructions = &f0052->then_instructions;
414 
415          body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
416 
417 
418       body.instructions = f0052_parent_instructions;
419       body.emit(f0052);
420 
421       /* END IF */
422 
423       /* IF CONDITION */
424       ir_expression *const r0055 = sub(body.constant(int(63)), r0038);
425       ir_expression *const r0056 = lequal(r003A, r0055);
426       ir_expression *const r0057 = lshift(r0050, r0038);
427       ir_expression *const r0058 = lequal(r0057, r0039);
428       ir_expression *const r0059 = logic_and(r0056, r0058);
429       ir_if *f0054 = new(mem_ctx) ir_if(operand(r0059).val);
430       exec_list *const f0054_parent_instructions = body.instructions;
431 
432          /* THEN INSTRUCTIONS */
433          body.instructions = &f0054->then_instructions;
434 
435          ir_expression *const r005A = lshift(r0050, r0038);
436          body.emit(assign(r0039, sub(r0039, r005A), 0x01));
437 
438          ir_expression *const r005B = lshift(body.constant(1u), r0038);
439          body.emit(assign(r003B, bit_or(swizzle_x(r003B), r005B), 0x01));
440 
441 
442       body.instructions = f0054_parent_instructions;
443       body.emit(f0054);
444 
445       /* END IF */
446 
447       body.emit(assign(r0038, add(r0038, body.constant(int(-1))), 0x01));
448 
449    /* LOOP END */
450 
451    body.instructions = f0051_parent_instructions;
452    body.emit(f0051);
453 
454    /* IF CONDITION */
455    ir_expression *const r005D = lequal(r0050, r0039);
456    ir_if *f005C = new(mem_ctx) ir_if(operand(r005D).val);
457    exec_list *const f005C_parent_instructions = body.instructions;
458 
459       /* THEN INSTRUCTIONS */
460       body.instructions = &f005C->then_instructions;
461 
462       body.emit(assign(r0039, sub(r0039, r0050), 0x01));
463 
464       body.emit(assign(r003B, bit_or(swizzle_x(r003B), body.constant(1u)), 0x01));
465 
466 
467    body.instructions = f005C_parent_instructions;
468    body.emit(f005C);
469 
470    /* END IF */
471 
472    body.emit(ret(r003B));
473 
474    sig->replace_parameters(&sig_parameters);
475    return sig;
476 }
477 ir_function_signature *
idiv64(void * mem_ctx,builtin_available_predicate avail)478 idiv64(void *mem_ctx, builtin_available_predicate avail)
479 {
480    ir_function_signature *const sig =
481       new(mem_ctx) ir_function_signature(glsl_type::ivec2_type, avail);
482    ir_factory body(&sig->body, mem_ctx);
483    sig->is_defined = true;
484 
485    exec_list sig_parameters;
486 
487    ir_variable *const r005E = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_n", ir_var_function_in);
488    sig_parameters.push_tail(r005E);
489    ir_variable *const r005F = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_d", ir_var_function_in);
490    sig_parameters.push_tail(r005F);
491    ir_variable *const r0060 = new(mem_ctx) ir_variable(glsl_type::bool_type, "negate", ir_var_auto);
492    body.emit(r0060);
493    ir_expression *const r0061 = less(swizzle_y(r005E), body.constant(int(0)));
494    ir_expression *const r0062 = less(swizzle_y(r005F), body.constant(int(0)));
495    body.emit(assign(r0060, nequal(r0061, r0062), 0x01));
496 
497    ir_variable *const r0063 = body.make_temp(glsl_type::uvec2_type, "n");
498    ir_expression *const r0064 = expr(ir_unop_pack_int_2x32, r005E);
499    ir_expression *const r0065 = expr(ir_unop_abs, r0064);
500    ir_expression *const r0066 = expr(ir_unop_i642u64, r0065);
501    body.emit(assign(r0063, expr(ir_unop_unpack_uint_2x32, r0066), 0x03));
502 
503    ir_variable *const r0067 = body.make_temp(glsl_type::uvec2_type, "d");
504    ir_expression *const r0068 = expr(ir_unop_pack_int_2x32, r005F);
505    ir_expression *const r0069 = expr(ir_unop_abs, r0068);
506    ir_expression *const r006A = expr(ir_unop_i642u64, r0069);
507    body.emit(assign(r0067, expr(ir_unop_unpack_uint_2x32, r006A), 0x03));
508 
509    ir_variable *const r006B = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
510    body.emit(r006B);
511    ir_variable *const r006C = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto);
512    body.emit(r006C);
513    ir_variable *const r006D = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto);
514    body.emit(r006D);
515    ir_variable *const r006E = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto);
516    body.emit(r006E);
517    body.emit(assign(r006E, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03));
518 
519    ir_expression *const r006F = expr(ir_unop_find_msb, swizzle_y(r0067));
520    body.emit(assign(r006D, add(r006F, body.constant(int(32))), 0x01));
521 
522    /* IF CONDITION */
523    ir_expression *const r0071 = equal(swizzle_y(r0067), body.constant(0u));
524    ir_expression *const r0072 = gequal(swizzle_y(r0063), swizzle_x(r0067));
525    ir_expression *const r0073 = logic_and(r0071, r0072);
526    ir_if *f0070 = new(mem_ctx) ir_if(operand(r0073).val);
527    exec_list *const f0070_parent_instructions = body.instructions;
528 
529       /* THEN INSTRUCTIONS */
530       body.instructions = &f0070->then_instructions;
531 
532       ir_variable *const r0074 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
533       body.emit(r0074);
534       ir_variable *const r0075 = body.make_temp(glsl_type::int_type, "findMSB_retval");
535       body.emit(assign(r0075, expr(ir_unop_find_msb, swizzle_x(r0067)), 0x01));
536 
537       body.emit(assign(r006D, r0075, 0x01));
538 
539       body.emit(assign(r0074, body.constant(int(31)), 0x01));
540 
541       /* LOOP BEGIN */
542       ir_loop *f0076 = new(mem_ctx) ir_loop();
543       exec_list *const f0076_parent_instructions = body.instructions;
544 
545          body.instructions = &f0076->body_instructions;
546 
547          /* IF CONDITION */
548          ir_expression *const r0078 = less(r0074, body.constant(int(1)));
549          ir_if *f0077 = new(mem_ctx) ir_if(operand(r0078).val);
550          exec_list *const f0077_parent_instructions = body.instructions;
551 
552             /* THEN INSTRUCTIONS */
553             body.instructions = &f0077->then_instructions;
554 
555             body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
556 
557 
558          body.instructions = f0077_parent_instructions;
559          body.emit(f0077);
560 
561          /* END IF */
562 
563          /* IF CONDITION */
564          ir_expression *const r007A = sub(body.constant(int(31)), r0074);
565          ir_expression *const r007B = lequal(r0075, r007A);
566          ir_expression *const r007C = lshift(swizzle_x(r0067), r0074);
567          ir_expression *const r007D = lequal(r007C, swizzle_y(r0063));
568          ir_expression *const r007E = logic_and(r007B, r007D);
569          ir_if *f0079 = new(mem_ctx) ir_if(operand(r007E).val);
570          exec_list *const f0079_parent_instructions = body.instructions;
571 
572             /* THEN INSTRUCTIONS */
573             body.instructions = &f0079->then_instructions;
574 
575             ir_expression *const r007F = lshift(swizzle_x(r0067), r0074);
576             body.emit(assign(r0063, sub(swizzle_y(r0063), r007F), 0x02));
577 
578             ir_expression *const r0080 = lshift(body.constant(1u), r0074);
579             body.emit(assign(r006E, bit_or(swizzle_y(r006E), r0080), 0x02));
580 
581 
582          body.instructions = f0079_parent_instructions;
583          body.emit(f0079);
584 
585          /* END IF */
586 
587          body.emit(assign(r0074, add(r0074, body.constant(int(-1))), 0x01));
588 
589       /* LOOP END */
590 
591       body.instructions = f0076_parent_instructions;
592       body.emit(f0076);
593 
594       /* IF CONDITION */
595       ir_expression *const r0082 = lequal(swizzle_x(r0067), swizzle_y(r0063));
596       ir_if *f0081 = new(mem_ctx) ir_if(operand(r0082).val);
597       exec_list *const f0081_parent_instructions = body.instructions;
598 
599          /* THEN INSTRUCTIONS */
600          body.instructions = &f0081->then_instructions;
601 
602          body.emit(assign(r0063, sub(swizzle_y(r0063), swizzle_x(r0067)), 0x02));
603 
604          body.emit(assign(r006E, bit_or(swizzle_y(r006E), body.constant(1u)), 0x02));
605 
606 
607       body.instructions = f0081_parent_instructions;
608       body.emit(f0081);
609 
610       /* END IF */
611 
612 
613    body.instructions = f0070_parent_instructions;
614    body.emit(f0070);
615 
616    /* END IF */
617 
618    ir_variable *const r0083 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval");
619    body.emit(assign(r0083, expr(ir_unop_pack_uint_2x32, r0067), 0x01));
620 
621    body.emit(assign(r006C, expr(ir_unop_pack_uint_2x32, r0063), 0x01));
622 
623    body.emit(assign(r006B, body.constant(int(31)), 0x01));
624 
625    /* LOOP BEGIN */
626    ir_loop *f0084 = new(mem_ctx) ir_loop();
627    exec_list *const f0084_parent_instructions = body.instructions;
628 
629       body.instructions = &f0084->body_instructions;
630 
631       /* IF CONDITION */
632       ir_expression *const r0086 = less(r006B, body.constant(int(1)));
633       ir_if *f0085 = new(mem_ctx) ir_if(operand(r0086).val);
634       exec_list *const f0085_parent_instructions = body.instructions;
635 
636          /* THEN INSTRUCTIONS */
637          body.instructions = &f0085->then_instructions;
638 
639          body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
640 
641 
642       body.instructions = f0085_parent_instructions;
643       body.emit(f0085);
644 
645       /* END IF */
646 
647       /* IF CONDITION */
648       ir_expression *const r0088 = sub(body.constant(int(63)), r006B);
649       ir_expression *const r0089 = lequal(r006D, r0088);
650       ir_expression *const r008A = lshift(r0083, r006B);
651       ir_expression *const r008B = lequal(r008A, r006C);
652       ir_expression *const r008C = logic_and(r0089, r008B);
653       ir_if *f0087 = new(mem_ctx) ir_if(operand(r008C).val);
654       exec_list *const f0087_parent_instructions = body.instructions;
655 
656          /* THEN INSTRUCTIONS */
657          body.instructions = &f0087->then_instructions;
658 
659          ir_expression *const r008D = lshift(r0083, r006B);
660          body.emit(assign(r006C, sub(r006C, r008D), 0x01));
661 
662          ir_expression *const r008E = lshift(body.constant(1u), r006B);
663          body.emit(assign(r006E, bit_or(swizzle_x(r006E), r008E), 0x01));
664 
665 
666       body.instructions = f0087_parent_instructions;
667       body.emit(f0087);
668 
669       /* END IF */
670 
671       body.emit(assign(r006B, add(r006B, body.constant(int(-1))), 0x01));
672 
673    /* LOOP END */
674 
675    body.instructions = f0084_parent_instructions;
676    body.emit(f0084);
677 
678    /* IF CONDITION */
679    ir_expression *const r0090 = lequal(r0083, r006C);
680    ir_if *f008F = new(mem_ctx) ir_if(operand(r0090).val);
681    exec_list *const f008F_parent_instructions = body.instructions;
682 
683       /* THEN INSTRUCTIONS */
684       body.instructions = &f008F->then_instructions;
685 
686       body.emit(assign(r006C, sub(r006C, r0083), 0x01));
687 
688       body.emit(assign(r006E, bit_or(swizzle_x(r006E), body.constant(1u)), 0x01));
689 
690 
691    body.instructions = f008F_parent_instructions;
692    body.emit(f008F);
693 
694    /* END IF */
695 
696    ir_variable *const r0091 = body.make_temp(glsl_type::ivec2_type, "conditional_tmp");
697    /* IF CONDITION */
698    ir_if *f0092 = new(mem_ctx) ir_if(operand(r0060).val);
699    exec_list *const f0092_parent_instructions = body.instructions;
700 
701       /* THEN INSTRUCTIONS */
702       body.instructions = &f0092->then_instructions;
703 
704       ir_expression *const r0093 = expr(ir_unop_pack_uint_2x32, r006E);
705       ir_expression *const r0094 = expr(ir_unop_u642i64, r0093);
706       ir_expression *const r0095 = neg(r0094);
707       body.emit(assign(r0091, expr(ir_unop_unpack_int_2x32, r0095), 0x03));
708 
709 
710       /* ELSE INSTRUCTIONS */
711       body.instructions = &f0092->else_instructions;
712 
713       body.emit(assign(r0091, expr(ir_unop_u2i, r006E), 0x03));
714 
715 
716    body.instructions = f0092_parent_instructions;
717    body.emit(f0092);
718 
719    /* END IF */
720 
721    body.emit(ret(r0091));
722 
723    sig->replace_parameters(&sig_parameters);
724    return sig;
725 }
726 ir_function_signature *
umod64(void * mem_ctx,builtin_available_predicate avail)727 umod64(void *mem_ctx, builtin_available_predicate avail)
728 {
729    ir_function_signature *const sig =
730       new(mem_ctx) ir_function_signature(glsl_type::uvec2_type, avail);
731    ir_factory body(&sig->body, mem_ctx);
732    sig->is_defined = true;
733 
734    exec_list sig_parameters;
735 
736    ir_variable *const r0096 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "n", ir_var_function_in);
737    sig_parameters.push_tail(r0096);
738    ir_variable *const r0097 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "d", ir_var_function_in);
739    sig_parameters.push_tail(r0097);
740    ir_variable *const r0098 = body.make_temp(glsl_type::uvec2_type, "n");
741    body.emit(assign(r0098, r0096, 0x03));
742 
743    ir_variable *const r0099 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
744    body.emit(r0099);
745    ir_variable *const r009A = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto);
746    body.emit(r009A);
747    ir_variable *const r009B = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto);
748    body.emit(r009B);
749    ir_variable *const r009C = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto);
750    body.emit(r009C);
751    body.emit(assign(r009C, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03));
752 
753    ir_expression *const r009D = expr(ir_unop_find_msb, swizzle_y(r0097));
754    body.emit(assign(r009B, add(r009D, body.constant(int(32))), 0x01));
755 
756    /* IF CONDITION */
757    ir_expression *const r009F = equal(swizzle_y(r0097), body.constant(0u));
758    ir_expression *const r00A0 = gequal(swizzle_y(r0096), swizzle_x(r0097));
759    ir_expression *const r00A1 = logic_and(r009F, r00A0);
760    ir_if *f009E = new(mem_ctx) ir_if(operand(r00A1).val);
761    exec_list *const f009E_parent_instructions = body.instructions;
762 
763       /* THEN INSTRUCTIONS */
764       body.instructions = &f009E->then_instructions;
765 
766       ir_variable *const r00A2 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
767       body.emit(r00A2);
768       ir_variable *const r00A3 = body.make_temp(glsl_type::int_type, "findMSB_retval");
769       body.emit(assign(r00A3, expr(ir_unop_find_msb, swizzle_x(r0097)), 0x01));
770 
771       body.emit(assign(r009B, r00A3, 0x01));
772 
773       body.emit(assign(r00A2, body.constant(int(31)), 0x01));
774 
775       /* LOOP BEGIN */
776       ir_loop *f00A4 = new(mem_ctx) ir_loop();
777       exec_list *const f00A4_parent_instructions = body.instructions;
778 
779          body.instructions = &f00A4->body_instructions;
780 
781          /* IF CONDITION */
782          ir_expression *const r00A6 = less(r00A2, body.constant(int(1)));
783          ir_if *f00A5 = new(mem_ctx) ir_if(operand(r00A6).val);
784          exec_list *const f00A5_parent_instructions = body.instructions;
785 
786             /* THEN INSTRUCTIONS */
787             body.instructions = &f00A5->then_instructions;
788 
789             body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
790 
791 
792          body.instructions = f00A5_parent_instructions;
793          body.emit(f00A5);
794 
795          /* END IF */
796 
797          /* IF CONDITION */
798          ir_expression *const r00A8 = sub(body.constant(int(31)), r00A2);
799          ir_expression *const r00A9 = lequal(r00A3, r00A8);
800          ir_expression *const r00AA = lshift(swizzle_x(r0097), r00A2);
801          ir_expression *const r00AB = lequal(r00AA, swizzle_y(r0098));
802          ir_expression *const r00AC = logic_and(r00A9, r00AB);
803          ir_if *f00A7 = new(mem_ctx) ir_if(operand(r00AC).val);
804          exec_list *const f00A7_parent_instructions = body.instructions;
805 
806             /* THEN INSTRUCTIONS */
807             body.instructions = &f00A7->then_instructions;
808 
809             ir_expression *const r00AD = lshift(swizzle_x(r0097), r00A2);
810             body.emit(assign(r0098, sub(swizzle_y(r0098), r00AD), 0x02));
811 
812             ir_expression *const r00AE = lshift(body.constant(1u), r00A2);
813             body.emit(assign(r009C, bit_or(swizzle_y(r009C), r00AE), 0x02));
814 
815 
816          body.instructions = f00A7_parent_instructions;
817          body.emit(f00A7);
818 
819          /* END IF */
820 
821          body.emit(assign(r00A2, add(r00A2, body.constant(int(-1))), 0x01));
822 
823       /* LOOP END */
824 
825       body.instructions = f00A4_parent_instructions;
826       body.emit(f00A4);
827 
828       /* IF CONDITION */
829       ir_expression *const r00B0 = lequal(swizzle_x(r0097), swizzle_y(r0098));
830       ir_if *f00AF = new(mem_ctx) ir_if(operand(r00B0).val);
831       exec_list *const f00AF_parent_instructions = body.instructions;
832 
833          /* THEN INSTRUCTIONS */
834          body.instructions = &f00AF->then_instructions;
835 
836          body.emit(assign(r0098, sub(swizzle_y(r0098), swizzle_x(r0097)), 0x02));
837 
838          body.emit(assign(r009C, bit_or(swizzle_y(r009C), body.constant(1u)), 0x02));
839 
840 
841       body.instructions = f00AF_parent_instructions;
842       body.emit(f00AF);
843 
844       /* END IF */
845 
846 
847    body.instructions = f009E_parent_instructions;
848    body.emit(f009E);
849 
850    /* END IF */
851 
852    ir_variable *const r00B1 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval");
853    body.emit(assign(r00B1, expr(ir_unop_pack_uint_2x32, r0097), 0x01));
854 
855    body.emit(assign(r009A, expr(ir_unop_pack_uint_2x32, r0098), 0x01));
856 
857    body.emit(assign(r0099, body.constant(int(31)), 0x01));
858 
859    /* LOOP BEGIN */
860    ir_loop *f00B2 = new(mem_ctx) ir_loop();
861    exec_list *const f00B2_parent_instructions = body.instructions;
862 
863       body.instructions = &f00B2->body_instructions;
864 
865       /* IF CONDITION */
866       ir_expression *const r00B4 = less(r0099, body.constant(int(1)));
867       ir_if *f00B3 = new(mem_ctx) ir_if(operand(r00B4).val);
868       exec_list *const f00B3_parent_instructions = body.instructions;
869 
870          /* THEN INSTRUCTIONS */
871          body.instructions = &f00B3->then_instructions;
872 
873          body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
874 
875 
876       body.instructions = f00B3_parent_instructions;
877       body.emit(f00B3);
878 
879       /* END IF */
880 
881       /* IF CONDITION */
882       ir_expression *const r00B6 = sub(body.constant(int(63)), r0099);
883       ir_expression *const r00B7 = lequal(r009B, r00B6);
884       ir_expression *const r00B8 = lshift(r00B1, r0099);
885       ir_expression *const r00B9 = lequal(r00B8, r009A);
886       ir_expression *const r00BA = logic_and(r00B7, r00B9);
887       ir_if *f00B5 = new(mem_ctx) ir_if(operand(r00BA).val);
888       exec_list *const f00B5_parent_instructions = body.instructions;
889 
890          /* THEN INSTRUCTIONS */
891          body.instructions = &f00B5->then_instructions;
892 
893          ir_expression *const r00BB = lshift(r00B1, r0099);
894          body.emit(assign(r009A, sub(r009A, r00BB), 0x01));
895 
896          ir_expression *const r00BC = lshift(body.constant(1u), r0099);
897          body.emit(assign(r009C, bit_or(swizzle_x(r009C), r00BC), 0x01));
898 
899 
900       body.instructions = f00B5_parent_instructions;
901       body.emit(f00B5);
902 
903       /* END IF */
904 
905       body.emit(assign(r0099, add(r0099, body.constant(int(-1))), 0x01));
906 
907    /* LOOP END */
908 
909    body.instructions = f00B2_parent_instructions;
910    body.emit(f00B2);
911 
912    /* IF CONDITION */
913    ir_expression *const r00BE = lequal(r00B1, r009A);
914    ir_if *f00BD = new(mem_ctx) ir_if(operand(r00BE).val);
915    exec_list *const f00BD_parent_instructions = body.instructions;
916 
917       /* THEN INSTRUCTIONS */
918       body.instructions = &f00BD->then_instructions;
919 
920       body.emit(assign(r009A, sub(r009A, r00B1), 0x01));
921 
922       body.emit(assign(r009C, bit_or(swizzle_x(r009C), body.constant(1u)), 0x01));
923 
924 
925    body.instructions = f00BD_parent_instructions;
926    body.emit(f00BD);
927 
928    /* END IF */
929 
930    ir_variable *const r00BF = body.make_temp(glsl_type::uvec4_type, "vec_ctor");
931    body.emit(assign(r00BF, r009C, 0x03));
932 
933    body.emit(assign(r00BF, expr(ir_unop_unpack_uint_2x32, r009A), 0x0c));
934 
935    ir_swizzle *const r00C0 = swizzle(r00BF, MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_W, SWIZZLE_X, SWIZZLE_X), 2);
936    body.emit(ret(r00C0));
937 
938    sig->replace_parameters(&sig_parameters);
939    return sig;
940 }
941 ir_function_signature *
imod64(void * mem_ctx,builtin_available_predicate avail)942 imod64(void *mem_ctx, builtin_available_predicate avail)
943 {
944    ir_function_signature *const sig =
945       new(mem_ctx) ir_function_signature(glsl_type::ivec2_type, avail);
946    ir_factory body(&sig->body, mem_ctx);
947    sig->is_defined = true;
948 
949    exec_list sig_parameters;
950 
951    ir_variable *const r00C1 = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_n", ir_var_function_in);
952    sig_parameters.push_tail(r00C1);
953    ir_variable *const r00C2 = new(mem_ctx) ir_variable(glsl_type::ivec2_type, "_d", ir_var_function_in);
954    sig_parameters.push_tail(r00C2);
955    ir_variable *const r00C3 = new(mem_ctx) ir_variable(glsl_type::bool_type, "negate", ir_var_auto);
956    body.emit(r00C3);
957    ir_expression *const r00C4 = less(swizzle_y(r00C1), body.constant(int(0)));
958    ir_expression *const r00C5 = less(swizzle_y(r00C2), body.constant(int(0)));
959    body.emit(assign(r00C3, nequal(r00C4, r00C5), 0x01));
960 
961    ir_variable *const r00C6 = body.make_temp(glsl_type::uvec2_type, "n");
962    ir_expression *const r00C7 = expr(ir_unop_pack_int_2x32, r00C1);
963    ir_expression *const r00C8 = expr(ir_unop_abs, r00C7);
964    ir_expression *const r00C9 = expr(ir_unop_i642u64, r00C8);
965    body.emit(assign(r00C6, expr(ir_unop_unpack_uint_2x32, r00C9), 0x03));
966 
967    ir_variable *const r00CA = body.make_temp(glsl_type::uvec2_type, "d");
968    ir_expression *const r00CB = expr(ir_unop_pack_int_2x32, r00C2);
969    ir_expression *const r00CC = expr(ir_unop_abs, r00CB);
970    ir_expression *const r00CD = expr(ir_unop_i642u64, r00CC);
971    body.emit(assign(r00CA, expr(ir_unop_unpack_uint_2x32, r00CD), 0x03));
972 
973    ir_variable *const r00CE = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
974    body.emit(r00CE);
975    ir_variable *const r00CF = new(mem_ctx) ir_variable(glsl_type::uint64_t_type, "n64", ir_var_auto);
976    body.emit(r00CF);
977    ir_variable *const r00D0 = new(mem_ctx) ir_variable(glsl_type::int_type, "log2_denom", ir_var_auto);
978    body.emit(r00D0);
979    ir_variable *const r00D1 = new(mem_ctx) ir_variable(glsl_type::uvec2_type, "quot", ir_var_auto);
980    body.emit(r00D1);
981    body.emit(assign(r00D1, ir_constant::zero(mem_ctx, glsl_type::uvec2_type), 0x03));
982 
983    ir_expression *const r00D2 = expr(ir_unop_find_msb, swizzle_y(r00CA));
984    body.emit(assign(r00D0, add(r00D2, body.constant(int(32))), 0x01));
985 
986    /* IF CONDITION */
987    ir_expression *const r00D4 = equal(swizzle_y(r00CA), body.constant(0u));
988    ir_expression *const r00D5 = gequal(swizzle_y(r00C6), swizzle_x(r00CA));
989    ir_expression *const r00D6 = logic_and(r00D4, r00D5);
990    ir_if *f00D3 = new(mem_ctx) ir_if(operand(r00D6).val);
991    exec_list *const f00D3_parent_instructions = body.instructions;
992 
993       /* THEN INSTRUCTIONS */
994       body.instructions = &f00D3->then_instructions;
995 
996       ir_variable *const r00D7 = new(mem_ctx) ir_variable(glsl_type::int_type, "i", ir_var_auto);
997       body.emit(r00D7);
998       ir_variable *const r00D8 = body.make_temp(glsl_type::int_type, "findMSB_retval");
999       body.emit(assign(r00D8, expr(ir_unop_find_msb, swizzle_x(r00CA)), 0x01));
1000 
1001       body.emit(assign(r00D0, r00D8, 0x01));
1002 
1003       body.emit(assign(r00D7, body.constant(int(31)), 0x01));
1004 
1005       /* LOOP BEGIN */
1006       ir_loop *f00D9 = new(mem_ctx) ir_loop();
1007       exec_list *const f00D9_parent_instructions = body.instructions;
1008 
1009          body.instructions = &f00D9->body_instructions;
1010 
1011          /* IF CONDITION */
1012          ir_expression *const r00DB = less(r00D7, body.constant(int(1)));
1013          ir_if *f00DA = new(mem_ctx) ir_if(operand(r00DB).val);
1014          exec_list *const f00DA_parent_instructions = body.instructions;
1015 
1016             /* THEN INSTRUCTIONS */
1017             body.instructions = &f00DA->then_instructions;
1018 
1019             body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
1020 
1021 
1022          body.instructions = f00DA_parent_instructions;
1023          body.emit(f00DA);
1024 
1025          /* END IF */
1026 
1027          /* IF CONDITION */
1028          ir_expression *const r00DD = sub(body.constant(int(31)), r00D7);
1029          ir_expression *const r00DE = lequal(r00D8, r00DD);
1030          ir_expression *const r00DF = lshift(swizzle_x(r00CA), r00D7);
1031          ir_expression *const r00E0 = lequal(r00DF, swizzle_y(r00C6));
1032          ir_expression *const r00E1 = logic_and(r00DE, r00E0);
1033          ir_if *f00DC = new(mem_ctx) ir_if(operand(r00E1).val);
1034          exec_list *const f00DC_parent_instructions = body.instructions;
1035 
1036             /* THEN INSTRUCTIONS */
1037             body.instructions = &f00DC->then_instructions;
1038 
1039             ir_expression *const r00E2 = lshift(swizzle_x(r00CA), r00D7);
1040             body.emit(assign(r00C6, sub(swizzle_y(r00C6), r00E2), 0x02));
1041 
1042             ir_expression *const r00E3 = lshift(body.constant(1u), r00D7);
1043             body.emit(assign(r00D1, bit_or(swizzle_y(r00D1), r00E3), 0x02));
1044 
1045 
1046          body.instructions = f00DC_parent_instructions;
1047          body.emit(f00DC);
1048 
1049          /* END IF */
1050 
1051          body.emit(assign(r00D7, add(r00D7, body.constant(int(-1))), 0x01));
1052 
1053       /* LOOP END */
1054 
1055       body.instructions = f00D9_parent_instructions;
1056       body.emit(f00D9);
1057 
1058       /* IF CONDITION */
1059       ir_expression *const r00E5 = lequal(swizzle_x(r00CA), swizzle_y(r00C6));
1060       ir_if *f00E4 = new(mem_ctx) ir_if(operand(r00E5).val);
1061       exec_list *const f00E4_parent_instructions = body.instructions;
1062 
1063          /* THEN INSTRUCTIONS */
1064          body.instructions = &f00E4->then_instructions;
1065 
1066          body.emit(assign(r00C6, sub(swizzle_y(r00C6), swizzle_x(r00CA)), 0x02));
1067 
1068          body.emit(assign(r00D1, bit_or(swizzle_y(r00D1), body.constant(1u)), 0x02));
1069 
1070 
1071       body.instructions = f00E4_parent_instructions;
1072       body.emit(f00E4);
1073 
1074       /* END IF */
1075 
1076 
1077    body.instructions = f00D3_parent_instructions;
1078    body.emit(f00D3);
1079 
1080    /* END IF */
1081 
1082    ir_variable *const r00E6 = body.make_temp(glsl_type::uint64_t_type, "packUint2x32_retval");
1083    body.emit(assign(r00E6, expr(ir_unop_pack_uint_2x32, r00CA), 0x01));
1084 
1085    body.emit(assign(r00CF, expr(ir_unop_pack_uint_2x32, r00C6), 0x01));
1086 
1087    body.emit(assign(r00CE, body.constant(int(31)), 0x01));
1088 
1089    /* LOOP BEGIN */
1090    ir_loop *f00E7 = new(mem_ctx) ir_loop();
1091    exec_list *const f00E7_parent_instructions = body.instructions;
1092 
1093       body.instructions = &f00E7->body_instructions;
1094 
1095       /* IF CONDITION */
1096       ir_expression *const r00E9 = less(r00CE, body.constant(int(1)));
1097       ir_if *f00E8 = new(mem_ctx) ir_if(operand(r00E9).val);
1098       exec_list *const f00E8_parent_instructions = body.instructions;
1099 
1100          /* THEN INSTRUCTIONS */
1101          body.instructions = &f00E8->then_instructions;
1102 
1103          body.emit(new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_break));
1104 
1105 
1106       body.instructions = f00E8_parent_instructions;
1107       body.emit(f00E8);
1108 
1109       /* END IF */
1110 
1111       /* IF CONDITION */
1112       ir_expression *const r00EB = sub(body.constant(int(63)), r00CE);
1113       ir_expression *const r00EC = lequal(r00D0, r00EB);
1114       ir_expression *const r00ED = lshift(r00E6, r00CE);
1115       ir_expression *const r00EE = lequal(r00ED, r00CF);
1116       ir_expression *const r00EF = logic_and(r00EC, r00EE);
1117       ir_if *f00EA = new(mem_ctx) ir_if(operand(r00EF).val);
1118       exec_list *const f00EA_parent_instructions = body.instructions;
1119 
1120          /* THEN INSTRUCTIONS */
1121          body.instructions = &f00EA->then_instructions;
1122 
1123          ir_expression *const r00F0 = lshift(r00E6, r00CE);
1124          body.emit(assign(r00CF, sub(r00CF, r00F0), 0x01));
1125 
1126          ir_expression *const r00F1 = lshift(body.constant(1u), r00CE);
1127          body.emit(assign(r00D1, bit_or(swizzle_x(r00D1), r00F1), 0x01));
1128 
1129 
1130       body.instructions = f00EA_parent_instructions;
1131       body.emit(f00EA);
1132 
1133       /* END IF */
1134 
1135       body.emit(assign(r00CE, add(r00CE, body.constant(int(-1))), 0x01));
1136 
1137    /* LOOP END */
1138 
1139    body.instructions = f00E7_parent_instructions;
1140    body.emit(f00E7);
1141 
1142    /* IF CONDITION */
1143    ir_expression *const r00F3 = lequal(r00E6, r00CF);
1144    ir_if *f00F2 = new(mem_ctx) ir_if(operand(r00F3).val);
1145    exec_list *const f00F2_parent_instructions = body.instructions;
1146 
1147       /* THEN INSTRUCTIONS */
1148       body.instructions = &f00F2->then_instructions;
1149 
1150       body.emit(assign(r00CF, sub(r00CF, r00E6), 0x01));
1151 
1152       body.emit(assign(r00D1, bit_or(swizzle_x(r00D1), body.constant(1u)), 0x01));
1153 
1154 
1155    body.instructions = f00F2_parent_instructions;
1156    body.emit(f00F2);
1157 
1158    /* END IF */
1159 
1160    ir_variable *const r00F4 = body.make_temp(glsl_type::uvec4_type, "vec_ctor");
1161    body.emit(assign(r00F4, r00D1, 0x03));
1162 
1163    body.emit(assign(r00F4, expr(ir_unop_unpack_uint_2x32, r00CF), 0x0c));
1164 
1165    ir_variable *const r00F5 = body.make_temp(glsl_type::ivec2_type, "conditional_tmp");
1166    /* IF CONDITION */
1167    ir_if *f00F6 = new(mem_ctx) ir_if(operand(r00C3).val);
1168    exec_list *const f00F6_parent_instructions = body.instructions;
1169 
1170       /* THEN INSTRUCTIONS */
1171       body.instructions = &f00F6->then_instructions;
1172 
1173       ir_swizzle *const r00F7 = swizzle(r00F4, MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_W, SWIZZLE_X, SWIZZLE_X), 2);
1174       ir_expression *const r00F8 = expr(ir_unop_pack_uint_2x32, r00F7);
1175       ir_expression *const r00F9 = expr(ir_unop_u642i64, r00F8);
1176       ir_expression *const r00FA = neg(r00F9);
1177       body.emit(assign(r00F5, expr(ir_unop_unpack_int_2x32, r00FA), 0x03));
1178 
1179 
1180       /* ELSE INSTRUCTIONS */
1181       body.instructions = &f00F6->else_instructions;
1182 
1183       ir_swizzle *const r00FB = swizzle(r00F4, MAKE_SWIZZLE4(SWIZZLE_Z, SWIZZLE_W, SWIZZLE_X, SWIZZLE_X), 2);
1184       body.emit(assign(r00F5, expr(ir_unop_u2i, r00FB), 0x03));
1185 
1186 
1187    body.instructions = f00F6_parent_instructions;
1188    body.emit(f00F6);
1189 
1190    /* END IF */
1191 
1192    body.emit(ret(r00F5));
1193 
1194    sig->replace_parameters(&sig_parameters);
1195    return sig;
1196 }
1197