// File: /workspace/github_cpp_makefile_star2_O3/rfotino[P]consolite-compiler/src/syntax.cpp
// Function: ExprToken::output(Parser*, VarLocation const&)
void ExprToken::output(Parser *parser, const VarLocation& varLoc) {
  // Evaluate the postfix expression using the stack, pushing nullptr
  // as an operand where a temporary value would go (one that is
  // not already represented by a Token).
  std::stack<Operand> operands;
  for (auto token : _postfix) {
    auto op = std::dynamic_pointer_cast<OperatorToken>(token);
    auto global = std::dynamic_pointer_cast<GlobalVarToken>(token);
    auto var = std::dynamic_pointer_cast<Variable>(token);
    auto literal = std::dynamic_pointer_cast<LiteralToken>(token);
    auto fnCall = std::dynamic_pointer_cast<FunctionCallToken>(token);
    if (nullptr != op) {
      // Pop one or two operands off the stack, depending on if the
      // operator is unary or binary. Then output the operation in
      // assembly.
      Operand rhs = operands.top();
      operands.pop();
      Operand lhs;
      if (op->isBinary()) {
        lhs = operands.top();
        operands.pop();
      }
      Operand result = op->output(parser, lhs, rhs);
      operands.push(result);
    } else if (nullptr != global) {
      // Push the address onto the stack.
      parser->writeInst("MOVI L " + global->name());
      parser->writeInst("PUSH L");
      operands.push(Operand(OperandType::ADDRESS));
    } else if (nullptr != var) {
      // Push nothing onto the stack for a register, or the address onto the
      // stack for a variable on the stack.
      if (var->isReg()) {
        operands.push(Operand(OperandType::REGISTER, var->getReg()));
      } else {
        // Get the variable's location into register M
        parser->writeInst("MOV M FP");
        int offset = var->getOffset();
        if (0 != offset) {
          parser->writeInst("MOVI L " + toHexStr(0 < offset ? offset : -offset));
          if (0 < offset) {
            parser->writeInst("ADD M L");
          } else {
            parser->writeInst("SUB M L");
          }
        }
        // Push the address onto the stack.
        parser->writeInst("PUSH M");
        operands.push(Operand(OperandType::ADDRESS));
      }
    } else if (nullptr != literal) {
      // Don't do anything with the stack, we can save this literal for
      // later use.
      operands.push(Operand(OperandType::LITERAL, literal->val()));
    } else if (nullptr != fnCall) {
      // Get the result of the function call and push it onto the stack.
      fnCall->output(parser);
      parser->writeInst("PUSH L");
      // The result of a function call is a value token.
      operands.push(Operand(OperandType::VALUE));
    }
  }
  // Move the evaluated expression output to the given variable location.
  if (varLoc.isReg()) {
    operandValueToReg(parser, operands.top(), varLoc.getReg());
  } else {
    // Get the variable's address in a register so that we can store to
    // that address.
    int offset = varLoc.getOffset();
    parser->writeInst("MOV M FP");
    if (0 != offset) {
      if (offset < 0) {
        parser->writeInst("MOVI L " + toHexStr(-offset));
        parser->writeInst("SUB M L");
      } else {
        parser->writeInst("MOVI L " + toHexStr(offset));
        parser->writeInst("ADD M L");
      }
    }
    // Pop the result from the expression and store it in the calculated
    // address.
    operandValueToReg(parser, operands.top(), "L");
    parser->writeInst("STOR L M");
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x148, %rsp            # imm = 0x148
movq %rdx, 0x108(%rsp)
movq %rsi, 0x38(%rsp)
movq %rdi, %r14
xorps %xmm0, %xmm0
leaq 0xb0(%rsp), %rdi
movaps %xmm0, 0x40(%rdi)
movaps %xmm0, 0x30(%rdi)
movaps %xmm0, 0x20(%rdi)
movaps %xmm0, 0x10(%rdi)
movaps %xmm0, (%rdi)
xorl %esi, %esi
callq 0x30592
movq 0x10(%r14), %rbx
movq 0x18(%r14), %rax
movq %rax, 0x110(%rsp)
cmpq %rax, %rbx
je 0x15e7f
movq (%rbx), %rbp
movq 0x8(%rbx), %r12
testq %r12, %r12
je 0x1544e
movq 0x31b5c(%rip), %rax     # 0x46f98
cmpb $0x0, (%rax)
je 0x15448
incl 0x8(%r12)
jmp 0x1544e
lock
incl 0x8(%r12)
testq %rbp, %rbp
je 0x15afb
movq %rbp, %rdi
leaq 0x308b7(%rip), %r14     # 0x45d18
movq %r14, %rsi
leaq 0x30f7d(%rip), %rdx     # 0x463e8
xorl %ecx, %ecx
callq 0x7330
movq %rax, %r15
movl $0x0, %eax
testq %r15, %r15
movq %r12, 0x70(%rsp)
je 0x154fd
testq %r12, %r12
je 0x1549c
movq 0x31b08(%rip), %rax     # 0x46f98
cmpb $0x0, (%rax)
je 0x154f4
incl 0x8(%r12)
jmp 0x154fa
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x309cf(%rip), %rdx     # 0x45e78
xorl %ecx, %ecx
callq 0x7330
movq %rax, 0xa8(%rsp)
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x308eb(%rip), %rdx     # 0x45db0
movq $-0x2, %rcx
callq 0x7330
movq %rax, 0x30(%rsp)
testq %rax, %rax
sete %al
movl %eax, 0x7c(%rsp)
xorl %r13d, %r13d
movq $0x0, 0x80(%rsp)
jmp 0x155db
lock
incl 0x8(%r12)
movq %r12, %rax
movq %rax, 0x80(%rsp)
testq %r12, %r12
sete %r12b
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x3095f(%rip), %rdx     # 0x45e78
xorl %ecx, %ecx
callq 0x7330
movq %rax, 0xa8(%rsp)
testq %rax, %rax
sete %al
orb %r12b, %al
movl $0x0, %r13d
jne 0x1555a
movq 0x31a58(%rip), %rax     # 0x46f98
cmpb $0x0, (%rax)
je 0x15550
movq 0x70(%rsp), %r13
incl 0x8(%r13)
jmp 0x1555a
movq 0x70(%rsp), %r13
lock
incl 0x8(%r13)
movq %rbp, %rdi
leaq 0x307b4(%rip), %rsi     # 0x45d18
leaq 0x30845(%rip), %rdx     # 0x45db0
movq $-0x2, %rcx
callq 0x7330
movq %rax, %r14
testq %rax, %rax
sete %al
je 0x155aa
movq 0x70(%rsp), %r12
testq %r12, %r12
je 0x155c7
movl %eax, 0x7c(%rsp)
movq 0x31a01(%rip), %rax     # 0x46f98
cmpb $0x0, (%rax)
je 0x15647
incl 0x8(%r12)
jmp 0x1564d
movl %eax, 0x7c(%rsp)
xorl %r14d, %r14d
movq $0x0, 0x90(%rsp)
movq 0x70(%rsp), %r12
jmp 0x15655
movq %r14, 0x30(%rsp)
movl $0x0, 0x7c(%rsp)
leaq 0x3073d(%rip), %r14     # 0x45d18
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x30dd0(%rip), %rdx     # 0x463b8
xorl %ecx, %ecx
callq 0x7330
movq %rax, 0xa0(%rsp)
movq %rbp, %rdi
movq %r14, %rsi
leaq 0x30e14(%rip), %rdx     # 0x46418
xorl %ecx, %ecx
callq 0x7330
testq %rax, %rax
sete %cl
movq $0x0, 0x98(%rsp)
movq $0x0, 0x90(%rsp)
movq $0x0, 0x88(%rsp)
movq %r13, %rbp
leaq 0x40(%rsp), %r13
movq 0x30(%rsp), %r14
jmp 0x15724
lock
incl 0x8(%r12)
movq %r12, 0x90(%rsp)
testq %r12, %r12
sete %r12b
movq %rbp, %rdi
leaq 0x306b2(%rip), %rsi     # 0x45d18
leaq 0x30d4b(%rip), %rdx     # 0x463b8
xorl %ecx, %ecx
callq 0x7330
testq %rax, %rax
sete %cl
orb %r12b, %cl
movq 0x70(%rsp), %rdx
movl $0x0, %ecx
jne 0x156a1
movq 0x31908(%rip), %rcx     # 0x46f98
cmpb $0x0, (%rcx)
je 0x1569a
incl 0x8(%rdx)
jmp 0x1569e
lock
incl 0x8(%rdx)
movq %rdx, %rcx
movq %rax, 0xa0(%rsp)
movq %rcx, 0x98(%rsp)
testq %rdx, %rdx
sete %r12b
movq %rbp, %rdi
leaq 0x30656(%rip), %rsi     # 0x45d18
leaq 0x30d4f(%rip), %rdx     # 0x46418
xorl %ecx, %ecx
callq 0x7330
testq %rax, %rax
sete %cl
orb %cl, %r12b
je 0x156f1
movq $0x0, 0x88(%rsp)
movq 0x70(%rsp), %r12
movq %r13, %rbp
jmp 0x1571f
movq 0x318a0(%rip), %rdx     # 0x46f98
cmpb $0x0, (%rdx)
movq %r13, %rbp
je 0x1570c
movq 0x70(%rsp), %r12
incl 0x8(%r12)
jmp 0x15717
movq 0x70(%rsp), %r12
lock
incl 0x8(%r12)
movq %r12, 0x88(%rsp)
leaq 0x40(%rsp), %r13
testq %r15, %r15
je 0x15896
movq 0xe0(%rsp), %r14
cmpq 0xe8(%rsp), %r14
jne 0x15753
movq 0xf8(%rsp), %rax
movq -0x8(%rax), %r14
movl $0x1e0, %eax            # imm = 0x1E0
addq %rax, %r14
movl -0x30(%r14), %eax
movl %eax, (%rsp)
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq -0x28(%r14), %rsi
movq -0x20(%r14), %rdx
addq %rsi, %rdx
leaq 0x8(%rsp), %rdi
callq 0xbd58
movzwl -0x8(%r14), %eax
movw %ax, 0x28(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x30730
leaq 0x58(%rsp), %rax
movq %rax, 0x48(%rsp)
movq $0x0, 0x50(%rsp)
movb $0x0, 0x58(%rsp)
cmpb $0x1, 0x30(%r15)
jne 0x15802
movq 0xe0(%rsp), %r14
cmpq 0xe8(%rsp), %r14
jne 0x157d5
movq 0xf8(%rsp), %rax
movq -0x8(%rax), %r14
movl $0x1e0, %eax            # imm = 0x1E0
addq %rax, %r14
movl -0x30(%r14), %eax
movl %eax, 0x40(%rsp)
leaq -0x28(%r14), %rsi
leaq 0x48(%rsp), %rdi
callq 0x71a0
movzwl -0x8(%r14), %eax
movw %ax, 0x68(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x30730
leaq 0x118(%rsp), %r14
movq %r14, %rdi
movq %r15, %rsi
movq 0x38(%rsp), %rdx
movq %r13, %rcx
movq %rsp, %r8
callq 0xe926
leaq 0xb0(%rsp), %rdi
movq %r14, %rsi
movq 0x80(%rsp), %r14
callq 0x307bc
movq 0x120(%rsp), %rdi
leaq 0x130(%rsp), %rax
cmpq %rax, %rdi
je 0x1585d
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x15879
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x15aab
movq 0x18(%rsp), %rsi
jmp 0x15aa3
movq 0xa8(%rsp), %rdx
testq %rdx, %rdx
je 0x1590e
leaq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x70(%rdx), %rsi
movq 0x78(%rdx), %rdx
addq %rsi, %rdx
movq %r13, %rdi
callq 0xbd58
movq %r13, %rdi
leaq 0x10(%rsp), %r13
movq %rsp, %r15
movl $0x7, %r8d
xorl %esi, %esi
xorl %edx, %edx
leaq 0x1ff3f(%rip), %rcx     # 0x3581b
callq 0x7320
movq %r13, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
movq 0x80(%rsp), %r14
je 0x15981
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x15989
cmpb $0x0, 0x7c(%rsp)
movq %rsp, %r15
je 0x15b1f
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
movq 0x80(%rsp), %r14
je 0x15b8c
movq (%rdi), %rax
callq *(%rax)
movl $0x3, (%rsp)
leaq 0x18(%rsp), %r13
movq %r13, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movb $0x0, 0x18(%rsp)
movw %ax, 0x28(%rsp)
leaq 0xb0(%rsp), %rdi
movq %r15, %rsi
callq 0x30aa8
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
jne 0x1588c
jmp 0x15aab
movups (%rcx), %xmm0
movups %xmm0, (%r13)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x38(%rsp), %rdi
movq %r15, %rsi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x159c4
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x159e0
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x72c0
movq %r13, (%rsp)
movq %r15, %rdi
leaq 0x1fdbd(%rip), %rsi     # 0x357ab
leaq 0x1fdbc(%rip), %rdx     # 0x357b1
callq 0xbdee
movq 0x38(%rsp), %rdi
movq %r15, %rsi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x15a1d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
leaq 0x2069c(%rip), %rdx     # 0x360cf
movq %rdx, %rsi
callq 0xbdee
movl $0x0, (%rsp)
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
addq %rsi, %rdx
leaq 0x8(%rsp), %rdi
callq 0xbd58
leaq 0xb0(%rsp), %rdi
movq %r15, %rsi
callq 0x30aa8
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x15a8f
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x15aab
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x88(%rsp), %rdi
testq %rdi, %rdi
je 0x15abd
callq 0x8036
movq 0x98(%rsp), %rdi
testq %rdi, %rdi
je 0x15acf
callq 0x8036
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x15ae1
callq 0x8036
testq %rbp, %rbp
je 0x15aee
movq %rbp, %rdi
callq 0x8036
testq %r14, %r14
je 0x15afb
movq %r14, %rdi
callq 0x8036
testq %r12, %r12
je 0x15b08
movq %r12, %rdi
callq 0x8036
addq $0x10, %rbx
cmpq 0x110(%rsp), %rbx
jne 0x15429
jmp 0x15e7f
movq 0x8(%r14), %rdx
testq %rdx, %rdx
movq %r14, %r15
movq 0x80(%rsp), %r14
je 0x15c3e
leaq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
movq (%r15), %rsi
addq %rsi, %rdx
movq %r13, %rdi
callq 0xbd58
movl $0x1, (%rsp)
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
addq %rsi, %rdx
leaq 0x8(%rsp), %rdi
callq 0xbd58
movq %rsp, %rsi
leaq 0xb0(%rsp), %rdi
callq 0x30aa8
jmp 0x15a73
testb %cl, %cl
leaq 0x10(%rsp), %r13
jne 0x15aab
movq %rax, %rdi
movq 0x38(%rsp), %rsi
callq 0x1649c
movq %r13, (%rsp)
movq %r15, %rdi
leaq 0x1fbf7(%rip), %rsi     # 0x357ab
leaq 0x1fbf6(%rip), %rdx     # 0x357b1
callq 0xbdee
movq 0x38(%rsp), %rdi
movq %r15, %rsi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x15be3
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
leaq 0x204d6(%rip), %rdx     # 0x360cf
movq %rdx, %rsi
callq 0xbdee
movl $0x2, (%rsp)
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
addq %rsi, %rdx
leaq 0x8(%rsp), %rdi
callq 0xbd58
leaq 0xb0(%rsp), %rdi
movq %r15, %rsi
callq 0x30aa8
jmp 0x15a73
leaq 0x10(%rsp), %r13
movq %r13, (%rsp)
movq %rsp, %r13
movq %r13, %rdi
leaq 0x1fd5d(%rip), %rsi     # 0x359b1
leaq 0x1fd5e(%rip), %rdx     # 0x359b9
movq %rbp, 0x30(%rsp)
callq 0xbdee
movq 0x38(%rsp), %rdi
movq %r13, %rsi
callq 0xab5a
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x15c92
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0x10(%rsp), %rax
movl 0x20(%r15), %ebp
testl %ebp, %ebp
je 0x15dda
movl %ebp, %eax
negl %eax
cmovsl %ebp, %eax
movzwl %ax, %esi
leaq 0x40(%rsp), %r15
movq %r15, %rdi
movl $0x4, %edx
callq 0x33681
movl $0x7, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x1fb4d(%rip), %rcx     # 0x3581b
callq 0x7320
leaq 0x10(%rsp), %rsi
movq %rsi, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x15cf9
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x15cff
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x38(%rsp), %rdi
movq %rsp, %rsi
callq 0xab5a
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x15d3f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x15d5b
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x72c0
testl %ebp, %ebp
leaq 0x10(%rsp), %rax
jle 0x15d90
movq %rax, (%rsp)
movq %rsp, %rbp
movq %rbp, %rdi
leaq 0x1fc45(%rip), %rsi     # 0x359ba
leaq 0x1fc45(%rip), %rdx     # 0x359c1
callq 0xbdee
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0xab5a
jmp 0x15dba
movq %rax, (%rsp)
movq %rsp, %rbp
movq %rbp, %rdi
leaq 0x1fc21(%rip), %rsi     # 0x359c2
leaq 0x1fc21(%rip), %rdx     # 0x359c9
callq 0xbdee
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
callq 0xab5a
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x15dda
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0x10(%rsp), %rax
movq %rax, (%rsp)
movq %rsp, %rbp
movq %rbp, %rdi
leaq 0x1f930(%rip), %rsi     # 0x3571b
leaq 0x1f92f(%rip), %rdx     # 0x35721
callq 0xbdee
movq 0x38(%rsp), %rdi
movq %rbp, %rsi
movq 0x30(%rsp), %rbp
callq 0xab5a
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x15e24
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0x50(%rsp), %rax
movq %rax, 0x40(%rsp)
leaq 0x40(%rsp), %rdi
leaq 0x20295(%rip), %rdx     # 0x360cf
movq %rdx, %rsi
callq 0xbdee
movl $0x0, (%rsp)
leaq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
addq %rsi, %rdx
leaq 0x8(%rsp), %rdi
callq 0xbd58
leaq 0xb0(%rsp), %rdi
movq %rsp, %rsi
callq 0x30aa8
jmp 0x15a73
movq 0x108(%rsp), %rcx
movq 0x8(%rcx), %rdx
testq %rdx, %rdx
je 0x15ee3
movq 0xe0(%rsp), %rbx
cmpq 0xe8(%rsp), %rbx
jne 0x15eb3
movq 0xf8(%rsp), %rax
movl $0x1e0, %ebx            # imm = 0x1E0
addq -0x8(%rax), %rbx
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rcx), %rsi
addq %rsi, %rdx
movq %rsp, %rdi
callq 0xbd58
addq $-0x30, %rbx
movq %rsp, %rdx
movq 0x38(%rsp), %rdi
movq %rbx, %rsi
callq 0x330b4
jmp 0x16182
movl 0x20(%rcx), %ebx
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x1fabb(%rip), %rsi     # 0x359b1
leaq 0x1fabc(%rip), %rdx     # 0x359b9
movq %rsp, %rdi
callq 0xbdee
movq %rsp, %rsi
movq 0x38(%rsp), %rdi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x15f28
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
testl %ebx, %ebx
je 0x160f6
js 0x15f80
movzwl %bx, %esi
leaq 0x40(%rsp), %rdi
movl $0x4, %edx
callq 0x33681
leaq 0x1f8d0(%rip), %rcx     # 0x3581b
leaq 0x40(%rsp), %rdi
movl $0x7, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7320
movq %r14, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x15fd7
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x15fde
negl %ebx
movzwl %bx, %esi
leaq 0x40(%rsp), %rdi
movl $0x4, %edx
callq 0x33681
leaq 0x1f880(%rip), %rcx     # 0x3581b
leaq 0x40(%rsp), %rdi
movl $0x7, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7320
movq %r14, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1605e
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x16065
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x38(%rsp), %rdi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x16018
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x16033
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x72c0
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x1f97a(%rip), %rsi     # 0x359ba
leaq 0x1f97a(%rip), %rdx     # 0x359c1
callq 0xbdee
movq %rsp, %rsi
movq 0x38(%rsp), %rdi
callq 0xab5a
jmp 0x160e0
movups (%rcx), %xmm0
movups %xmm0, (%r14)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x38(%rsp), %rdi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1609f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x160ba
movq 0x50(%rsp), %rsi
incq %rsi
callq 0x72c0
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x1f8fb(%rip), %rsi     # 0x359c2
leaq 0x1f8fb(%rip), %rdx     # 0x359c9
callq 0xbdee
movq %rsp, %rsi
movq 0x38(%rsp), %rdi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x160f6
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0xe0(%rsp), %rbx
cmpq 0xe8(%rsp), %rbx
jne 0x16119
movq 0xf8(%rsp), %rax
movl $0x1e0, %ebx            # imm = 0x1E0
addq -0x8(%rax), %rbx
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x1f9b2(%rip), %rsi     # 0x35ad8
leaq 0x1f9ac(%rip), %rdx     # 0x35ad9
callq 0xbdee
addq $-0x30, %rbx
movq %rsp, %rdx
movq 0x38(%rsp), %rdi
movq %rbx, %rsi
callq 0x330b4
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x1615c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
movq %rsp, %rdi
movq %r14, (%rdi)
leaq 0x1f861(%rip), %rsi     # 0x359ca
leaq 0x1f862(%rip), %rdx     # 0x359d2
callq 0xbdee
movq %rsp, %rsi
movq 0x38(%rsp), %rdi
callq 0xab5a
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x16198
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
leaq 0xb0(%rsp), %rdi
callq 0x2201c
addq $0x148, %rsp            # imm = 0x148
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x1627f
jmp 0x16398
jmp 0x162d6
jmp 0x162f8
jmp 0x161e8
jmp 0x16203
jmp 0x162f8
jmp 0x1627f
jmp 0x16398
jmp 0x162d6
jmp 0x162f8
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x16206
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
jmp 0x16206
movq %rax, %rbx
leaq 0x50(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x16486
movq 0x50(%rsp), %rsi
jmp 0x162eb
jmp 0x162f8
jmp 0x16300
jmp 0x16363
jmp 0x16393
jmp 0x16322
jmp 0x16393
jmp 0x16393
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
jne 0x16354
jmp 0x1636b
jmp 0x16368
jmp 0x16398
jmp 0x16305
jmp 0x16368
jmp 0x16398
jmp 0x1627f
jmp 0x16398
movq %rax, %rbx
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
jne 0x16337
jmp 0x16402
jmp 0x16398
jmp 0x162d6
jmp 0x162f8
jmp 0x162d6
jmp 0x162f8
jmp 0x162d6
jmp 0x162f8
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
movq 0x8(%rsp), %rdi
cmpq %r13, %rdi
jne 0x163f5
jmp 0x16402
jmp 0x16393
jmp 0x16300
jmp 0x16363
jmp 0x16393
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x16486
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
jmp 0x16486
movq %rax, %rbx
jmp 0x16486
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x1636b
movq 0x18(%rsp), %rsi
jmp 0x16359
jmp 0x16363
jmp 0x16393
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x16402
movq 0x10(%rsp), %rsi
jmp 0x163fa
jmp 0x16393
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r13, %rdi
je 0x1636b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x72c0
jmp 0x1636b
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
movq 0x40(%rsp), %rdi
leaq 0x50(%rsp), %rax
cmpq %rax, %rdi
je 0x16402
movq 0x50(%rsp), %rsi
jmp 0x163fa
jmp 0x16393
jmp 0x16389
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
jmp 0x163ca
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
jmp 0x16402
movq %rbp, 0x30(%rsp)
movq %rax, %rbx
movq 0x120(%rsp), %rdi
leaq 0x130(%rsp), %rax
cmpq %rax, %rdi
je 0x163ca
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x48(%rsp), %rdi
leaq 0x58(%rsp), %rax
cmpq %rax, %rdi
je 0x163e6
movq 0x58(%rsp), %rsi
incq %rsi
callq 0x72c0
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x16402
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x72c0
cmpq $0x0, 0x88(%rsp)
je 0x1641a
movq 0x88(%rsp), %rdi
callq 0x8036
cmpq $0x0, 0x98(%rsp)
je 0x16432
movq 0x98(%rsp), %rdi
callq 0x8036
cmpq $0x0, 0x90(%rsp)
je 0x1644a
movq 0x90(%rsp), %rdi
callq 0x8036
cmpq $0x0, 0x30(%rsp)
je 0x1645c
movq 0x30(%rsp), %rdi
callq 0x8036
cmpq $0x0, 0x80(%rsp)
je 0x16474
movq 0x80(%rsp), %rdi
callq 0x8036
cmpq $0x0, 0x70(%rsp)
je 0x16486
movq 0x70(%rsp), %rdi
callq 0x8036
leaq 0xb0(%rsp), %rdi
callq 0x2201c
movq %rbx, %rdi
callq 0x74f0
nop