Make JetStream 2
[WebKit-https.git] / PerformanceTests / JetStream2 / ARES-6 / Air / payload-gbemu-executeIteration.js
1 "use strict";
2 // Generated by Air::dumpAsJS from executeIteration#EVx8pJ in Octane/gbemu
3 function createPayloadGbemuExecuteIteration()
4 {
5     let code = new Code();
6     let bb0 = code.addBlock();
7     let bb1 = code.addBlock();
8     let bb2 = code.addBlock();
9     let bb3 = code.addBlock();
10     let bb4 = code.addBlock();
11     let bb5 = code.addBlock();
12     let bb6 = code.addBlock();
13     let bb7 = code.addBlock();
14     let bb8 = code.addBlock();
15     let bb9 = code.addBlock();
16     let bb10 = code.addBlock();
17     let bb11 = code.addBlock();
18     let bb12 = code.addBlock();
19     let bb13 = code.addBlock();
20     let bb14 = code.addBlock();
21     let bb15 = code.addBlock();
22     let bb16 = code.addBlock();
23     let bb17 = code.addBlock();
24     let bb18 = code.addBlock();
25     let bb19 = code.addBlock();
26     let bb20 = code.addBlock();
27     let bb21 = code.addBlock();
28     let bb22 = code.addBlock();
29     let bb23 = code.addBlock();
30     let bb24 = code.addBlock();
31     let bb25 = code.addBlock();
32     let bb26 = code.addBlock();
33     let bb27 = code.addBlock();
34     let bb28 = code.addBlock();
35     let bb29 = code.addBlock();
36     let bb30 = code.addBlock();
37     let bb31 = code.addBlock();
38     let bb32 = code.addBlock();
39     let bb33 = code.addBlock();
40     let bb34 = code.addBlock();
41     let bb35 = code.addBlock();
42     let bb36 = code.addBlock();
43     let bb37 = code.addBlock();
44     let bb38 = code.addBlock();
45     let bb39 = code.addBlock();
46     let bb40 = code.addBlock();
47     let bb41 = code.addBlock();
48     let bb42 = code.addBlock();
49     let slot0 = code.addStackSlot(64, Locked);
50     let slot1 = code.addStackSlot(8, Spill);
51     let slot2 = code.addStackSlot(8, Spill);
52     let slot3 = code.addStackSlot(8, Spill);
53     let slot4 = code.addStackSlot(8, Spill);
54     let slot5 = code.addStackSlot(8, Spill);
55     let slot6 = code.addStackSlot(8, Spill);
56     let slot7 = code.addStackSlot(8, Spill);
57     let slot8 = code.addStackSlot(8, Spill);
58     let slot9 = code.addStackSlot(8, Spill);
59     let slot10 = code.addStackSlot(8, Spill);
60     let slot11 = code.addStackSlot(8, Spill);
61     let slot12 = code.addStackSlot(40, Locked);
62     slot12.setOffsetFromFP(-40);
63     let tmp190 = code.newTmp(GP);
64     let tmp189 = code.newTmp(GP);
65     let tmp188 = code.newTmp(GP);
66     let tmp187 = code.newTmp(GP);
67     let tmp186 = code.newTmp(GP);
68     let tmp185 = code.newTmp(GP);
69     let tmp184 = code.newTmp(GP);
70     let tmp183 = code.newTmp(GP);
71     let tmp182 = code.newTmp(GP);
72     let tmp181 = code.newTmp(GP);
73     let tmp180 = code.newTmp(GP);
74     let tmp179 = code.newTmp(GP);
75     let tmp178 = code.newTmp(GP);
76     let tmp177 = code.newTmp(GP);
77     let tmp176 = code.newTmp(GP);
78     let tmp175 = code.newTmp(GP);
79     let tmp174 = code.newTmp(GP);
80     let tmp173 = code.newTmp(GP);
81     let tmp172 = code.newTmp(GP);
82     let tmp171 = code.newTmp(GP);
83     let tmp170 = code.newTmp(GP);
84     let tmp169 = code.newTmp(GP);
85     let tmp168 = code.newTmp(GP);
86     let tmp167 = code.newTmp(GP);
87     let tmp166 = code.newTmp(GP);
88     let tmp165 = code.newTmp(GP);
89     let tmp164 = code.newTmp(GP);
90     let tmp163 = code.newTmp(GP);
91     let tmp162 = code.newTmp(GP);
92     let tmp161 = code.newTmp(GP);
93     let tmp160 = code.newTmp(GP);
94     let tmp159 = code.newTmp(GP);
95     let tmp158 = code.newTmp(GP);
96     let tmp157 = code.newTmp(GP);
97     let tmp156 = code.newTmp(GP);
98     let tmp155 = code.newTmp(GP);
99     let tmp154 = code.newTmp(GP);
100     let tmp153 = code.newTmp(GP);
101     let tmp152 = code.newTmp(GP);
102     let tmp151 = code.newTmp(GP);
103     let tmp150 = code.newTmp(GP);
104     let tmp149 = code.newTmp(GP);
105     let tmp148 = code.newTmp(GP);
106     let tmp147 = code.newTmp(GP);
107     let tmp146 = code.newTmp(GP);
108     let tmp145 = code.newTmp(GP);
109     let tmp144 = code.newTmp(GP);
110     let tmp143 = code.newTmp(GP);
111     let tmp142 = code.newTmp(GP);
112     let tmp141 = code.newTmp(GP);
113     let tmp140 = code.newTmp(GP);
114     let tmp139 = code.newTmp(GP);
115     let tmp138 = code.newTmp(GP);
116     let tmp137 = code.newTmp(GP);
117     let tmp136 = code.newTmp(GP);
118     let tmp135 = code.newTmp(GP);
119     let tmp134 = code.newTmp(GP);
120     let tmp133 = code.newTmp(GP);
121     let tmp132 = code.newTmp(GP);
122     let tmp131 = code.newTmp(GP);
123     let tmp130 = code.newTmp(GP);
124     let tmp129 = code.newTmp(GP);
125     let tmp128 = code.newTmp(GP);
126     let tmp127 = code.newTmp(GP);
127     let tmp126 = code.newTmp(GP);
128     let tmp125 = code.newTmp(GP);
129     let tmp124 = code.newTmp(GP);
130     let tmp123 = code.newTmp(GP);
131     let tmp122 = code.newTmp(GP);
132     let tmp121 = code.newTmp(GP);
133     let tmp120 = code.newTmp(GP);
134     let tmp119 = code.newTmp(GP);
135     let tmp118 = code.newTmp(GP);
136     let tmp117 = code.newTmp(GP);
137     let tmp116 = code.newTmp(GP);
138     let tmp115 = code.newTmp(GP);
139     let tmp114 = code.newTmp(GP);
140     let tmp113 = code.newTmp(GP);
141     let tmp112 = code.newTmp(GP);
142     let tmp111 = code.newTmp(GP);
143     let tmp110 = code.newTmp(GP);
144     let tmp109 = code.newTmp(GP);
145     let tmp108 = code.newTmp(GP);
146     let tmp107 = code.newTmp(GP);
147     let tmp106 = code.newTmp(GP);
148     let tmp105 = code.newTmp(GP);
149     let tmp104 = code.newTmp(GP);
150     let tmp103 = code.newTmp(GP);
151     let tmp102 = code.newTmp(GP);
152     let tmp101 = code.newTmp(GP);
153     let tmp100 = code.newTmp(GP);
154     let tmp99 = code.newTmp(GP);
155     let tmp98 = code.newTmp(GP);
156     let tmp97 = code.newTmp(GP);
157     let tmp96 = code.newTmp(GP);
158     let tmp95 = code.newTmp(GP);
159     let tmp94 = code.newTmp(GP);
160     let tmp93 = code.newTmp(GP);
161     let tmp92 = code.newTmp(GP);
162     let tmp91 = code.newTmp(GP);
163     let tmp90 = code.newTmp(GP);
164     let tmp89 = code.newTmp(GP);
165     let tmp88 = code.newTmp(GP);
166     let tmp87 = code.newTmp(GP);
167     let tmp86 = code.newTmp(GP);
168     let tmp85 = code.newTmp(GP);
169     let tmp84 = code.newTmp(GP);
170     let tmp83 = code.newTmp(GP);
171     let tmp82 = code.newTmp(GP);
172     let tmp81 = code.newTmp(GP);
173     let tmp80 = code.newTmp(GP);
174     let tmp79 = code.newTmp(GP);
175     let tmp78 = code.newTmp(GP);
176     let tmp77 = code.newTmp(GP);
177     let tmp76 = code.newTmp(GP);
178     let tmp75 = code.newTmp(GP);
179     let tmp74 = code.newTmp(GP);
180     let tmp73 = code.newTmp(GP);
181     let tmp72 = code.newTmp(GP);
182     let tmp71 = code.newTmp(GP);
183     let tmp70 = code.newTmp(GP);
184     let tmp69 = code.newTmp(GP);
185     let tmp68 = code.newTmp(GP);
186     let tmp67 = code.newTmp(GP);
187     let tmp66 = code.newTmp(GP);
188     let tmp65 = code.newTmp(GP);
189     let tmp64 = code.newTmp(GP);
190     let tmp63 = code.newTmp(GP);
191     let tmp62 = code.newTmp(GP);
192     let tmp61 = code.newTmp(GP);
193     let tmp60 = code.newTmp(GP);
194     let tmp59 = code.newTmp(GP);
195     let tmp58 = code.newTmp(GP);
196     let tmp57 = code.newTmp(GP);
197     let tmp56 = code.newTmp(GP);
198     let tmp55 = code.newTmp(GP);
199     let tmp54 = code.newTmp(GP);
200     let tmp53 = code.newTmp(GP);
201     let tmp52 = code.newTmp(GP);
202     let tmp51 = code.newTmp(GP);
203     let tmp50 = code.newTmp(GP);
204     let tmp49 = code.newTmp(GP);
205     let tmp48 = code.newTmp(GP);
206     let tmp47 = code.newTmp(GP);
207     let tmp46 = code.newTmp(GP);
208     let tmp45 = code.newTmp(GP);
209     let tmp44 = code.newTmp(GP);
210     let tmp43 = code.newTmp(GP);
211     let tmp42 = code.newTmp(GP);
212     let tmp41 = code.newTmp(GP);
213     let tmp40 = code.newTmp(GP);
214     let tmp39 = code.newTmp(GP);
215     let tmp38 = code.newTmp(GP);
216     let tmp37 = code.newTmp(GP);
217     let tmp36 = code.newTmp(GP);
218     let tmp35 = code.newTmp(GP);
219     let tmp34 = code.newTmp(GP);
220     let tmp33 = code.newTmp(GP);
221     let tmp32 = code.newTmp(GP);
222     let tmp31 = code.newTmp(GP);
223     let tmp30 = code.newTmp(GP);
224     let tmp29 = code.newTmp(GP);
225     let tmp28 = code.newTmp(GP);
226     let tmp27 = code.newTmp(GP);
227     let tmp26 = code.newTmp(GP);
228     let tmp25 = code.newTmp(GP);
229     let tmp24 = code.newTmp(GP);
230     let tmp23 = code.newTmp(GP);
231     let tmp22 = code.newTmp(GP);
232     let tmp21 = code.newTmp(GP);
233     let tmp20 = code.newTmp(GP);
234     let tmp19 = code.newTmp(GP);
235     let tmp18 = code.newTmp(GP);
236     let tmp17 = code.newTmp(GP);
237     let tmp16 = code.newTmp(GP);
238     let tmp15 = code.newTmp(GP);
239     let tmp14 = code.newTmp(GP);
240     let tmp13 = code.newTmp(GP);
241     let tmp12 = code.newTmp(GP);
242     let tmp11 = code.newTmp(GP);
243     let tmp10 = code.newTmp(GP);
244     let tmp9 = code.newTmp(GP);
245     let tmp8 = code.newTmp(GP);
246     let tmp7 = code.newTmp(GP);
247     let tmp6 = code.newTmp(GP);
248     let tmp5 = code.newTmp(GP);
249     let tmp4 = code.newTmp(GP);
250     let tmp3 = code.newTmp(GP);
251     let tmp2 = code.newTmp(GP);
252     let tmp1 = code.newTmp(GP);
253     let tmp0 = code.newTmp(GP);
254     let ftmp7 = code.newTmp(FP);
255     let ftmp6 = code.newTmp(FP);
256     let ftmp5 = code.newTmp(FP);
257     let ftmp4 = code.newTmp(FP);
258     let ftmp3 = code.newTmp(FP);
259     let ftmp2 = code.newTmp(FP);
260     let ftmp1 = code.newTmp(FP);
261     let ftmp0 = code.newTmp(FP);
262     let inst;
263     let arg;
264     bb0.successors.push(new FrequentedBlock(bb2, Normal));
265     bb0.successors.push(new FrequentedBlock(bb1, Normal));
266     inst = new Inst(Move);
267     arg = Arg.createBigImm(286904960, 1);
268     inst.args.push(arg);
269     arg = Arg.createTmp(Reg.rax);
270     inst.args.push(arg);
271     bb0.append(inst);
272     inst = new Inst(Move);
273     arg = Arg.createTmp(Reg.rax);
274     inst.args.push(arg);
275     arg = Arg.createAddr(Reg.rbp, 16);
276     inst.args.push(arg);
277     bb0.append(inst);
278     inst = new Inst(Patch);
279     arg = Arg.createSpecial();
280     inst.args.push(arg);
281     arg = Arg.createTmp(Reg.rbp);
282     inst.args.push(arg);
283     arg = Arg.createTmp(Reg.rax);
284     inst.args.push(arg);
285     inst.patchHasNonArgEffects = true;
286     inst.extraEarlyClobberedRegs = new Set();
287     inst.extraClobberedRegs = new Set();
288     inst.extraEarlyClobberedRegs.add(Reg.r11);
289     inst.extraClobberedRegs.add(Reg.r11);
290     inst.patchArgData = [];
291     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
292     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
293     inst.patchArgData.push({role: Arg.Scratch, type: GP, width: 64});
294     bb0.append(inst);
295     inst = new Inst(Move);
296     arg = Arg.createAddr(Reg.rbp, 40);
297     inst.args.push(arg);
298     arg = Arg.createTmp(Reg.rbx);
299     inst.args.push(arg);
300     bb0.append(inst);
301     inst = new Inst(Move);
302     arg = Arg.createBigImm(2, -65536);
303     inst.args.push(arg);
304     arg = Arg.createTmp(Reg.r15);
305     inst.args.push(arg);
306     bb0.append(inst);
307     inst = new Inst(Patch);
308     arg = Arg.createSpecial();
309     inst.args.push(arg);
310     arg = Arg.createResCond(NonZero);
311     inst.args.push(arg);
312     arg = Arg.createTmp(Reg.rbx);
313     inst.args.push(arg);
314     arg = Arg.createTmp(Reg.r15);
315     inst.args.push(arg);
316     arg = Arg.createTmp(Reg.rbx);
317     inst.args.push(arg);
318     inst.patchHasNonArgEffects = true;
319     inst.extraEarlyClobberedRegs = new Set();
320     inst.extraClobberedRegs = new Set();
321     inst.patchArgData = [];
322     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
323     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
324     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
325     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
326     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
327     bb0.append(inst);
328     inst = new Inst(Patch);
329     arg = Arg.createSpecial();
330     inst.args.push(arg);
331     arg = Arg.createRelCond(NotEqual);
332     inst.args.push(arg);
333     arg = Arg.createAddr(Reg.rbx, 5);
334     inst.args.push(arg);
335     arg = Arg.createImm(21);
336     inst.args.push(arg);
337     arg = Arg.createTmp(Reg.rbx);
338     inst.args.push(arg);
339     inst.patchHasNonArgEffects = true;
340     inst.extraEarlyClobberedRegs = new Set();
341     inst.extraClobberedRegs = new Set();
342     inst.patchArgData = [];
343     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
344     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
345     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
346     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
347     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
348     bb0.append(inst);
349     inst = new Inst(Move32);
350     arg = Arg.createAddr(Reg.rbx, 0);
351     inst.args.push(arg);
352     arg = Arg.createTmp(Reg.rax);
353     inst.args.push(arg);
354     bb0.append(inst);
355     inst = new Inst(Move);
356     arg = Arg.createBigImm(286506544, 1);
357     inst.args.push(arg);
358     arg = Arg.createTmp(Reg.rcx);
359     inst.args.push(arg);
360     bb0.append(inst);
361     inst = new Inst(Move);
362     arg = Arg.createTmp(Reg.rcx);
363     inst.args.push(arg);
364     arg = Arg.createStack(slot10, 0);
365     inst.args.push(arg);
366     bb0.append(inst);
367     inst = new Inst(Move);
368     arg = Arg.createBigImm(286455168, 1);
369     inst.args.push(arg);
370     arg = Arg.createTmp(Reg.rcx);
371     inst.args.push(arg);
372     bb0.append(inst);
373     inst = new Inst(Move);
374     arg = Arg.createTmp(Reg.rcx);
375     inst.args.push(arg);
376     arg = Arg.createStack(slot4, 0);
377     inst.args.push(arg);
378     bb0.append(inst);
379     inst = new Inst(Move);
380     arg = Arg.createBigImm(287131344, 1);
381     inst.args.push(arg);
382     arg = Arg.createTmp(Reg.rcx);
383     inst.args.push(arg);
384     bb0.append(inst);
385     inst = new Inst(Move);
386     arg = Arg.createTmp(Reg.rcx);
387     inst.args.push(arg);
388     arg = Arg.createStack(slot6, 0);
389     inst.args.push(arg);
390     bb0.append(inst);
391     inst = new Inst(Move);
392     arg = Arg.createImm(10);
393     inst.args.push(arg);
394     arg = Arg.createStack(slot3, 0);
395     inst.args.push(arg);
396     bb0.append(inst);
397     inst = new Inst(Move);
398     arg = Arg.createBigImm(286474592, 1);
399     inst.args.push(arg);
400     arg = Arg.createTmp(Reg.rcx);
401     inst.args.push(arg);
402     bb0.append(inst);
403     inst = new Inst(Move);
404     arg = Arg.createTmp(Reg.rcx);
405     inst.args.push(arg);
406     arg = Arg.createStack(slot2, 0);
407     inst.args.push(arg);
408     bb0.append(inst);
409     inst = new Inst(Move);
410     arg = Arg.createBigImm(287209728, 1);
411     inst.args.push(arg);
412     arg = Arg.createTmp(Reg.rcx);
413     inst.args.push(arg);
414     bb0.append(inst);
415     inst = new Inst(Move);
416     arg = Arg.createTmp(Reg.rcx);
417     inst.args.push(arg);
418     arg = Arg.createStack(slot11, 0);
419     inst.args.push(arg);
420     bb0.append(inst);
421     inst = new Inst(Move);
422     arg = Arg.createImm(1);
423     inst.args.push(arg);
424     arg = Arg.createStack(slot1, 0);
425     inst.args.push(arg);
426     bb0.append(inst);
427     inst = new Inst(Move);
428     arg = Arg.createBigImm(0, -65536);
429     inst.args.push(arg);
430     arg = Arg.createTmp(Reg.r14);
431     inst.args.push(arg);
432     bb0.append(inst);
433     inst = new Inst(Move);
434     arg = Arg.createBigImm(287112728, 1);
435     inst.args.push(arg);
436     arg = Arg.createTmp(Reg.rcx);
437     inst.args.push(arg);
438     bb0.append(inst);
439     inst = new Inst(Move);
440     arg = Arg.createTmp(Reg.rcx);
441     inst.args.push(arg);
442     arg = Arg.createStack(slot8, 0);
443     inst.args.push(arg);
444     bb0.append(inst);
445     inst = new Inst(Move);
446     arg = Arg.createBigImm(0, 65536);
447     inst.args.push(arg);
448     arg = Arg.createTmp(Reg.rcx);
449     inst.args.push(arg);
450     bb0.append(inst);
451     inst = new Inst(Move);
452     arg = Arg.createTmp(Reg.rcx);
453     inst.args.push(arg);
454     arg = Arg.createStack(slot9, 0);
455     inst.args.push(arg);
456     bb0.append(inst);
457     inst = new Inst(Move);
458     arg = Arg.createBigImm(287112720, 1);
459     inst.args.push(arg);
460     arg = Arg.createTmp(Reg.rcx);
461     inst.args.push(arg);
462     bb0.append(inst);
463     inst = new Inst(Move);
464     arg = Arg.createTmp(Reg.rcx);
465     inst.args.push(arg);
466     arg = Arg.createStack(slot5, 0);
467     inst.args.push(arg);
468     bb0.append(inst);
469     inst = new Inst(Move);
470     arg = Arg.createBigImm(286506192, 1);
471     inst.args.push(arg);
472     arg = Arg.createTmp(Reg.rcx);
473     inst.args.push(arg);
474     bb0.append(inst);
475     inst = new Inst(Move);
476     arg = Arg.createTmp(Reg.rcx);
477     inst.args.push(arg);
478     arg = Arg.createStack(slot7, 0);
479     inst.args.push(arg);
480     bb0.append(inst);
481     inst = new Inst(Branch32);
482     arg = Arg.createRelCond(Equal);
483     inst.args.push(arg);
484     arg = Arg.createTmp(Reg.rax);
485     inst.args.push(arg);
486     arg = Arg.createImm(862);
487     inst.args.push(arg);
488     bb0.append(inst);
489     bb1.successors.push(new FrequentedBlock(bb41, Normal));
490     bb1.successors.push(new FrequentedBlock(bb3, Normal));
491     bb1.predecessors.push(bb0);
492     inst = new Inst(Patch);
493     arg = Arg.createSpecial();
494     inst.args.push(arg);
495     arg = Arg.createRelCond(NotEqual);
496     inst.args.push(arg);
497     arg = Arg.createTmp(Reg.rax);
498     inst.args.push(arg);
499     arg = Arg.createImm(881);
500     inst.args.push(arg);
501     arg = Arg.createTmp(Reg.rbx);
502     inst.args.push(arg);
503     arg = Arg.createTmp(Reg.rbx);
504     inst.args.push(arg);
505     inst.patchHasNonArgEffects = true;
506     inst.extraEarlyClobberedRegs = new Set();
507     inst.extraClobberedRegs = new Set();
508     inst.patchArgData = [];
509     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
510     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
511     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
512     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
513     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
514     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
515     bb1.append(inst);
516     inst = new Inst(Move);
517     arg = Arg.createAddr(Reg.rbx, 224);
518     inst.args.push(arg);
519     arg = Arg.createTmp(Reg.rax);
520     inst.args.push(arg);
521     bb1.append(inst);
522     inst = new Inst(BranchTest32);
523     arg = Arg.createResCond(NonZero);
524     inst.args.push(arg);
525     arg = Arg.createTmp(Reg.rax);
526     inst.args.push(arg);
527     arg = Arg.createTmp(Reg.rax);
528     inst.args.push(arg);
529     bb1.append(inst);
530     bb2.successors.push(new FrequentedBlock(bb41, Normal));
531     bb2.successors.push(new FrequentedBlock(bb3, Normal));
532     bb2.predecessors.push(bb0);
533     inst = new Inst(Move);
534     arg = Arg.createAddr(Reg.rbx, 224);
535     inst.args.push(arg);
536     arg = Arg.createTmp(Reg.rax);
537     inst.args.push(arg);
538     bb2.append(inst);
539     inst = new Inst(BranchTest32);
540     arg = Arg.createResCond(NonZero);
541     inst.args.push(arg);
542     arg = Arg.createTmp(Reg.rax);
543     inst.args.push(arg);
544     arg = Arg.createTmp(Reg.rax);
545     inst.args.push(arg);
546     bb2.append(inst);
547     bb3.successors.push(new FrequentedBlock(bb5, Normal));
548     bb3.successors.push(new FrequentedBlock(bb4, Normal));
549     bb3.predecessors.push(bb1);
550     bb3.predecessors.push(bb40);
551     bb3.predecessors.push(bb39);
552     bb3.predecessors.push(bb2);
553     inst = new Inst(Move);
554     arg = Arg.createAddr(Reg.rbx, 8);
555     inst.args.push(arg);
556     arg = Arg.createTmp(Reg.rsi);
557     inst.args.push(arg);
558     bb3.append(inst);
559     inst = new Inst(Move);
560     arg = Arg.createAddr(Reg.rsi, -1144);
561     inst.args.push(arg);
562     arg = Arg.createTmp(Reg.rdx);
563     inst.args.push(arg);
564     bb3.append(inst);
565     inst = new Inst(Branch32);
566     arg = Arg.createRelCond(Equal);
567     inst.args.push(arg);
568     arg = Arg.createTmp(Reg.rdx);
569     inst.args.push(arg);
570     arg = Arg.createImm(1);
571     inst.args.push(arg);
572     bb3.append(inst);
573     bb4.successors.push(new FrequentedBlock(bb6, Normal));
574     bb4.successors.push(new FrequentedBlock(bb7, Normal));
575     bb4.predecessors.push(bb3);
576     inst = new Inst(Branch32);
577     arg = Arg.createRelCond(Equal);
578     inst.args.push(arg);
579     arg = Arg.createTmp(Reg.rdx);
580     inst.args.push(arg);
581     arg = Arg.createImm(2);
582     inst.args.push(arg);
583     bb4.append(inst);
584     bb5.successors.push(new FrequentedBlock(bb6, Normal));
585     bb5.predecessors.push(bb3);
586     inst = new Inst(Move);
587     arg = Arg.createImm(7);
588     inst.args.push(arg);
589     arg = Arg.createAddr(Reg.rbx, 232);
590     inst.args.push(arg);
591     bb5.append(inst);
592     inst = new Inst(Move);
593     arg = Arg.createAddr(Reg.rbx, 256);
594     inst.args.push(arg);
595     arg = Arg.createTmp(Reg.rax);
596     inst.args.push(arg);
597     bb5.append(inst);
598     inst = new Inst(Move);
599     arg = Arg.createAddr(Reg.rbx, 248);
600     inst.args.push(arg);
601     arg = Arg.createTmp(Reg.rcx);
602     inst.args.push(arg);
603     bb5.append(inst);
604     inst = new Inst(And32);
605     arg = Arg.createTmp(Reg.rax);
606     inst.args.push(arg);
607     arg = Arg.createTmp(Reg.rcx);
608     inst.args.push(arg);
609     arg = Arg.createTmp(Reg.rcx);
610     inst.args.push(arg);
611     bb5.append(inst);
612     inst = new Inst(And32);
613     arg = Arg.createImm(31);
614     inst.args.push(arg);
615     arg = Arg.createTmp(Reg.rcx);
616     inst.args.push(arg);
617     bb5.append(inst);
618     inst = new Inst(Add64);
619     arg = Arg.createTmp(Reg.rcx);
620     inst.args.push(arg);
621     arg = Arg.createTmp(Reg.r14);
622     inst.args.push(arg);
623     arg = Arg.createTmp(Reg.rcx);
624     inst.args.push(arg);
625     bb5.append(inst);
626     inst = new Inst(Move);
627     arg = Arg.createTmp(Reg.rcx);
628     inst.args.push(arg);
629     arg = Arg.createAddr(Reg.rbx, 240);
630     inst.args.push(arg);
631     bb5.append(inst);
632     inst = new Inst(Jump);
633     bb5.append(inst);
634     bb6.successors.push(new FrequentedBlock(bb7, Normal));
635     bb6.predecessors.push(bb4);
636     bb6.predecessors.push(bb5);
637     inst = new Inst(Add32);
638     arg = Arg.createImm(-1);
639     inst.args.push(arg);
640     arg = Arg.createTmp(Reg.rdx);
641     inst.args.push(arg);
642     arg = Arg.createTmp(Reg.rdx);
643     inst.args.push(arg);
644     bb6.append(inst);
645     inst = new Inst(Add64);
646     arg = Arg.createTmp(Reg.rdx);
647     inst.args.push(arg);
648     arg = Arg.createTmp(Reg.r14);
649     inst.args.push(arg);
650     arg = Arg.createTmp(Reg.rdx);
651     inst.args.push(arg);
652     bb6.append(inst);
653     inst = new Inst(Move);
654     arg = Arg.createTmp(Reg.rdx);
655     inst.args.push(arg);
656     arg = Arg.createAddr(Reg.rsi, -1144);
657     inst.args.push(arg);
658     bb6.append(inst);
659     inst = new Inst(Jump);
660     bb6.append(inst);
661     bb7.successors.push(new FrequentedBlock(bb8, Normal));
662     bb7.successors.push(new FrequentedBlock(bb9, Normal));
663     bb7.predecessors.push(bb4);
664     bb7.predecessors.push(bb6);
665     inst = new Inst(Move);
666     arg = Arg.createAddr(Reg.rbx, 240);
667     inst.args.push(arg);
668     arg = Arg.createTmp(Reg.rax);
669     inst.args.push(arg);
670     bb7.append(inst);
671     inst = new Inst(Branch32);
672     arg = Arg.createRelCond(GreaterThan);
673     inst.args.push(arg);
674     arg = Arg.createTmp(Reg.rax);
675     inst.args.push(arg);
676     arg = Arg.createImm(0);
677     inst.args.push(arg);
678     bb7.append(inst);
679     bb8.successors.push(new FrequentedBlock(bb9, Normal));
680     bb8.predecessors.push(bb7);
681     inst = new Inst(Move);
682     arg = Arg.createBigImm(286455168, 1);
683     inst.args.push(arg);
684     arg = Arg.createTmp(Reg.rax);
685     inst.args.push(arg);
686     bb8.append(inst);
687     inst = new Inst(Move);
688     arg = Arg.createBigImm(286455168, 1);
689     inst.args.push(arg);
690     arg = Arg.createTmp(Reg.rcx);
691     inst.args.push(arg);
692     bb8.append(inst);
693     inst = new Inst(Move);
694     arg = Arg.createTmp(Reg.rcx);
695     inst.args.push(arg);
696     arg = Arg.createCallArg(8);
697     inst.args.push(arg);
698     bb8.append(inst);
699     inst = new Inst(Move32);
700     arg = Arg.createImm(1);
701     inst.args.push(arg);
702     arg = Arg.createCallArg(16);
703     inst.args.push(arg);
704     bb8.append(inst);
705     inst = new Inst(Move);
706     arg = Arg.createTmp(Reg.rbx);
707     inst.args.push(arg);
708     arg = Arg.createCallArg(24);
709     inst.args.push(arg);
710     bb8.append(inst);
711     inst = new Inst(Patch);
712     arg = Arg.createSpecial();
713     inst.args.push(arg);
714     arg = Arg.createTmp(Reg.rax);
715     inst.args.push(arg);
716     arg = Arg.createTmp(Reg.rax);
717     inst.args.push(arg);
718     arg = Arg.createCallArg(8);
719     inst.args.push(arg);
720     arg = Arg.createCallArg(16);
721     inst.args.push(arg);
722     arg = Arg.createCallArg(24);
723     inst.args.push(arg);
724     arg = Arg.createTmp(Reg.r15);
725     inst.args.push(arg);
726     arg = Arg.createTmp(Reg.r14);
727     inst.args.push(arg);
728     inst.patchHasNonArgEffects = true;
729     inst.extraEarlyClobberedRegs = new Set();
730     inst.extraClobberedRegs = new Set();
731     inst.extraEarlyClobberedRegs.add(Reg.r11);
732     inst.extraClobberedRegs.add(Reg.rcx);
733     inst.extraClobberedRegs.add(Reg.rdx);
734     inst.extraClobberedRegs.add(Reg.rsi);
735     inst.extraClobberedRegs.add(Reg.rdi);
736     inst.extraClobberedRegs.add(Reg.r8);
737     inst.extraClobberedRegs.add(Reg.r9);
738     inst.extraClobberedRegs.add(Reg.r10);
739     inst.extraClobberedRegs.add(Reg.r11);
740     inst.extraClobberedRegs.add(Reg.xmm0);
741     inst.extraClobberedRegs.add(Reg.xmm1);
742     inst.extraClobberedRegs.add(Reg.xmm2);
743     inst.extraClobberedRegs.add(Reg.xmm3);
744     inst.extraClobberedRegs.add(Reg.xmm4);
745     inst.extraClobberedRegs.add(Reg.xmm5);
746     inst.extraClobberedRegs.add(Reg.xmm6);
747     inst.extraClobberedRegs.add(Reg.xmm7);
748     inst.extraClobberedRegs.add(Reg.xmm8);
749     inst.extraClobberedRegs.add(Reg.xmm9);
750     inst.extraClobberedRegs.add(Reg.xmm10);
751     inst.extraClobberedRegs.add(Reg.xmm11);
752     inst.extraClobberedRegs.add(Reg.xmm12);
753     inst.extraClobberedRegs.add(Reg.xmm13);
754     inst.extraClobberedRegs.add(Reg.xmm14);
755     inst.extraClobberedRegs.add(Reg.xmm15);
756     inst.patchArgData = [];
757     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
758     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
759     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
760     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
761     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
762     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
763     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
764     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
765     bb8.append(inst);
766     inst = new Inst(Patch);
767     arg = Arg.createSpecial();
768     inst.args.push(arg);
769     arg = Arg.createTmp(Reg.rbx);
770     inst.args.push(arg);
771     inst.patchHasNonArgEffects = true;
772     inst.extraEarlyClobberedRegs = new Set();
773     inst.extraClobberedRegs = new Set();
774     inst.patchArgData = [];
775     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
776     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
777     bb8.append(inst);
778     inst = new Inst(Jump);
779     bb8.append(inst);
780     bb9.successors.push(new FrequentedBlock(bb12, Normal));
781     bb9.successors.push(new FrequentedBlock(bb10, Normal));
782     bb9.predecessors.push(bb7);
783     bb9.predecessors.push(bb8);
784     inst = new Inst(Move);
785     arg = Arg.createAddr(Reg.rbx, 304);
786     inst.args.push(arg);
787     arg = Arg.createTmp(Reg.r8);
788     inst.args.push(arg);
789     bb9.append(inst);
790     inst = new Inst(Move);
791     arg = Arg.createAddr(Reg.rbx, 128);
792     inst.args.push(arg);
793     arg = Arg.createTmp(Reg.rdx);
794     inst.args.push(arg);
795     bb9.append(inst);
796     inst = new Inst(Patch);
797     arg = Arg.createSpecial();
798     inst.args.push(arg);
799     arg = Arg.createRelCond(NotEqual);
800     inst.args.push(arg);
801     arg = Arg.createAddr(Reg.r8, 0);
802     inst.args.push(arg);
803     arg = Arg.createImm(80);
804     inst.args.push(arg);
805     arg = Arg.createTmp(Reg.r8);
806     inst.args.push(arg);
807     arg = Arg.createTmp(Reg.rbx);
808     inst.args.push(arg);
809     arg = Arg.createTmp(Reg.r8);
810     inst.args.push(arg);
811     arg = Arg.createTmp(Reg.rdx);
812     inst.args.push(arg);
813     inst.patchHasNonArgEffects = true;
814     inst.extraEarlyClobberedRegs = new Set();
815     inst.extraClobberedRegs = new Set();
816     inst.patchArgData = [];
817     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
818     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
819     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
820     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
821     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
822     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
823     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
824     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
825     bb9.append(inst);
826     inst = new Inst(Move);
827     arg = Arg.createAddr(Reg.r8, 8);
828     inst.args.push(arg);
829     arg = Arg.createTmp(Reg.rax);
830     inst.args.push(arg);
831     bb9.append(inst);
832     inst = new Inst(Patch);
833     arg = Arg.createSpecial();
834     inst.args.push(arg);
835     arg = Arg.createRelCond(AboveOrEqual);
836     inst.args.push(arg);
837     arg = Arg.createTmp(Reg.rdx);
838     inst.args.push(arg);
839     arg = Arg.createAddr(Reg.rax, -8);
840     inst.args.push(arg);
841     arg = Arg.createTmp(Reg.rbx);
842     inst.args.push(arg);
843     arg = Arg.createTmp(Reg.r8);
844     inst.args.push(arg);
845     arg = Arg.createTmp(Reg.rdx);
846     inst.args.push(arg);
847     inst.patchHasNonArgEffects = true;
848     inst.extraEarlyClobberedRegs = new Set();
849     inst.extraClobberedRegs = new Set();
850     inst.patchArgData = [];
851     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
852     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
853     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
854     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
855     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
856     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
857     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
858     bb9.append(inst);
859     inst = new Inst(Move32);
860     arg = Arg.createTmp(Reg.rdx);
861     inst.args.push(arg);
862     arg = Arg.createTmp(Reg.rsi);
863     inst.args.push(arg);
864     bb9.append(inst);
865     inst = new Inst(Move);
866     arg = Arg.createIndex(Reg.rax, Reg.rsi, 8, 0);
867     inst.args.push(arg);
868     arg = Arg.createTmp(Reg.rax);
869     inst.args.push(arg);
870     bb9.append(inst);
871     inst = new Inst(Move);
872     arg = Arg.createImm(10);
873     inst.args.push(arg);
874     arg = Arg.createTmp(Reg.rcx);
875     inst.args.push(arg);
876     bb9.append(inst);
877     inst = new Inst(MoveConditionallyTest64);
878     arg = Arg.createResCond(NonZero);
879     inst.args.push(arg);
880     arg = Arg.createTmp(Reg.rax);
881     inst.args.push(arg);
882     arg = Arg.createImm(-1);
883     inst.args.push(arg);
884     arg = Arg.createTmp(Reg.rax);
885     inst.args.push(arg);
886     arg = Arg.createTmp(Reg.rcx);
887     inst.args.push(arg);
888     arg = Arg.createTmp(Reg.rcx);
889     inst.args.push(arg);
890     bb9.append(inst);
891     inst = new Inst(Patch);
892     arg = Arg.createSpecial();
893     inst.args.push(arg);
894     arg = Arg.createResCond(NonZero);
895     inst.args.push(arg);
896     arg = Arg.createTmp(Reg.rcx);
897     inst.args.push(arg);
898     arg = Arg.createTmp(Reg.r15);
899     inst.args.push(arg);
900     arg = Arg.createTmp(Reg.rcx);
901     inst.args.push(arg);
902     arg = Arg.createTmp(Reg.rbx);
903     inst.args.push(arg);
904     arg = Arg.createTmp(Reg.rcx);
905     inst.args.push(arg);
906     arg = Arg.createTmp(Reg.rdx);
907     inst.args.push(arg);
908     arg = Arg.createTmp(Reg.rbx);
909     inst.args.push(arg);
910     arg = Arg.createTmp(Reg.r8);
911     inst.args.push(arg);
912     inst.patchHasNonArgEffects = true;
913     inst.extraEarlyClobberedRegs = new Set();
914     inst.extraClobberedRegs = new Set();
915     inst.patchArgData = [];
916     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
917     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
918     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
919     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
920     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
921     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
922     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
923     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
924     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
925     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
926     bb9.append(inst);
927     inst = new Inst(Patch);
928     arg = Arg.createSpecial();
929     inst.args.push(arg);
930     arg = Arg.createRelCond(NotEqual);
931     inst.args.push(arg);
932     arg = Arg.createAddr(Reg.rcx, 5);
933     inst.args.push(arg);
934     arg = Arg.createImm(23);
935     inst.args.push(arg);
936     arg = Arg.createTmp(Reg.rcx);
937     inst.args.push(arg);
938     arg = Arg.createTmp(Reg.rbx);
939     inst.args.push(arg);
940     arg = Arg.createTmp(Reg.rcx);
941     inst.args.push(arg);
942     arg = Arg.createTmp(Reg.rdx);
943     inst.args.push(arg);
944     arg = Arg.createTmp(Reg.rbx);
945     inst.args.push(arg);
946     arg = Arg.createTmp(Reg.r8);
947     inst.args.push(arg);
948     inst.patchHasNonArgEffects = true;
949     inst.extraEarlyClobberedRegs = new Set();
950     inst.extraClobberedRegs = new Set();
951     inst.patchArgData = [];
952     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
953     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
954     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
955     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
956     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
957     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
958     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
959     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
960     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
961     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
962     bb9.append(inst);
963     inst = new Inst(Move);
964     arg = Arg.createAddr(Reg.rcx, 24);
965     inst.args.push(arg);
966     arg = Arg.createTmp(Reg.rax);
967     inst.args.push(arg);
968     bb9.append(inst);
969     inst = new Inst(Branch64);
970     arg = Arg.createRelCond(Equal);
971     inst.args.push(arg);
972     arg = Arg.createTmp(Reg.rax);
973     inst.args.push(arg);
974     arg = Arg.createStack(slot7, 0);
975     inst.args.push(arg);
976     bb9.append(inst);
977     bb10.successors.push(new FrequentedBlock(bb11, Normal));
978     bb10.successors.push(new FrequentedBlock(bb13, Normal));
979     bb10.predecessors.push(bb9);
980     inst = new Inst(Branch64);
981     arg = Arg.createRelCond(Equal);
982     inst.args.push(arg);
983     arg = Arg.createTmp(Reg.rax);
984     inst.args.push(arg);
985     arg = Arg.createStack(slot10, 0);
986     inst.args.push(arg);
987     bb10.append(inst);
988     bb11.successors.push(new FrequentedBlock(bb14, Normal));
989     bb11.predecessors.push(bb10);
990     inst = new Inst(Move);
991     arg = Arg.createTmp(Reg.rcx);
992     inst.args.push(arg);
993     arg = Arg.createStack(slot0, 0);
994     inst.args.push(arg);
995     bb11.append(inst);
996     inst = new Inst(Move);
997     arg = Arg.createAddr(Reg.rbx, 344);
998     inst.args.push(arg);
999     arg = Arg.createTmp(Reg.rdi);
1000     inst.args.push(arg);
1001     bb11.append(inst);
1002     inst = new Inst(Patch);
1003     arg = Arg.createSpecial();
1004     inst.args.push(arg);
1005     arg = Arg.createRelCond(NotEqual);
1006     inst.args.push(arg);
1007     arg = Arg.createAddr(Reg.rdi, 0);
1008     inst.args.push(arg);
1009     arg = Arg.createImm(502);
1010     inst.args.push(arg);
1011     arg = Arg.createTmp(Reg.rdi);
1012     inst.args.push(arg);
1013     arg = Arg.createTmp(Reg.rbx);
1014     inst.args.push(arg);
1015     arg = Arg.createTmp(Reg.rcx);
1016     inst.args.push(arg);
1017     arg = Arg.createTmp(Reg.rdx);
1018     inst.args.push(arg);
1019     arg = Arg.createTmp(Reg.rbx);
1020     inst.args.push(arg);
1021     arg = Arg.createTmp(Reg.r8);
1022     inst.args.push(arg);
1023     arg = Arg.createTmp(Reg.rdi);
1024     inst.args.push(arg);
1025     inst.patchHasNonArgEffects = true;
1026     inst.extraEarlyClobberedRegs = new Set();
1027     inst.extraClobberedRegs = new Set();
1028     inst.patchArgData = [];
1029     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1030     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1031     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1032     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1033     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1034     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1035     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1036     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1037     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1038     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1039     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1040     bb11.append(inst);
1041     inst = new Inst(Move);
1042     arg = Arg.createAddr(Reg.rdi, 16);
1043     inst.args.push(arg);
1044     arg = Arg.createTmp(Reg.rax);
1045     inst.args.push(arg);
1046     bb11.append(inst);
1047     inst = new Inst(Patch);
1048     arg = Arg.createSpecial();
1049     inst.args.push(arg);
1050     arg = Arg.createRelCond(AboveOrEqual);
1051     inst.args.push(arg);
1052     arg = Arg.createTmp(Reg.rdx);
1053     inst.args.push(arg);
1054     arg = Arg.createAddr(Reg.rdi, 24);
1055     inst.args.push(arg);
1056     arg = Arg.createTmp(Reg.rbx);
1057     inst.args.push(arg);
1058     arg = Arg.createTmp(Reg.rcx);
1059     inst.args.push(arg);
1060     arg = Arg.createTmp(Reg.rdx);
1061     inst.args.push(arg);
1062     arg = Arg.createTmp(Reg.rbx);
1063     inst.args.push(arg);
1064     arg = Arg.createTmp(Reg.r8);
1065     inst.args.push(arg);
1066     arg = Arg.createTmp(Reg.rdi);
1067     inst.args.push(arg);
1068     inst.patchHasNonArgEffects = true;
1069     inst.extraEarlyClobberedRegs = new Set();
1070     inst.extraClobberedRegs = new Set();
1071     inst.patchArgData = [];
1072     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1073     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1074     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1075     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1076     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1077     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1078     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1079     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1080     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1081     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1082     bb11.append(inst);
1083     inst = new Inst(Load8);
1084     arg = Arg.createIndex(Reg.rsi, Reg.rax, 1, 0);
1085     inst.args.push(arg);
1086     arg = Arg.createTmp(Reg.rcx);
1087     inst.args.push(arg);
1088     bb11.append(inst);
1089     inst = new Inst(Jump);
1090     bb11.append(inst);
1091     bb12.successors.push(new FrequentedBlock(bb14, Normal));
1092     bb12.predecessors.push(bb9);
1093     inst = new Inst(Move);
1094     arg = Arg.createTmp(Reg.rcx);
1095     inst.args.push(arg);
1096     arg = Arg.createStack(slot0, 0);
1097     inst.args.push(arg);
1098     bb12.append(inst);
1099     inst = new Inst(Move);
1100     arg = Arg.createAddr(Reg.rbx, 336);
1101     inst.args.push(arg);
1102     arg = Arg.createTmp(Reg.rdi);
1103     inst.args.push(arg);
1104     bb12.append(inst);
1105     inst = new Inst(Move);
1106     arg = Arg.createAddr(Reg.rbx, 456);
1107     inst.args.push(arg);
1108     arg = Arg.createTmp(Reg.rsi);
1109     inst.args.push(arg);
1110     bb12.append(inst);
1111     inst = new Inst(Patch);
1112     arg = Arg.createSpecial();
1113     inst.args.push(arg);
1114     arg = Arg.createResCond(Overflow);
1115     inst.args.push(arg);
1116     arg = Arg.createTmp(Reg.rdx);
1117     inst.args.push(arg);
1118     arg = Arg.createTmp(Reg.rsi);
1119     inst.args.push(arg);
1120     arg = Arg.createTmp(Reg.rax);
1121     inst.args.push(arg);
1122     arg = Arg.createTmp(Reg.rbx);
1123     inst.args.push(arg);
1124     arg = Arg.createTmp(Reg.rcx);
1125     inst.args.push(arg);
1126     arg = Arg.createTmp(Reg.rdx);
1127     inst.args.push(arg);
1128     arg = Arg.createTmp(Reg.rbx);
1129     inst.args.push(arg);
1130     arg = Arg.createTmp(Reg.r8);
1131     inst.args.push(arg);
1132     arg = Arg.createTmp(Reg.rdi);
1133     inst.args.push(arg);
1134     arg = Arg.createTmp(Reg.rsi);
1135     inst.args.push(arg);
1136     inst.patchHasNonArgEffects = true;
1137     inst.extraEarlyClobberedRegs = new Set();
1138     inst.extraClobberedRegs = new Set();
1139     inst.patchArgData = [];
1140     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1141     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1142     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1143     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1144     inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32});
1145     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
1146     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
1147     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1148     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
1149     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
1150     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
1151     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
1152     bb12.append(inst);
1153     inst = new Inst(Patch);
1154     arg = Arg.createSpecial();
1155     inst.args.push(arg);
1156     arg = Arg.createRelCond(NotEqual);
1157     inst.args.push(arg);
1158     arg = Arg.createAddr(Reg.rdi, 0);
1159     inst.args.push(arg);
1160     arg = Arg.createImm(502);
1161     inst.args.push(arg);
1162     arg = Arg.createTmp(Reg.rdi);
1163     inst.args.push(arg);
1164     arg = Arg.createTmp(Reg.rbx);
1165     inst.args.push(arg);
1166     arg = Arg.createTmp(Reg.rcx);
1167     inst.args.push(arg);
1168     arg = Arg.createTmp(Reg.rdx);
1169     inst.args.push(arg);
1170     arg = Arg.createTmp(Reg.rbx);
1171     inst.args.push(arg);
1172     arg = Arg.createTmp(Reg.r8);
1173     inst.args.push(arg);
1174     arg = Arg.createTmp(Reg.rdi);
1175     inst.args.push(arg);
1176     arg = Arg.createTmp(Reg.rax);
1177     inst.args.push(arg);
1178     inst.patchHasNonArgEffects = true;
1179     inst.extraEarlyClobberedRegs = new Set();
1180     inst.extraClobberedRegs = new Set();
1181     inst.patchArgData = [];
1182     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1183     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1184     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1185     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1186     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1187     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1188     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1189     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1190     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1191     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1192     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1193     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1194     bb12.append(inst);
1195     inst = new Inst(Move);
1196     arg = Arg.createAddr(Reg.rdi, 16);
1197     inst.args.push(arg);
1198     arg = Arg.createTmp(Reg.rsi);
1199     inst.args.push(arg);
1200     bb12.append(inst);
1201     inst = new Inst(Patch);
1202     arg = Arg.createSpecial();
1203     inst.args.push(arg);
1204     arg = Arg.createRelCond(AboveOrEqual);
1205     inst.args.push(arg);
1206     arg = Arg.createTmp(Reg.rax);
1207     inst.args.push(arg);
1208     arg = Arg.createAddr(Reg.rdi, 24);
1209     inst.args.push(arg);
1210     arg = Arg.createTmp(Reg.rbx);
1211     inst.args.push(arg);
1212     arg = Arg.createTmp(Reg.rcx);
1213     inst.args.push(arg);
1214     arg = Arg.createTmp(Reg.rdx);
1215     inst.args.push(arg);
1216     arg = Arg.createTmp(Reg.rbx);
1217     inst.args.push(arg);
1218     arg = Arg.createTmp(Reg.r8);
1219     inst.args.push(arg);
1220     arg = Arg.createTmp(Reg.rdi);
1221     inst.args.push(arg);
1222     arg = Arg.createTmp(Reg.rax);
1223     inst.args.push(arg);
1224     inst.patchHasNonArgEffects = true;
1225     inst.extraEarlyClobberedRegs = new Set();
1226     inst.extraClobberedRegs = new Set();
1227     inst.patchArgData = [];
1228     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1229     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1230     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1231     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1232     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1233     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1234     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1235     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1236     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1237     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1238     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1239     bb12.append(inst);
1240     inst = new Inst(Load8);
1241     arg = Arg.createIndex(Reg.rsi, Reg.rax, 1, 0);
1242     inst.args.push(arg);
1243     arg = Arg.createTmp(Reg.rcx);
1244     inst.args.push(arg);
1245     bb12.append(inst);
1246     inst = new Inst(Jump);
1247     bb12.append(inst);
1248     bb13.predecessors.push(bb10);
1249     inst = new Inst(Patch);
1250     arg = Arg.createSpecial();
1251     inst.args.push(arg);
1252     arg = Arg.createTmp(Reg.rbx);
1253     inst.args.push(arg);
1254     arg = Arg.createTmp(Reg.rcx);
1255     inst.args.push(arg);
1256     arg = Arg.createTmp(Reg.rdx);
1257     inst.args.push(arg);
1258     arg = Arg.createTmp(Reg.rbx);
1259     inst.args.push(arg);
1260     arg = Arg.createTmp(Reg.r8);
1261     inst.args.push(arg);
1262     inst.patchHasNonArgEffects = true;
1263     inst.extraEarlyClobberedRegs = new Set();
1264     inst.extraClobberedRegs = new Set();
1265     inst.patchArgData = [];
1266     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1267     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1268     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1269     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1270     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1271     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1272     bb13.append(inst);
1273     inst = new Inst(Oops);
1274     bb13.append(inst);
1275     bb14.successors.push(new FrequentedBlock(bb15, Normal));
1276     bb14.successors.push(new FrequentedBlock(bb16, Normal));
1277     bb14.predecessors.push(bb11);
1278     bb14.predecessors.push(bb12);
1279     inst = new Inst(Add32);
1280     arg = Arg.createImm(1);
1281     inst.args.push(arg);
1282     arg = Arg.createTmp(Reg.rdx);
1283     inst.args.push(arg);
1284     arg = Arg.createTmp(Reg.rdx);
1285     inst.args.push(arg);
1286     bb14.append(inst);
1287     inst = new Inst(ZeroExtend16To32);
1288     arg = Arg.createTmp(Reg.rdx);
1289     inst.args.push(arg);
1290     arg = Arg.createTmp(Reg.rax);
1291     inst.args.push(arg);
1292     bb14.append(inst);
1293     inst = new Inst(Add64);
1294     arg = Arg.createTmp(Reg.rax);
1295     inst.args.push(arg);
1296     arg = Arg.createTmp(Reg.r14);
1297     inst.args.push(arg);
1298     arg = Arg.createTmp(Reg.rax);
1299     inst.args.push(arg);
1300     bb14.append(inst);
1301     inst = new Inst(Move);
1302     arg = Arg.createTmp(Reg.rax);
1303     inst.args.push(arg);
1304     arg = Arg.createAddr(Reg.rbx, 128);
1305     inst.args.push(arg);
1306     bb14.append(inst);
1307     inst = new Inst(BranchTest32);
1308     arg = Arg.createResCond(NonZero);
1309     inst.args.push(arg);
1310     arg = Arg.createAddr(Reg.rbx, 216);
1311     inst.args.push(arg);
1312     arg = Arg.createImm(1);
1313     inst.args.push(arg);
1314     bb14.append(inst);
1315     bb15.predecessors.push(bb14);
1316     inst = new Inst(Patch);
1317     arg = Arg.createSpecial();
1318     inst.args.push(arg);
1319     arg = Arg.createTmp(Reg.rbx);
1320     inst.args.push(arg);
1321     arg = Arg.createTmp(Reg.rcx);
1322     inst.args.push(arg);
1323     arg = Arg.createTmp(Reg.rbx);
1324     inst.args.push(arg);
1325     inst.patchHasNonArgEffects = true;
1326     inst.extraEarlyClobberedRegs = new Set();
1327     inst.extraClobberedRegs = new Set();
1328     inst.patchArgData = [];
1329     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1330     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1331     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1332     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1333     bb15.append(inst);
1334     inst = new Inst(Oops);
1335     bb15.append(inst);
1336     bb16.successors.push(new FrequentedBlock(bb18, Normal));
1337     bb16.successors.push(new FrequentedBlock(bb17, Normal));
1338     bb16.predecessors.push(bb14);
1339     inst = new Inst(Move);
1340     arg = Arg.createAddr(Reg.rbx, 8);
1341     inst.args.push(arg);
1342     arg = Arg.createTmp(Reg.rax);
1343     inst.args.push(arg);
1344     bb16.append(inst);
1345     inst = new Inst(Move);
1346     arg = Arg.createAddr(Reg.rax, -1752);
1347     inst.args.push(arg);
1348     arg = Arg.createTmp(Reg.rdx);
1349     inst.args.push(arg);
1350     bb16.append(inst);
1351     inst = new Inst(Move);
1352     arg = Arg.createAddr(Reg.rdx, 16);
1353     inst.args.push(arg);
1354     arg = Arg.createTmp(Reg.rax);
1355     inst.args.push(arg);
1356     bb16.append(inst);
1357     inst = new Inst(Patch);
1358     arg = Arg.createSpecial();
1359     inst.args.push(arg);
1360     arg = Arg.createRelCond(AboveOrEqual);
1361     inst.args.push(arg);
1362     arg = Arg.createTmp(Reg.rcx);
1363     inst.args.push(arg);
1364     arg = Arg.createAddr(Reg.rdx, 24);
1365     inst.args.push(arg);
1366     arg = Arg.createTmp(Reg.rbx);
1367     inst.args.push(arg);
1368     arg = Arg.createTmp(Reg.rcx);
1369     inst.args.push(arg);
1370     arg = Arg.createTmp(Reg.rbx);
1371     inst.args.push(arg);
1372     arg = Arg.createTmp(Reg.rdx);
1373     inst.args.push(arg);
1374     inst.patchHasNonArgEffects = true;
1375     inst.extraEarlyClobberedRegs = new Set();
1376     inst.extraClobberedRegs = new Set();
1377     inst.patchArgData = [];
1378     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1379     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1380     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1381     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1382     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1383     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1384     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1385     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1386     bb16.append(inst);
1387     inst = new Inst(Load8);
1388     arg = Arg.createIndex(Reg.rax, Reg.rcx, 1, 0);
1389     inst.args.push(arg);
1390     arg = Arg.createTmp(Reg.rax);
1391     inst.args.push(arg);
1392     bb16.append(inst);
1393     inst = new Inst(Add64);
1394     arg = Arg.createTmp(Reg.rax);
1395     inst.args.push(arg);
1396     arg = Arg.createTmp(Reg.r14);
1397     inst.args.push(arg);
1398     arg = Arg.createTmp(Reg.rax);
1399     inst.args.push(arg);
1400     bb16.append(inst);
1401     inst = new Inst(Move);
1402     arg = Arg.createTmp(Reg.rax);
1403     inst.args.push(arg);
1404     arg = Arg.createAddr(Reg.rbx, 272);
1405     inst.args.push(arg);
1406     bb16.append(inst);
1407     inst = new Inst(Move);
1408     arg = Arg.createBigImm(287112720, 1);
1409     inst.args.push(arg);
1410     arg = Arg.createTmp(Reg.rax);
1411     inst.args.push(arg);
1412     bb16.append(inst);
1413     inst = new Inst(Patch);
1414     arg = Arg.createSpecial();
1415     inst.args.push(arg);
1416     arg = Arg.createRelCond(NotEqual);
1417     inst.args.push(arg);
1418     arg = Arg.createAddr(Reg.rax, 0);
1419     inst.args.push(arg);
1420     arg = Arg.createImm(80);
1421     inst.args.push(arg);
1422     arg = Arg.createBigImm(287112720, 1);
1423     inst.args.push(arg);
1424     arg = Arg.createTmp(Reg.rbx);
1425     inst.args.push(arg);
1426     arg = Arg.createTmp(Reg.rcx);
1427     inst.args.push(arg);
1428     inst.patchHasNonArgEffects = true;
1429     inst.extraEarlyClobberedRegs = new Set();
1430     inst.extraClobberedRegs = new Set();
1431     inst.patchArgData = [];
1432     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1433     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1434     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1435     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1436     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1437     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1438     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1439     bb16.append(inst);
1440     inst = new Inst(Move);
1441     arg = Arg.createBigImm(287112728, 1);
1442     inst.args.push(arg);
1443     arg = Arg.createTmp(Reg.rax);
1444     inst.args.push(arg);
1445     bb16.append(inst);
1446     inst = new Inst(Move);
1447     arg = Arg.createAddr(Reg.rax, 0);
1448     inst.args.push(arg);
1449     arg = Arg.createTmp(Reg.rax);
1450     inst.args.push(arg);
1451     bb16.append(inst);
1452     inst = new Inst(Patch);
1453     arg = Arg.createSpecial();
1454     inst.args.push(arg);
1455     arg = Arg.createRelCond(AboveOrEqual);
1456     inst.args.push(arg);
1457     arg = Arg.createTmp(Reg.rcx);
1458     inst.args.push(arg);
1459     arg = Arg.createAddr(Reg.rax, -8);
1460     inst.args.push(arg);
1461     arg = Arg.createTmp(Reg.rbx);
1462     inst.args.push(arg);
1463     arg = Arg.createTmp(Reg.rcx);
1464     inst.args.push(arg);
1465     inst.patchHasNonArgEffects = true;
1466     inst.extraEarlyClobberedRegs = new Set();
1467     inst.extraClobberedRegs = new Set();
1468     inst.patchArgData = [];
1469     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1470     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1471     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1472     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1473     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1474     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1475     bb16.append(inst);
1476     inst = new Inst(Move);
1477     arg = Arg.createIndex(Reg.rax, Reg.rcx, 8, 0);
1478     inst.args.push(arg);
1479     arg = Arg.createTmp(Reg.rax);
1480     inst.args.push(arg);
1481     bb16.append(inst);
1482     inst = new Inst(Move);
1483     arg = Arg.createImm(10);
1484     inst.args.push(arg);
1485     arg = Arg.createTmp(Reg.rcx);
1486     inst.args.push(arg);
1487     bb16.append(inst);
1488     inst = new Inst(MoveConditionallyTest64);
1489     arg = Arg.createResCond(NonZero);
1490     inst.args.push(arg);
1491     arg = Arg.createTmp(Reg.rax);
1492     inst.args.push(arg);
1493     arg = Arg.createImm(-1);
1494     inst.args.push(arg);
1495     arg = Arg.createTmp(Reg.rax);
1496     inst.args.push(arg);
1497     arg = Arg.createTmp(Reg.rcx);
1498     inst.args.push(arg);
1499     arg = Arg.createTmp(Reg.rax);
1500     inst.args.push(arg);
1501     bb16.append(inst);
1502     inst = new Inst(Move);
1503     arg = Arg.createTmp(Reg.rax);
1504     inst.args.push(arg);
1505     arg = Arg.createCallArg(8);
1506     inst.args.push(arg);
1507     bb16.append(inst);
1508     inst = new Inst(Move32);
1509     arg = Arg.createImm(2);
1510     inst.args.push(arg);
1511     arg = Arg.createCallArg(16);
1512     inst.args.push(arg);
1513     bb16.append(inst);
1514     inst = new Inst(Move);
1515     arg = Arg.createBigImm(287112720, 1);
1516     inst.args.push(arg);
1517     arg = Arg.createTmp(Reg.rcx);
1518     inst.args.push(arg);
1519     bb16.append(inst);
1520     inst = new Inst(Move);
1521     arg = Arg.createTmp(Reg.rcx);
1522     inst.args.push(arg);
1523     arg = Arg.createCallArg(24);
1524     inst.args.push(arg);
1525     bb16.append(inst);
1526     inst = new Inst(Move);
1527     arg = Arg.createTmp(Reg.rbx);
1528     inst.args.push(arg);
1529     arg = Arg.createCallArg(32);
1530     inst.args.push(arg);
1531     bb16.append(inst);
1532     inst = new Inst(Patch);
1533     arg = Arg.createSpecial();
1534     inst.args.push(arg);
1535     arg = Arg.createTmp(Reg.rax);
1536     inst.args.push(arg);
1537     arg = Arg.createTmp(Reg.rax);
1538     inst.args.push(arg);
1539     arg = Arg.createCallArg(8);
1540     inst.args.push(arg);
1541     arg = Arg.createCallArg(16);
1542     inst.args.push(arg);
1543     arg = Arg.createCallArg(24);
1544     inst.args.push(arg);
1545     arg = Arg.createCallArg(32);
1546     inst.args.push(arg);
1547     arg = Arg.createTmp(Reg.r15);
1548     inst.args.push(arg);
1549     arg = Arg.createTmp(Reg.r14);
1550     inst.args.push(arg);
1551     inst.patchHasNonArgEffects = true;
1552     inst.extraEarlyClobberedRegs = new Set();
1553     inst.extraClobberedRegs = new Set();
1554     inst.extraEarlyClobberedRegs.add(Reg.r11);
1555     inst.extraClobberedRegs.add(Reg.rcx);
1556     inst.extraClobberedRegs.add(Reg.rdx);
1557     inst.extraClobberedRegs.add(Reg.rsi);
1558     inst.extraClobberedRegs.add(Reg.rdi);
1559     inst.extraClobberedRegs.add(Reg.r8);
1560     inst.extraClobberedRegs.add(Reg.r9);
1561     inst.extraClobberedRegs.add(Reg.r10);
1562     inst.extraClobberedRegs.add(Reg.r11);
1563     inst.extraClobberedRegs.add(Reg.xmm0);
1564     inst.extraClobberedRegs.add(Reg.xmm1);
1565     inst.extraClobberedRegs.add(Reg.xmm2);
1566     inst.extraClobberedRegs.add(Reg.xmm3);
1567     inst.extraClobberedRegs.add(Reg.xmm4);
1568     inst.extraClobberedRegs.add(Reg.xmm5);
1569     inst.extraClobberedRegs.add(Reg.xmm6);
1570     inst.extraClobberedRegs.add(Reg.xmm7);
1571     inst.extraClobberedRegs.add(Reg.xmm8);
1572     inst.extraClobberedRegs.add(Reg.xmm9);
1573     inst.extraClobberedRegs.add(Reg.xmm10);
1574     inst.extraClobberedRegs.add(Reg.xmm11);
1575     inst.extraClobberedRegs.add(Reg.xmm12);
1576     inst.extraClobberedRegs.add(Reg.xmm13);
1577     inst.extraClobberedRegs.add(Reg.xmm14);
1578     inst.extraClobberedRegs.add(Reg.xmm15);
1579     inst.patchArgData = [];
1580     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1581     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
1582     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1583     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1584     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1585     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1586     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1587     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1588     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1589     bb16.append(inst);
1590     inst = new Inst(Patch);
1591     arg = Arg.createSpecial();
1592     inst.args.push(arg);
1593     arg = Arg.createTmp(Reg.rbx);
1594     inst.args.push(arg);
1595     inst.patchHasNonArgEffects = true;
1596     inst.extraEarlyClobberedRegs = new Set();
1597     inst.extraClobberedRegs = new Set();
1598     inst.patchArgData = [];
1599     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1600     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1601     bb16.append(inst);
1602     inst = new Inst(Move);
1603     arg = Arg.createAddr(Reg.rbx, 8);
1604     inst.args.push(arg);
1605     arg = Arg.createTmp(Reg.rdx);
1606     inst.args.push(arg);
1607     bb16.append(inst);
1608     inst = new Inst(Move);
1609     arg = Arg.createAddr(Reg.rdx, -1088);
1610     inst.args.push(arg);
1611     arg = Arg.createTmp(Reg.rsi);
1612     inst.args.push(arg);
1613     bb16.append(inst);
1614     inst = new Inst(Move);
1615     arg = Arg.createAddr(Reg.rbx, 272);
1616     inst.args.push(arg);
1617     arg = Arg.createTmp(Reg.rax);
1618     inst.args.push(arg);
1619     bb16.append(inst);
1620     inst = new Inst(Move);
1621     arg = Arg.createAddr(Reg.rbx, 280);
1622     inst.args.push(arg);
1623     arg = Arg.createTmp(Reg.rcx);
1624     inst.args.push(arg);
1625     bb16.append(inst);
1626     inst = new Inst(Rshift32);
1627     arg = Arg.createTmp(Reg.rcx);
1628     inst.args.push(arg);
1629     arg = Arg.createTmp(Reg.rax);
1630     inst.args.push(arg);
1631     bb16.append(inst);
1632     inst = new Inst(Patch);
1633     arg = Arg.createSpecial();
1634     inst.args.push(arg);
1635     arg = Arg.createResCond(Overflow);
1636     inst.args.push(arg);
1637     arg = Arg.createTmp(Reg.rax);
1638     inst.args.push(arg);
1639     arg = Arg.createTmp(Reg.rsi);
1640     inst.args.push(arg);
1641     arg = Arg.createTmp(Reg.rax);
1642     inst.args.push(arg);
1643     arg = Arg.createTmp(Reg.rbx);
1644     inst.args.push(arg);
1645     arg = Arg.createTmp(Reg.rbx);
1646     inst.args.push(arg);
1647     arg = Arg.createTmp(Reg.rsi);
1648     inst.args.push(arg);
1649     arg = Arg.createTmp(Reg.rax);
1650     inst.args.push(arg);
1651     inst.patchHasNonArgEffects = true;
1652     inst.extraEarlyClobberedRegs = new Set();
1653     inst.extraClobberedRegs = new Set();
1654     inst.patchArgData = [];
1655     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1656     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1657     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1658     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1659     inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32});
1660     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
1661     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
1662     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
1663     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1664     bb16.append(inst);
1665     inst = new Inst(Add64);
1666     arg = Arg.createTmp(Reg.rax);
1667     inst.args.push(arg);
1668     arg = Arg.createTmp(Reg.r14);
1669     inst.args.push(arg);
1670     arg = Arg.createTmp(Reg.rax);
1671     inst.args.push(arg);
1672     bb16.append(inst);
1673     inst = new Inst(Move);
1674     arg = Arg.createTmp(Reg.rax);
1675     inst.args.push(arg);
1676     arg = Arg.createAddr(Reg.rdx, -1088);
1677     inst.args.push(arg);
1678     bb16.append(inst);
1679     inst = new Inst(Move);
1680     arg = Arg.createAddr(Reg.rdx, -88);
1681     inst.args.push(arg);
1682     arg = Arg.createTmp(Reg.rcx);
1683     inst.args.push(arg);
1684     bb16.append(inst);
1685     inst = new Inst(Move);
1686     arg = Arg.createAddr(Reg.rdx, -1176);
1687     inst.args.push(arg);
1688     arg = Arg.createTmp(Reg.rdx);
1689     inst.args.push(arg);
1690     bb16.append(inst);
1691     inst = new Inst(Patch);
1692     arg = Arg.createSpecial();
1693     inst.args.push(arg);
1694     arg = Arg.createResCond(NonZero);
1695     inst.args.push(arg);
1696     arg = Arg.createTmp(Reg.rcx);
1697     inst.args.push(arg);
1698     arg = Arg.createTmp(Reg.r15);
1699     inst.args.push(arg);
1700     arg = Arg.createTmp(Reg.rcx);
1701     inst.args.push(arg);
1702     arg = Arg.createTmp(Reg.rbx);
1703     inst.args.push(arg);
1704     arg = Arg.createTmp(Reg.rcx);
1705     inst.args.push(arg);
1706     arg = Arg.createTmp(Reg.rdx);
1707     inst.args.push(arg);
1708     inst.patchHasNonArgEffects = true;
1709     inst.extraEarlyClobberedRegs = new Set();
1710     inst.extraClobberedRegs = new Set();
1711     inst.patchArgData = [];
1712     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1713     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1714     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1715     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1716     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1717     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1718     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1719     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1720     bb16.append(inst);
1721     inst = new Inst(Patch);
1722     arg = Arg.createSpecial();
1723     inst.args.push(arg);
1724     arg = Arg.createRelCond(NotEqual);
1725     inst.args.push(arg);
1726     arg = Arg.createAddr(Reg.rcx, 0);
1727     inst.args.push(arg);
1728     arg = Arg.createImm(80);
1729     inst.args.push(arg);
1730     arg = Arg.createTmp(Reg.rcx);
1731     inst.args.push(arg);
1732     arg = Arg.createTmp(Reg.rbx);
1733     inst.args.push(arg);
1734     arg = Arg.createTmp(Reg.rcx);
1735     inst.args.push(arg);
1736     arg = Arg.createTmp(Reg.rdx);
1737     inst.args.push(arg);
1738     inst.patchHasNonArgEffects = true;
1739     inst.extraEarlyClobberedRegs = new Set();
1740     inst.extraClobberedRegs = new Set();
1741     inst.patchArgData = [];
1742     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1743     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1744     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1745     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1746     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1747     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1748     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1749     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1750     bb16.append(inst);
1751     inst = new Inst(Move);
1752     arg = Arg.createAddr(Reg.rcx, 8);
1753     inst.args.push(arg);
1754     arg = Arg.createTmp(Reg.rax);
1755     inst.args.push(arg);
1756     bb16.append(inst);
1757     inst = new Inst(Patch);
1758     arg = Arg.createSpecial();
1759     inst.args.push(arg);
1760     arg = Arg.createRelCond(AboveOrEqual);
1761     inst.args.push(arg);
1762     arg = Arg.createTmp(Reg.rdx);
1763     inst.args.push(arg);
1764     arg = Arg.createAddr(Reg.rax, -8);
1765     inst.args.push(arg);
1766     arg = Arg.createTmp(Reg.rbx);
1767     inst.args.push(arg);
1768     arg = Arg.createTmp(Reg.rcx);
1769     inst.args.push(arg);
1770     arg = Arg.createTmp(Reg.rdx);
1771     inst.args.push(arg);
1772     inst.patchHasNonArgEffects = true;
1773     inst.extraEarlyClobberedRegs = new Set();
1774     inst.extraClobberedRegs = new Set();
1775     inst.patchArgData = [];
1776     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1777     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1778     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1779     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1780     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1781     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1782     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
1783     bb16.append(inst);
1784     inst = new Inst(Move32);
1785     arg = Arg.createTmp(Reg.rdx);
1786     inst.args.push(arg);
1787     arg = Arg.createTmp(Reg.rdx);
1788     inst.args.push(arg);
1789     bb16.append(inst);
1790     inst = new Inst(Move);
1791     arg = Arg.createIndex(Reg.rax, Reg.rdx, 8, 0);
1792     inst.args.push(arg);
1793     arg = Arg.createTmp(Reg.rax);
1794     inst.args.push(arg);
1795     bb16.append(inst);
1796     inst = new Inst(Move);
1797     arg = Arg.createImm(10);
1798     inst.args.push(arg);
1799     arg = Arg.createTmp(Reg.rdx);
1800     inst.args.push(arg);
1801     bb16.append(inst);
1802     inst = new Inst(MoveConditionallyTest64);
1803     arg = Arg.createResCond(NonZero);
1804     inst.args.push(arg);
1805     arg = Arg.createTmp(Reg.rax);
1806     inst.args.push(arg);
1807     arg = Arg.createImm(-1);
1808     inst.args.push(arg);
1809     arg = Arg.createTmp(Reg.rax);
1810     inst.args.push(arg);
1811     arg = Arg.createTmp(Reg.rdx);
1812     inst.args.push(arg);
1813     arg = Arg.createTmp(Reg.rax);
1814     inst.args.push(arg);
1815     bb16.append(inst);
1816     inst = new Inst(Patch);
1817     arg = Arg.createSpecial();
1818     inst.args.push(arg);
1819     arg = Arg.createResCond(NonZero);
1820     inst.args.push(arg);
1821     arg = Arg.createTmp(Reg.rax);
1822     inst.args.push(arg);
1823     arg = Arg.createTmp(Reg.r15);
1824     inst.args.push(arg);
1825     arg = Arg.createTmp(Reg.rax);
1826     inst.args.push(arg);
1827     arg = Arg.createTmp(Reg.rbx);
1828     inst.args.push(arg);
1829     arg = Arg.createTmp(Reg.rax);
1830     inst.args.push(arg);
1831     arg = Arg.createTmp(Reg.rbx);
1832     inst.args.push(arg);
1833     arg = Arg.createTmp(Reg.rcx);
1834     inst.args.push(arg);
1835     inst.patchHasNonArgEffects = true;
1836     inst.extraEarlyClobberedRegs = new Set();
1837     inst.extraClobberedRegs = new Set();
1838     inst.patchArgData = [];
1839     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1840     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1841     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1842     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1843     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1844     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1845     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1846     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1847     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1848     bb16.append(inst);
1849     inst = new Inst(Patch);
1850     arg = Arg.createSpecial();
1851     inst.args.push(arg);
1852     arg = Arg.createRelCond(NotEqual);
1853     inst.args.push(arg);
1854     arg = Arg.createAddr(Reg.rax, 5);
1855     inst.args.push(arg);
1856     arg = Arg.createImm(23);
1857     inst.args.push(arg);
1858     arg = Arg.createTmp(Reg.rax);
1859     inst.args.push(arg);
1860     arg = Arg.createTmp(Reg.rbx);
1861     inst.args.push(arg);
1862     arg = Arg.createTmp(Reg.rax);
1863     inst.args.push(arg);
1864     arg = Arg.createTmp(Reg.rbx);
1865     inst.args.push(arg);
1866     arg = Arg.createTmp(Reg.rcx);
1867     inst.args.push(arg);
1868     inst.patchHasNonArgEffects = true;
1869     inst.extraEarlyClobberedRegs = new Set();
1870     inst.extraClobberedRegs = new Set();
1871     inst.patchArgData = [];
1872     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1873     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1874     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
1875     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
1876     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1877     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1878     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1879     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1880     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1881     bb16.append(inst);
1882     inst = new Inst(Move);
1883     arg = Arg.createTmp(Reg.rax);
1884     inst.args.push(arg);
1885     arg = Arg.createCallArg(8);
1886     inst.args.push(arg);
1887     bb16.append(inst);
1888     inst = new Inst(Move32);
1889     arg = Arg.createImm(2);
1890     inst.args.push(arg);
1891     arg = Arg.createCallArg(16);
1892     inst.args.push(arg);
1893     bb16.append(inst);
1894     inst = new Inst(Move);
1895     arg = Arg.createTmp(Reg.rcx);
1896     inst.args.push(arg);
1897     arg = Arg.createCallArg(24);
1898     inst.args.push(arg);
1899     bb16.append(inst);
1900     inst = new Inst(Move);
1901     arg = Arg.createTmp(Reg.rbx);
1902     inst.args.push(arg);
1903     arg = Arg.createCallArg(32);
1904     inst.args.push(arg);
1905     bb16.append(inst);
1906     inst = new Inst(Patch);
1907     arg = Arg.createSpecial();
1908     inst.args.push(arg);
1909     arg = Arg.createTmp(Reg.rax);
1910     inst.args.push(arg);
1911     arg = Arg.createTmp(Reg.rax);
1912     inst.args.push(arg);
1913     arg = Arg.createCallArg(8);
1914     inst.args.push(arg);
1915     arg = Arg.createCallArg(16);
1916     inst.args.push(arg);
1917     arg = Arg.createCallArg(24);
1918     inst.args.push(arg);
1919     arg = Arg.createCallArg(32);
1920     inst.args.push(arg);
1921     arg = Arg.createTmp(Reg.r15);
1922     inst.args.push(arg);
1923     arg = Arg.createTmp(Reg.r14);
1924     inst.args.push(arg);
1925     inst.patchHasNonArgEffects = true;
1926     inst.extraEarlyClobberedRegs = new Set();
1927     inst.extraClobberedRegs = new Set();
1928     inst.extraEarlyClobberedRegs.add(Reg.r11);
1929     inst.extraClobberedRegs.add(Reg.rcx);
1930     inst.extraClobberedRegs.add(Reg.rdx);
1931     inst.extraClobberedRegs.add(Reg.rsi);
1932     inst.extraClobberedRegs.add(Reg.rdi);
1933     inst.extraClobberedRegs.add(Reg.r8);
1934     inst.extraClobberedRegs.add(Reg.r9);
1935     inst.extraClobberedRegs.add(Reg.r10);
1936     inst.extraClobberedRegs.add(Reg.r11);
1937     inst.extraClobberedRegs.add(Reg.xmm0);
1938     inst.extraClobberedRegs.add(Reg.xmm1);
1939     inst.extraClobberedRegs.add(Reg.xmm2);
1940     inst.extraClobberedRegs.add(Reg.xmm3);
1941     inst.extraClobberedRegs.add(Reg.xmm4);
1942     inst.extraClobberedRegs.add(Reg.xmm5);
1943     inst.extraClobberedRegs.add(Reg.xmm6);
1944     inst.extraClobberedRegs.add(Reg.xmm7);
1945     inst.extraClobberedRegs.add(Reg.xmm8);
1946     inst.extraClobberedRegs.add(Reg.xmm9);
1947     inst.extraClobberedRegs.add(Reg.xmm10);
1948     inst.extraClobberedRegs.add(Reg.xmm11);
1949     inst.extraClobberedRegs.add(Reg.xmm12);
1950     inst.extraClobberedRegs.add(Reg.xmm13);
1951     inst.extraClobberedRegs.add(Reg.xmm14);
1952     inst.extraClobberedRegs.add(Reg.xmm15);
1953     inst.patchArgData = [];
1954     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1955     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
1956     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1957     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1958     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1959     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1960     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1961     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1962     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1963     bb16.append(inst);
1964     inst = new Inst(Patch);
1965     arg = Arg.createSpecial();
1966     inst.args.push(arg);
1967     arg = Arg.createTmp(Reg.rbx);
1968     inst.args.push(arg);
1969     inst.patchHasNonArgEffects = true;
1970     inst.extraEarlyClobberedRegs = new Set();
1971     inst.extraClobberedRegs = new Set();
1972     inst.patchArgData = [];
1973     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1974     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1975     bb16.append(inst);
1976     inst = new Inst(Move);
1977     arg = Arg.createAddr(Reg.rbx, 272);
1978     inst.args.push(arg);
1979     arg = Arg.createTmp(Reg.rdx);
1980     inst.args.push(arg);
1981     bb16.append(inst);
1982     inst = new Inst(Move);
1983     arg = Arg.createAddr(Reg.rbx, 280);
1984     inst.args.push(arg);
1985     arg = Arg.createTmp(Reg.rcx);
1986     inst.args.push(arg);
1987     bb16.append(inst);
1988     inst = new Inst(Move32);
1989     arg = Arg.createTmp(Reg.rdx);
1990     inst.args.push(arg);
1991     arg = Arg.createTmp(Reg.rdi);
1992     inst.args.push(arg);
1993     bb16.append(inst);
1994     inst = new Inst(Rshift32);
1995     arg = Arg.createTmp(Reg.rcx);
1996     inst.args.push(arg);
1997     arg = Arg.createTmp(Reg.rdi);
1998     inst.args.push(arg);
1999     bb16.append(inst);
2000     inst = new Inst(Move);
2001     arg = Arg.createAddr(Reg.rbx, 8);
2002     inst.args.push(arg);
2003     arg = Arg.createTmp(Reg.rsi);
2004     inst.args.push(arg);
2005     bb16.append(inst);
2006     inst = new Inst(Move);
2007     arg = Arg.createAddr(Reg.rsi, -1048);
2008     inst.args.push(arg);
2009     arg = Arg.createTmp(Reg.rcx);
2010     inst.args.push(arg);
2011     bb16.append(inst);
2012     inst = new Inst(Patch);
2013     arg = Arg.createSpecial();
2014     inst.args.push(arg);
2015     arg = Arg.createResCond(Overflow);
2016     inst.args.push(arg);
2017     arg = Arg.createTmp(Reg.rdi);
2018     inst.args.push(arg);
2019     arg = Arg.createTmp(Reg.rcx);
2020     inst.args.push(arg);
2021     arg = Arg.createTmp(Reg.rax);
2022     inst.args.push(arg);
2023     arg = Arg.createTmp(Reg.rbx);
2024     inst.args.push(arg);
2025     arg = Arg.createTmp(Reg.rdi);
2026     inst.args.push(arg);
2027     arg = Arg.createTmp(Reg.rcx);
2028     inst.args.push(arg);
2029     inst.patchHasNonArgEffects = true;
2030     inst.extraEarlyClobberedRegs = new Set();
2031     inst.extraClobberedRegs = new Set();
2032     inst.patchArgData = [];
2033     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2034     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2035     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2036     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2037     inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32});
2038     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2039     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
2040     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
2041     bb16.append(inst);
2042     inst = new Inst(Add64);
2043     arg = Arg.createTmp(Reg.rax);
2044     inst.args.push(arg);
2045     arg = Arg.createTmp(Reg.r14);
2046     inst.args.push(arg);
2047     arg = Arg.createTmp(Reg.rax);
2048     inst.args.push(arg);
2049     bb16.append(inst);
2050     inst = new Inst(Move);
2051     arg = Arg.createTmp(Reg.rax);
2052     inst.args.push(arg);
2053     arg = Arg.createAddr(Reg.rsi, -1048);
2054     inst.args.push(arg);
2055     bb16.append(inst);
2056     inst = new Inst(Move);
2057     arg = Arg.createAddr(Reg.rsi, -1072);
2058     inst.args.push(arg);
2059     arg = Arg.createTmp(Reg.rax);
2060     inst.args.push(arg);
2061     bb16.append(inst);
2062     inst = new Inst(Branch64);
2063     arg = Arg.createRelCond(Below);
2064     inst.args.push(arg);
2065     arg = Arg.createTmp(Reg.rax);
2066     inst.args.push(arg);
2067     arg = Arg.createTmp(Reg.r14);
2068     inst.args.push(arg);
2069     bb16.append(inst);
2070     bb17.successors.push(new FrequentedBlock(bb19, Normal));
2071     bb17.predecessors.push(bb16);
2072     inst = new Inst(ConvertInt32ToDouble);
2073     arg = Arg.createTmp(Reg.rax);
2074     inst.args.push(arg);
2075     arg = Arg.createTmp(Reg.xmm0);
2076     inst.args.push(arg);
2077     bb17.append(inst);
2078     inst = new Inst(Jump);
2079     bb17.append(inst);
2080     bb18.successors.push(new FrequentedBlock(bb19, Normal));
2081     bb18.predecessors.push(bb16);
2082     inst = new Inst(Add64);
2083     arg = Arg.createTmp(Reg.rax);
2084     inst.args.push(arg);
2085     arg = Arg.createTmp(Reg.r14);
2086     inst.args.push(arg);
2087     arg = Arg.createTmp(Reg.rax);
2088     inst.args.push(arg);
2089     bb18.append(inst);
2090     inst = new Inst(Move64ToDouble);
2091     arg = Arg.createTmp(Reg.rax);
2092     inst.args.push(arg);
2093     arg = Arg.createTmp(Reg.xmm0);
2094     inst.args.push(arg);
2095     bb18.append(inst);
2096     inst = new Inst(Jump);
2097     bb18.append(inst);
2098     bb19.successors.push(new FrequentedBlock(bb20, Normal));
2099     bb19.successors.push(new FrequentedBlock(bb32, Normal));
2100     bb19.predecessors.push(bb17);
2101     bb19.predecessors.push(bb18);
2102     inst = new Inst(ConvertInt32ToDouble);
2103     arg = Arg.createTmp(Reg.rdi);
2104     inst.args.push(arg);
2105     arg = Arg.createTmp(Reg.xmm1);
2106     inst.args.push(arg);
2107     bb19.append(inst);
2108     inst = new Inst(AddDouble);
2109     arg = Arg.createTmp(Reg.xmm0);
2110     inst.args.push(arg);
2111     arg = Arg.createTmp(Reg.xmm1);
2112     inst.args.push(arg);
2113     arg = Arg.createTmp(Reg.xmm1);
2114     inst.args.push(arg);
2115     bb19.append(inst);
2116     inst = new Inst(MoveDoubleTo64);
2117     arg = Arg.createTmp(Reg.xmm1);
2118     inst.args.push(arg);
2119     arg = Arg.createTmp(Reg.rax);
2120     inst.args.push(arg);
2121     bb19.append(inst);
2122     inst = new Inst(Move);
2123     arg = Arg.createBigImm(0, 65536);
2124     inst.args.push(arg);
2125     arg = Arg.createTmp(Reg.rcx);
2126     inst.args.push(arg);
2127     bb19.append(inst);
2128     inst = new Inst(Add64);
2129     arg = Arg.createTmp(Reg.rax);
2130     inst.args.push(arg);
2131     arg = Arg.createTmp(Reg.rcx);
2132     inst.args.push(arg);
2133     arg = Arg.createTmp(Reg.rcx);
2134     inst.args.push(arg);
2135     bb19.append(inst);
2136     inst = new Inst(Move);
2137     arg = Arg.createTmp(Reg.rcx);
2138     inst.args.push(arg);
2139     arg = Arg.createAddr(Reg.rsi, -1072);
2140     inst.args.push(arg);
2141     bb19.append(inst);
2142     inst = new Inst(Move);
2143     arg = Arg.createAddr(Reg.rsi, -1080);
2144     inst.args.push(arg);
2145     arg = Arg.createTmp(Reg.rcx);
2146     inst.args.push(arg);
2147     bb19.append(inst);
2148     inst = new Inst(Patch);
2149     arg = Arg.createSpecial();
2150     inst.args.push(arg);
2151     arg = Arg.createResCond(Overflow);
2152     inst.args.push(arg);
2153     arg = Arg.createTmp(Reg.rdx);
2154     inst.args.push(arg);
2155     arg = Arg.createTmp(Reg.rcx);
2156     inst.args.push(arg);
2157     arg = Arg.createTmp(Reg.rax);
2158     inst.args.push(arg);
2159     arg = Arg.createTmp(Reg.rbx);
2160     inst.args.push(arg);
2161     arg = Arg.createTmp(Reg.rbx);
2162     inst.args.push(arg);
2163     arg = Arg.createTmp(Reg.rcx);
2164     inst.args.push(arg);
2165     arg = Arg.createTmp(Reg.rdx);
2166     inst.args.push(arg);
2167     inst.patchHasNonArgEffects = true;
2168     inst.extraEarlyClobberedRegs = new Set();
2169     inst.extraClobberedRegs = new Set();
2170     inst.patchArgData = [];
2171     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2172     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2173     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2174     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2175     inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32});
2176     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2177     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2178     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
2179     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
2180     bb19.append(inst);
2181     inst = new Inst(Add64);
2182     arg = Arg.createTmp(Reg.rax);
2183     inst.args.push(arg);
2184     arg = Arg.createTmp(Reg.r14);
2185     inst.args.push(arg);
2186     arg = Arg.createTmp(Reg.rax);
2187     inst.args.push(arg);
2188     bb19.append(inst);
2189     inst = new Inst(Move);
2190     arg = Arg.createTmp(Reg.rax);
2191     inst.args.push(arg);
2192     arg = Arg.createAddr(Reg.rsi, -1080);
2193     inst.args.push(arg);
2194     bb19.append(inst);
2195     inst = new Inst(BranchTest32);
2196     arg = Arg.createResCond(NonZero);
2197     inst.args.push(arg);
2198     arg = Arg.createAddr(Reg.rsi, -1104);
2199     inst.args.push(arg);
2200     arg = Arg.createImm(1);
2201     inst.args.push(arg);
2202     bb19.append(inst);
2203     bb20.successors.push(new FrequentedBlock(bb21, Normal));
2204     bb20.successors.push(new FrequentedBlock(bb32, Normal));
2205     bb20.predecessors.push(bb19);
2206     inst = new Inst(Move);
2207     arg = Arg.createAddr(Reg.rsi, -1096);
2208     inst.args.push(arg);
2209     arg = Arg.createTmp(Reg.rax);
2210     inst.args.push(arg);
2211     bb20.append(inst);
2212     inst = new Inst(Patch);
2213     arg = Arg.createSpecial();
2214     inst.args.push(arg);
2215     arg = Arg.createResCond(Overflow);
2216     inst.args.push(arg);
2217     arg = Arg.createTmp(Reg.rdx);
2218     inst.args.push(arg);
2219     arg = Arg.createTmp(Reg.rax);
2220     inst.args.push(arg);
2221     arg = Arg.createTmp(Reg.rdx);
2222     inst.args.push(arg);
2223     arg = Arg.createTmp(Reg.rbx);
2224     inst.args.push(arg);
2225     arg = Arg.createTmp(Reg.rbx);
2226     inst.args.push(arg);
2227     arg = Arg.createTmp(Reg.rax);
2228     inst.args.push(arg);
2229     arg = Arg.createTmp(Reg.rdx);
2230     inst.args.push(arg);
2231     inst.patchHasNonArgEffects = true;
2232     inst.extraEarlyClobberedRegs = new Set();
2233     inst.extraClobberedRegs = new Set();
2234     inst.patchArgData = [];
2235     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2236     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2237     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2238     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2239     inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32});
2240     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2241     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2242     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
2243     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
2244     bb20.append(inst);
2245     inst = new Inst(Add64);
2246     arg = Arg.createTmp(Reg.rdx);
2247     inst.args.push(arg);
2248     arg = Arg.createTmp(Reg.r14);
2249     inst.args.push(arg);
2250     arg = Arg.createTmp(Reg.rax);
2251     inst.args.push(arg);
2252     bb20.append(inst);
2253     inst = new Inst(Move);
2254     arg = Arg.createTmp(Reg.rax);
2255     inst.args.push(arg);
2256     arg = Arg.createAddr(Reg.rsi, -1096);
2257     inst.args.push(arg);
2258     bb20.append(inst);
2259     inst = new Inst(Move);
2260     arg = Arg.createAddr(Reg.rsi, -1112);
2261     inst.args.push(arg);
2262     arg = Arg.createTmp(Reg.r11);
2263     inst.args.push(arg);
2264     bb20.append(inst);
2265     inst = new Inst(Branch32);
2266     arg = Arg.createRelCond(GreaterThanOrEqual);
2267     inst.args.push(arg);
2268     arg = Arg.createTmp(Reg.rdx);
2269     inst.args.push(arg);
2270     arg = Arg.createTmp(Reg.r11);
2271     inst.args.push(arg);
2272     bb20.append(inst);
2273     bb21.successors.push(new FrequentedBlock(bb23, Normal));
2274     bb21.predecessors.push(bb20);
2275     inst = new Inst(Move);
2276     arg = Arg.createAddr(Reg.rbx, 344);
2277     inst.args.push(arg);
2278     arg = Arg.createTmp(Reg.r12);
2279     inst.args.push(arg);
2280     bb21.append(inst);
2281     inst = new Inst(Patch);
2282     arg = Arg.createSpecial();
2283     inst.args.push(arg);
2284     arg = Arg.createRelCond(NotEqual);
2285     inst.args.push(arg);
2286     arg = Arg.createAddr(Reg.r12, 0);
2287     inst.args.push(arg);
2288     arg = Arg.createImm(502);
2289     inst.args.push(arg);
2290     arg = Arg.createTmp(Reg.r12);
2291     inst.args.push(arg);
2292     arg = Arg.createTmp(Reg.rbx);
2293     inst.args.push(arg);
2294     inst.patchHasNonArgEffects = true;
2295     inst.extraEarlyClobberedRegs = new Set();
2296     inst.extraClobberedRegs = new Set();
2297     inst.patchArgData = [];
2298     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2299     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2300     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2301     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2302     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2303     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2304     bb21.append(inst);
2305     inst = new Inst(Move);
2306     arg = Arg.createAddr(Reg.r12, 16);
2307     inst.args.push(arg);
2308     arg = Arg.createTmp(Reg.rdi);
2309     inst.args.push(arg);
2310     bb21.append(inst);
2311     inst = new Inst(Move32);
2312     arg = Arg.createAddr(Reg.r12, 24);
2313     inst.args.push(arg);
2314     arg = Arg.createTmp(Reg.r9);
2315     inst.args.push(arg);
2316     bb21.append(inst);
2317     inst = new Inst(Patch);
2318     arg = Arg.createSpecial();
2319     inst.args.push(arg);
2320     arg = Arg.createRelCond(BelowOrEqual);
2321     inst.args.push(arg);
2322     arg = Arg.createTmp(Reg.r9);
2323     inst.args.push(arg);
2324     arg = Arg.createImm(65286);
2325     inst.args.push(arg);
2326     arg = Arg.createTmp(Reg.rbx);
2327     inst.args.push(arg);
2328     inst.patchHasNonArgEffects = true;
2329     inst.extraEarlyClobberedRegs = new Set();
2330     inst.extraClobberedRegs = new Set();
2331     inst.patchArgData = [];
2332     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2333     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2334     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2335     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2336     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2337     bb21.append(inst);
2338     inst = new Inst(Move);
2339     arg = Arg.createAddr(Reg.rbx, 232);
2340     inst.args.push(arg);
2341     arg = Arg.createTmp(Reg.r10);
2342     inst.args.push(arg);
2343     bb21.append(inst);
2344     inst = new Inst(Move);
2345     arg = Arg.createAddr(Reg.rbx, 256);
2346     inst.args.push(arg);
2347     arg = Arg.createTmp(Reg.r8);
2348     inst.args.push(arg);
2349     bb21.append(inst);
2350     inst = new Inst(Jump);
2351     bb21.append(inst);
2352     bb22.successors.push(new FrequentedBlock(bb23, Normal));
2353     bb22.predecessors.push(bb30);
2354     bb22.predecessors.push(bb31);
2355     bb22.predecessors.push(bb29);
2356     inst = new Inst(Move32);
2357     arg = Arg.createTmp(Reg.rcx);
2358     inst.args.push(arg);
2359     arg = Arg.createTmp(Reg.rax);
2360     inst.args.push(arg);
2361     bb22.append(inst);
2362     inst = new Inst(Jump);
2363     bb22.append(inst);
2364     bb23.successors.push(new FrequentedBlock(bb25, Normal));
2365     bb23.successors.push(new FrequentedBlock(bb24, Normal));
2366     bb23.predecessors.push(bb21);
2367     bb23.predecessors.push(bb22);
2368     inst = new Inst(Patch);
2369     arg = Arg.createSpecial();
2370     inst.args.push(arg);
2371     arg = Arg.createResCond(Overflow);
2372     inst.args.push(arg);
2373     arg = Arg.createTmp(Reg.r11);
2374     inst.args.push(arg);
2375     arg = Arg.createTmp(Reg.rax);
2376     inst.args.push(arg);
2377     arg = Arg.createTmp(Reg.rbx);
2378     inst.args.push(arg);
2379     arg = Arg.createTmp(Reg.rbx);
2380     inst.args.push(arg);
2381     arg = Arg.createTmp(Reg.rax);
2382     inst.args.push(arg);
2383     arg = Arg.createTmp(Reg.r11);
2384     inst.args.push(arg);
2385     inst.patchHasNonArgEffects = true;
2386     inst.extraEarlyClobberedRegs = new Set();
2387     inst.extraClobberedRegs = new Set();
2388     inst.patchArgData = [];
2389     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2390     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2391     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2392     inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32});
2393     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2394     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2395     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
2396     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
2397     bb23.append(inst);
2398     inst = new Inst(Move32);
2399     arg = Arg.createTmp(Reg.rax);
2400     inst.args.push(arg);
2401     arg = Arg.createTmp(Reg.rcx);
2402     inst.args.push(arg);
2403     bb23.append(inst);
2404     inst = new Inst(Add64);
2405     arg = Arg.createTmp(Reg.rcx);
2406     inst.args.push(arg);
2407     arg = Arg.createTmp(Reg.r14);
2408     inst.args.push(arg);
2409     arg = Arg.createTmp(Reg.rcx);
2410     inst.args.push(arg);
2411     bb23.append(inst);
2412     inst = new Inst(Move);
2413     arg = Arg.createTmp(Reg.rcx);
2414     inst.args.push(arg);
2415     arg = Arg.createAddr(Reg.rsi, -1096);
2416     inst.args.push(arg);
2417     bb23.append(inst);
2418     inst = new Inst(Load8);
2419     arg = Arg.createAddr(Reg.rdi, 65285);
2420     inst.args.push(arg);
2421     arg = Arg.createTmp(Reg.rdx);
2422     inst.args.push(arg);
2423     bb23.append(inst);
2424     inst = new Inst(Move32);
2425     arg = Arg.createTmp(Reg.rdx);
2426     inst.args.push(arg);
2427     arg = Arg.createTmp(Reg.r13);
2428     inst.args.push(arg);
2429     bb23.append(inst);
2430     inst = new Inst(Patch);
2431     arg = Arg.createSpecial();
2432     inst.args.push(arg);
2433     arg = Arg.createResCond(Overflow);
2434     inst.args.push(arg);
2435     arg = Arg.createImm(1);
2436     inst.args.push(arg);
2437     arg = Arg.createTmp(Reg.r13);
2438     inst.args.push(arg);
2439     arg = Arg.createTmp(Reg.rbx);
2440     inst.args.push(arg);
2441     arg = Arg.createTmp(Reg.r12);
2442     inst.args.push(arg);
2443     arg = Arg.createTmp(Reg.rdx);
2444     inst.args.push(arg);
2445     inst.patchHasNonArgEffects = true;
2446     inst.extraEarlyClobberedRegs = new Set();
2447     inst.extraClobberedRegs = new Set();
2448     inst.patchArgData = [];
2449     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2450     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2451     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2452     inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32});
2453     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2454     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2455     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
2456     bb23.append(inst);
2457     inst = new Inst(Branch32);
2458     arg = Arg.createRelCond(BelowOrEqual);
2459     inst.args.push(arg);
2460     arg = Arg.createTmp(Reg.r9);
2461     inst.args.push(arg);
2462     arg = Arg.createImm(65285);
2463     inst.args.push(arg);
2464     bb23.append(inst);
2465     bb24.successors.push(new FrequentedBlock(bb26, Normal));
2466     bb24.successors.push(new FrequentedBlock(bb30, Normal));
2467     bb24.predecessors.push(bb23);
2468     inst = new Inst(Store8);
2469     arg = Arg.createTmp(Reg.r13);
2470     inst.args.push(arg);
2471     arg = Arg.createAddr(Reg.rdi, 65285);
2472     inst.args.push(arg);
2473     bb24.append(inst);
2474     inst = new Inst(Branch32);
2475     arg = Arg.createRelCond(Equal);
2476     inst.args.push(arg);
2477     arg = Arg.createTmp(Reg.r13);
2478     inst.args.push(arg);
2479     arg = Arg.createImm(256);
2480     inst.args.push(arg);
2481     bb24.append(inst);
2482     bb25.successors.push(new FrequentedBlock(bb26, Normal));
2483     bb25.successors.push(new FrequentedBlock(bb30, Normal));
2484     bb25.predecessors.push(bb23);
2485     inst = new Inst(Branch32);
2486     arg = Arg.createRelCond(Equal);
2487     inst.args.push(arg);
2488     arg = Arg.createTmp(Reg.r13);
2489     inst.args.push(arg);
2490     arg = Arg.createImm(256);
2491     inst.args.push(arg);
2492     bb25.append(inst);
2493     bb26.successors.push(new FrequentedBlock(bb28, Normal));
2494     bb26.successors.push(new FrequentedBlock(bb27, Normal));
2495     bb26.predecessors.push(bb24);
2496     bb26.predecessors.push(bb25);
2497     inst = new Inst(Load8);
2498     arg = Arg.createAddr(Reg.rdi, 65286);
2499     inst.args.push(arg);
2500     arg = Arg.createTmp(Reg.rdx);
2501     inst.args.push(arg);
2502     bb26.append(inst);
2503     inst = new Inst(Branch32);
2504     arg = Arg.createRelCond(BelowOrEqual);
2505     inst.args.push(arg);
2506     arg = Arg.createTmp(Reg.r9);
2507     inst.args.push(arg);
2508     arg = Arg.createImm(65285);
2509     inst.args.push(arg);
2510     bb26.append(inst);
2511     bb27.successors.push(new FrequentedBlock(bb28, Normal));
2512     bb27.predecessors.push(bb26);
2513     inst = new Inst(Store8);
2514     arg = Arg.createTmp(Reg.rdx);
2515     inst.args.push(arg);
2516     arg = Arg.createAddr(Reg.rdi, 65285);
2517     inst.args.push(arg);
2518     bb27.append(inst);
2519     inst = new Inst(Jump);
2520     bb27.append(inst);
2521     bb28.successors.push(new FrequentedBlock(bb29, Normal));
2522     bb28.successors.push(new FrequentedBlock(bb31, Normal));
2523     bb28.predecessors.push(bb26);
2524     bb28.predecessors.push(bb27);
2525     inst = new Inst(Move);
2526     arg = Arg.createAddr(Reg.rbx, 248);
2527     inst.args.push(arg);
2528     arg = Arg.createTmp(Reg.rdx);
2529     inst.args.push(arg);
2530     bb28.append(inst);
2531     inst = new Inst(Or32);
2532     arg = Arg.createImm(4);
2533     inst.args.push(arg);
2534     arg = Arg.createTmp(Reg.rdx);
2535     inst.args.push(arg);
2536     bb28.append(inst);
2537     inst = new Inst(Move32);
2538     arg = Arg.createTmp(Reg.rdx);
2539     inst.args.push(arg);
2540     arg = Arg.createTmp(Reg.r13);
2541     inst.args.push(arg);
2542     bb28.append(inst);
2543     inst = new Inst(Add64);
2544     arg = Arg.createTmp(Reg.r13);
2545     inst.args.push(arg);
2546     arg = Arg.createTmp(Reg.r14);
2547     inst.args.push(arg);
2548     arg = Arg.createTmp(Reg.r13);
2549     inst.args.push(arg);
2550     bb28.append(inst);
2551     inst = new Inst(Move);
2552     arg = Arg.createTmp(Reg.r13);
2553     inst.args.push(arg);
2554     arg = Arg.createAddr(Reg.rbx, 248);
2555     inst.args.push(arg);
2556     bb28.append(inst);
2557     inst = new Inst(Move);
2558     arg = Arg.createImm(1);
2559     inst.args.push(arg);
2560     arg = Arg.createTmp(Reg.r13);
2561     inst.args.push(arg);
2562     bb28.append(inst);
2563     inst = new Inst(BranchTest64);
2564     arg = Arg.createResCond(NonZero);
2565     inst.args.push(arg);
2566     arg = Arg.createTmp(Reg.r10);
2567     inst.args.push(arg);
2568     arg = Arg.createTmp(Reg.r13);
2569     inst.args.push(arg);
2570     bb28.append(inst);
2571     bb29.successors.push(new FrequentedBlock(bb22, Normal));
2572     bb29.successors.push(new FrequentedBlock(bb32, Normal));
2573     bb29.predecessors.push(bb28);
2574     inst = new Inst(And32);
2575     arg = Arg.createTmp(Reg.rdx);
2576     inst.args.push(arg);
2577     arg = Arg.createTmp(Reg.r8);
2578     inst.args.push(arg);
2579     arg = Arg.createTmp(Reg.rdx);
2580     inst.args.push(arg);
2581     bb29.append(inst);
2582     inst = new Inst(And32);
2583     arg = Arg.createImm(31);
2584     inst.args.push(arg);
2585     arg = Arg.createTmp(Reg.rdx);
2586     inst.args.push(arg);
2587     bb29.append(inst);
2588     inst = new Inst(Add64);
2589     arg = Arg.createTmp(Reg.rdx);
2590     inst.args.push(arg);
2591     arg = Arg.createTmp(Reg.r14);
2592     inst.args.push(arg);
2593     arg = Arg.createTmp(Reg.rdx);
2594     inst.args.push(arg);
2595     bb29.append(inst);
2596     inst = new Inst(Move);
2597     arg = Arg.createTmp(Reg.rdx);
2598     inst.args.push(arg);
2599     arg = Arg.createAddr(Reg.rbx, 240);
2600     inst.args.push(arg);
2601     bb29.append(inst);
2602     inst = new Inst(Branch32);
2603     arg = Arg.createRelCond(GreaterThanOrEqual);
2604     inst.args.push(arg);
2605     arg = Arg.createTmp(Reg.rax);
2606     inst.args.push(arg);
2607     arg = Arg.createTmp(Reg.r11);
2608     inst.args.push(arg);
2609     bb29.append(inst);
2610     bb30.successors.push(new FrequentedBlock(bb22, Normal));
2611     bb30.successors.push(new FrequentedBlock(bb32, Normal));
2612     bb30.predecessors.push(bb24);
2613     bb30.predecessors.push(bb25);
2614     inst = new Inst(Branch32);
2615     arg = Arg.createRelCond(GreaterThanOrEqual);
2616     inst.args.push(arg);
2617     arg = Arg.createTmp(Reg.rax);
2618     inst.args.push(arg);
2619     arg = Arg.createTmp(Reg.r11);
2620     inst.args.push(arg);
2621     bb30.append(inst);
2622     bb31.successors.push(new FrequentedBlock(bb22, Normal));
2623     bb31.successors.push(new FrequentedBlock(bb32, Normal));
2624     bb31.predecessors.push(bb28);
2625     inst = new Inst(Branch32);
2626     arg = Arg.createRelCond(GreaterThanOrEqual);
2627     inst.args.push(arg);
2628     arg = Arg.createTmp(Reg.rax);
2629     inst.args.push(arg);
2630     arg = Arg.createTmp(Reg.r11);
2631     inst.args.push(arg);
2632     bb31.append(inst);
2633     bb32.successors.push(new FrequentedBlock(bb33, Normal));
2634     bb32.successors.push(new FrequentedBlock(bb34, Normal));
2635     bb32.predecessors.push(bb19);
2636     bb32.predecessors.push(bb20);
2637     bb32.predecessors.push(bb30);
2638     bb32.predecessors.push(bb31);
2639     bb32.predecessors.push(bb29);
2640     inst = new Inst(Move);
2641     arg = Arg.createAddr(Reg.rsi, -1120);
2642     inst.args.push(arg);
2643     arg = Arg.createTmp(Reg.rax);
2644     inst.args.push(arg);
2645     bb32.append(inst);
2646     inst = new Inst(Branch32);
2647     arg = Arg.createRelCond(GreaterThan);
2648     inst.args.push(arg);
2649     arg = Arg.createTmp(Reg.rax);
2650     inst.args.push(arg);
2651     arg = Arg.createImm(0);
2652     inst.args.push(arg);
2653     bb32.append(inst);
2654     bb33.predecessors.push(bb32);
2655     inst = new Inst(Patch);
2656     arg = Arg.createSpecial();
2657     inst.args.push(arg);
2658     arg = Arg.createTmp(Reg.rbx);
2659     inst.args.push(arg);
2660     arg = Arg.createTmp(Reg.rbx);
2661     inst.args.push(arg);
2662     inst.patchHasNonArgEffects = true;
2663     inst.extraEarlyClobberedRegs = new Set();
2664     inst.extraClobberedRegs = new Set();
2665     inst.patchArgData = [];
2666     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2667     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2668     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2669     bb33.append(inst);
2670     inst = new Inst(Oops);
2671     bb33.append(inst);
2672     bb34.successors.push(new FrequentedBlock(bb36, Normal));
2673     bb34.successors.push(new FrequentedBlock(bb35, Normal));
2674     bb34.predecessors.push(bb32);
2675     inst = new Inst(Move);
2676     arg = Arg.createAddr(Reg.rbx, 136);
2677     inst.args.push(arg);
2678     arg = Arg.createTmp(Reg.rax);
2679     inst.args.push(arg);
2680     bb34.append(inst);
2681     inst = new Inst(Branch64);
2682     arg = Arg.createRelCond(Below);
2683     inst.args.push(arg);
2684     arg = Arg.createTmp(Reg.rax);
2685     inst.args.push(arg);
2686     arg = Arg.createTmp(Reg.r14);
2687     inst.args.push(arg);
2688     bb34.append(inst);
2689     bb35.successors.push(new FrequentedBlock(bb37, Normal));
2690     bb35.successors.push(new FrequentedBlock(bb38, Normal));
2691     bb35.predecessors.push(bb34);
2692     inst = new Inst(ConvertInt32ToDouble);
2693     arg = Arg.createTmp(Reg.rax);
2694     inst.args.push(arg);
2695     arg = Arg.createTmp(Reg.xmm0);
2696     inst.args.push(arg);
2697     bb35.append(inst);
2698     inst = new Inst(BranchDouble);
2699     arg = Arg.createDoubleCond(DoubleGreaterThanOrEqual);
2700     inst.args.push(arg);
2701     arg = Arg.createTmp(Reg.xmm1);
2702     inst.args.push(arg);
2703     arg = Arg.createTmp(Reg.xmm0);
2704     inst.args.push(arg);
2705     bb35.append(inst);
2706     bb36.successors.push(new FrequentedBlock(bb37, Normal));
2707     bb36.successors.push(new FrequentedBlock(bb38, Normal));
2708     bb36.predecessors.push(bb34);
2709     inst = new Inst(Add64);
2710     arg = Arg.createTmp(Reg.rax);
2711     inst.args.push(arg);
2712     arg = Arg.createTmp(Reg.r14);
2713     inst.args.push(arg);
2714     arg = Arg.createTmp(Reg.rax);
2715     inst.args.push(arg);
2716     bb36.append(inst);
2717     inst = new Inst(Move64ToDouble);
2718     arg = Arg.createTmp(Reg.rax);
2719     inst.args.push(arg);
2720     arg = Arg.createTmp(Reg.xmm0);
2721     inst.args.push(arg);
2722     bb36.append(inst);
2723     inst = new Inst(BranchDouble);
2724     arg = Arg.createDoubleCond(DoubleGreaterThanOrEqual);
2725     inst.args.push(arg);
2726     arg = Arg.createTmp(Reg.xmm1);
2727     inst.args.push(arg);
2728     arg = Arg.createTmp(Reg.xmm0);
2729     inst.args.push(arg);
2730     bb36.append(inst);
2731     bb37.successors.push(new FrequentedBlock(bb38, Normal));
2732     bb37.predecessors.push(bb35);
2733     bb37.predecessors.push(bb36);
2734     inst = new Inst(Move);
2735     arg = Arg.createBigImm(286474592, 1);
2736     inst.args.push(arg);
2737     arg = Arg.createTmp(Reg.rax);
2738     inst.args.push(arg);
2739     bb37.append(inst);
2740     inst = new Inst(Move);
2741     arg = Arg.createBigImm(286474592, 1);
2742     inst.args.push(arg);
2743     arg = Arg.createTmp(Reg.rcx);
2744     inst.args.push(arg);
2745     bb37.append(inst);
2746     inst = new Inst(Move);
2747     arg = Arg.createTmp(Reg.rcx);
2748     inst.args.push(arg);
2749     arg = Arg.createCallArg(8);
2750     inst.args.push(arg);
2751     bb37.append(inst);
2752     inst = new Inst(Move32);
2753     arg = Arg.createImm(1);
2754     inst.args.push(arg);
2755     arg = Arg.createCallArg(16);
2756     inst.args.push(arg);
2757     bb37.append(inst);
2758     inst = new Inst(Move);
2759     arg = Arg.createTmp(Reg.rbx);
2760     inst.args.push(arg);
2761     arg = Arg.createCallArg(24);
2762     inst.args.push(arg);
2763     bb37.append(inst);
2764     inst = new Inst(Patch);
2765     arg = Arg.createSpecial();
2766     inst.args.push(arg);
2767     arg = Arg.createTmp(Reg.rax);
2768     inst.args.push(arg);
2769     arg = Arg.createTmp(Reg.rax);
2770     inst.args.push(arg);
2771     arg = Arg.createCallArg(8);
2772     inst.args.push(arg);
2773     arg = Arg.createCallArg(16);
2774     inst.args.push(arg);
2775     arg = Arg.createCallArg(24);
2776     inst.args.push(arg);
2777     arg = Arg.createTmp(Reg.r15);
2778     inst.args.push(arg);
2779     arg = Arg.createTmp(Reg.r14);
2780     inst.args.push(arg);
2781     inst.patchHasNonArgEffects = true;
2782     inst.extraEarlyClobberedRegs = new Set();
2783     inst.extraClobberedRegs = new Set();
2784     inst.extraEarlyClobberedRegs.add(Reg.r11);
2785     inst.extraClobberedRegs.add(Reg.rcx);
2786     inst.extraClobberedRegs.add(Reg.rdx);
2787     inst.extraClobberedRegs.add(Reg.rsi);
2788     inst.extraClobberedRegs.add(Reg.rdi);
2789     inst.extraClobberedRegs.add(Reg.r8);
2790     inst.extraClobberedRegs.add(Reg.r9);
2791     inst.extraClobberedRegs.add(Reg.r10);
2792     inst.extraClobberedRegs.add(Reg.r11);
2793     inst.extraClobberedRegs.add(Reg.xmm0);
2794     inst.extraClobberedRegs.add(Reg.xmm1);
2795     inst.extraClobberedRegs.add(Reg.xmm2);
2796     inst.extraClobberedRegs.add(Reg.xmm3);
2797     inst.extraClobberedRegs.add(Reg.xmm4);
2798     inst.extraClobberedRegs.add(Reg.xmm5);
2799     inst.extraClobberedRegs.add(Reg.xmm6);
2800     inst.extraClobberedRegs.add(Reg.xmm7);
2801     inst.extraClobberedRegs.add(Reg.xmm8);
2802     inst.extraClobberedRegs.add(Reg.xmm9);
2803     inst.extraClobberedRegs.add(Reg.xmm10);
2804     inst.extraClobberedRegs.add(Reg.xmm11);
2805     inst.extraClobberedRegs.add(Reg.xmm12);
2806     inst.extraClobberedRegs.add(Reg.xmm13);
2807     inst.extraClobberedRegs.add(Reg.xmm14);
2808     inst.extraClobberedRegs.add(Reg.xmm15);
2809     inst.patchArgData = [];
2810     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2811     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
2812     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2813     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2814     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2815     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2816     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2817     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2818     bb37.append(inst);
2819     inst = new Inst(Patch);
2820     arg = Arg.createSpecial();
2821     inst.args.push(arg);
2822     arg = Arg.createTmp(Reg.rbx);
2823     inst.args.push(arg);
2824     inst.patchHasNonArgEffects = true;
2825     inst.extraEarlyClobberedRegs = new Set();
2826     inst.extraClobberedRegs = new Set();
2827     inst.patchArgData = [];
2828     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2829     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2830     bb37.append(inst);
2831     inst = new Inst(Jump);
2832     bb37.append(inst);
2833     bb38.successors.push(new FrequentedBlock(bb39, Normal));
2834     bb38.successors.push(new FrequentedBlock(bb40, Normal));
2835     bb38.predecessors.push(bb35);
2836     bb38.predecessors.push(bb37);
2837     bb38.predecessors.push(bb36);
2838     inst = new Inst(Patch);
2839     arg = Arg.createSpecial();
2840     inst.args.push(arg);
2841     arg = Arg.createRelCond(NotEqual);
2842     inst.args.push(arg);
2843     arg = Arg.createAddr(Reg.rbx, 0);
2844     inst.args.push(arg);
2845     arg = Arg.createImm(881);
2846     inst.args.push(arg);
2847     arg = Arg.createTmp(Reg.rbx);
2848     inst.args.push(arg);
2849     arg = Arg.createTmp(Reg.rbx);
2850     inst.args.push(arg);
2851     inst.patchHasNonArgEffects = true;
2852     inst.extraEarlyClobberedRegs = new Set();
2853     inst.extraClobberedRegs = new Set();
2854     inst.patchArgData = [];
2855     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2856     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2857     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2858     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2859     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2860     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
2861     bb38.append(inst);
2862     inst = new Inst(Move);
2863     arg = Arg.createAddr(Reg.rbx, 8);
2864     inst.args.push(arg);
2865     arg = Arg.createTmp(Reg.rdx);
2866     inst.args.push(arg);
2867     bb38.append(inst);
2868     inst = new Inst(Move);
2869     arg = Arg.createAddr(Reg.rdx, -1824);
2870     inst.args.push(arg);
2871     arg = Arg.createTmp(Reg.rax);
2872     inst.args.push(arg);
2873     bb38.append(inst);
2874     inst = new Inst(Move32);
2875     arg = Arg.createTmp(Reg.rax);
2876     inst.args.push(arg);
2877     arg = Arg.createTmp(Reg.rcx);
2878     inst.args.push(arg);
2879     bb38.append(inst);
2880     inst = new Inst(Patch);
2881     arg = Arg.createSpecial();
2882     inst.args.push(arg);
2883     arg = Arg.createResCond(Overflow);
2884     inst.args.push(arg);
2885     arg = Arg.createImm(1);
2886     inst.args.push(arg);
2887     arg = Arg.createTmp(Reg.rcx);
2888     inst.args.push(arg);
2889     arg = Arg.createTmp(Reg.rbx);
2890     inst.args.push(arg);
2891     arg = Arg.createTmp(Reg.rax);
2892     inst.args.push(arg);
2893     inst.patchHasNonArgEffects = true;
2894     inst.extraEarlyClobberedRegs = new Set();
2895     inst.extraClobberedRegs = new Set();
2896     inst.patchArgData = [];
2897     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
2898     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2899     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
2900     inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32});
2901     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
2902     inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
2903     bb38.append(inst);
2904     inst = new Inst(Move32);
2905     arg = Arg.createTmp(Reg.rcx);
2906     inst.args.push(arg);
2907     arg = Arg.createTmp(Reg.rax);
2908     inst.args.push(arg);
2909     bb38.append(inst);
2910     inst = new Inst(Add64);
2911     arg = Arg.createTmp(Reg.rax);
2912     inst.args.push(arg);
2913     arg = Arg.createTmp(Reg.r14);
2914     inst.args.push(arg);
2915     arg = Arg.createTmp(Reg.rax);
2916     inst.args.push(arg);
2917     bb38.append(inst);
2918     inst = new Inst(Move);
2919     arg = Arg.createTmp(Reg.rax);
2920     inst.args.push(arg);
2921     arg = Arg.createAddr(Reg.rdx, -1824);
2922     inst.args.push(arg);
2923     bb38.append(inst);
2924     inst = new Inst(Move);
2925     arg = Arg.createAddr(Reg.rdx, -1832);
2926     inst.args.push(arg);
2927     arg = Arg.createTmp(Reg.rax);
2928     inst.args.push(arg);
2929     bb38.append(inst);
2930     inst = new Inst(Branch32);
2931     arg = Arg.createRelCond(GreaterThan);
2932     inst.args.push(arg);
2933     arg = Arg.createTmp(Reg.rcx);
2934     inst.args.push(arg);
2935     arg = Arg.createTmp(Reg.rax);
2936     inst.args.push(arg);
2937     bb38.append(inst);
2938     bb39.successors.push(new FrequentedBlock(bb42, Normal));
2939     bb39.successors.push(new FrequentedBlock(bb3, Normal));
2940     bb39.predecessors.push(bb38);
2941     inst = new Inst(Move);
2942     arg = Arg.createBigImm(286474592, 1);
2943     inst.args.push(arg);
2944     arg = Arg.createTmp(Reg.rax);
2945     inst.args.push(arg);
2946     bb39.append(inst);
2947     inst = new Inst(Move);
2948     arg = Arg.createBigImm(286474592, 1);
2949     inst.args.push(arg);
2950     arg = Arg.createTmp(Reg.rcx);
2951     inst.args.push(arg);
2952     bb39.append(inst);
2953     inst = new Inst(Move);
2954     arg = Arg.createTmp(Reg.rcx);
2955     inst.args.push(arg);
2956     arg = Arg.createCallArg(8);
2957     inst.args.push(arg);
2958     bb39.append(inst);
2959     inst = new Inst(Move32);
2960     arg = Arg.createImm(1);
2961     inst.args.push(arg);
2962     arg = Arg.createCallArg(16);
2963     inst.args.push(arg);
2964     bb39.append(inst);
2965     inst = new Inst(Move);
2966     arg = Arg.createTmp(Reg.rbx);
2967     inst.args.push(arg);
2968     arg = Arg.createCallArg(24);
2969     inst.args.push(arg);
2970     bb39.append(inst);
2971     inst = new Inst(Patch);
2972     arg = Arg.createSpecial();
2973     inst.args.push(arg);
2974     arg = Arg.createTmp(Reg.rax);
2975     inst.args.push(arg);
2976     arg = Arg.createTmp(Reg.rax);
2977     inst.args.push(arg);
2978     arg = Arg.createCallArg(8);
2979     inst.args.push(arg);
2980     arg = Arg.createCallArg(16);
2981     inst.args.push(arg);
2982     arg = Arg.createCallArg(24);
2983     inst.args.push(arg);
2984     arg = Arg.createTmp(Reg.r15);
2985     inst.args.push(arg);
2986     arg = Arg.createTmp(Reg.r14);
2987     inst.args.push(arg);
2988     inst.patchHasNonArgEffects = true;
2989     inst.extraEarlyClobberedRegs = new Set();
2990     inst.extraClobberedRegs = new Set();
2991     inst.extraEarlyClobberedRegs.add(Reg.r11);
2992     inst.extraClobberedRegs.add(Reg.rcx);
2993     inst.extraClobberedRegs.add(Reg.rdx);
2994     inst.extraClobberedRegs.add(Reg.rsi);
2995     inst.extraClobberedRegs.add(Reg.rdi);
2996     inst.extraClobberedRegs.add(Reg.r8);
2997     inst.extraClobberedRegs.add(Reg.r9);
2998     inst.extraClobberedRegs.add(Reg.r10);
2999     inst.extraClobberedRegs.add(Reg.r11);
3000     inst.extraClobberedRegs.add(Reg.xmm0);
3001     inst.extraClobberedRegs.add(Reg.xmm1);
3002     inst.extraClobberedRegs.add(Reg.xmm2);
3003     inst.extraClobberedRegs.add(Reg.xmm3);
3004     inst.extraClobberedRegs.add(Reg.xmm4);
3005     inst.extraClobberedRegs.add(Reg.xmm5);
3006     inst.extraClobberedRegs.add(Reg.xmm6);
3007     inst.extraClobberedRegs.add(Reg.xmm7);
3008     inst.extraClobberedRegs.add(Reg.xmm8);
3009     inst.extraClobberedRegs.add(Reg.xmm9);
3010     inst.extraClobberedRegs.add(Reg.xmm10);
3011     inst.extraClobberedRegs.add(Reg.xmm11);
3012     inst.extraClobberedRegs.add(Reg.xmm12);
3013     inst.extraClobberedRegs.add(Reg.xmm13);
3014     inst.extraClobberedRegs.add(Reg.xmm14);
3015     inst.extraClobberedRegs.add(Reg.xmm15);
3016     inst.patchArgData = [];
3017     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3018     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
3019     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3020     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3021     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
3022     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3023     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3024     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3025     bb39.append(inst);
3026     inst = new Inst(Patch);
3027     arg = Arg.createSpecial();
3028     inst.args.push(arg);
3029     arg = Arg.createTmp(Reg.rbx);
3030     inst.args.push(arg);
3031     inst.patchHasNonArgEffects = true;
3032     inst.extraEarlyClobberedRegs = new Set();
3033     inst.extraClobberedRegs = new Set();
3034     inst.patchArgData = [];
3035     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3036     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
3037     bb39.append(inst);
3038     inst = new Inst(Move);
3039     arg = Arg.createAddr(Reg.rbx, 224);
3040     inst.args.push(arg);
3041     arg = Arg.createTmp(Reg.rax);
3042     inst.args.push(arg);
3043     bb39.append(inst);
3044     inst = new Inst(Or32);
3045     arg = Arg.createImm(2);
3046     inst.args.push(arg);
3047     arg = Arg.createTmp(Reg.rax);
3048     inst.args.push(arg);
3049     bb39.append(inst);
3050     inst = new Inst(Move32);
3051     arg = Arg.createTmp(Reg.rax);
3052     inst.args.push(arg);
3053     arg = Arg.createTmp(Reg.rax);
3054     inst.args.push(arg);
3055     bb39.append(inst);
3056     inst = new Inst(Add64);
3057     arg = Arg.createTmp(Reg.rax);
3058     inst.args.push(arg);
3059     arg = Arg.createTmp(Reg.r14);
3060     inst.args.push(arg);
3061     arg = Arg.createTmp(Reg.rax);
3062     inst.args.push(arg);
3063     bb39.append(inst);
3064     inst = new Inst(Move);
3065     arg = Arg.createTmp(Reg.rax);
3066     inst.args.push(arg);
3067     arg = Arg.createAddr(Reg.rbx, 224);
3068     inst.args.push(arg);
3069     bb39.append(inst);
3070     inst = new Inst(Move);
3071     arg = Arg.createBigImm(287131344, 1);
3072     inst.args.push(arg);
3073     arg = Arg.createTmp(Reg.rax);
3074     inst.args.push(arg);
3075     bb39.append(inst);
3076     inst = new Inst(Move);
3077     arg = Arg.createBigImm(287131344, 1);
3078     inst.args.push(arg);
3079     arg = Arg.createTmp(Reg.rcx);
3080     inst.args.push(arg);
3081     bb39.append(inst);
3082     inst = new Inst(Move);
3083     arg = Arg.createTmp(Reg.rcx);
3084     inst.args.push(arg);
3085     arg = Arg.createCallArg(8);
3086     inst.args.push(arg);
3087     bb39.append(inst);
3088     inst = new Inst(Move32);
3089     arg = Arg.createImm(1);
3090     inst.args.push(arg);
3091     arg = Arg.createCallArg(16);
3092     inst.args.push(arg);
3093     bb39.append(inst);
3094     inst = new Inst(Move);
3095     arg = Arg.createBigImm(287209728, 1);
3096     inst.args.push(arg);
3097     arg = Arg.createTmp(Reg.rcx);
3098     inst.args.push(arg);
3099     bb39.append(inst);
3100     inst = new Inst(Move);
3101     arg = Arg.createTmp(Reg.rcx);
3102     inst.args.push(arg);
3103     arg = Arg.createCallArg(24);
3104     inst.args.push(arg);
3105     bb39.append(inst);
3106     inst = new Inst(Patch);
3107     arg = Arg.createSpecial();
3108     inst.args.push(arg);
3109     arg = Arg.createTmp(Reg.rax);
3110     inst.args.push(arg);
3111     arg = Arg.createTmp(Reg.rax);
3112     inst.args.push(arg);
3113     arg = Arg.createCallArg(8);
3114     inst.args.push(arg);
3115     arg = Arg.createCallArg(16);
3116     inst.args.push(arg);
3117     arg = Arg.createCallArg(24);
3118     inst.args.push(arg);
3119     arg = Arg.createTmp(Reg.r15);
3120     inst.args.push(arg);
3121     arg = Arg.createTmp(Reg.r14);
3122     inst.args.push(arg);
3123     inst.patchHasNonArgEffects = true;
3124     inst.extraEarlyClobberedRegs = new Set();
3125     inst.extraClobberedRegs = new Set();
3126     inst.extraEarlyClobberedRegs.add(Reg.r11);
3127     inst.extraClobberedRegs.add(Reg.rcx);
3128     inst.extraClobberedRegs.add(Reg.rdx);
3129     inst.extraClobberedRegs.add(Reg.rsi);
3130     inst.extraClobberedRegs.add(Reg.rdi);
3131     inst.extraClobberedRegs.add(Reg.r8);
3132     inst.extraClobberedRegs.add(Reg.r9);
3133     inst.extraClobberedRegs.add(Reg.r10);
3134     inst.extraClobberedRegs.add(Reg.r11);
3135     inst.extraClobberedRegs.add(Reg.xmm0);
3136     inst.extraClobberedRegs.add(Reg.xmm1);
3137     inst.extraClobberedRegs.add(Reg.xmm2);
3138     inst.extraClobberedRegs.add(Reg.xmm3);
3139     inst.extraClobberedRegs.add(Reg.xmm4);
3140     inst.extraClobberedRegs.add(Reg.xmm5);
3141     inst.extraClobberedRegs.add(Reg.xmm6);
3142     inst.extraClobberedRegs.add(Reg.xmm7);
3143     inst.extraClobberedRegs.add(Reg.xmm8);
3144     inst.extraClobberedRegs.add(Reg.xmm9);
3145     inst.extraClobberedRegs.add(Reg.xmm10);
3146     inst.extraClobberedRegs.add(Reg.xmm11);
3147     inst.extraClobberedRegs.add(Reg.xmm12);
3148     inst.extraClobberedRegs.add(Reg.xmm13);
3149     inst.extraClobberedRegs.add(Reg.xmm14);
3150     inst.extraClobberedRegs.add(Reg.xmm15);
3151     inst.patchArgData = [];
3152     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3153     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
3154     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3155     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3156     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
3157     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3158     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3159     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3160     bb39.append(inst);
3161     inst = new Inst(Patch);
3162     arg = Arg.createSpecial();
3163     inst.args.push(arg);
3164     arg = Arg.createTmp(Reg.rbx);
3165     inst.args.push(arg);
3166     inst.patchHasNonArgEffects = true;
3167     inst.extraEarlyClobberedRegs = new Set();
3168     inst.extraClobberedRegs = new Set();
3169     inst.patchArgData = [];
3170     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
3171     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
3172     bb39.append(inst);
3173     inst = new Inst(Move);
3174     arg = Arg.createAddr(Reg.rbx, 224);
3175     inst.args.push(arg);
3176     arg = Arg.createTmp(Reg.rax);
3177     inst.args.push(arg);
3178     bb39.append(inst);
3179     inst = new Inst(BranchTest32);
3180     arg = Arg.createResCond(NonZero);
3181     inst.args.push(arg);
3182     arg = Arg.createTmp(Reg.rax);
3183     inst.args.push(arg);
3184     arg = Arg.createTmp(Reg.rax);
3185     inst.args.push(arg);
3186     bb39.append(inst);
3187     bb40.successors.push(new FrequentedBlock(bb42, Normal));
3188     bb40.successors.push(new FrequentedBlock(bb3, Normal));