3230 lines
111 KiB
JavaScript
3230 lines
111 KiB
JavaScript
"use strict";
|
|
// Generated by Air::dumpAsJS from executeIteration#EVx8pJ in Octane/gbemu
|
|
function createPayloadGbemuExecuteIteration()
|
|
{
|
|
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 bb16 = code.addBlock();
|
|
let bb17 = code.addBlock();
|
|
let bb18 = code.addBlock();
|
|
let bb19 = code.addBlock();
|
|
let bb20 = code.addBlock();
|
|
let bb21 = code.addBlock();
|
|
let bb22 = code.addBlock();
|
|
let bb23 = code.addBlock();
|
|
let bb24 = code.addBlock();
|
|
let bb25 = code.addBlock();
|
|
let bb26 = code.addBlock();
|
|
let bb27 = code.addBlock();
|
|
let bb28 = code.addBlock();
|
|
let bb29 = code.addBlock();
|
|
let bb30 = code.addBlock();
|
|
let bb31 = code.addBlock();
|
|
let bb32 = code.addBlock();
|
|
let bb33 = code.addBlock();
|
|
let bb34 = code.addBlock();
|
|
let bb35 = code.addBlock();
|
|
let bb36 = code.addBlock();
|
|
let bb37 = code.addBlock();
|
|
let bb38 = code.addBlock();
|
|
let bb39 = code.addBlock();
|
|
let bb40 = code.addBlock();
|
|
let bb41 = code.addBlock();
|
|
let bb42 = code.addBlock();
|
|
let slot0 = code.addStackSlot(64, Locked);
|
|
let slot1 = code.addStackSlot(8, Spill);
|
|
let slot2 = code.addStackSlot(8, Spill);
|
|
let slot3 = code.addStackSlot(8, Spill);
|
|
let slot4 = code.addStackSlot(8, Spill);
|
|
let slot5 = code.addStackSlot(8, Spill);
|
|
let slot6 = code.addStackSlot(8, Spill);
|
|
let slot7 = code.addStackSlot(8, Spill);
|
|
let slot8 = code.addStackSlot(8, Spill);
|
|
let slot9 = code.addStackSlot(8, Spill);
|
|
let slot10 = code.addStackSlot(8, Spill);
|
|
let slot11 = code.addStackSlot(8, Spill);
|
|
let slot12 = code.addStackSlot(40, Locked);
|
|
slot12.setOffsetFromFP(-40);
|
|
let tmp190 = code.newTmp(GP);
|
|
let tmp189 = code.newTmp(GP);
|
|
let tmp188 = code.newTmp(GP);
|
|
let tmp187 = code.newTmp(GP);
|
|
let tmp186 = code.newTmp(GP);
|
|
let tmp185 = code.newTmp(GP);
|
|
let tmp184 = code.newTmp(GP);
|
|
let tmp183 = code.newTmp(GP);
|
|
let tmp182 = code.newTmp(GP);
|
|
let tmp181 = code.newTmp(GP);
|
|
let tmp180 = code.newTmp(GP);
|
|
let tmp179 = code.newTmp(GP);
|
|
let tmp178 = code.newTmp(GP);
|
|
let tmp177 = code.newTmp(GP);
|
|
let tmp176 = code.newTmp(GP);
|
|
let tmp175 = code.newTmp(GP);
|
|
let tmp174 = code.newTmp(GP);
|
|
let tmp173 = code.newTmp(GP);
|
|
let tmp172 = code.newTmp(GP);
|
|
let tmp171 = code.newTmp(GP);
|
|
let tmp170 = code.newTmp(GP);
|
|
let tmp169 = code.newTmp(GP);
|
|
let tmp168 = code.newTmp(GP);
|
|
let tmp167 = code.newTmp(GP);
|
|
let tmp166 = code.newTmp(GP);
|
|
let tmp165 = code.newTmp(GP);
|
|
let tmp164 = code.newTmp(GP);
|
|
let tmp163 = code.newTmp(GP);
|
|
let tmp162 = code.newTmp(GP);
|
|
let tmp161 = code.newTmp(GP);
|
|
let tmp160 = code.newTmp(GP);
|
|
let tmp159 = code.newTmp(GP);
|
|
let tmp158 = code.newTmp(GP);
|
|
let tmp157 = code.newTmp(GP);
|
|
let tmp156 = code.newTmp(GP);
|
|
let tmp155 = code.newTmp(GP);
|
|
let tmp154 = code.newTmp(GP);
|
|
let tmp153 = code.newTmp(GP);
|
|
let tmp152 = code.newTmp(GP);
|
|
let tmp151 = code.newTmp(GP);
|
|
let tmp150 = code.newTmp(GP);
|
|
let tmp149 = code.newTmp(GP);
|
|
let tmp148 = code.newTmp(GP);
|
|
let tmp147 = code.newTmp(GP);
|
|
let tmp146 = code.newTmp(GP);
|
|
let tmp145 = code.newTmp(GP);
|
|
let tmp144 = code.newTmp(GP);
|
|
let tmp143 = code.newTmp(GP);
|
|
let tmp142 = code.newTmp(GP);
|
|
let tmp141 = code.newTmp(GP);
|
|
let tmp140 = code.newTmp(GP);
|
|
let tmp139 = code.newTmp(GP);
|
|
let tmp138 = code.newTmp(GP);
|
|
let tmp137 = code.newTmp(GP);
|
|
let tmp136 = code.newTmp(GP);
|
|
let tmp135 = code.newTmp(GP);
|
|
let tmp134 = code.newTmp(GP);
|
|
let tmp133 = code.newTmp(GP);
|
|
let tmp132 = code.newTmp(GP);
|
|
let tmp131 = code.newTmp(GP);
|
|
let tmp130 = code.newTmp(GP);
|
|
let tmp129 = code.newTmp(GP);
|
|
let tmp128 = code.newTmp(GP);
|
|
let tmp127 = code.newTmp(GP);
|
|
let tmp126 = code.newTmp(GP);
|
|
let tmp125 = code.newTmp(GP);
|
|
let tmp124 = code.newTmp(GP);
|
|
let tmp123 = code.newTmp(GP);
|
|
let tmp122 = code.newTmp(GP);
|
|
let tmp121 = code.newTmp(GP);
|
|
let tmp120 = code.newTmp(GP);
|
|
let tmp119 = code.newTmp(GP);
|
|
let tmp118 = code.newTmp(GP);
|
|
let tmp117 = code.newTmp(GP);
|
|
let tmp116 = code.newTmp(GP);
|
|
let tmp115 = code.newTmp(GP);
|
|
let tmp114 = code.newTmp(GP);
|
|
let tmp113 = code.newTmp(GP);
|
|
let tmp112 = code.newTmp(GP);
|
|
let tmp111 = code.newTmp(GP);
|
|
let tmp110 = code.newTmp(GP);
|
|
let tmp109 = code.newTmp(GP);
|
|
let tmp108 = code.newTmp(GP);
|
|
let tmp107 = code.newTmp(GP);
|
|
let tmp106 = code.newTmp(GP);
|
|
let tmp105 = code.newTmp(GP);
|
|
let tmp104 = code.newTmp(GP);
|
|
let tmp103 = code.newTmp(GP);
|
|
let tmp102 = code.newTmp(GP);
|
|
let tmp101 = code.newTmp(GP);
|
|
let tmp100 = code.newTmp(GP);
|
|
let tmp99 = code.newTmp(GP);
|
|
let tmp98 = code.newTmp(GP);
|
|
let tmp97 = code.newTmp(GP);
|
|
let tmp96 = code.newTmp(GP);
|
|
let tmp95 = code.newTmp(GP);
|
|
let tmp94 = code.newTmp(GP);
|
|
let tmp93 = code.newTmp(GP);
|
|
let tmp92 = code.newTmp(GP);
|
|
let tmp91 = code.newTmp(GP);
|
|
let tmp90 = code.newTmp(GP);
|
|
let tmp89 = code.newTmp(GP);
|
|
let tmp88 = code.newTmp(GP);
|
|
let tmp87 = code.newTmp(GP);
|
|
let tmp86 = code.newTmp(GP);
|
|
let tmp85 = code.newTmp(GP);
|
|
let tmp84 = code.newTmp(GP);
|
|
let tmp83 = code.newTmp(GP);
|
|
let tmp82 = code.newTmp(GP);
|
|
let tmp81 = code.newTmp(GP);
|
|
let tmp80 = code.newTmp(GP);
|
|
let tmp79 = code.newTmp(GP);
|
|
let tmp78 = code.newTmp(GP);
|
|
let tmp77 = code.newTmp(GP);
|
|
let tmp76 = code.newTmp(GP);
|
|
let tmp75 = code.newTmp(GP);
|
|
let tmp74 = code.newTmp(GP);
|
|
let tmp73 = code.newTmp(GP);
|
|
let tmp72 = code.newTmp(GP);
|
|
let tmp71 = code.newTmp(GP);
|
|
let tmp70 = code.newTmp(GP);
|
|
let tmp69 = code.newTmp(GP);
|
|
let tmp68 = code.newTmp(GP);
|
|
let tmp67 = code.newTmp(GP);
|
|
let tmp66 = code.newTmp(GP);
|
|
let tmp65 = code.newTmp(GP);
|
|
let tmp64 = code.newTmp(GP);
|
|
let tmp63 = code.newTmp(GP);
|
|
let tmp62 = code.newTmp(GP);
|
|
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 ftmp7 = code.newTmp(FP);
|
|
let ftmp6 = code.newTmp(FP);
|
|
let ftmp5 = code.newTmp(FP);
|
|
let ftmp4 = code.newTmp(FP);
|
|
let ftmp3 = code.newTmp(FP);
|
|
let ftmp2 = code.newTmp(FP);
|
|
let ftmp1 = code.newTmp(FP);
|
|
let ftmp0 = code.newTmp(FP);
|
|
let inst;
|
|
let arg;
|
|
bb0.successors.push(new FrequentedBlock(bb2, Normal));
|
|
bb0.successors.push(new FrequentedBlock(bb1, Normal));
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286904960, 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, 40);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r15);
|
|
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: 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(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(21);
|
|
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: 8});
|
|
inst.patchArgData.push({role: Arg.Use, type: GP, width: 8});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
bb0.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createAddr(Reg.rbx, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286506544, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot10, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286455168, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot4, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287131344, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot6, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(10);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot3, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286474592, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot2, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287209728, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot11, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot1, 0);
|
|
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(Move);
|
|
arg = Arg.createBigImm(287112728, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot8, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(0, 65536);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot9, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287112720, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot5, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286506192, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot7, 0);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(Equal);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(862);
|
|
inst.args.push(arg);
|
|
bb0.append(inst);
|
|
bb1.successors.push(new FrequentedBlock(bb41, Normal));
|
|
bb1.successors.push(new FrequentedBlock(bb3, 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.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(881);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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});
|
|
bb1.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 224);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb1.append(inst);
|
|
inst = new Inst(BranchTest32);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb1.append(inst);
|
|
bb2.successors.push(new FrequentedBlock(bb41, Normal));
|
|
bb2.successors.push(new FrequentedBlock(bb3, Normal));
|
|
bb2.predecessors.push(bb0);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 224);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb2.append(inst);
|
|
inst = new Inst(BranchTest32);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb2.append(inst);
|
|
bb3.successors.push(new FrequentedBlock(bb5, Normal));
|
|
bb3.successors.push(new FrequentedBlock(bb4, Normal));
|
|
bb3.predecessors.push(bb1);
|
|
bb3.predecessors.push(bb40);
|
|
bb3.predecessors.push(bb39);
|
|
bb3.predecessors.push(bb2);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
inst.args.push(arg);
|
|
bb3.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rsi, -1144);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb3.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(Equal);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
bb3.append(inst);
|
|
bb4.successors.push(new FrequentedBlock(bb6, Normal));
|
|
bb4.successors.push(new FrequentedBlock(bb7, Normal));
|
|
bb4.predecessors.push(bb3);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(Equal);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(2);
|
|
inst.args.push(arg);
|
|
bb4.append(inst);
|
|
bb5.successors.push(new FrequentedBlock(bb6, Normal));
|
|
bb5.predecessors.push(bb3);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(7);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 232);
|
|
inst.args.push(arg);
|
|
bb5.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 256);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb5.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 248);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb5.append(inst);
|
|
inst = new Inst(And32);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb5.append(inst);
|
|
inst = new Inst(And32);
|
|
arg = Arg.createImm(31);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb5.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb5.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 240);
|
|
inst.args.push(arg);
|
|
bb5.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb5.append(inst);
|
|
bb6.successors.push(new FrequentedBlock(bb7, Normal));
|
|
bb6.predecessors.push(bb4);
|
|
bb6.predecessors.push(bb5);
|
|
inst = new Inst(Add32);
|
|
arg = Arg.createImm(-1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb6.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb6.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rsi, -1144);
|
|
inst.args.push(arg);
|
|
bb6.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb6.append(inst);
|
|
bb7.successors.push(new FrequentedBlock(bb8, Normal));
|
|
bb7.successors.push(new FrequentedBlock(bb9, Normal));
|
|
bb7.predecessors.push(bb4);
|
|
bb7.predecessors.push(bb6);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 240);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb7.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(GreaterThan);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(0);
|
|
inst.args.push(arg);
|
|
bb7.append(inst);
|
|
bb8.successors.push(new FrequentedBlock(bb9, Normal));
|
|
bb8.predecessors.push(bb7);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286455168, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb8.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286455168, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb8.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(8);
|
|
inst.args.push(arg);
|
|
bb8.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(16);
|
|
inst.args.push(arg);
|
|
bb8.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(24);
|
|
inst.args.push(arg);
|
|
bb8.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.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});
|
|
bb8.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
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.ColdUse, type: GP, width: 64});
|
|
bb8.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb8.append(inst);
|
|
bb9.successors.push(new FrequentedBlock(bb12, Normal));
|
|
bb9.successors.push(new FrequentedBlock(bb10, Normal));
|
|
bb9.predecessors.push(bb7);
|
|
bb9.predecessors.push(bb8);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 304);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
bb9.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 128);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb9.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, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(80);
|
|
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.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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});
|
|
bb9.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.r8, 8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb9.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(AboveOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rax, -8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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: 32});
|
|
bb9.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
inst.args.push(arg);
|
|
bb9.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createIndex(Reg.rax, Reg.rsi, 8, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb9.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(10);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb9.append(inst);
|
|
inst = new Inst(MoveConditionallyTest64);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(-1);
|
|
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.rcx);
|
|
inst.args.push(arg);
|
|
bb9.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.rbx);
|
|
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.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.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: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
bb9.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, 5);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(23);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.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.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: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
bb9.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rcx, 24);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb9.append(inst);
|
|
inst = new Inst(Branch64);
|
|
arg = Arg.createRelCond(Equal);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot7, 0);
|
|
inst.args.push(arg);
|
|
bb9.append(inst);
|
|
bb10.successors.push(new FrequentedBlock(bb11, Normal));
|
|
bb10.successors.push(new FrequentedBlock(bb13, Normal));
|
|
bb10.predecessors.push(bb9);
|
|
inst = new Inst(Branch64);
|
|
arg = Arg.createRelCond(Equal);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot10, 0);
|
|
inst.args.push(arg);
|
|
bb10.append(inst);
|
|
bb11.successors.push(new FrequentedBlock(bb14, Normal));
|
|
bb11.predecessors.push(bb10);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot0, 0);
|
|
inst.args.push(arg);
|
|
bb11.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 344);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
bb11.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.rdi, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(502);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
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: 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});
|
|
bb11.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdi, 16);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb11.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(AboveOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rdi, 24);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
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: 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});
|
|
bb11.append(inst);
|
|
inst = new Inst(Load8);
|
|
arg = Arg.createIndex(Reg.rsi, Reg.rax, 1, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb11.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb11.append(inst);
|
|
bb12.successors.push(new FrequentedBlock(bb14, Normal));
|
|
bb12.predecessors.push(bb9);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createStack(slot0, 0);
|
|
inst.args.push(arg);
|
|
bb12.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 336);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
bb12.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 456);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
inst.args.push(arg);
|
|
bb12.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
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.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
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.ZDef, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
|
|
bb12.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.rdi, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(502);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
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: 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: 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: 32});
|
|
bb12.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdi, 16);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
inst.args.push(arg);
|
|
bb12.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(AboveOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rdi, 24);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
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: 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: 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: 32});
|
|
bb12.append(inst);
|
|
inst = new Inst(Load8);
|
|
arg = Arg.createIndex(Reg.rsi, Reg.rax, 1, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb12.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb12.append(inst);
|
|
bb13.predecessors.push(bb10);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.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: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
bb13.append(inst);
|
|
inst = new Inst(Oops);
|
|
bb13.append(inst);
|
|
bb14.successors.push(new FrequentedBlock(bb15, Normal));
|
|
bb14.successors.push(new FrequentedBlock(bb16, Normal));
|
|
bb14.predecessors.push(bb11);
|
|
bb14.predecessors.push(bb12);
|
|
inst = new Inst(Add32);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb14.append(inst);
|
|
inst = new Inst(ZeroExtend16To32);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb14.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb14.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 128);
|
|
inst.args.push(arg);
|
|
bb14.append(inst);
|
|
inst = new Inst(BranchTest32);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 216);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
bb14.append(inst);
|
|
bb15.predecessors.push(bb14);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
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.ColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
bb15.append(inst);
|
|
inst = new Inst(Oops);
|
|
bb15.append(inst);
|
|
bb16.successors.push(new FrequentedBlock(bb18, Normal));
|
|
bb16.successors.push(new FrequentedBlock(bb17, Normal));
|
|
bb16.predecessors.push(bb14);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rax, -1752);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdx, 16);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(AboveOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rdx, 24);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
bb16.append(inst);
|
|
inst = new Inst(Load8);
|
|
arg = Arg.createIndex(Reg.rax, Reg.rcx, 1, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 272);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287112720, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.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.rax, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(80);
|
|
inst.args.push(arg);
|
|
arg = Arg.createBigImm(287112720, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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: 32});
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287112728, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rax, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(AboveOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rax, -8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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: 32});
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createIndex(Reg.rax, Reg.rcx, 8, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(10);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(MoveConditionallyTest64);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(-1);
|
|
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);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(8);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createImm(2);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(16);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287112720, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(24);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(32);
|
|
inst.args.push(arg);
|
|
bb16.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});
|
|
bb16.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
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.ColdUse, type: GP, width: 64});
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdx, -1088);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 272);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 280);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Rshift32);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
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: 32});
|
|
inst.patchArgData.push({role: Arg.Use, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.ZDef, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
|
|
bb16.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rdx, -1088);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdx, -88);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdx, -1176);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb16.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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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});
|
|
bb16.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(80);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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});
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rcx, 8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(AboveOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rax, -8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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: 32});
|
|
bb16.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createIndex(Reg.rax, Reg.rdx, 8, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(10);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(MoveConditionallyTest64);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(-1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.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.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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});
|
|
bb16.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.rax, 5);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(23);
|
|
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.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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: 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});
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(8);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createImm(2);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(16);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(24);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(32);
|
|
inst.args.push(arg);
|
|
bb16.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});
|
|
bb16.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
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.ColdUse, type: GP, width: 64});
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 272);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 280);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Rshift32);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rsi);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rsi, -1048);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
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.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.ZDef, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
|
|
bb16.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rsi, -1048);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rsi, -1072);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
inst = new Inst(Branch64);
|
|
arg = Arg.createRelCond(Below);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
bb16.append(inst);
|
|
bb17.successors.push(new FrequentedBlock(bb19, Normal));
|
|
bb17.predecessors.push(bb16);
|
|
inst = new Inst(ConvertInt32ToDouble);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm0);
|
|
inst.args.push(arg);
|
|
bb17.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb17.append(inst);
|
|
bb18.successors.push(new FrequentedBlock(bb19, Normal));
|
|
bb18.predecessors.push(bb16);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb18.append(inst);
|
|
inst = new Inst(Move64ToDouble);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm0);
|
|
inst.args.push(arg);
|
|
bb18.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb18.append(inst);
|
|
bb19.successors.push(new FrequentedBlock(bb20, Normal));
|
|
bb19.successors.push(new FrequentedBlock(bb32, Normal));
|
|
bb19.predecessors.push(bb17);
|
|
bb19.predecessors.push(bb18);
|
|
inst = new Inst(ConvertInt32ToDouble);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm1);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(AddDouble);
|
|
arg = Arg.createTmp(Reg.xmm0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm1);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(MoveDoubleTo64);
|
|
arg = Arg.createTmp(Reg.xmm1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(0, 65536);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rsi, -1072);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rsi, -1080);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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.ZDef, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
|
|
bb19.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rsi, -1080);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
inst = new Inst(BranchTest32);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rsi, -1104);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
bb19.append(inst);
|
|
bb20.successors.push(new FrequentedBlock(bb21, Normal));
|
|
bb20.successors.push(new FrequentedBlock(bb32, Normal));
|
|
bb20.predecessors.push(bb19);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rsi, -1096);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb20.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
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.rdx);
|
|
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.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
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.ZDef, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
|
|
bb20.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb20.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rsi, -1096);
|
|
inst.args.push(arg);
|
|
bb20.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rsi, -1112);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r11);
|
|
inst.args.push(arg);
|
|
bb20.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(GreaterThanOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r11);
|
|
inst.args.push(arg);
|
|
bb20.append(inst);
|
|
bb21.successors.push(new FrequentedBlock(bb23, Normal));
|
|
bb21.predecessors.push(bb20);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 344);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r12);
|
|
inst.args.push(arg);
|
|
bb21.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(502);
|
|
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});
|
|
bb21.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.r12, 16);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdi);
|
|
inst.args.push(arg);
|
|
bb21.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createAddr(Reg.r12, 24);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r9);
|
|
inst.args.push(arg);
|
|
bb21.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(BelowOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r9);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(65286);
|
|
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});
|
|
bb21.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 232);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r10);
|
|
inst.args.push(arg);
|
|
bb21.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 256);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
bb21.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb21.append(inst);
|
|
bb22.successors.push(new FrequentedBlock(bb23, Normal));
|
|
bb22.predecessors.push(bb30);
|
|
bb22.predecessors.push(bb31);
|
|
bb22.predecessors.push(bb29);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb22.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb22.append(inst);
|
|
bb23.successors.push(new FrequentedBlock(bb25, Normal));
|
|
bb23.successors.push(new FrequentedBlock(bb24, Normal));
|
|
bb23.predecessors.push(bb21);
|
|
bb23.predecessors.push(bb22);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r11);
|
|
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.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r11);
|
|
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.UseZDef, 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: 32});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 32});
|
|
bb23.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb23.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb23.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rsi, -1096);
|
|
inst.args.push(arg);
|
|
bb23.append(inst);
|
|
inst = new Inst(Load8);
|
|
arg = Arg.createAddr(Reg.rdi, 65285);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb23.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
bb23.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
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.rdx);
|
|
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.UseZDef, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
|
|
bb23.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(BelowOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r9);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(65285);
|
|
inst.args.push(arg);
|
|
bb23.append(inst);
|
|
bb24.successors.push(new FrequentedBlock(bb26, Normal));
|
|
bb24.successors.push(new FrequentedBlock(bb30, Normal));
|
|
bb24.predecessors.push(bb23);
|
|
inst = new Inst(Store8);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rdi, 65285);
|
|
inst.args.push(arg);
|
|
bb24.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(Equal);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(256);
|
|
inst.args.push(arg);
|
|
bb24.append(inst);
|
|
bb25.successors.push(new FrequentedBlock(bb26, Normal));
|
|
bb25.successors.push(new FrequentedBlock(bb30, Normal));
|
|
bb25.predecessors.push(bb23);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(Equal);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(256);
|
|
inst.args.push(arg);
|
|
bb25.append(inst);
|
|
bb26.successors.push(new FrequentedBlock(bb28, Normal));
|
|
bb26.successors.push(new FrequentedBlock(bb27, Normal));
|
|
bb26.predecessors.push(bb24);
|
|
bb26.predecessors.push(bb25);
|
|
inst = new Inst(Load8);
|
|
arg = Arg.createAddr(Reg.rdi, 65286);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb26.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(BelowOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r9);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(65285);
|
|
inst.args.push(arg);
|
|
bb26.append(inst);
|
|
bb27.successors.push(new FrequentedBlock(bb28, Normal));
|
|
bb27.predecessors.push(bb26);
|
|
inst = new Inst(Store8);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rdi, 65285);
|
|
inst.args.push(arg);
|
|
bb27.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb27.append(inst);
|
|
bb28.successors.push(new FrequentedBlock(bb29, Normal));
|
|
bb28.successors.push(new FrequentedBlock(bb31, Normal));
|
|
bb28.predecessors.push(bb26);
|
|
bb28.predecessors.push(bb27);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 248);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb28.append(inst);
|
|
inst = new Inst(Or32);
|
|
arg = Arg.createImm(4);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb28.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
bb28.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
bb28.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 248);
|
|
inst.args.push(arg);
|
|
bb28.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
bb28.append(inst);
|
|
inst = new Inst(BranchTest64);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r10);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r13);
|
|
inst.args.push(arg);
|
|
bb28.append(inst);
|
|
bb29.successors.push(new FrequentedBlock(bb22, Normal));
|
|
bb29.successors.push(new FrequentedBlock(bb32, Normal));
|
|
bb29.predecessors.push(bb28);
|
|
inst = new Inst(And32);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb29.append(inst);
|
|
inst = new Inst(And32);
|
|
arg = Arg.createImm(31);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb29.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb29.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 240);
|
|
inst.args.push(arg);
|
|
bb29.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(GreaterThanOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r11);
|
|
inst.args.push(arg);
|
|
bb29.append(inst);
|
|
bb30.successors.push(new FrequentedBlock(bb22, Normal));
|
|
bb30.successors.push(new FrequentedBlock(bb32, Normal));
|
|
bb30.predecessors.push(bb24);
|
|
bb30.predecessors.push(bb25);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(GreaterThanOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r11);
|
|
inst.args.push(arg);
|
|
bb30.append(inst);
|
|
bb31.successors.push(new FrequentedBlock(bb22, Normal));
|
|
bb31.successors.push(new FrequentedBlock(bb32, Normal));
|
|
bb31.predecessors.push(bb28);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(GreaterThanOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r11);
|
|
inst.args.push(arg);
|
|
bb31.append(inst);
|
|
bb32.successors.push(new FrequentedBlock(bb33, Normal));
|
|
bb32.successors.push(new FrequentedBlock(bb34, Normal));
|
|
bb32.predecessors.push(bb19);
|
|
bb32.predecessors.push(bb20);
|
|
bb32.predecessors.push(bb30);
|
|
bb32.predecessors.push(bb31);
|
|
bb32.predecessors.push(bb29);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rsi, -1120);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb32.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(GreaterThan);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(0);
|
|
inst.args.push(arg);
|
|
bb32.append(inst);
|
|
bb33.predecessors.push(bb32);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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.ColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.ColdUse, type: GP, width: 64});
|
|
bb33.append(inst);
|
|
inst = new Inst(Oops);
|
|
bb33.append(inst);
|
|
bb34.successors.push(new FrequentedBlock(bb36, Normal));
|
|
bb34.successors.push(new FrequentedBlock(bb35, Normal));
|
|
bb34.predecessors.push(bb32);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 136);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb34.append(inst);
|
|
inst = new Inst(Branch64);
|
|
arg = Arg.createRelCond(Below);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
bb34.append(inst);
|
|
bb35.successors.push(new FrequentedBlock(bb37, Normal));
|
|
bb35.successors.push(new FrequentedBlock(bb38, Normal));
|
|
bb35.predecessors.push(bb34);
|
|
inst = new Inst(ConvertInt32ToDouble);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm0);
|
|
inst.args.push(arg);
|
|
bb35.append(inst);
|
|
inst = new Inst(BranchDouble);
|
|
arg = Arg.createDoubleCond(DoubleGreaterThanOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm0);
|
|
inst.args.push(arg);
|
|
bb35.append(inst);
|
|
bb36.successors.push(new FrequentedBlock(bb37, Normal));
|
|
bb36.successors.push(new FrequentedBlock(bb38, Normal));
|
|
bb36.predecessors.push(bb34);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb36.append(inst);
|
|
inst = new Inst(Move64ToDouble);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm0);
|
|
inst.args.push(arg);
|
|
bb36.append(inst);
|
|
inst = new Inst(BranchDouble);
|
|
arg = Arg.createDoubleCond(DoubleGreaterThanOrEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.xmm0);
|
|
inst.args.push(arg);
|
|
bb36.append(inst);
|
|
bb37.successors.push(new FrequentedBlock(bb38, Normal));
|
|
bb37.predecessors.push(bb35);
|
|
bb37.predecessors.push(bb36);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286474592, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb37.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286474592, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb37.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(8);
|
|
inst.args.push(arg);
|
|
bb37.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(16);
|
|
inst.args.push(arg);
|
|
bb37.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(24);
|
|
inst.args.push(arg);
|
|
bb37.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.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});
|
|
bb37.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
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.ColdUse, type: GP, width: 64});
|
|
bb37.append(inst);
|
|
inst = new Inst(Jump);
|
|
bb37.append(inst);
|
|
bb38.successors.push(new FrequentedBlock(bb39, Normal));
|
|
bb38.successors.push(new FrequentedBlock(bb40, Normal));
|
|
bb38.predecessors.push(bb35);
|
|
bb38.predecessors.push(bb37);
|
|
bb38.predecessors.push(bb36);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createRelCond(NotEqual);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 0);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(881);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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});
|
|
bb38.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 8);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rdx);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdx, -1824);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
inst.args.push(arg);
|
|
arg = Arg.createResCond(Overflow);
|
|
inst.args.push(arg);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
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: 32});
|
|
inst.patchArgData.push({role: Arg.UseZDef, type: GP, width: 32});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 64});
|
|
inst.patchArgData.push({role: Arg.LateColdUse, type: GP, width: 32});
|
|
bb38.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rdx, -1824);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rdx, -1832);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
inst = new Inst(Branch32);
|
|
arg = Arg.createRelCond(GreaterThan);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb38.append(inst);
|
|
bb39.successors.push(new FrequentedBlock(bb42, Normal));
|
|
bb39.successors.push(new FrequentedBlock(bb3, Normal));
|
|
bb39.predecessors.push(bb38);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286474592, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(286474592, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(8);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(16);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rbx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(24);
|
|
inst.args.push(arg);
|
|
bb39.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.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});
|
|
bb39.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
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.ColdUse, type: GP, width: 64});
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 224);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Or32);
|
|
arg = Arg.createImm(2);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Add64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.r14);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createAddr(Reg.rbx, 224);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287131344, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287131344, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(8);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move32);
|
|
arg = Arg.createImm(1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(16);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createBigImm(287209728, 1);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createTmp(Reg.rcx);
|
|
inst.args.push(arg);
|
|
arg = Arg.createCallArg(24);
|
|
inst.args.push(arg);
|
|
bb39.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.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});
|
|
bb39.append(inst);
|
|
inst = new Inst(Patch);
|
|
arg = Arg.createSpecial();
|
|
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.ColdUse, type: GP, width: 64});
|
|
bb39.append(inst);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 224);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
inst = new Inst(BranchTest32);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb39.append(inst);
|
|
bb40.successors.push(new FrequentedBlock(bb42, Normal));
|
|
bb40.successors.push(new FrequentedBlock(bb3, Normal));
|
|
bb40.predecessors.push(bb38);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createAddr(Reg.rbx, 224);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb40.append(inst);
|
|
inst = new Inst(BranchTest32);
|
|
arg = Arg.createResCond(NonZero);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb40.append(inst);
|
|
bb41.predecessors.push(bb1);
|
|
bb41.predecessors.push(bb2);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(10);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb41.append(inst);
|
|
inst = new Inst(Ret64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb41.append(inst);
|
|
bb42.predecessors.push(bb40);
|
|
bb42.predecessors.push(bb39);
|
|
inst = new Inst(Move);
|
|
arg = Arg.createImm(10);
|
|
inst.args.push(arg);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb42.append(inst);
|
|
inst = new Inst(Ret64);
|
|
arg = Arg.createTmp(Reg.rax);
|
|
inst.args.push(arg);
|
|
bb42.append(inst);
|
|
return code;
|
|
}
|