Make JetStream 2
[WebKit-https.git] / PerformanceTests / JetStream2 / ARES-6 / Air / payload-airjs-ACLj8C.js
1 "use strict";
2 // Generated by Air::dumpAsJS from #ACLj8C in Air.js
3 function createPayloadAirJSACLj8C()
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 slot0 = code.addStackSlot(160, Locked);
23     let slot1 = code.addStackSlot(8, Spill);
24     let slot2 = code.addStackSlot(8, Spill);
25     let slot3 = code.addStackSlot(8, Spill);
26     let slot4 = code.addStackSlot(40, Locked);
27     slot4.setOffsetFromFP(-40);
28     let tmp61 = code.newTmp(GP);
29     let tmp60 = code.newTmp(GP);
30     let tmp59 = code.newTmp(GP);
31     let tmp58 = code.newTmp(GP);
32     let tmp57 = code.newTmp(GP);
33     let tmp56 = code.newTmp(GP);
34     let tmp55 = code.newTmp(GP);
35     let tmp54 = code.newTmp(GP);
36     let tmp53 = code.newTmp(GP);
37     let tmp52 = code.newTmp(GP);
38     let tmp51 = code.newTmp(GP);
39     let tmp50 = code.newTmp(GP);
40     let tmp49 = code.newTmp(GP);
41     let tmp48 = code.newTmp(GP);
42     let tmp47 = code.newTmp(GP);
43     let tmp46 = code.newTmp(GP);
44     let tmp45 = code.newTmp(GP);
45     let tmp44 = code.newTmp(GP);
46     let tmp43 = code.newTmp(GP);
47     let tmp42 = code.newTmp(GP);
48     let tmp41 = code.newTmp(GP);
49     let tmp40 = code.newTmp(GP);
50     let tmp39 = code.newTmp(GP);
51     let tmp38 = code.newTmp(GP);
52     let tmp37 = code.newTmp(GP);
53     let tmp36 = code.newTmp(GP);
54     let tmp35 = code.newTmp(GP);
55     let tmp34 = code.newTmp(GP);
56     let tmp33 = code.newTmp(GP);
57     let tmp32 = code.newTmp(GP);
58     let tmp31 = code.newTmp(GP);
59     let tmp30 = code.newTmp(GP);
60     let tmp29 = code.newTmp(GP);
61     let tmp28 = code.newTmp(GP);
62     let tmp27 = code.newTmp(GP);
63     let tmp26 = code.newTmp(GP);
64     let tmp25 = code.newTmp(GP);
65     let tmp24 = code.newTmp(GP);
66     let tmp23 = code.newTmp(GP);
67     let tmp22 = code.newTmp(GP);
68     let tmp21 = code.newTmp(GP);
69     let tmp20 = code.newTmp(GP);
70     let tmp19 = code.newTmp(GP);
71     let tmp18 = code.newTmp(GP);
72     let tmp17 = code.newTmp(GP);
73     let tmp16 = code.newTmp(GP);
74     let tmp15 = code.newTmp(GP);
75     let tmp14 = code.newTmp(GP);
76     let tmp13 = code.newTmp(GP);
77     let tmp12 = code.newTmp(GP);
78     let tmp11 = code.newTmp(GP);
79     let tmp10 = code.newTmp(GP);
80     let tmp9 = code.newTmp(GP);
81     let tmp8 = code.newTmp(GP);
82     let tmp7 = code.newTmp(GP);
83     let tmp6 = code.newTmp(GP);
84     let tmp5 = code.newTmp(GP);
85     let tmp4 = code.newTmp(GP);
86     let tmp3 = code.newTmp(GP);
87     let tmp2 = code.newTmp(GP);
88     let tmp1 = code.newTmp(GP);
89     let tmp0 = code.newTmp(GP);
90     let inst;
91     let arg;
92     bb0.successors.push(new FrequentedBlock(bb1, Normal));
93     bb0.successors.push(new FrequentedBlock(bb15, Normal));
94     inst = new Inst(Move);
95     arg = Arg.createBigImm(276424800, 1);
96     inst.args.push(arg);
97     arg = Arg.createTmp(Reg.rax);
98     inst.args.push(arg);
99     bb0.append(inst);
100     inst = new Inst(Move);
101     arg = Arg.createTmp(Reg.rax);
102     inst.args.push(arg);
103     arg = Arg.createAddr(Reg.rbp, 16);
104     inst.args.push(arg);
105     bb0.append(inst);
106     inst = new Inst(Patch);
107     arg = Arg.createSpecial();
108     inst.args.push(arg);
109     arg = Arg.createTmp(Reg.rbp);
110     inst.args.push(arg);
111     arg = Arg.createTmp(Reg.rax);
112     inst.args.push(arg);
113     inst.patchHasNonArgEffects = true;
114     inst.extraEarlyClobberedRegs = new Set();
115     inst.extraClobberedRegs = new Set();
116     inst.extraEarlyClobberedRegs.add(Reg.r11);
117     inst.extraClobberedRegs.add(Reg.r11);
118     inst.patchArgData = [];
119     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
120     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
121     inst.patchArgData.push({role: Arg.Scratch, type: GP, width: 64});
122     bb0.append(inst);
123     inst = new Inst(Move);
124     arg = Arg.createAddr(Reg.rbp, 72);
125     inst.args.push(arg);
126     arg = Arg.createTmp(Reg.rdi);
127     inst.args.push(arg);
128     bb0.append(inst);
129     inst = new Inst(Move);
130     arg = Arg.createAddr(Reg.rbp, 64);
131     inst.args.push(arg);
132     arg = Arg.createTmp(Reg.rdx);
133     inst.args.push(arg);
134     bb0.append(inst);
135     inst = new Inst(Move);
136     arg = Arg.createAddr(Reg.rbp, 56);
137     inst.args.push(arg);
138     arg = Arg.createTmp(Reg.rsi);
139     inst.args.push(arg);
140     bb0.append(inst);
141     inst = new Inst(Move);
142     arg = Arg.createAddr(Reg.rbp, 48);
143     inst.args.push(arg);
144     arg = Arg.createTmp(Reg.r8);
145     inst.args.push(arg);
146     bb0.append(inst);
147     inst = new Inst(Move);
148     arg = Arg.createBigImm(2, -65536);
149     inst.args.push(arg);
150     arg = Arg.createTmp(Reg.r15);
151     inst.args.push(arg);
152     bb0.append(inst);
153     inst = new Inst(Patch);
154     arg = Arg.createSpecial();
155     inst.args.push(arg);
156     arg = Arg.createResCond(NonZero);
157     inst.args.push(arg);
158     arg = Arg.createTmp(Reg.r8);
159     inst.args.push(arg);
160     arg = Arg.createTmp(Reg.r15);
161     inst.args.push(arg);
162     arg = Arg.createTmp(Reg.r8);
163     inst.args.push(arg);
164     inst.patchHasNonArgEffects = true;
165     inst.extraEarlyClobberedRegs = new Set();
166     inst.extraClobberedRegs = new Set();
167     inst.patchArgData = [];
168     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
169     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
170     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
171     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
172     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
173     bb0.append(inst);
174     inst = new Inst(Move);
175     arg = Arg.createAddr(Reg.rbp, 24);
176     inst.args.push(arg);
177     arg = Arg.createTmp(Reg.rax);
178     inst.args.push(arg);
179     bb0.append(inst);
180     inst = new Inst(Move);
181     arg = Arg.createAddr(Reg.rax, 16);
182     inst.args.push(arg);
183     arg = Arg.createTmp(Reg.rcx);
184     inst.args.push(arg);
185     bb0.append(inst);
186     inst = new Inst(Move);
187     arg = Arg.createBigImm(0, -65536);
188     inst.args.push(arg);
189     arg = Arg.createTmp(Reg.r14);
190     inst.args.push(arg);
191     bb0.append(inst);
192     inst = new Inst(Patch);
193     arg = Arg.createSpecial();
194     inst.args.push(arg);
195     arg = Arg.createTmp(Reg.rax);
196     inst.args.push(arg);
197     arg = Arg.createTmp(Reg.r8);
198     inst.args.push(arg);
199     arg = Arg.createTmp(Reg.r15);
200     inst.args.push(arg);
201     arg = Arg.createTmp(Reg.r14);
202     inst.args.push(arg);
203     inst.patchHasNonArgEffects = true;
204     inst.extraEarlyClobberedRegs = new Set();
205     inst.extraClobberedRegs = new Set();
206     inst.extraEarlyClobberedRegs.add(Reg.r11);
207     inst.extraClobberedRegs.add(Reg.r11);
208     inst.patchArgData = [];
209     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
210     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
211     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
212     inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64});
213     inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64});
214     bb0.append(inst);
215     inst = new Inst(Patch);
216     arg = Arg.createSpecial();
217     inst.args.push(arg);
218     arg = Arg.createTmp(Reg.rcx);
219     inst.args.push(arg);
220     arg = Arg.createTmp(Reg.rax);
221     inst.args.push(arg);
222     arg = Arg.createTmp(Reg.r8);
223     inst.args.push(arg);
224     inst.patchHasNonArgEffects = true;
225     inst.extraEarlyClobberedRegs = new Set();
226     inst.extraClobberedRegs = new Set();
227     inst.patchArgData = [];
228     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
229     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
230     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
231     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
232     bb0.append(inst);
233     inst = new Inst(Move);
234     arg = Arg.createAddr(Reg.rcx, 32);
235     inst.args.push(arg);
236     arg = Arg.createTmp(Reg.r12);
237     inst.args.push(arg);
238     bb0.append(inst);
239     inst = new Inst(Move);
240     arg = Arg.createAddr(Reg.rcx, 40);
241     inst.args.push(arg);
242     arg = Arg.createTmp(Reg.rbx);
243     inst.args.push(arg);
244     bb0.append(inst);
245     inst = new Inst(Patch);
246     arg = Arg.createSpecial();
247     inst.args.push(arg);
248     arg = Arg.createResCond(NonZero);
249     inst.args.push(arg);
250     arg = Arg.createTmp(Reg.rax);
251     inst.args.push(arg);
252     arg = Arg.createTmp(Reg.r15);
253     inst.args.push(arg);
254     arg = Arg.createTmp(Reg.rax);
255     inst.args.push(arg);
256     arg = Arg.createTmp(Reg.rax);
257     inst.args.push(arg);
258     arg = Arg.createTmp(Reg.rbx);
259     inst.args.push(arg);
260     arg = Arg.createTmp(Reg.rdi);
261     inst.args.push(arg);
262     arg = Arg.createTmp(Reg.rdx);
263     inst.args.push(arg);
264     arg = Arg.createTmp(Reg.rsi);
265     inst.args.push(arg);
266     arg = Arg.createTmp(Reg.r12);
267     inst.args.push(arg);
268     arg = Arg.createTmp(Reg.r8);
269     inst.args.push(arg);
270     inst.patchHasNonArgEffects = true;
271     inst.extraEarlyClobberedRegs = new Set();
272     inst.extraClobberedRegs = new Set();
273     inst.patchArgData = [];
274     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
275     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
276     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
277     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
278     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
279     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
280     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
281     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
282     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
283     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
284     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
285     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
286     bb0.append(inst);
287     inst = new Inst(Move);
288     arg = Arg.createBigImm(276327648, 1);
289     inst.args.push(arg);
290     arg = Arg.createTmp(Reg.rcx);
291     inst.args.push(arg);
292     bb0.append(inst);
293     inst = new Inst(Patch);
294     arg = Arg.createSpecial();
295     inst.args.push(arg);
296     arg = Arg.createRelCond(NotEqual);
297     inst.args.push(arg);
298     arg = Arg.createTmp(Reg.rax);
299     inst.args.push(arg);
300     arg = Arg.createTmp(Reg.rcx);
301     inst.args.push(arg);
302     arg = Arg.createTmp(Reg.rax);
303     inst.args.push(arg);
304     arg = Arg.createTmp(Reg.rax);
305     inst.args.push(arg);
306     arg = Arg.createTmp(Reg.rbx);
307     inst.args.push(arg);
308     arg = Arg.createTmp(Reg.rdi);
309     inst.args.push(arg);
310     arg = Arg.createTmp(Reg.rdx);
311     inst.args.push(arg);
312     arg = Arg.createTmp(Reg.rsi);
313     inst.args.push(arg);
314     arg = Arg.createTmp(Reg.r12);
315     inst.args.push(arg);
316     arg = Arg.createTmp(Reg.r8);
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     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
328     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
329     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
330     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
331     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
332     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
333     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
334     bb0.append(inst);
335     inst = new Inst(Patch);
336     arg = Arg.createSpecial();
337     inst.args.push(arg);
338     arg = Arg.createRelCond(NotEqual);
339     inst.args.push(arg);
340     arg = Arg.createAddr(Reg.r8, 5);
341     inst.args.push(arg);
342     arg = Arg.createImm(21);
343     inst.args.push(arg);
344     arg = Arg.createTmp(Reg.r8);
345     inst.args.push(arg);
346     arg = Arg.createTmp(Reg.rbx);
347     inst.args.push(arg);
348     arg = Arg.createTmp(Reg.rdi);
349     inst.args.push(arg);
350     arg = Arg.createTmp(Reg.rdx);
351     inst.args.push(arg);
352     arg = Arg.createTmp(Reg.rsi);
353     inst.args.push(arg);
354     arg = Arg.createTmp(Reg.r12);
355     inst.args.push(arg);
356     arg = Arg.createTmp(Reg.r8);
357     inst.args.push(arg);
358     inst.patchHasNonArgEffects = true;
359     inst.extraEarlyClobberedRegs = new Set();
360     inst.extraClobberedRegs = new Set();
361     inst.patchArgData = [];
362     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
363     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
364     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
365     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
366     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
367     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
368     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
369     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
370     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
371     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
372     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
373     bb0.append(inst);
374     inst = new Inst(Patch);
375     arg = Arg.createSpecial();
376     inst.args.push(arg);
377     arg = Arg.createResCond(NonZero);
378     inst.args.push(arg);
379     arg = Arg.createTmp(Reg.r12);
380     inst.args.push(arg);
381     arg = Arg.createTmp(Reg.r15);
382     inst.args.push(arg);
383     arg = Arg.createTmp(Reg.r12);
384     inst.args.push(arg);
385     arg = Arg.createTmp(Reg.rbx);
386     inst.args.push(arg);
387     arg = Arg.createTmp(Reg.rdi);
388     inst.args.push(arg);
389     arg = Arg.createTmp(Reg.rdx);
390     inst.args.push(arg);
391     arg = Arg.createTmp(Reg.rsi);
392     inst.args.push(arg);
393     arg = Arg.createTmp(Reg.r12);
394     inst.args.push(arg);
395     arg = Arg.createTmp(Reg.r8);
396     inst.args.push(arg);
397     arg = Arg.createTmp(Reg.r12);
398     inst.args.push(arg);
399     inst.patchHasNonArgEffects = true;
400     inst.extraEarlyClobberedRegs = new Set();
401     inst.extraClobberedRegs = new Set();
402     inst.patchArgData = [];
403     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
404     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
405     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
406     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
407     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
408     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
409     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
410     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
411     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
412     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
413     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
414     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
415     bb0.append(inst);
416     inst = new Inst(Patch);
417     arg = Arg.createSpecial();
418     inst.args.push(arg);
419     arg = Arg.createRelCond(NotEqual);
420     inst.args.push(arg);
421     arg = Arg.createAddr(Reg.r12, 0);
422     inst.args.push(arg);
423     arg = Arg.createImm(372);
424     inst.args.push(arg);
425     arg = Arg.createTmp(Reg.r12);
426     inst.args.push(arg);
427     arg = Arg.createTmp(Reg.rbx);
428     inst.args.push(arg);
429     arg = Arg.createTmp(Reg.rdi);
430     inst.args.push(arg);
431     arg = Arg.createTmp(Reg.rdx);
432     inst.args.push(arg);
433     arg = Arg.createTmp(Reg.rsi);
434     inst.args.push(arg);
435     arg = Arg.createTmp(Reg.r12);
436     inst.args.push(arg);
437     arg = Arg.createTmp(Reg.r8);
438     inst.args.push(arg);
439     arg = Arg.createTmp(Reg.r12);
440     inst.args.push(arg);
441     inst.patchHasNonArgEffects = true;
442     inst.extraEarlyClobberedRegs = new Set();
443     inst.extraClobberedRegs = new Set();
444     inst.patchArgData = [];
445     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
446     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
447     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
448     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
449     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
450     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
451     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
452     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
453     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
454     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
455     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
456     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
457     bb0.append(inst);
458     inst = new Inst(Move);
459     arg = Arg.createAddr(Reg.r12, 8);
460     inst.args.push(arg);
461     arg = Arg.createTmp(Reg.rax);
462     inst.args.push(arg);
463     bb0.append(inst);
464     inst = new Inst(Move);
465     arg = Arg.createAddr(Reg.rax, -40);
466     inst.args.push(arg);
467     arg = Arg.createTmp(Reg.rax);
468     inst.args.push(arg);
469     bb0.append(inst);
470     inst = new Inst(Patch);
471     arg = Arg.createSpecial();
472     inst.args.push(arg);
473     arg = Arg.createResCond(NonZero);
474     inst.args.push(arg);
475     arg = Arg.createTmp(Reg.rbx);
476     inst.args.push(arg);
477     arg = Arg.createTmp(Reg.r15);
478     inst.args.push(arg);
479     arg = Arg.createTmp(Reg.rbx);
480     inst.args.push(arg);
481     arg = Arg.createTmp(Reg.rbx);
482     inst.args.push(arg);
483     arg = Arg.createTmp(Reg.rdi);
484     inst.args.push(arg);
485     arg = Arg.createTmp(Reg.rdx);
486     inst.args.push(arg);
487     arg = Arg.createTmp(Reg.rsi);
488     inst.args.push(arg);
489     arg = Arg.createTmp(Reg.r12);
490     inst.args.push(arg);
491     arg = Arg.createTmp(Reg.r8);
492     inst.args.push(arg);
493     arg = Arg.createTmp(Reg.rax);
494     inst.args.push(arg);
495     arg = Arg.createTmp(Reg.rbx);
496     inst.args.push(arg);
497     arg = Arg.createTmp(Reg.rdi);
498     inst.args.push(arg);
499     arg = Arg.createTmp(Reg.rdx);
500     inst.args.push(arg);
501     arg = Arg.createTmp(Reg.rsi);
502     inst.args.push(arg);
503     arg = Arg.createTmp(Reg.r8);
504     inst.args.push(arg);
505     arg = Arg.createTmp(Reg.r12);
506     inst.args.push(arg);
507     inst.patchHasNonArgEffects = true;
508     inst.extraEarlyClobberedRegs = new Set();
509     inst.extraClobberedRegs = new Set();
510     inst.patchArgData = [];
511     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
512     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
513     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
514     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
515     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
516     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
517     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
518     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
519     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
520     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
521     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
522     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
523     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
524     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
525     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
526     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
527     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
528     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
529     bb0.append(inst);
530     inst = new Inst(Patch);
531     arg = Arg.createSpecial();
532     inst.args.push(arg);
533     arg = Arg.createResCond(NonZero);
534     inst.args.push(arg);
535     arg = Arg.createTmp(Reg.rax);
536     inst.args.push(arg);
537     arg = Arg.createTmp(Reg.r15);
538     inst.args.push(arg);
539     arg = Arg.createTmp(Reg.rax);
540     inst.args.push(arg);
541     arg = Arg.createTmp(Reg.rbx);
542     inst.args.push(arg);
543     arg = Arg.createTmp(Reg.rdi);
544     inst.args.push(arg);
545     arg = Arg.createTmp(Reg.rdx);
546     inst.args.push(arg);
547     arg = Arg.createTmp(Reg.rsi);
548     inst.args.push(arg);
549     arg = Arg.createTmp(Reg.r12);
550     inst.args.push(arg);
551     arg = Arg.createTmp(Reg.r8);
552     inst.args.push(arg);
553     arg = Arg.createTmp(Reg.rax);
554     inst.args.push(arg);
555     arg = Arg.createTmp(Reg.rbx);
556     inst.args.push(arg);
557     arg = Arg.createTmp(Reg.rdi);
558     inst.args.push(arg);
559     arg = Arg.createTmp(Reg.rdx);
560     inst.args.push(arg);
561     arg = Arg.createTmp(Reg.rsi);
562     inst.args.push(arg);
563     arg = Arg.createTmp(Reg.r8);
564     inst.args.push(arg);
565     arg = Arg.createTmp(Reg.r12);
566     inst.args.push(arg);
567     inst.patchHasNonArgEffects = true;
568     inst.extraEarlyClobberedRegs = new Set();
569     inst.extraClobberedRegs = new Set();
570     inst.patchArgData = [];
571     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
572     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
573     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
574     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
575     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
576     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
577     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
578     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
579     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
580     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
581     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
582     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
583     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
584     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
585     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
586     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
587     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
588     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
589     bb0.append(inst);
590     inst = new Inst(Move);
591     arg = Arg.createBigImm(276321024, 1);
592     inst.args.push(arg);
593     arg = Arg.createTmp(Reg.rcx);
594     inst.args.push(arg);
595     bb0.append(inst);
596     inst = new Inst(Patch);
597     arg = Arg.createSpecial();
598     inst.args.push(arg);
599     arg = Arg.createRelCond(NotEqual);
600     inst.args.push(arg);
601     arg = Arg.createTmp(Reg.rax);
602     inst.args.push(arg);
603     arg = Arg.createTmp(Reg.rcx);
604     inst.args.push(arg);
605     arg = Arg.createTmp(Reg.rax);
606     inst.args.push(arg);
607     arg = Arg.createTmp(Reg.rbx);
608     inst.args.push(arg);
609     arg = Arg.createTmp(Reg.rdi);
610     inst.args.push(arg);
611     arg = Arg.createTmp(Reg.rdx);
612     inst.args.push(arg);
613     arg = Arg.createTmp(Reg.rsi);
614     inst.args.push(arg);
615     arg = Arg.createTmp(Reg.r12);
616     inst.args.push(arg);
617     arg = Arg.createTmp(Reg.r8);
618     inst.args.push(arg);
619     arg = Arg.createTmp(Reg.rax);
620     inst.args.push(arg);
621     arg = Arg.createTmp(Reg.rbx);
622     inst.args.push(arg);
623     arg = Arg.createTmp(Reg.rdi);
624     inst.args.push(arg);
625     arg = Arg.createTmp(Reg.rdx);
626     inst.args.push(arg);
627     arg = Arg.createTmp(Reg.rsi);
628     inst.args.push(arg);
629     arg = Arg.createTmp(Reg.r8);
630     inst.args.push(arg);
631     arg = Arg.createTmp(Reg.r12);
632     inst.args.push(arg);
633     inst.patchHasNonArgEffects = true;
634     inst.extraEarlyClobberedRegs = new Set();
635     inst.extraClobberedRegs = new Set();
636     inst.patchArgData = [];
637     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
638     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
639     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
640     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
641     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
642     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
643     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
644     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
645     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
646     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
647     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
648     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
649     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
650     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
651     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
652     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
653     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
654     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
655     bb0.append(inst);
656     inst = new Inst(Move);
657     arg = Arg.createTmp(Reg.rbx);
658     inst.args.push(arg);
659     arg = Arg.createStack(slot0, 72);
660     inst.args.push(arg);
661     bb0.append(inst);
662     inst = new Inst(Move);
663     arg = Arg.createTmp(Reg.rdi);
664     inst.args.push(arg);
665     arg = Arg.createStack(slot0, 64);
666     inst.args.push(arg);
667     bb0.append(inst);
668     inst = new Inst(Move);
669     arg = Arg.createTmp(Reg.rdx);
670     inst.args.push(arg);
671     arg = Arg.createStack(slot0, 56);
672     inst.args.push(arg);
673     bb0.append(inst);
674     inst = new Inst(Move);
675     arg = Arg.createTmp(Reg.rsi);
676     inst.args.push(arg);
677     arg = Arg.createStack(slot0, 48);
678     inst.args.push(arg);
679     bb0.append(inst);
680     inst = new Inst(Move);
681     arg = Arg.createTmp(Reg.r8);
682     inst.args.push(arg);
683     arg = Arg.createStack(slot0, 40);
684     inst.args.push(arg);
685     bb0.append(inst);
686     inst = new Inst(Patch);
687     arg = Arg.createSpecial();
688     inst.args.push(arg);
689     arg = Arg.createTmp(Reg.rax);
690     inst.args.push(arg);
691     arg = Arg.createTmp(Reg.r8);
692     inst.args.push(arg);
693     arg = Arg.createTmp(Reg.r15);
694     inst.args.push(arg);
695     arg = Arg.createTmp(Reg.r14);
696     inst.args.push(arg);
697     inst.patchHasNonArgEffects = true;
698     inst.extraEarlyClobberedRegs = new Set();
699     inst.extraClobberedRegs = new Set();
700     inst.extraEarlyClobberedRegs.add(Reg.r11);
701     inst.extraClobberedRegs.add(Reg.r11);
702     inst.patchArgData = [];
703     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
704     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
705     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
706     inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64});
707     inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64});
708     bb0.append(inst);
709     inst = new Inst(Patch);
710     arg = Arg.createSpecial();
711     inst.args.push(arg);
712     arg = Arg.createTmp(Reg.r12);
713     inst.args.push(arg);
714     arg = Arg.createTmp(Reg.rax);
715     inst.args.push(arg);
716     inst.patchHasNonArgEffects = true;
717     inst.extraEarlyClobberedRegs = new Set();
718     inst.extraClobberedRegs = new Set();
719     inst.patchArgData = [];
720     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
721     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
722     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
723     bb0.append(inst);
724     inst = new Inst(Move);
725     arg = Arg.createTmp(Reg.rax);
726     inst.args.push(arg);
727     arg = Arg.createTmp(Reg.rcx);
728     inst.args.push(arg);
729     bb0.append(inst);
730     inst = new Inst(Xor64);
731     arg = Arg.createImm(6);
732     inst.args.push(arg);
733     arg = Arg.createTmp(Reg.rcx);
734     inst.args.push(arg);
735     bb0.append(inst);
736     inst = new Inst(Move);
737     arg = Arg.createImm(-2);
738     inst.args.push(arg);
739     arg = Arg.createStack(slot2, 0);
740     inst.args.push(arg);
741     bb0.append(inst);
742     inst = new Inst(Move);
743     arg = Arg.createImm(-2);
744     inst.args.push(arg);
745     arg = Arg.createTmp(Reg.r9);
746     inst.args.push(arg);
747     bb0.append(inst);
748     inst = new Inst(Patch);
749     arg = Arg.createSpecial();
750     inst.args.push(arg);
751     arg = Arg.createResCond(NonZero);
752     inst.args.push(arg);
753     arg = Arg.createTmp(Reg.rcx);
754     inst.args.push(arg);
755     arg = Arg.createTmp(Reg.r9);
756     inst.args.push(arg);
757     arg = Arg.createTmp(Reg.rax);
758     inst.args.push(arg);
759     arg = Arg.createTmp(Reg.r12);
760     inst.args.push(arg);
761     arg = Arg.createTmp(Reg.rax);
762     inst.args.push(arg);
763     inst.patchHasNonArgEffects = true;
764     inst.extraEarlyClobberedRegs = new Set();
765     inst.extraClobberedRegs = new Set();
766     inst.patchArgData = [];
767     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
768     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
769     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
770     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
771     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
772     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
773     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
774     bb0.append(inst);
775     inst = new Inst(Move);
776     arg = Arg.createImm(1);
777     inst.args.push(arg);
778     arg = Arg.createStack(slot3, 0);
779     inst.args.push(arg);
780     bb0.append(inst);
781     inst = new Inst(Move);
782     arg = Arg.createImm(1);
783     inst.args.push(arg);
784     arg = Arg.createTmp(Reg.rcx);
785     inst.args.push(arg);
786     bb0.append(inst);
787     inst = new Inst(BranchTest64);
788     arg = Arg.createResCond(NonZero);
789     inst.args.push(arg);
790     arg = Arg.createTmp(Reg.rax);
791     inst.args.push(arg);
792     arg = Arg.createTmp(Reg.rcx);
793     inst.args.push(arg);
794     bb0.append(inst);
795     bb1.successors.push(new FrequentedBlock(bb3, Normal));
796     bb1.successors.push(new FrequentedBlock(bb2, Normal));
797     bb1.predecessors.push(bb0);
798     inst = new Inst(Patch);
799     arg = Arg.createSpecial();
800     inst.args.push(arg);
801     arg = Arg.createRelCond(NotEqual);
802     inst.args.push(arg);
803     arg = Arg.createAddr(Reg.r8, 0);
804     inst.args.push(arg);
805     arg = Arg.createImm(468);
806     inst.args.push(arg);
807     arg = Arg.createTmp(Reg.r8);
808     inst.args.push(arg);
809     arg = Arg.createTmp(Reg.r12);
810     inst.args.push(arg);
811     arg = Arg.createTmp(Reg.rbx);
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     bb1.append(inst);
825     inst = new Inst(Move);
826     arg = Arg.createAddr(Reg.r8, 16);
827     inst.args.push(arg);
828     arg = Arg.createTmp(Reg.rax);
829     inst.args.push(arg);
830     bb1.append(inst);
831     inst = new Inst(Move);
832     arg = Arg.createBigImm(276741160, 1);
833     inst.args.push(arg);
834     arg = Arg.createTmp(Reg.rcx);
835     inst.args.push(arg);
836     bb1.append(inst);
837     inst = new Inst(Move);
838     arg = Arg.createAddr(Reg.rcx, 0);
839     inst.args.push(arg);
840     arg = Arg.createTmp(Reg.rcx);
841     inst.args.push(arg);
842     bb1.append(inst);
843     inst = new Inst(Branch64);
844     arg = Arg.createRelCond(Equal);
845     inst.args.push(arg);
846     arg = Arg.createAddr(Reg.rax, 8);
847     inst.args.push(arg);
848     arg = Arg.createTmp(Reg.rcx);
849     inst.args.push(arg);
850     bb1.append(inst);
851     bb2.predecessors.push(bb1);
852     inst = new Inst(Patch);
853     arg = Arg.createSpecial();
854     inst.args.push(arg);
855     arg = Arg.createTmp(Reg.r12);
856     inst.args.push(arg);
857     arg = Arg.createTmp(Reg.rbx);
858     inst.args.push(arg);
859     arg = Arg.createTmp(Reg.r8);
860     inst.args.push(arg);
861     inst.patchHasNonArgEffects = true;
862     inst.extraEarlyClobberedRegs = new Set();
863     inst.extraClobberedRegs = new Set();
864     inst.patchArgData = [];
865     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
866     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
867     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
868     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
869     bb2.append(inst);
870     inst = new Inst(Oops);
871     bb2.append(inst);
872     bb3.successors.push(new FrequentedBlock(bb4, Normal));
873     bb3.successors.push(new FrequentedBlock(bb7, Normal));
874     bb3.predecessors.push(bb1);
875     inst = new Inst(Move);
876     arg = Arg.createAddr(Reg.r8, 24);
877     inst.args.push(arg);
878     arg = Arg.createTmp(Reg.r13);
879     inst.args.push(arg);
880     bb3.append(inst);
881     inst = new Inst(Patch);
882     arg = Arg.createSpecial();
883     inst.args.push(arg);
884     arg = Arg.createRelCond(NotEqual);
885     inst.args.push(arg);
886     arg = Arg.createAddr(Reg.rbx, 5);
887     inst.args.push(arg);
888     arg = Arg.createImm(23);
889     inst.args.push(arg);
890     arg = Arg.createTmp(Reg.rbx);
891     inst.args.push(arg);
892     arg = Arg.createTmp(Reg.r12);
893     inst.args.push(arg);
894     arg = Arg.createTmp(Reg.rbx);
895     inst.args.push(arg);
896     arg = Arg.createTmp(Reg.rdi);
897     inst.args.push(arg);
898     arg = Arg.createTmp(Reg.rdx);
899     inst.args.push(arg);
900     arg = Arg.createTmp(Reg.rsi);
901     inst.args.push(arg);
902     arg = Arg.createTmp(Reg.r13);
903     inst.args.push(arg);
904     inst.patchHasNonArgEffects = true;
905     inst.extraEarlyClobberedRegs = new Set();
906     inst.extraClobberedRegs = new Set();
907     inst.patchArgData = [];
908     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
909     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
910     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
911     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
912     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
913     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
914     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
915     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
916     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
917     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
918     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
919     bb3.append(inst);
920     inst = new Inst(Move);
921     arg = Arg.createBigImm(275739616, 1);
922     inst.args.push(arg);
923     arg = Arg.createTmp(Reg.rax);
924     inst.args.push(arg);
925     bb3.append(inst);
926     inst = new Inst(Branch64);
927     arg = Arg.createRelCond(Equal);
928     inst.args.push(arg);
929     arg = Arg.createAddr(Reg.rbx, 24);
930     inst.args.push(arg);
931     arg = Arg.createTmp(Reg.rax);
932     inst.args.push(arg);
933     bb3.append(inst);
934     bb4.successors.push(new FrequentedBlock(bb5, Normal));
935     bb4.successors.push(new FrequentedBlock(bb6, Normal));
936     bb4.predecessors.push(bb3);
937     inst = new Inst(Move);
938     arg = Arg.createTmp(Reg.rbx);
939     inst.args.push(arg);
940     arg = Arg.createStack(slot0, 0);
941     inst.args.push(arg);
942     bb4.append(inst);
943     inst = new Inst(Move);
944     arg = Arg.createAddr(Reg.rbx, 16);
945     inst.args.push(arg);
946     arg = Arg.createTmp(Reg.rax);
947     inst.args.push(arg);
948     bb4.append(inst);
949     inst = new Inst(Move);
950     arg = Arg.createAddr(Reg.rax, 32);
951     inst.args.push(arg);
952     arg = Arg.createTmp(Reg.rcx);
953     inst.args.push(arg);
954     bb4.append(inst);
955     inst = new Inst(Move);
956     arg = Arg.createTmp(Reg.rcx);
957     inst.args.push(arg);
958     arg = Arg.createStack(slot1, 0);
959     inst.args.push(arg);
960     bb4.append(inst);
961     inst = new Inst(Patch);
962     arg = Arg.createSpecial();
963     inst.args.push(arg);
964     arg = Arg.createResCond(NonZero);
965     inst.args.push(arg);
966     arg = Arg.createTmp(Reg.rcx);
967     inst.args.push(arg);
968     arg = Arg.createTmp(Reg.r15);
969     inst.args.push(arg);
970     arg = Arg.createTmp(Reg.rcx);
971     inst.args.push(arg);
972     arg = Arg.createTmp(Reg.r12);
973     inst.args.push(arg);
974     arg = Arg.createTmp(Reg.rbx);
975     inst.args.push(arg);
976     arg = Arg.createTmp(Reg.rdi);
977     inst.args.push(arg);
978     arg = Arg.createTmp(Reg.rdx);
979     inst.args.push(arg);
980     arg = Arg.createTmp(Reg.rsi);
981     inst.args.push(arg);
982     arg = Arg.createTmp(Reg.r13);
983     inst.args.push(arg);
984     arg = Arg.createTmp(Reg.rcx);
985     inst.args.push(arg);
986     arg = Arg.createTmp(Reg.rax);
987     inst.args.push(arg);
988     inst.patchHasNonArgEffects = true;
989     inst.extraEarlyClobberedRegs = new Set();
990     inst.extraClobberedRegs = new Set();
991     inst.patchArgData = [];
992     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
993     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
994     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
995     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
996     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
997     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
998     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
999     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1000     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1001     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1002     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1003     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1004     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1005     bb4.append(inst);
1006     inst = new Inst(Move);
1007     arg = Arg.createTmp(Reg.rdi);
1008     inst.args.push(arg);
1009     arg = Arg.createStack(slot0, 32);
1010     inst.args.push(arg);
1011     bb4.append(inst);
1012     inst = new Inst(Move);
1013     arg = Arg.createTmp(Reg.rdx);
1014     inst.args.push(arg);
1015     arg = Arg.createStack(slot0, 24);
1016     inst.args.push(arg);
1017     bb4.append(inst);
1018     inst = new Inst(Move);
1019     arg = Arg.createTmp(Reg.rsi);
1020     inst.args.push(arg);
1021     arg = Arg.createStack(slot0, 16);
1022     inst.args.push(arg);
1023     bb4.append(inst);
1024     inst = new Inst(Move);
1025     arg = Arg.createTmp(Reg.r13);
1026     inst.args.push(arg);
1027     arg = Arg.createStack(slot0, 8);
1028     inst.args.push(arg);
1029     bb4.append(inst);
1030     inst = new Inst(Move);
1031     arg = Arg.createBigImm(276645872, 1);
1032     inst.args.push(arg);
1033     arg = Arg.createTmp(Reg.rax);
1034     inst.args.push(arg);
1035     bb4.append(inst);
1036     inst = new Inst(Move);
1037     arg = Arg.createBigImm(276646496, 1);
1038     inst.args.push(arg);
1039     arg = Arg.createTmp(Reg.rcx);
1040     inst.args.push(arg);
1041     bb4.append(inst);
1042     inst = new Inst(Move);
1043     arg = Arg.createTmp(Reg.rax);
1044     inst.args.push(arg);
1045     arg = Arg.createCallArg(8);
1046     inst.args.push(arg);
1047     bb4.append(inst);
1048     inst = new Inst(Move32);
1049     arg = Arg.createImm(2);
1050     inst.args.push(arg);
1051     arg = Arg.createCallArg(16);
1052     inst.args.push(arg);
1053     bb4.append(inst);
1054     inst = new Inst(Move);
1055     arg = Arg.createTmp(Reg.rcx);
1056     inst.args.push(arg);
1057     arg = Arg.createCallArg(24);
1058     inst.args.push(arg);
1059     bb4.append(inst);
1060     inst = new Inst(Move);
1061     arg = Arg.createTmp(Reg.rsi);
1062     inst.args.push(arg);
1063     arg = Arg.createCallArg(32);
1064     inst.args.push(arg);
1065     bb4.append(inst);
1066     inst = new Inst(Patch);
1067     arg = Arg.createSpecial();
1068     inst.args.push(arg);
1069     arg = Arg.createTmp(Reg.rax);
1070     inst.args.push(arg);
1071     arg = Arg.createTmp(Reg.rax);
1072     inst.args.push(arg);
1073     arg = Arg.createCallArg(8);
1074     inst.args.push(arg);
1075     arg = Arg.createCallArg(16);
1076     inst.args.push(arg);
1077     arg = Arg.createCallArg(24);
1078     inst.args.push(arg);
1079     arg = Arg.createCallArg(32);
1080     inst.args.push(arg);
1081     arg = Arg.createTmp(Reg.r15);
1082     inst.args.push(arg);
1083     arg = Arg.createTmp(Reg.r14);
1084     inst.args.push(arg);
1085     inst.patchHasNonArgEffects = true;
1086     inst.extraEarlyClobberedRegs = new Set();
1087     inst.extraClobberedRegs = new Set();
1088     inst.extraEarlyClobberedRegs.add(Reg.r11);
1089     inst.extraClobberedRegs.add(Reg.rcx);
1090     inst.extraClobberedRegs.add(Reg.rdx);
1091     inst.extraClobberedRegs.add(Reg.rsi);
1092     inst.extraClobberedRegs.add(Reg.rdi);
1093     inst.extraClobberedRegs.add(Reg.r8);
1094     inst.extraClobberedRegs.add(Reg.r9);
1095     inst.extraClobberedRegs.add(Reg.r10);
1096     inst.extraClobberedRegs.add(Reg.r11);
1097     inst.extraClobberedRegs.add(Reg.xmm0);
1098     inst.extraClobberedRegs.add(Reg.xmm1);
1099     inst.extraClobberedRegs.add(Reg.xmm2);
1100     inst.extraClobberedRegs.add(Reg.xmm3);
1101     inst.extraClobberedRegs.add(Reg.xmm4);
1102     inst.extraClobberedRegs.add(Reg.xmm5);
1103     inst.extraClobberedRegs.add(Reg.xmm6);
1104     inst.extraClobberedRegs.add(Reg.xmm7);
1105     inst.extraClobberedRegs.add(Reg.xmm8);
1106     inst.extraClobberedRegs.add(Reg.xmm9);
1107     inst.extraClobberedRegs.add(Reg.xmm10);
1108     inst.extraClobberedRegs.add(Reg.xmm11);
1109     inst.extraClobberedRegs.add(Reg.xmm12);
1110     inst.extraClobberedRegs.add(Reg.xmm13);
1111     inst.extraClobberedRegs.add(Reg.xmm14);
1112     inst.extraClobberedRegs.add(Reg.xmm15);
1113     inst.patchArgData = [];
1114     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1115     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
1116     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1117     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1118     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1119     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1120     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1121     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1122     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1123     bb4.append(inst);
1124     inst = new Inst(Patch);
1125     arg = Arg.createSpecial();
1126     inst.args.push(arg);
1127     arg = Arg.createTmp(Reg.r12);
1128     inst.args.push(arg);
1129     arg = Arg.createTmp(Reg.rbx);
1130     inst.args.push(arg);
1131     arg = Arg.createStack(slot1, 0);
1132     inst.args.push(arg);
1133     arg = Arg.createTmp(Reg.rax);
1134     inst.args.push(arg);
1135     inst.patchHasNonArgEffects = true;
1136     inst.extraEarlyClobberedRegs = new Set();
1137     inst.extraClobberedRegs = new Set();
1138     inst.patchArgData = [];
1139     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1140     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1141     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1142     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1143     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1144     bb4.append(inst);
1145     inst = new Inst(Move);
1146     arg = Arg.createTmp(Reg.rax);
1147     inst.args.push(arg);
1148     arg = Arg.createTmp(Reg.rcx);
1149     inst.args.push(arg);
1150     bb4.append(inst);
1151     inst = new Inst(Xor64);
1152     arg = Arg.createImm(6);
1153     inst.args.push(arg);
1154     arg = Arg.createTmp(Reg.rcx);
1155     inst.args.push(arg);
1156     bb4.append(inst);
1157     inst = new Inst(Move);
1158     arg = Arg.createImm(-2);
1159     inst.args.push(arg);
1160     arg = Arg.createTmp(Reg.rdx);
1161     inst.args.push(arg);
1162     bb4.append(inst);
1163     inst = new Inst(Patch);
1164     arg = Arg.createSpecial();
1165     inst.args.push(arg);
1166     arg = Arg.createResCond(NonZero);
1167     inst.args.push(arg);
1168     arg = Arg.createTmp(Reg.rcx);
1169     inst.args.push(arg);
1170     arg = Arg.createTmp(Reg.rdx);
1171     inst.args.push(arg);
1172     arg = Arg.createTmp(Reg.rax);
1173     inst.args.push(arg);
1174     arg = Arg.createTmp(Reg.r12);
1175     inst.args.push(arg);
1176     arg = Arg.createTmp(Reg.rbx);
1177     inst.args.push(arg);
1178     arg = Arg.createStack(slot1, 0);
1179     inst.args.push(arg);
1180     arg = Arg.createTmp(Reg.rax);
1181     inst.args.push(arg);
1182     inst.patchHasNonArgEffects = true;
1183     inst.extraEarlyClobberedRegs = new Set();
1184     inst.extraClobberedRegs = new Set();
1185     inst.patchArgData = [];
1186     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1187     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1188     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1189     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
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: 64});
1194     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1195     bb4.append(inst);
1196     inst = new Inst(Move);
1197     arg = Arg.createImm(1);
1198     inst.args.push(arg);
1199     arg = Arg.createTmp(Reg.rcx);
1200     inst.args.push(arg);
1201     bb4.append(inst);
1202     inst = new Inst(BranchTest64);
1203     arg = Arg.createResCond(NonZero);
1204     inst.args.push(arg);
1205     arg = Arg.createTmp(Reg.rax);
1206     inst.args.push(arg);
1207     arg = Arg.createTmp(Reg.rcx);
1208     inst.args.push(arg);
1209     bb4.append(inst);
1210     bb5.successors.push(new FrequentedBlock(bb8, Normal));
1211     bb5.predecessors.push(bb4);
1212     inst = new Inst(Move);
1213     arg = Arg.createStack(slot1, 0);
1214     inst.args.push(arg);
1215     arg = Arg.createTmp(Reg.rax);
1216     inst.args.push(arg);
1217     bb5.append(inst);
1218     inst = new Inst(Patch);
1219     arg = Arg.createSpecial();
1220     inst.args.push(arg);
1221     arg = Arg.createTmp(Reg.rcx);
1222     inst.args.push(arg);
1223     arg = Arg.createTmp(Reg.rax);
1224     inst.args.push(arg);
1225     arg = Arg.createTmp(Reg.r15);
1226     inst.args.push(arg);
1227     arg = Arg.createTmp(Reg.r14);
1228     inst.args.push(arg);
1229     inst.patchHasNonArgEffects = true;
1230     inst.extraEarlyClobberedRegs = new Set();
1231     inst.extraClobberedRegs = new Set();
1232     inst.extraEarlyClobberedRegs.add(Reg.r11);
1233     inst.extraClobberedRegs.add(Reg.r11);
1234     inst.patchArgData = [];
1235     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1236     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
1237     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1238     inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64});
1239     inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64});
1240     bb5.append(inst);
1241     inst = new Inst(Patch);
1242     arg = Arg.createSpecial();
1243     inst.args.push(arg);
1244     arg = Arg.createTmp(Reg.r12);
1245     inst.args.push(arg);
1246     arg = Arg.createTmp(Reg.rbx);
1247     inst.args.push(arg);
1248     arg = Arg.createTmp(Reg.rax);
1249     inst.args.push(arg);
1250     arg = Arg.createTmp(Reg.rcx);
1251     inst.args.push(arg);
1252     inst.patchHasNonArgEffects = true;
1253     inst.extraEarlyClobberedRegs = new Set();
1254     inst.extraClobberedRegs = new Set();
1255     inst.patchArgData = [];
1256     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1257     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1258     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1259     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1260     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1261     bb5.append(inst);
1262     inst = new Inst(Patch);
1263     arg = Arg.createSpecial();
1264     inst.args.push(arg);
1265     arg = Arg.createResCond(NonZero);
1266     inst.args.push(arg);
1267     arg = Arg.createTmp(Reg.rcx);
1268     inst.args.push(arg);
1269     arg = Arg.createTmp(Reg.r15);
1270     inst.args.push(arg);
1271     arg = Arg.createTmp(Reg.rcx);
1272     inst.args.push(arg);
1273     arg = Arg.createTmp(Reg.r12);
1274     inst.args.push(arg);
1275     arg = Arg.createTmp(Reg.rbx);
1276     inst.args.push(arg);
1277     arg = Arg.createTmp(Reg.rax);
1278     inst.args.push(arg);
1279     arg = Arg.createTmp(Reg.rcx);
1280     inst.args.push(arg);
1281     inst.patchHasNonArgEffects = true;
1282     inst.extraEarlyClobberedRegs = new Set();
1283     inst.extraClobberedRegs = new Set();
1284     inst.patchArgData = [];
1285     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1286     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1287     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1288     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1289     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1290     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1291     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1292     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1293     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1294     bb5.append(inst);
1295     inst = new Inst(Patch);
1296     arg = Arg.createSpecial();
1297     inst.args.push(arg);
1298     arg = Arg.createRelCond(NotEqual);
1299     inst.args.push(arg);
1300     arg = Arg.createAddr(Reg.rcx, 0);
1301     inst.args.push(arg);
1302     arg = Arg.createImm(419);
1303     inst.args.push(arg);
1304     arg = Arg.createTmp(Reg.rcx);
1305     inst.args.push(arg);
1306     arg = Arg.createTmp(Reg.r12);
1307     inst.args.push(arg);
1308     arg = Arg.createTmp(Reg.rbx);
1309     inst.args.push(arg);
1310     arg = Arg.createTmp(Reg.rax);
1311     inst.args.push(arg);
1312     arg = Arg.createTmp(Reg.rcx);
1313     inst.args.push(arg);
1314     inst.patchHasNonArgEffects = true;
1315     inst.extraEarlyClobberedRegs = new Set();
1316     inst.extraClobberedRegs = new Set();
1317     inst.patchArgData = [];
1318     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1319     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1320     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1321     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1322     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1323     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1324     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1325     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1326     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1327     bb5.append(inst);
1328     inst = new Inst(Move);
1329     arg = Arg.createBigImm(276168608, 1);
1330     inst.args.push(arg);
1331     arg = Arg.createTmp(Reg.rax);
1332     inst.args.push(arg);
1333     bb5.append(inst);
1334     inst = new Inst(Move);
1335     arg = Arg.createTmp(Reg.rax);
1336     inst.args.push(arg);
1337     arg = Arg.createCallArg(8);
1338     inst.args.push(arg);
1339     bb5.append(inst);
1340     inst = new Inst(Move32);
1341     arg = Arg.createImm(2);
1342     inst.args.push(arg);
1343     arg = Arg.createCallArg(16);
1344     inst.args.push(arg);
1345     bb5.append(inst);
1346     inst = new Inst(Move);
1347     arg = Arg.createTmp(Reg.rcx);
1348     inst.args.push(arg);
1349     arg = Arg.createCallArg(24);
1350     inst.args.push(arg);
1351     bb5.append(inst);
1352     inst = new Inst(Move);
1353     arg = Arg.createTmp(Reg.r13);
1354     inst.args.push(arg);
1355     arg = Arg.createCallArg(32);
1356     inst.args.push(arg);
1357     bb5.append(inst);
1358     inst = new Inst(Patch);
1359     arg = Arg.createSpecial();
1360     inst.args.push(arg);
1361     arg = Arg.createTmp(Reg.rax);
1362     inst.args.push(arg);
1363     arg = Arg.createTmp(Reg.rax);
1364     inst.args.push(arg);
1365     arg = Arg.createCallArg(8);
1366     inst.args.push(arg);
1367     arg = Arg.createCallArg(16);
1368     inst.args.push(arg);
1369     arg = Arg.createCallArg(24);
1370     inst.args.push(arg);
1371     arg = Arg.createCallArg(32);
1372     inst.args.push(arg);
1373     arg = Arg.createTmp(Reg.r15);
1374     inst.args.push(arg);
1375     arg = Arg.createTmp(Reg.r14);
1376     inst.args.push(arg);
1377     inst.patchHasNonArgEffects = true;
1378     inst.extraEarlyClobberedRegs = new Set();
1379     inst.extraClobberedRegs = new Set();
1380     inst.extraEarlyClobberedRegs.add(Reg.r11);
1381     inst.extraClobberedRegs.add(Reg.rcx);
1382     inst.extraClobberedRegs.add(Reg.rdx);
1383     inst.extraClobberedRegs.add(Reg.rsi);
1384     inst.extraClobberedRegs.add(Reg.rdi);
1385     inst.extraClobberedRegs.add(Reg.r8);
1386     inst.extraClobberedRegs.add(Reg.r9);
1387     inst.extraClobberedRegs.add(Reg.r10);
1388     inst.extraClobberedRegs.add(Reg.r11);
1389     inst.extraClobberedRegs.add(Reg.xmm0);
1390     inst.extraClobberedRegs.add(Reg.xmm1);
1391     inst.extraClobberedRegs.add(Reg.xmm2);
1392     inst.extraClobberedRegs.add(Reg.xmm3);
1393     inst.extraClobberedRegs.add(Reg.xmm4);
1394     inst.extraClobberedRegs.add(Reg.xmm5);
1395     inst.extraClobberedRegs.add(Reg.xmm6);
1396     inst.extraClobberedRegs.add(Reg.xmm7);
1397     inst.extraClobberedRegs.add(Reg.xmm8);
1398     inst.extraClobberedRegs.add(Reg.xmm9);
1399     inst.extraClobberedRegs.add(Reg.xmm10);
1400     inst.extraClobberedRegs.add(Reg.xmm11);
1401     inst.extraClobberedRegs.add(Reg.xmm12);
1402     inst.extraClobberedRegs.add(Reg.xmm13);
1403     inst.extraClobberedRegs.add(Reg.xmm14);
1404     inst.extraClobberedRegs.add(Reg.xmm15);
1405     inst.patchArgData = [];
1406     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1407     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
1408     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1409     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1410     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1411     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1412     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1413     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1414     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1415     bb5.append(inst);
1416     inst = new Inst(Patch);
1417     arg = Arg.createSpecial();
1418     inst.args.push(arg);
1419     arg = Arg.createTmp(Reg.r12);
1420     inst.args.push(arg);
1421     arg = Arg.createTmp(Reg.rbx);
1422     inst.args.push(arg);
1423     arg = Arg.createStack(slot1, 0);
1424     inst.args.push(arg);
1425     inst.patchHasNonArgEffects = true;
1426     inst.extraEarlyClobberedRegs = new Set();
1427     inst.extraClobberedRegs = new Set();
1428     inst.patchArgData = [];
1429     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1430     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1431     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1432     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1433     bb5.append(inst);
1434     inst = new Inst(Move);
1435     arg = Arg.createImm(10);
1436     inst.args.push(arg);
1437     arg = Arg.createTmp(Reg.rax);
1438     inst.args.push(arg);
1439     bb5.append(inst);
1440     inst = new Inst(Jump);
1441     bb5.append(inst);
1442     bb6.successors.push(new FrequentedBlock(bb8, Normal));
1443     bb6.predecessors.push(bb4);
1444     inst = new Inst(Move);
1445     arg = Arg.createImm(10);
1446     inst.args.push(arg);
1447     arg = Arg.createTmp(Reg.rax);
1448     inst.args.push(arg);
1449     bb6.append(inst);
1450     inst = new Inst(Jump);
1451     bb6.append(inst);
1452     bb7.successors.push(new FrequentedBlock(bb12, Normal));
1453     bb7.successors.push(new FrequentedBlock(bb9, Normal));
1454     bb7.predecessors.push(bb3);
1455     inst = new Inst(Move);
1456     arg = Arg.createTmp(Reg.rbx);
1457     inst.args.push(arg);
1458     arg = Arg.createTmp(Reg.rax);
1459     inst.args.push(arg);
1460     bb7.append(inst);
1461     inst = new Inst(Move);
1462     arg = Arg.createTmp(Reg.rbx);
1463     inst.args.push(arg);
1464     arg = Arg.createCallArg(8);
1465     inst.args.push(arg);
1466     bb7.append(inst);
1467     inst = new Inst(Move32);
1468     arg = Arg.createImm(5);
1469     inst.args.push(arg);
1470     arg = Arg.createCallArg(16);
1471     inst.args.push(arg);
1472     bb7.append(inst);
1473     inst = new Inst(Move);
1474     arg = Arg.createImm(10);
1475     inst.args.push(arg);
1476     arg = Arg.createCallArg(24);
1477     inst.args.push(arg);
1478     bb7.append(inst);
1479     inst = new Inst(Move);
1480     arg = Arg.createTmp(Reg.r13);
1481     inst.args.push(arg);
1482     arg = Arg.createCallArg(32);
1483     inst.args.push(arg);
1484     bb7.append(inst);
1485     inst = new Inst(Move);
1486     arg = Arg.createTmp(Reg.rsi);
1487     inst.args.push(arg);
1488     arg = Arg.createCallArg(40);
1489     inst.args.push(arg);
1490     bb7.append(inst);
1491     inst = new Inst(Move);
1492     arg = Arg.createTmp(Reg.rdx);
1493     inst.args.push(arg);
1494     arg = Arg.createCallArg(48);
1495     inst.args.push(arg);
1496     bb7.append(inst);
1497     inst = new Inst(Move);
1498     arg = Arg.createTmp(Reg.rdi);
1499     inst.args.push(arg);
1500     arg = Arg.createCallArg(56);
1501     inst.args.push(arg);
1502     bb7.append(inst);
1503     inst = new Inst(Patch);
1504     arg = Arg.createSpecial();
1505     inst.args.push(arg);
1506     arg = Arg.createTmp(Reg.rax);
1507     inst.args.push(arg);
1508     arg = Arg.createTmp(Reg.rax);
1509     inst.args.push(arg);
1510     arg = Arg.createCallArg(8);
1511     inst.args.push(arg);
1512     arg = Arg.createCallArg(16);
1513     inst.args.push(arg);
1514     arg = Arg.createCallArg(24);
1515     inst.args.push(arg);
1516     arg = Arg.createCallArg(32);
1517     inst.args.push(arg);
1518     arg = Arg.createCallArg(40);
1519     inst.args.push(arg);
1520     arg = Arg.createCallArg(48);
1521     inst.args.push(arg);
1522     arg = Arg.createCallArg(56);
1523     inst.args.push(arg);
1524     arg = Arg.createTmp(Reg.r15);
1525     inst.args.push(arg);
1526     arg = Arg.createTmp(Reg.r14);
1527     inst.args.push(arg);
1528     inst.patchHasNonArgEffects = true;
1529     inst.extraEarlyClobberedRegs = new Set();
1530     inst.extraClobberedRegs = new Set();
1531     inst.extraEarlyClobberedRegs.add(Reg.r11);
1532     inst.extraClobberedRegs.add(Reg.rcx);
1533     inst.extraClobberedRegs.add(Reg.rdx);
1534     inst.extraClobberedRegs.add(Reg.rsi);
1535     inst.extraClobberedRegs.add(Reg.rdi);
1536     inst.extraClobberedRegs.add(Reg.r8);
1537     inst.extraClobberedRegs.add(Reg.r9);
1538     inst.extraClobberedRegs.add(Reg.r10);
1539     inst.extraClobberedRegs.add(Reg.r11);
1540     inst.extraClobberedRegs.add(Reg.xmm0);
1541     inst.extraClobberedRegs.add(Reg.xmm1);
1542     inst.extraClobberedRegs.add(Reg.xmm2);
1543     inst.extraClobberedRegs.add(Reg.xmm3);
1544     inst.extraClobberedRegs.add(Reg.xmm4);
1545     inst.extraClobberedRegs.add(Reg.xmm5);
1546     inst.extraClobberedRegs.add(Reg.xmm6);
1547     inst.extraClobberedRegs.add(Reg.xmm7);
1548     inst.extraClobberedRegs.add(Reg.xmm8);
1549     inst.extraClobberedRegs.add(Reg.xmm9);
1550     inst.extraClobberedRegs.add(Reg.xmm10);
1551     inst.extraClobberedRegs.add(Reg.xmm11);
1552     inst.extraClobberedRegs.add(Reg.xmm12);
1553     inst.extraClobberedRegs.add(Reg.xmm13);
1554     inst.extraClobberedRegs.add(Reg.xmm14);
1555     inst.extraClobberedRegs.add(Reg.xmm15);
1556     inst.patchArgData = [];
1557     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1558     inst.patchArgData.push({role: Arg.Def, type: GP, width: 64});
1559     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1560     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1561     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1562     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1563     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1564     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1565     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1566     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1567     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1568     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1569     bb7.append(inst);
1570     inst = new Inst(Patch);
1571     arg = Arg.createSpecial();
1572     inst.args.push(arg);
1573     arg = Arg.createTmp(Reg.r12);
1574     inst.args.push(arg);
1575     arg = Arg.createTmp(Reg.rax);
1576     inst.args.push(arg);
1577     inst.patchHasNonArgEffects = true;
1578     inst.extraEarlyClobberedRegs = new Set();
1579     inst.extraClobberedRegs = new Set();
1580     inst.patchArgData = [];
1581     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1582     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1583     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1584     bb7.append(inst);
1585     inst = new Inst(BranchTest64);
1586     arg = Arg.createResCond(NonZero);
1587     inst.args.push(arg);
1588     arg = Arg.createTmp(Reg.rax);
1589     inst.args.push(arg);
1590     arg = Arg.createTmp(Reg.r15);
1591     inst.args.push(arg);
1592     bb7.append(inst);
1593     bb8.successors.push(new FrequentedBlock(bb13, Normal));
1594     bb8.successors.push(new FrequentedBlock(bb10, Normal));
1595     bb8.predecessors.push(bb6);
1596     bb8.predecessors.push(bb5);
1597     inst = new Inst(BranchTest64);
1598     arg = Arg.createResCond(NonZero);
1599     inst.args.push(arg);
1600     arg = Arg.createTmp(Reg.rax);
1601     inst.args.push(arg);
1602     arg = Arg.createTmp(Reg.r15);
1603     inst.args.push(arg);
1604     bb8.append(inst);
1605     bb9.successors.push(new FrequentedBlock(bb11, Normal));
1606     bb9.predecessors.push(bb7);
1607     inst = new Inst(Jump);
1608     bb9.append(inst);
1609     bb10.successors.push(new FrequentedBlock(bb11, Normal));
1610     bb10.predecessors.push(bb8);
1611     inst = new Inst(Jump);
1612     bb10.append(inst);
1613     bb11.predecessors.push(bb9);
1614     bb11.predecessors.push(bb10);
1615     inst = new Inst(Patch);
1616     arg = Arg.createSpecial();
1617     inst.args.push(arg);
1618     arg = Arg.createRelCond(Below);
1619     inst.args.push(arg);
1620     arg = Arg.createAddr(Reg.rax, 5);
1621     inst.args.push(arg);
1622     arg = Arg.createImm(20);
1623     inst.args.push(arg);
1624     arg = Arg.createTmp(Reg.rax);
1625     inst.args.push(arg);
1626     arg = Arg.createTmp(Reg.r12);
1627     inst.args.push(arg);
1628     arg = Arg.createTmp(Reg.rax);
1629     inst.args.push(arg);
1630     inst.patchHasNonArgEffects = true;
1631     inst.extraEarlyClobberedRegs = new Set();
1632     inst.extraClobberedRegs = new Set();
1633     inst.patchArgData = [];
1634     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1635     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1636     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
1637     inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
1638     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1639     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1640     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1641     bb11.append(inst);
1642     inst = new Inst(Patch);
1643     arg = Arg.createSpecial();
1644     inst.args.push(arg);
1645     arg = Arg.createTmp(Reg.r12);
1646     inst.args.push(arg);
1647     arg = Arg.createTmp(Reg.rax);
1648     inst.args.push(arg);
1649     inst.patchHasNonArgEffects = true;
1650     inst.extraEarlyClobberedRegs = new Set();
1651     inst.extraClobberedRegs = new Set();
1652     inst.patchArgData = [];
1653     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1654     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1655     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1656     bb11.append(inst);
1657     inst = new Inst(Oops);
1658     bb11.append(inst);
1659     bb12.successors.push(new FrequentedBlock(bb14, Normal));
1660     bb12.predecessors.push(bb7);
1661     inst = new Inst(Jump);
1662     bb12.append(inst);
1663     bb13.successors.push(new FrequentedBlock(bb14, Normal));
1664     bb13.predecessors.push(bb8);
1665     inst = new Inst(Jump);
1666     bb13.append(inst);
1667     bb14.predecessors.push(bb12);
1668     bb14.predecessors.push(bb13);
1669     inst = new Inst(Move);
1670     arg = Arg.createTmp(Reg.rax);
1671     inst.args.push(arg);
1672     arg = Arg.createTmp(Reg.rcx);
1673     inst.args.push(arg);
1674     bb14.append(inst);
1675     inst = new Inst(And64);
1676     arg = Arg.createImm(-9);
1677     inst.args.push(arg);
1678     arg = Arg.createTmp(Reg.rcx);
1679     inst.args.push(arg);
1680     bb14.append(inst);
1681     inst = new Inst(Patch);
1682     arg = Arg.createSpecial();
1683     inst.args.push(arg);
1684     arg = Arg.createRelCond(NotEqual);
1685     inst.args.push(arg);
1686     arg = Arg.createTmp(Reg.rcx);
1687     inst.args.push(arg);
1688     arg = Arg.createImm(2);
1689     inst.args.push(arg);
1690     arg = Arg.createTmp(Reg.rax);
1691     inst.args.push(arg);
1692     arg = Arg.createTmp(Reg.r12);
1693     inst.args.push(arg);
1694     arg = Arg.createTmp(Reg.rax);
1695     inst.args.push(arg);
1696     inst.patchHasNonArgEffects = true;
1697     inst.extraEarlyClobberedRegs = new Set();
1698     inst.extraClobberedRegs = new Set();
1699     inst.patchArgData = [];
1700     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1701     inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
1702     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1703     inst.patchArgData.push({role: Arg.Use, type: GP, width: 64});
1704     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1705     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1706     inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
1707     bb14.append(inst);
1708     inst = new Inst(Move);
1709     arg = Arg.createImm(10);
1710     inst.args.push(arg);
1711     arg = Arg.createTmp(Reg.rax);
1712     inst.args.push(arg);
1713     bb14.append(inst);
1714     inst = new Inst(Ret64);
1715     arg = Arg.createTmp(Reg.rax);
1716     inst.args.push(arg);
1717     bb14.append(inst);
1718     bb15.predecessors.push(bb0);
1719     inst = new Inst(Move);
1720     arg = Arg.createImm(10);
1721     inst.args.push(arg);
1722     arg = Arg.createTmp(Reg.rax);
1723     inst.args.push(arg);
1724     bb15.append(inst);
1725     inst = new Inst(Ret64);
1726     arg = Arg.createTmp(Reg.rax);
1727     inst.args.push(arg);
1728     bb15.append(inst);
1729     return code;
1730 }