"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; }