| "use strict"; |
| // Generated by Air::dumpAsJS from #ACLj8C in Air.js |
| function createPayloadAirJSACLj8C() |
| { |
| let code = new Code(); |
| let bb0 = code.addBlock(); |
| let bb1 = code.addBlock(); |
| let bb2 = code.addBlock(); |
| let bb3 = code.addBlock(); |
| let bb4 = code.addBlock(); |
| let bb5 = code.addBlock(); |
| let bb6 = code.addBlock(); |
| let bb7 = code.addBlock(); |
| let bb8 = code.addBlock(); |
| let bb9 = code.addBlock(); |
| let bb10 = code.addBlock(); |
| let bb11 = code.addBlock(); |
| let bb12 = code.addBlock(); |
| let bb13 = code.addBlock(); |
| let bb14 = code.addBlock(); |
| let bb15 = code.addBlock(); |
| let slot0 = code.addStackSlot(160, Locked); |
| let slot1 = code.addStackSlot(8, Spill); |
| let slot2 = code.addStackSlot(8, Spill); |
| let slot3 = code.addStackSlot(8, Spill); |
| let slot4 = code.addStackSlot(40, Locked); |
| slot4.setOffsetFromFP(-40); |
| let tmp61 = code.newTmp(GP); |
| let tmp60 = code.newTmp(GP); |
| let tmp59 = code.newTmp(GP); |
| let tmp58 = code.newTmp(GP); |
| let tmp57 = code.newTmp(GP); |
| let tmp56 = code.newTmp(GP); |
| let tmp55 = code.newTmp(GP); |
| let tmp54 = code.newTmp(GP); |
| let tmp53 = code.newTmp(GP); |
| let tmp52 = code.newTmp(GP); |
| let tmp51 = code.newTmp(GP); |
| let tmp50 = code.newTmp(GP); |
| let tmp49 = code.newTmp(GP); |
| let tmp48 = code.newTmp(GP); |
| let tmp47 = code.newTmp(GP); |
| let tmp46 = code.newTmp(GP); |
| let tmp45 = code.newTmp(GP); |
| let tmp44 = code.newTmp(GP); |
| let tmp43 = code.newTmp(GP); |
| let tmp42 = code.newTmp(GP); |
| let tmp41 = code.newTmp(GP); |
| let tmp40 = code.newTmp(GP); |
| let tmp39 = code.newTmp(GP); |
| let tmp38 = code.newTmp(GP); |
| let tmp37 = code.newTmp(GP); |
| let tmp36 = code.newTmp(GP); |
| let tmp35 = code.newTmp(GP); |
| let tmp34 = code.newTmp(GP); |
| let tmp33 = code.newTmp(GP); |
| let tmp32 = code.newTmp(GP); |
| let tmp31 = code.newTmp(GP); |
| let tmp30 = code.newTmp(GP); |
| let tmp29 = code.newTmp(GP); |
| let tmp28 = code.newTmp(GP); |
| let tmp27 = code.newTmp(GP); |
| let tmp26 = code.newTmp(GP); |
| let tmp25 = code.newTmp(GP); |
| let tmp24 = code.newTmp(GP); |
| let tmp23 = code.newTmp(GP); |
| let tmp22 = code.newTmp(GP); |
| let tmp21 = code.newTmp(GP); |
| let tmp20 = code.newTmp(GP); |
| let tmp19 = code.newTmp(GP); |
| let tmp18 = code.newTmp(GP); |
| let tmp17 = code.newTmp(GP); |
| let tmp16 = code.newTmp(GP); |
| let tmp15 = code.newTmp(GP); |
| let tmp14 = code.newTmp(GP); |
| let tmp13 = code.newTmp(GP); |
| let tmp12 = code.newTmp(GP); |
| let tmp11 = code.newTmp(GP); |
| let tmp10 = code.newTmp(GP); |
| let tmp9 = code.newTmp(GP); |
| let tmp8 = code.newTmp(GP); |
| let tmp7 = code.newTmp(GP); |
| let tmp6 = code.newTmp(GP); |
| let tmp5 = code.newTmp(GP); |
| let tmp4 = code.newTmp(GP); |
| let tmp3 = code.newTmp(GP); |
| let tmp2 = code.newTmp(GP); |
| let tmp1 = code.newTmp(GP); |
| let tmp0 = code.newTmp(GP); |
| let inst; |
| let arg; |
| bb0.successors.push(new FrequentedBlock(bb1, Normal)); |
| bb0.successors.push(new FrequentedBlock(bb15, Normal)); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(276424800, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.rbp, 16); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbp); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.extraEarlyClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.r11); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Scratch, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rbp, 72); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rbp, 64); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rbp, 56); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rbp, 48); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(2, -65536); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rbp, 24); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rax, 16); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(0, -65536); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r14); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r14); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.extraEarlyClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.r11); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rcx, 32); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rcx, 40); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(276327648, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.r8, 5); |
| inst.args.push(arg); |
| arg = Arg.createImm(21); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.r12, 0); |
| inst.args.push(arg); |
| arg = Arg.createImm(372); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.r12, 8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rax, -40); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(276321024, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 72); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 64); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 56); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 48); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 40); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r14); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.extraEarlyClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.r11); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Xor64); |
| arg = Arg.createImm(6); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(-2); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot2, 0); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(-2); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r9); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r9); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(1); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot3, 0); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| inst = new Inst(BranchTest64); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb0.append(inst); |
| bb1.successors.push(new FrequentedBlock(bb3, Normal)); |
| bb1.successors.push(new FrequentedBlock(bb2, Normal)); |
| bb1.predecessors.push(bb0); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.r8, 0); |
| inst.args.push(arg); |
| arg = Arg.createImm(468); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb1.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.r8, 16); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb1.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(276741160, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb1.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rcx, 0); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb1.append(inst); |
| inst = new Inst(Branch64); |
| arg = Arg.createRelCond(Equal); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.rax, 8); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb1.append(inst); |
| bb2.predecessors.push(bb1); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r8); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb2.append(inst); |
| inst = new Inst(Oops); |
| bb2.append(inst); |
| bb3.successors.push(new FrequentedBlock(bb4, Normal)); |
| bb3.successors.push(new FrequentedBlock(bb7, Normal)); |
| bb3.predecessors.push(bb1); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.r8, 24); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r13); |
| inst.args.push(arg); |
| bb3.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.rbx, 5); |
| inst.args.push(arg); |
| arg = Arg.createImm(23); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r13); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb3.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(275739616, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb3.append(inst); |
| inst = new Inst(Branch64); |
| arg = Arg.createRelCond(Equal); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.rbx, 24); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb3.append(inst); |
| bb4.successors.push(new FrequentedBlock(bb5, Normal)); |
| bb4.successors.push(new FrequentedBlock(bb6, Normal)); |
| bb4.predecessors.push(bb3); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 0); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rbx, 16); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createAddr(Reg.rax, 32); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot1, 0); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r13); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 32); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 24); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 16); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.r13); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot0, 8); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(276645872, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(276646496, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(8); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move32); |
| arg = Arg.createImm(2); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(16); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(24); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(32); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(8); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(16); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(24); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(32); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r14); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.extraEarlyClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.rcx); |
| inst.extraClobberedRegs.add(Reg.rdx); |
| inst.extraClobberedRegs.add(Reg.rsi); |
| inst.extraClobberedRegs.add(Reg.rdi); |
| inst.extraClobberedRegs.add(Reg.r8); |
| inst.extraClobberedRegs.add(Reg.r9); |
| inst.extraClobberedRegs.add(Reg.r10); |
| inst.extraClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.xmm0); |
| inst.extraClobberedRegs.add(Reg.xmm1); |
| inst.extraClobberedRegs.add(Reg.xmm2); |
| inst.extraClobberedRegs.add(Reg.xmm3); |
| inst.extraClobberedRegs.add(Reg.xmm4); |
| inst.extraClobberedRegs.add(Reg.xmm5); |
| inst.extraClobberedRegs.add(Reg.xmm6); |
| inst.extraClobberedRegs.add(Reg.xmm7); |
| inst.extraClobberedRegs.add(Reg.xmm8); |
| inst.extraClobberedRegs.add(Reg.xmm9); |
| inst.extraClobberedRegs.add(Reg.xmm10); |
| inst.extraClobberedRegs.add(Reg.xmm11); |
| inst.extraClobberedRegs.add(Reg.xmm12); |
| inst.extraClobberedRegs.add(Reg.xmm13); |
| inst.extraClobberedRegs.add(Reg.xmm14); |
| inst.extraClobberedRegs.add(Reg.xmm15); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| bb4.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot1, 0); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Xor64); |
| arg = Arg.createImm(6); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(-2); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot1, 0); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb4.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb4.append(inst); |
| inst = new Inst(BranchTest64); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb4.append(inst); |
| bb5.successors.push(new FrequentedBlock(bb8, Normal)); |
| bb5.predecessors.push(bb4); |
| inst = new Inst(Move); |
| arg = Arg.createStack(slot1, 0); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb5.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r14); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.extraEarlyClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.r11); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.LateUse, type: GP, width: 64}); |
| bb5.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb5.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb5.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.rcx, 0); |
| inst.args.push(arg); |
| arg = Arg.createImm(419); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb5.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createBigImm(276168608, 1); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb5.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(8); |
| inst.args.push(arg); |
| bb5.append(inst); |
| inst = new Inst(Move32); |
| arg = Arg.createImm(2); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(16); |
| inst.args.push(arg); |
| bb5.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(24); |
| inst.args.push(arg); |
| bb5.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.r13); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(32); |
| inst.args.push(arg); |
| bb5.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(8); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(16); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(24); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(32); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r14); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.extraEarlyClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.rcx); |
| inst.extraClobberedRegs.add(Reg.rdx); |
| inst.extraClobberedRegs.add(Reg.rsi); |
| inst.extraClobberedRegs.add(Reg.rdi); |
| inst.extraClobberedRegs.add(Reg.r8); |
| inst.extraClobberedRegs.add(Reg.r9); |
| inst.extraClobberedRegs.add(Reg.r10); |
| inst.extraClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.xmm0); |
| inst.extraClobberedRegs.add(Reg.xmm1); |
| inst.extraClobberedRegs.add(Reg.xmm2); |
| inst.extraClobberedRegs.add(Reg.xmm3); |
| inst.extraClobberedRegs.add(Reg.xmm4); |
| inst.extraClobberedRegs.add(Reg.xmm5); |
| inst.extraClobberedRegs.add(Reg.xmm6); |
| inst.extraClobberedRegs.add(Reg.xmm7); |
| inst.extraClobberedRegs.add(Reg.xmm8); |
| inst.extraClobberedRegs.add(Reg.xmm9); |
| inst.extraClobberedRegs.add(Reg.xmm10); |
| inst.extraClobberedRegs.add(Reg.xmm11); |
| inst.extraClobberedRegs.add(Reg.xmm12); |
| inst.extraClobberedRegs.add(Reg.xmm13); |
| inst.extraClobberedRegs.add(Reg.xmm14); |
| inst.extraClobberedRegs.add(Reg.xmm15); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| bb5.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createStack(slot1, 0); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb5.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(10); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb5.append(inst); |
| inst = new Inst(Jump); |
| bb5.append(inst); |
| bb6.successors.push(new FrequentedBlock(bb8, Normal)); |
| bb6.predecessors.push(bb4); |
| inst = new Inst(Move); |
| arg = Arg.createImm(10); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb6.append(inst); |
| inst = new Inst(Jump); |
| bb6.append(inst); |
| bb7.successors.push(new FrequentedBlock(bb12, Normal)); |
| bb7.successors.push(new FrequentedBlock(bb9, Normal)); |
| bb7.predecessors.push(bb3); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rbx); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(8); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Move32); |
| arg = Arg.createImm(5); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(16); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(10); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(24); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.r13); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(32); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rsi); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(40); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rdx); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(48); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rdi); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(56); |
| inst.args.push(arg); |
| bb7.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(8); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(16); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(24); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(32); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(40); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(48); |
| inst.args.push(arg); |
| arg = Arg.createCallArg(56); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r14); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.extraEarlyClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.rcx); |
| inst.extraClobberedRegs.add(Reg.rdx); |
| inst.extraClobberedRegs.add(Reg.rsi); |
| inst.extraClobberedRegs.add(Reg.rdi); |
| inst.extraClobberedRegs.add(Reg.r8); |
| inst.extraClobberedRegs.add(Reg.r9); |
| inst.extraClobberedRegs.add(Reg.r10); |
| inst.extraClobberedRegs.add(Reg.r11); |
| inst.extraClobberedRegs.add(Reg.xmm0); |
| inst.extraClobberedRegs.add(Reg.xmm1); |
| inst.extraClobberedRegs.add(Reg.xmm2); |
| inst.extraClobberedRegs.add(Reg.xmm3); |
| inst.extraClobberedRegs.add(Reg.xmm4); |
| inst.extraClobberedRegs.add(Reg.xmm5); |
| inst.extraClobberedRegs.add(Reg.xmm6); |
| inst.extraClobberedRegs.add(Reg.xmm7); |
| inst.extraClobberedRegs.add(Reg.xmm8); |
| inst.extraClobberedRegs.add(Reg.xmm9); |
| inst.extraClobberedRegs.add(Reg.xmm10); |
| inst.extraClobberedRegs.add(Reg.xmm11); |
| inst.extraClobberedRegs.add(Reg.xmm12); |
| inst.extraClobberedRegs.add(Reg.xmm13); |
| inst.extraClobberedRegs.add(Reg.xmm14); |
| inst.extraClobberedRegs.add(Reg.xmm15); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Def, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| bb7.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb7.append(inst); |
| inst = new Inst(BranchTest64); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| bb7.append(inst); |
| bb8.successors.push(new FrequentedBlock(bb13, Normal)); |
| bb8.successors.push(new FrequentedBlock(bb10, Normal)); |
| bb8.predecessors.push(bb6); |
| bb8.predecessors.push(bb5); |
| inst = new Inst(BranchTest64); |
| arg = Arg.createResCond(NonZero); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r15); |
| inst.args.push(arg); |
| bb8.append(inst); |
| bb9.successors.push(new FrequentedBlock(bb11, Normal)); |
| bb9.predecessors.push(bb7); |
| inst = new Inst(Jump); |
| bb9.append(inst); |
| bb10.successors.push(new FrequentedBlock(bb11, Normal)); |
| bb10.predecessors.push(bb8); |
| inst = new Inst(Jump); |
| bb10.append(inst); |
| bb11.predecessors.push(bb9); |
| bb11.predecessors.push(bb10); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(Below); |
| inst.args.push(arg); |
| arg = Arg.createAddr(Reg.rax, 5); |
| inst.args.push(arg); |
| arg = Arg.createImm(20); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 8}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb11.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb11.append(inst); |
| inst = new Inst(Oops); |
| bb11.append(inst); |
| bb12.successors.push(new FrequentedBlock(bb14, Normal)); |
| bb12.predecessors.push(bb7); |
| inst = new Inst(Jump); |
| bb12.append(inst); |
| bb13.successors.push(new FrequentedBlock(bb14, Normal)); |
| bb13.predecessors.push(bb8); |
| inst = new Inst(Jump); |
| bb13.append(inst); |
| bb14.predecessors.push(bb12); |
| bb14.predecessors.push(bb13); |
| inst = new Inst(Move); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb14.append(inst); |
| inst = new Inst(And64); |
| arg = Arg.createImm(-9); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| bb14.append(inst); |
| inst = new Inst(Patch); |
| arg = Arg.createSpecial(); |
| inst.args.push(arg); |
| arg = Arg.createRelCond(NotEqual); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rcx); |
| inst.args.push(arg); |
| arg = Arg.createImm(2); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.r12); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| inst.patchHasNonArgEffects = true; |
| inst.extraEarlyClobberedRegs = new Set(); |
| inst.extraClobberedRegs = new Set(); |
| inst.patchArgData = []; |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 32}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.Use, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64}); |
| bb14.append(inst); |
| inst = new Inst(Move); |
| arg = Arg.createImm(10); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb14.append(inst); |
| inst = new Inst(Ret64); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb14.append(inst); |
| bb15.predecessors.push(bb0); |
| inst = new Inst(Move); |
| arg = Arg.createImm(10); |
| inst.args.push(arg); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb15.append(inst); |
| inst = new Inst(Ret64); |
| arg = Arg.createTmp(Reg.rax); |
| inst.args.push(arg); |
| bb15.append(inst); |
| return code; |
| } |