// File: /workspace/github_c_makefile_star2_O1/ejunjsh[P]mycc/gen.c
// Function: genAST
int genAST(struct ASTnode *n, int iflabel, int looptoplabel,
	   int loopendlabel, int parentASTop) {
  int leftreg = NOREG, rightreg = NOREG;

  // 空树，什么都不做
  if (n == NULL)
    return (NOREG);

  // 在输出中更新行号
  update_line(n);

  // 上面我们定义了一些语法树节点处理的函数，所以，如果遇到某些操作，就直接扔给相关函数处理即可
  switch (n->op) {
  case A_IF:
    return (genIF(n, looptoplabel, loopendlabel));
  case A_WHILE:
    return (genWHILE(n));
  case A_SWITCH:
    return (genSWITCH(n));
  case A_FUNCCALL:
    return (gen_funccall(n));
  case A_TERNARY:
    return (gen_ternary(n));
  case A_LOGOR:
    return (gen_logandor(n));
  case A_LOGAND:
    return (gen_logandor(n));
  case A_GLUE:
    // 执行每个子语句，然后释放所有寄存器
    if (n->left != NULL)
      genAST(n->left, iflabel, looptoplabel, loopendlabel, n->op);
    genfreeregs(NOREG);
    if (n->right != NULL)
      genAST(n->right, iflabel, looptoplabel, loopendlabel, n->op);
    genfreeregs(NOREG);
    return (NOREG);
  case A_FUNCTION:
    // 生成函数的前置汇编，然会再到子树的汇编
    cgfuncpreamble(n->sym);
    genAST(n->left, NOLABEL, NOLABEL, NOLABEL, n->op);
    cgfuncpostamble(n->sym);
    return (NOREG);
  }

  // 下面是通用语法树处理

  // 获得左树和右数的值
  if (n->left)
    leftreg = genAST(n->left, NOLABEL, NOLABEL, NOLABEL, n->op);
  if (n->right)
    rightreg = genAST(n->right, NOLABEL, NOLABEL, NOLABEL, n->op);

  switch (n->op) {
  case A_ADD:
    return (cgadd(leftreg, rightreg));
  case A_SUBTRACT:
    return (cgsub(leftreg, rightreg));
  case A_MULTIPLY:
    return (cgmul(leftreg, rightreg));
  case A_DIVIDE:
    return (cgdivmod(leftreg, rightreg, A_DIVIDE));
  case A_MOD:
    return (cgdivmod(leftreg, rightreg, A_MOD));
  case A_AND:
    return (cgand(leftreg, rightreg));
  case A_OR:
    return (cgor(leftreg, rightreg));
  case A_XOR:
    return (cgxor(leftreg, rightreg));
  case A_LSHIFT:
    return (cgshl(leftreg, rightreg));
  case A_RSHIFT:
    return (cgshr(leftreg, rightreg));
  case A_EQ:
  case A_NE:
  case A_LT:
  case A_GT:
  case A_LE:
  case A_GE:
    // 如果父节点是A_IF, A_WHILE 或者 A_TERNARY，
    // 生成比较和跳转的代码，否则比较寄存器，然后根据比较结果设置其中一个寄存器的值为1或0
    if (parentASTop == A_IF || parentASTop == A_WHILE || parentASTop == A_TERNARY)
      return (cgcompare_and_jump(n->op, leftreg, rightreg, iflabel, n->left->type));
    else
      return (cgcompare_and_set(n->op, leftreg, rightreg, n->left->type));
  case A_INTLIT:
    return (cgloadint(n->atu.a_intvalue, n->type));
  case A_STRLIT:
    return (cgloadglobstr(n->atu.a_intvalue));
  case A_IDENT:
    // 如果是右值或者是解引用，则加载值
    if (n->rvalue || parentASTop == A_DEREF) {
      return (cgloadvar(n->sym, n->op));
    } else
      return (NOREG);
  case A_ASPLUS:
  case A_ASMINUS:
  case A_ASSTAR:
  case A_ASSLASH:
  case A_ASMOD:
  case A_ASSIGN:

    // 对于'+='和相关操作，生成合适的汇编代码，同时获取结果寄存器
    // 然后令右节点等于左节点，这样就变成赋值操作了
    switch (n->op) {
    case A_ASPLUS:
      leftreg = cgadd(leftreg, rightreg);
      n->right = n->left;
      break;
    case A_ASMINUS:
      leftreg = cgsub(leftreg, rightreg);
      n->right = n->left;
      break;
    case A_ASSTAR:
      leftreg = cgmul(leftreg, rightreg);
      n->right = n->left;
      break;
    case A_ASSLASH:
      leftreg = cgdivmod(leftreg, rightreg, A_DIVIDE);
      n->right = n->left;
      break;
    case A_ASMOD:
      leftreg = cgdivmod(leftreg, rightreg, A_MOD);
      n->right = n->left;
      break;
    }

    // 赋值代码
    switch (n->right->op) {
    case A_IDENT:
      if (n->right->sym->class == C_GLOBAL ||
        n->right->sym->class == C_EXTERN ||
        n->right->sym->class == C_STATIC)
	      return (cgstorglob(leftreg, n->right->sym));
      else
	      return (cgstorlocal(leftreg, n->right->sym));
    case A_DEREF:
      return (cgstorderef(leftreg, rightreg, n->right->type));
    default:
      fatald("Can't A_ASSIGN in genAST(), op", n->op);
    }
  case A_WIDEN:
    // 加宽子节点的类型到父节点的类型
    return (cgwiden(leftreg, n->left->type, n->type));
  case A_RETURN:
    cgreturn(leftreg, Functionid);
    return (NOREG);
  case A_ADDR:
    // 如果有符号，直接获取它的地址，否则左寄存器已经有地址，因为这是个成员访问
    if (n->sym != NULL)
      return (cgaddress(n->sym));
    else
      return (leftreg);
  case A_DEREF:
    // 如果是右值，解引用来获得值
    // 否则直接返回，留给A_ASSIGN来处理
    if (n->rvalue)
      return (cgderef(leftreg, n->left->type));
    else
      return (leftreg);
  case A_SCALE:
    // 小优化：如果大小是2的幂次方，就使用位移来处理
    switch (n->atu.a_size) {
    case 2:
      return (cgshlconst(leftreg, 1));
    case 4:
      return (cgshlconst(leftreg, 2));
    case 8:
      return (cgshlconst(leftreg, 3));
    default:
      // 加载大小到寄存器，然后用左寄存器相乘
      rightreg = cgloadint(n->atu.a_size, P_INT);
      return (cgmul(leftreg, rightreg));
    }
  case A_POSTINC:
  case A_POSTDEC:
    // 例如：i++
    // 先返回i，再++
    return (cgloadvar(n->sym, n->op));
  case A_PREINC:
  case A_PREDEC:
    // 例如：++i
    // 先++，再返回i
    return (cgloadvar(n->left->sym, n->op));
  case A_NEGATE:
    return (cgnegate(leftreg));
  case A_INVERT:
    return (cginvert(leftreg));
  case A_LOGNOT:
    return (cglognot(leftreg));
  case A_TOBOOL:
    // 如果父节点是A_IF, A_WHILE，
    // 生成比较和跳转的代码，否则根据是零还是非零来设置寄存器的值为0或1
    return (cgboolean(leftreg, parentASTop, iflabel));
  case A_BREAK:
    cgjump(loopendlabel);
    return (NOREG);
  case A_CONTINUE:
    cgjump(looptoplabel);
    return (NOREG);
  case A_CAST:
    return (leftreg);		// 什么都不用做
  default:
    fatald("Unknown AST operator", n->op);
  }
  return (NOREG);	
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
testq %rdi, %rdi
je 0x5bba
movl %r8d, %ebx
movl %ecx, %r15d
movl %edx, %r12d
movl %esi, %r13d
movq %rdi, %r14
movl 0x40(%rdi), %edi
testl %edi, %edi
je 0x57dc
leaq 0x9b97(%rip), %rax      # 0xf368
cmpl %edi, (%rax)
je 0x57dc
movl %edi, (%rax)
callq 0x3c3c
movl 0x4(%r14), %r8d
cmpl $0x1c, %r8d
jle 0x5854
leal -0x1d(%r8), %eax
cmpl $0x6, %eax
ja 0x5884
leaq 0x59c2(%rip), %rcx      # 0xb1bc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x20(%r14), %rdi
testq %rdi, %rdi
je 0x5820
movl %r13d, %esi
movl %r12d, %edx
movl %r15d, %ecx
movl $0x1d, %r8d
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
movq 0x30(%r14), %rdi
testq %rdi, %rdi
je 0x5845
movl 0x4(%r14), %r8d
movl %r13d, %esi
movl %r12d, %edx
movl %r15d, %ecx
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
jmp 0x5bb5
cmpl $0x7, %r8d
je 0x5bc9
cmpl $0x8, %r8d
je 0x586e
cmpl $0x9, %r8d
jne 0x5991
movq %r14, %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x6046
cmpl $0x31, %r8d
jne 0x5991
movslq (%r14), %rax
leaq 0x4(,%rax,4), %rbx
movq %rbx, %rdi
callq 0x2120
movq %rax, %r15
movq %rbx, %rdi
callq 0x2120
movq %rax, %r12
movl 0x983b(%rip), %ebx      # 0xf0f0
leal 0x1(%rbx), %eax
movl %eax, -0x2c(%rbp)
leal 0x2(%rbx), %eax
movl %eax, 0x982c(%rip)      # 0xf0f0
movq 0x20(%r14), %rdi
xorl %r13d, %r13d
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
xorl %r8d, %r8d
callq 0x5795
movl %eax, -0x34(%rbp)
movq %rbx, -0x40(%rbp)
movl %ebx, %edi
callq 0x36fb
movl -0x34(%rbp), %edi
callq 0x24bc
movq 0x30(%r14), %rbx
movl -0x2c(%rbp), %eax
movl %eax, -0x30(%rbp)
testq %rbx, %rbx
je 0x5969
xorl %r14d, %r14d
xorl %r13d, %r13d
movl -0x2c(%rbp), %eax
movl %eax, -0x30(%rbp)
movl 0x97e0(%rip), %edi      # 0xf0f0
leal 0x1(%rdi), %eax
movl %eax, 0x97d7(%rip)      # 0xf0f0
movl %edi, (%r12,%r14)
movl (%rbx), %eax
movl %eax, (%r15,%r14)
callq 0x293e
cmpl $0x33, 0x4(%rbx)
jne 0x5937
movl (%r12,%r14), %eax
movl %eax, -0x30(%rbp)
jmp 0x593a
incl %r13d
movq 0x20(%rbx), %rdi
testq %rdi, %rdi
je 0x5952
xorl %esi, %esi
xorl %edx, %edx
movl -0x2c(%rbp), %ecx
xorl %r8d, %r8d
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
movq 0x30(%rbx), %rbx
addq $0x4, %r14
testq %rbx, %rbx
jne 0x590a
movl -0x2c(%rbp), %ebx
movl %ebx, %edi
callq 0x36fb
movl -0x34(%rbp), %edi
movl %r13d, %esi
movq -0x40(%rbp), %rdx
movq %r12, %rcx
movq %r15, %r8
movl -0x30(%rbp), %r9d
callq 0x3acc
jmp 0x5b34
movq 0x20(%r14), %rdi
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
testq %rdi, %rdi
je 0x59b6
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
movl %eax, -0x2c(%rbp)
movq 0x30(%r14), %rdi
testq %rdi, %rdi
je 0x59d4
movl 0x4(%r14), %r8d
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
movl %eax, %r9d
movl 0x4(%r14), %esi
leal -0x1(%rsi), %eax
cmpl $0x33, %eax
ja 0x5fda
leaq 0x57ed(%rip), %rcx      # 0xb1d8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
cmpl $0x1f, %ebx
ja 0x5c85
movl $0xc0000080, %eax       # imm = 0xC0000080
btl %ebx, %eax
jae 0x5c85
movq 0x20(%r14), %rax
movl 0x8(%rax), %r8d
movl %esi, %edi
movl -0x2c(%rbp), %esi
movl %r9d, %edx
movl %r13d, %ecx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x371a
movl 0x96b8(%rip), %r15d     # 0xf0f0
leal 0x1(%r15), %ebx
leal 0x2(%r15), %eax
movl %eax, 0x96aa(%rip)      # 0xf0f0
movl %r15d, %edi
callq 0x293e
movq 0x20(%r14), %rdi
movl 0x4(%r14), %r8d
movl %ebx, %esi
movl %r15d, %edx
movl %ebx, %ecx
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
movq 0x30(%r14), %rdi
movl 0x4(%r14), %r8d
xorl %esi, %esi
movl %r15d, %edx
movl %ebx, %ecx
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
movl %r15d, %edi
callq 0x36fb
jmp 0x5b34
movl 0x9652(%rip), %r13d     # 0xf0f0
leal 0x1(%r13), %ebx
movl %ebx, 0x9648(%rip)      # 0xf0f0
cmpq $0x0, 0x30(%r14)
je 0x5ab9
leal 0x2(%r13), %eax
movl %eax, 0x9637(%rip)      # 0xf0f0
movq 0x20(%r14), %rdi
movl %r13d, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
movq 0x28(%r14), %rdi
movl 0x4(%r14), %r8d
xorl %esi, %esi
movl %r12d, %edx
movl %r15d, %ecx
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
cmpq $0x0, 0x30(%r14)
je 0x5b00
movl %ebx, %edi
callq 0x36fb
movl %r13d, %edi
callq 0x293e
movq 0x30(%r14), %rdi
testq %rdi, %rdi
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
je 0x5bba
movl 0x4(%r14), %r8d
xorl %esi, %esi
xorl %edx, %edx
movl %r15d, %ecx
callq 0x5795
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x24bc
movl %ebx, %edi
callq 0x293e
jmp 0x5bb5
movq 0x20(%r14), %r15
callq 0x25cb
xorl %ebx, %ebx
testq %r15, %r15
je 0x5b77
movq 0x30(%r15), %rdi
movl 0x4(%r15), %r8d
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
movl (%r15), %esi
movl %eax, %edi
callq 0x3290
testl %ebx, %ebx
jne 0x5b71
movl (%r15), %ebx
movq 0x20(%r15), %r15
jmp 0x5b48
movq 0x38(%r14), %rdi
movl %ebx, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x31f4
movq 0x38(%r14), %rdi
callq 0x26cc
movq 0x20(%r14), %rdi
movl 0x4(%r14), %r8d
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
movq 0x38(%r14), %rdi
callq 0x28d8
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movl 0x9520(%rip), %r15d     # 0xf0f0
leal 0x1(%r15), %ebx
leal 0x2(%r15), %eax
movl %eax, 0x9512(%rip)      # 0xf0f0
movq 0x20(%r14), %rdi
movl %r15d, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
callq 0x24e7
movl %eax, %r13d
movq 0x28(%r14), %rdi
movl 0x4(%r14), %r8d
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
movl %eax, %r12d
movl %eax, %edi
movl %r13d, %esi
callq 0x3c07
movl %r12d, %edi
callq 0x255c
movl %ebx, %edi
callq 0x36fb
movl %r15d, %edi
callq 0x293e
movq 0x30(%r14), %rdi
movl 0x4(%r14), %r8d
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x5795
movl %eax, %r14d
movl %eax, %edi
movl %r13d, %esi
callq 0x3c07
movl %r14d, %edi
callq 0x255c
movl %ebx, %edi
callq 0x293e
movl %r13d, %eax
jmp 0x5bba
movq 0x20(%r14), %rax
movq 0x38(%rax), %rdi
jmp 0x5c72
movq 0x38(%r14), %rdi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x299b
movq 0x20(%r14), %rax
movl 0x8(%rax), %ecx
movl %esi, %edi
movl -0x2c(%rbp), %esi
movl %r9d, %edx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x35ff
movl %r15d, %edi
jmp 0x5dbe
leaq 0x96c2(%rip), %rax      # 0xf378
movq (%rax), %rsi
movl -0x2c(%rbp), %edi
callq 0x3807
jmp 0x5bb5
movl -0x2c(%rbp), %edi
movl %ebx, %esi
movl %r13d, %edx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x311c
movl -0x2c(%rbp), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x3036
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2cd6
movl -0x2c(%rbp), %edi
movl %r9d, %esi
movl $0x18, %edx
jmp 0x5e1f
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2e60
cmpl $0x24, %ebx
je 0x5d4e
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl $0x0, 0x18(%r14)
je 0x5bba
movq 0x38(%r14), %rdi
movl $0x1c, %esi
jmp 0x5c72
movl (%r14), %edi
movl 0x8(%r14), %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x295d
cmpl $0x0, 0x18(%r14)
je 0x5d9a
movq 0x20(%r14), %rax
movl 0x8(%rax), %esi
movl -0x2c(%rbp), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x394b
movl -0x2c(%rbp), %eax
jmp 0x5bba
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ea6
movl %r12d, %edi
callq 0x36fb
jmp 0x5bb5
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2eec
movq 0x38(%r14), %rdi
testq %rdi, %rdi
movl -0x2c(%rbp), %eax
je 0x5bba
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x38cb
movl -0x2c(%rbp), %edi
movl %r9d, %ebx
movl %r9d, %esi
movl $0x18, %edx
jmp 0x5e40
movl -0x2c(%rbp), %edi
movl %r9d, %esi
movl $0x19, %edx
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2da8
movl -0x2c(%rbp), %edi
movl %r9d, %ebx
movl %r9d, %esi
movl $0x19, %edx
callq 0x2da8
jmp 0x5eea
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d1c
movl -0x2c(%rbp), %edi
movl %r9d, %ebx
movl %r9d, %esi
callq 0x2d62
jmp 0x5eea
movl -0x2c(%rbp), %edi
movl %r9d, %ebx
movl %r9d, %esi
callq 0x2cd6
jmp 0x5eea
movl (%r14), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2c98
movl (%r14), %edi
cmpl $0x8, %edi
je 0x600a
cmpl $0x4, %edi
movl -0x2c(%rbp), %ebx
je 0x6001
cmpl $0x2, %edi
jne 0x6025
movl %ebx, %edi
movl $0x1, %esi
jmp 0x6012
movl -0x2c(%rbp), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x306e
movl -0x2c(%rbp), %edi
movl %r9d, %ebx
movl %r9d, %esi
callq 0x2d1c
movl %eax, -0x2c(%rbp)
movq 0x20(%r14), %rax
movq %rax, 0x30(%r14)
movl %ebx, %r9d
movq 0x30(%r14), %rax
movl 0x4(%rax), %ecx
cmpl $0x24, %ecx
je 0x5f3d
cmpl $0x1c, %ecx
jne 0x5f59
movq 0x38(%rax), %rsi
movl 0x24(%rsi), %eax
cmpl $0x5, %eax
ja 0x5feb
movl $0x32, %ecx
btl %eax, %ecx
jae 0x5feb
movl -0x2c(%rbp), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x3325
movl 0x8(%rax), %edx
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x39f7
movl 0x4(%r14), %esi
leaq 0x5344(%rip), %rdi      # 0xb2a8
callq 0x68e9
movq 0x20(%r14), %rax
movl 0x8(%rax), %esi
movl 0x8(%r14), %edx
movl -0x2c(%rbp), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x37ff
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2f98
movl -0x2c(%rbp), %edi
movl %r9d, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2f32
movl -0x2c(%rbp), %edi
movl %r9d, %esi
jmp 0x6033
movl -0x2c(%rbp), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2ffe
leaq 0x52e6(%rip), %rdi      # 0xb2c7
callq 0x68e9
jmp 0x5bb5
movl -0x2c(%rbp), %edi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x282b
movl %ebx, %edi
movl $0x2, %esi
jmp 0x6012
movl -0x2c(%rbp), %edi
movl $0x3, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x32eb
movl $0x30, %esi
callq 0x295d
movl %ebx, %edi
movl %eax, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2d62