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