// File: /workspace/github_c_makefile_star2_O0/cogbee[P]vmir-latest/src/vmir_vm.c
// Function: emit_binop
static void
emit_binop(ir_unit_t *iu, ir_instr_binary_t *ii)
{
  const int binop = ii->op;
  const ir_value_t *lhs = value_get(iu, ii->lhs_value.value);
  const ir_value_t *rhs = value_get(iu, ii->rhs_value.value);
  const ir_value_t *ret = value_get(iu, ii->super.ii_ret.value);
  vm_op_t op;
  const ir_type_t *it = type_get(iu, ii->lhs_value.type);

  if(lhs->iv_class == IR_VC_REGFRAME &&
     rhs->iv_class == IR_VC_REGFRAME) {

    int lhsreg = value_reg(lhs);

    switch(legalize_type(it)) {

    case IR_TYPE_INT1:
    case IR_TYPE_INT32:
      op = VM_ADD_R32 + binop;
      emit_op3(iu, op, value_reg(ret), lhsreg, value_reg(rhs));
      return;

    case IR_TYPE_INT8:
      switch(binop) {
      case BINOP_SDIV: op = VM_SDIV_R8;         break;
      case BINOP_SREM: op = VM_SREM_R8;         break;
      case BINOP_ASHR: op = VM_ASHR_R8;         break;
      case BINOP_ROL:  op = VM_ROL_R8;          break;
      case BINOP_ROR:  op = VM_ROR_R8;          break;
      default:         op = VM_ADD_R32 + binop; break;
        break;
      }
      emit_op3(iu, op, value_reg(ret), value_reg(lhs), value_reg(rhs));
      return;

    case IR_TYPE_INT16:
      switch(binop) {
      case BINOP_SDIV: op = VM_SDIV_R16;        break;
      case BINOP_SREM: op = VM_SREM_R16;        break;
      case BINOP_ASHR: op = VM_ASHR_R16;        break;
      case BINOP_ROL:  op = VM_ROL_R16;         break;
      case BINOP_ROR:  op = VM_ROR_R16;         break;
      default:         op = VM_ADD_R32 + binop; break;
        break;
      }
      emit_op3(iu, op, value_reg(ret), value_reg(lhs), value_reg(rhs));
      return;

    case IR_TYPE_INT64:
      op = VM_ADD_R64 + binop;
      emit_op3(iu, op, value_reg(ret), value_reg(lhs), value_reg(rhs));
      return;

    case IR_TYPE_DOUBLE:

      switch(binop) {
      case BINOP_ADD:  op = VM_ADD_DBL; break;
      case BINOP_SUB:  op = VM_SUB_DBL; break;
      case BINOP_MUL:  op = VM_MUL_DBL; break;
      case BINOP_SDIV:
      case BINOP_UDIV: op = VM_DIV_DBL; break;
      default:
        parser_error(iu, "Can't binop %d for double", binop);
      }
      emit_op3(iu, op, value_reg(ret), value_reg(lhs), value_reg(rhs));
      break;

    case IR_TYPE_FLOAT:

      switch(binop) {
      case BINOP_ADD:  op = VM_ADD_FLT; break;
      case BINOP_SUB:  op = VM_SUB_FLT; break;
      case BINOP_MUL:  op = VM_MUL_FLT; break;
      case BINOP_SDIV:
      case BINOP_UDIV: op = VM_DIV_FLT; break;
      default:
        parser_error(iu, "Can't binop %d for float", binop);
      }
      emit_op3(iu, op, value_reg(ret), value_reg(lhs), value_reg(rhs));
      break;


    default:
      parser_error(iu, "Can't binop types %s", type_str(iu, it));
    }

  } else if(lhs->iv_class == IR_VC_REGFRAME &&
            rhs->iv_class == IR_VC_CONSTANT) {

    int lhsreg = value_reg(lhs);

    switch(legalize_type(it)) {
    case IR_TYPE_INT8:

      switch(binop) {
      case BINOP_SDIV:
        emit_op2(iu, VM_SDIV_R8C, value_reg(ret), value_reg(lhs));
        emit_i8(iu, value_get_const32(iu, rhs));
        return;
      case BINOP_SREM:
        emit_op2(iu, VM_SREM_R8C, value_reg(ret), value_reg(lhs));
        emit_i8(iu, value_get_const32(iu, rhs));
        return;
      case BINOP_ASHR:
        emit_op2(iu, VM_ASHR_R8C, value_reg(ret), value_reg(lhs));
        emit_i8(iu, value_get_const32(iu, rhs));
        return;
      default:
        op = VM_ADD_R16C + binop;
        emit_op2(iu, op, value_reg(ret), value_reg(lhs));
        emit_i16(iu, value_get_const32(iu, rhs) & 0xff);
        return;
      }

    case IR_TYPE_INT16:
      op = VM_ADD_R16C + binop;
      emit_op2(iu, op, value_reg(ret), value_reg(lhs));
      emit_i16(iu, value_get_const32(iu, rhs));
      return;

    case IR_TYPE_INT1:
    case IR_TYPE_INT32:
      {
        const uint32_t u32 = value_get_const32(iu, rhs);
        if((binop == BINOP_ADD && u32 == 1) ||
           (binop == BINOP_SUB && u32 == -1)) {
          emit_op2(iu, VM_INC_R32, value_reg(ret), value_reg(lhs));
          return;
        }
        if((binop == BINOP_ADD && u32 == -1) ||
           (binop == BINOP_SUB && u32 == 1)) {
          emit_op2(iu, VM_DEC_R32, value_reg(ret), value_reg(lhs));
          return;
        }

        op = VM_ADD_R32C + binop;
        emit_op2(iu, op, value_reg(ret), lhsreg);
        emit_i32(iu, value_get_const32(iu, rhs));
      }
      return;

    case IR_TYPE_INT64:
      vm_align32(iu, 1);
      op = VM_ADD_R64C + binop;
      emit_op2(iu, op, value_reg(ret), value_reg(lhs));
      emit_i64(iu, value_get_const64(iu, rhs));
      return;

    case IR_TYPE_DOUBLE:

      switch(binop) {
      case BINOP_ADD:  op = VM_ADD_DBLC; break;
      case BINOP_SUB:  op = VM_SUB_DBLC; break;
      case BINOP_MUL:  op = VM_MUL_DBLC; break;
      case BINOP_SDIV:
      case BINOP_UDIV: op = VM_DIV_DBLC; break;
      default:
        parser_error(iu, "Can't binop %d for double", binop);
      }
      vm_align32(iu, 1);
      emit_op2(iu, op, value_reg(ret), value_reg(lhs));
      emit_i64(iu, value_get_const64(iu, rhs));
      break;

    case IR_TYPE_FLOAT:

      switch(binop) {
      case BINOP_ADD:  op = VM_ADD_FLTC; break;
      case BINOP_SUB:  op = VM_SUB_FLTC; break;
      case BINOP_MUL:  op = VM_MUL_FLTC; break;
      case BINOP_SDIV:
      case BINOP_UDIV: op = VM_DIV_FLTC; break;
      default:
        parser_error(iu, "Can't binop %d for float", binop);
      }
      vm_align32(iu, 1);
      emit_op2(iu, op, value_reg(ret), value_reg(lhs));
      emit_i32(iu, value_get_const32(iu, rhs));
      break;

    default:
      parser_error(iu, "Can't binop types %s", type_str(iu, it));
    }

  } else {
    parser_error(iu, "Can't binop value class %d and %d",
                 lhs->iv_class, rhs->iv_class);
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x200, %rsp            # imm = 0x200
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl 0x58(%rax), %eax
movl %eax, -0x14(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x5c(%rax), %esi
callq 0x20ee0
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x64(%rax), %esi
callq 0x20ee0
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x2c(%rax), %esi
callq 0x20ee0
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rax
movl 0x60(%rax), %esi
callq 0x1ee20
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
cmpl $0x5, (%rax)
jne 0x2c37a
movq -0x28(%rbp), %rax
cmpl $0x5, (%rax)
jne 0x2c37a
movq -0x20(%rbp), %rdi
callq 0x321a0
movl %eax, -0x44(%rbp)
movq -0x40(%rbp), %rdi
callq 0x45d0
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, -0x58(%rbp)
subl $0x7, %eax
ja 0x2c339
movq -0x58(%rbp), %rax
leaq 0x11b8f(%rip), %rcx     # 0x3dac8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x14(%rbp), %eax
addl $0x24, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x68(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x60(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x5c(%rbp)
movl -0x44(%rbp), %eax
movw %ax, -0x5a(%rbp)
movq -0x28(%rbp), %rdi
callq 0x321a0
movq -0x68(%rbp), %rdi
movl -0x60(%rbp), %esi
movw -0x5c(%rbp), %dx
movw -0x5a(%rbp), %cx
movzwl %dx, %edx
movzwl %cx, %ecx
movzwl %ax, %r8d
callq 0x32430
jmp 0x2ca75
movl -0x14(%rbp), %eax
addl $-0x4, %eax
movl %eax, %ecx
movq %rcx, -0x70(%rbp)
subl $0xa, %eax
ja 0x2bfeb
movq -0x70(%rbp), %rax
leaq 0x11b87(%rip), %rcx     # 0x3db3c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x6, -0x34(%rbp)
jmp 0x2bff4
movl $0x7, -0x34(%rbp)
jmp 0x2bff4
movl $0x8, -0x34(%rbp)
jmp 0x2bff4
movl $0x9, -0x34(%rbp)
jmp 0x2bff4
movl $0xa, -0x34(%rbp)
jmp 0x2bff4
movl -0x14(%rbp), %eax
addl $0x24, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x80(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x78(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x74(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movw %ax, -0x72(%rbp)
movq -0x28(%rbp), %rdi
callq 0x321a0
movq -0x80(%rbp), %rdi
movl -0x78(%rbp), %esi
movw -0x74(%rbp), %dx
movw -0x72(%rbp), %cx
movzwl %dx, %edx
movzwl %cx, %ecx
movzwl %ax, %r8d
callq 0x32430
jmp 0x2ca75
movl -0x14(%rbp), %eax
addl $-0x4, %eax
movl %eax, %ecx
movq %rcx, -0x88(%rbp)
subl $0xa, %eax
ja 0x2c0a0
movq -0x88(%rbp), %rax
leaq 0x11aa6(%rip), %rcx     # 0x3db10
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x10, -0x34(%rbp)
jmp 0x2c0a9
movl $0x11, -0x34(%rbp)
jmp 0x2c0a9
movl $0x12, -0x34(%rbp)
jmp 0x2c0a9
movl $0x13, -0x34(%rbp)
jmp 0x2c0a9
movl $0x14, -0x34(%rbp)
jmp 0x2c0a9
movl -0x14(%rbp), %eax
addl $0x24, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x98(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x90(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x8c(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movw %ax, -0x8a(%rbp)
movq -0x28(%rbp), %rdi
callq 0x321a0
movq -0x98(%rbp), %rdi
movl -0x90(%rbp), %esi
movw -0x8c(%rbp), %dx
movw -0x8a(%rbp), %cx
movzwl %dx, %edx
movzwl %cx, %ecx
movzwl %ax, %r8d
callq 0x32430
jmp 0x2ca75
movl -0x14(%rbp), %eax
addl $0x44, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0xa0(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x9c(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movw %ax, -0x9a(%rbp)
movq -0x28(%rbp), %rdi
callq 0x321a0
movq -0xa8(%rbp), %rdi
movl -0xa0(%rbp), %esi
movw -0x9c(%rbp), %dx
movw -0x9a(%rbp), %cx
movzwl %dx, %edx
movzwl %cx, %ecx
movzwl %ax, %r8d
callq 0x32430
jmp 0x2ca75
movl -0x14(%rbp), %eax
movq %rax, -0xb0(%rbp)
subq $0x4, %rax
ja 0x2c1d5
movq -0xb0(%rbp), %rax
leaq 0x11954(%rip), %rcx     # 0x3dafc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x62, -0x34(%rbp)
jmp 0x2c1f7
movl $0x63, -0x34(%rbp)
jmp 0x2c1f7
movl $0x64, -0x34(%rbp)
jmp 0x2c1f7
movl $0x65, -0x34(%rbp)
jmp 0x2c1f7
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %r8d
leaq 0x13d3b(%rip), %rsi     # 0x3ff1f
movl $0xa46, %edx            # imm = 0xA46
leaq 0x13f69(%rip), %rcx     # 0x40159
movb $0x0, %al
callq 0x18220
movq -0x8(%rbp), %rax
movq %rax, -0xc0(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0xb8(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0xb4(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movw %ax, -0xb2(%rbp)
movq -0x28(%rbp), %rdi
callq 0x321a0
movq -0xc0(%rbp), %rdi
movl -0xb8(%rbp), %esi
movw -0xb4(%rbp), %dx
movw -0xb2(%rbp), %cx
movzwl %dx, %edx
movzwl %cx, %ecx
movzwl %ax, %r8d
callq 0x32430
jmp 0x2c375
movl -0x14(%rbp), %eax
movq %rax, -0xc8(%rbp)
subq $0x4, %rax
ja 0x2c2ae
movq -0xc8(%rbp), %rax
leaq 0x11867(%rip), %rcx     # 0x3dae8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x6a, -0x34(%rbp)
jmp 0x2c2d0
movl $0x6b, -0x34(%rbp)
jmp 0x2c2d0
movl $0x6c, -0x34(%rbp)
jmp 0x2c2d0
movl $0x6d, -0x34(%rbp)
jmp 0x2c2d0
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %r8d
leaq 0x13c62(%rip), %rsi     # 0x3ff1f
movl $0xa54, %edx            # imm = 0xA54
leaq 0x13eaa(%rip), %rcx     # 0x40173
movb $0x0, %al
callq 0x18220
movq -0x8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0xd0(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0xcc(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movw %ax, -0xca(%rbp)
movq -0x28(%rbp), %rdi
callq 0x321a0
movq -0xd8(%rbp), %rdi
movl -0xd0(%rbp), %esi
movw -0xcc(%rbp), %dx
movw -0xca(%rbp), %cx
movzwl %dx, %edx
movzwl %cx, %ecx
movzwl %ax, %r8d
callq 0x32430
jmp 0x2c375
movq -0x8(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x4760
movq -0xe0(%rbp), %rdi
movq %rax, %r8
leaq 0x13bbd(%rip), %rsi     # 0x3ff1f
movl $0xa5b, %edx            # imm = 0xA5B
leaq 0x13e1e(%rip), %rcx     # 0x4018c
movb $0x0, %al
callq 0x18220
jmp 0x2ca75
movq -0x20(%rbp), %rax
cmpl $0x5, (%rax)
jne 0x2ca47
movq -0x28(%rbp), %rax
cmpl $0x3, (%rax)
jne 0x2ca47
movq -0x20(%rbp), %rdi
callq 0x321a0
movl %eax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
callq 0x45d0
addl $-0x2, %eax
movl %eax, %ecx
movq %rcx, -0xe8(%rbp)
subl $0x7, %eax
ja 0x2ca09
movq -0xe8(%rbp), %rax
leaq 0x116b4(%rip), %rcx     # 0x3da80
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl -0x14(%rbp), %eax
movl %eax, -0xec(%rbp)
subl $0x4, %eax
je 0x2c40a
jmp 0x2c3e5
movl -0xec(%rbp), %eax
subl $0x6, %eax
je 0x2c478
jmp 0x2c3f6
movl -0xec(%rbp), %eax
subl $0x9, %eax
je 0x2c4e6
jmp 0x2c554
movq -0x8(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0xfa(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x108(%rbp), %rdi
movw -0xfa(%rbp), %cx
movl $0xb, %esi
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movq -0xf8(%rbp), %rdi
movzbl %al, %esi
callq 0x32500
jmp 0x2ca75
movq -0x8(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x112(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x120(%rbp), %rdi
movw -0x112(%rbp), %cx
movl $0xc, %esi
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movq -0x110(%rbp), %rdi
movzbl %al, %esi
callq 0x32500
jmp 0x2ca75
movq -0x8(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x12a(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x138(%rbp), %rdi
movw -0x12a(%rbp), %cx
movl $0xd, %esi
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movq -0x128(%rbp), %rdi
movzbl %al, %esi
callq 0x32500
jmp 0x2ca75
movl -0x14(%rbp), %eax
addl $0x15, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x150(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x148(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x142(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x150(%rbp), %rdi
movl -0x148(%rbp), %esi
movw -0x142(%rbp), %cx
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x140(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movq -0x140(%rbp), %rdi
andl $0xff, %eax
movzwl %ax, %esi
callq 0x2bae0
jmp 0x2ca75
movl -0x14(%rbp), %eax
addl $0x15, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x168(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x160(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x15a(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x168(%rbp), %rdi
movl -0x160(%rbp), %esi
movw -0x15a(%rbp), %cx
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movq -0x158(%rbp), %rdi
movzwl %ax, %esi
callq 0x2bae0
jmp 0x2ca75
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movl %eax, -0x4c(%rbp)
cmpl $0x0, -0x14(%rbp)
jne 0x2c677
cmpl $0x1, -0x4c(%rbp)
je 0x2c683
cmpl $0x1, -0x14(%rbp)
jne 0x2c6ca
cmpl $-0x1, -0x4c(%rbp)
jne 0x2c6ca
movq -0x8(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x16a(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x178(%rbp), %rdi
movw -0x16a(%rbp), %cx
movl $0x33, %esi
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
jmp 0x2ca75
cmpl $0x0, -0x14(%rbp)
jne 0x2c6d6
cmpl $-0x1, -0x4c(%rbp)
je 0x2c6e2
cmpl $0x1, -0x14(%rbp)
jne 0x2c729
cmpl $0x1, -0x4c(%rbp)
jne 0x2c729
movq -0x8(%rbp), %rax
movq %rax, -0x188(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x17a(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x188(%rbp), %rdi
movw -0x17a(%rbp), %cx
movl $0x34, %esi
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
jmp 0x2ca75
movl -0x14(%rbp), %eax
addl $0x35, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x194(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movq -0x1a0(%rbp), %rdi
movl -0x194(%rbp), %esi
movw %ax, %cx
movl -0x48(%rbp), %eax
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x190(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movq -0x190(%rbp), %rdi
movl %eax, %esi
callq 0x2b450
jmp 0x2ca75
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0x321f0
movl -0x14(%rbp), %eax
addl $0x53, %eax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x1b8(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x1b0(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x1aa(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x1b8(%rbp), %rdi
movl -0x1b0(%rbp), %esi
movw -0x1aa(%rbp), %cx
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x322d0
movq -0x1a8(%rbp), %rdi
movq %rax, %rsi
callq 0x32240
jmp 0x2ca75
movl -0x14(%rbp), %eax
movq %rax, -0x1c0(%rbp)
subq $0x4, %rax
ja 0x2c872
movq -0x1c0(%rbp), %rax
leaq 0x1126f(%rip), %rcx     # 0x3dab4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x66, -0x34(%rbp)
jmp 0x2c894
movl $0x67, -0x34(%rbp)
jmp 0x2c894
movl $0x68, -0x34(%rbp)
jmp 0x2c894
movl $0x69, -0x34(%rbp)
jmp 0x2c894
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %r8d
leaq 0x1369e(%rip), %rsi     # 0x3ff1f
movl $0xaa5, %edx            # imm = 0xAA5
leaq 0x138cc(%rip), %rcx     # 0x40159
movb $0x0, %al
callq 0x18220
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0x321f0
movq -0x8(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x1d0(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x1ca(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x1d8(%rbp), %rdi
movl -0x1d0(%rbp), %esi
movw -0x1ca(%rbp), %cx
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x322d0
movq -0x1c8(%rbp), %rdi
movq %rax, %rsi
callq 0x32240
jmp 0x2ca45
movl -0x14(%rbp), %eax
movq %rax, -0x1e0(%rbp)
subq $0x4, %rax
ja 0x2c965
movq -0x1e0(%rbp), %rax
leaq 0x11168(%rip), %rcx     # 0x3daa0
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x6e, -0x34(%rbp)
jmp 0x2c987
movl $0x6f, -0x34(%rbp)
jmp 0x2c987
movl $0x70, -0x34(%rbp)
jmp 0x2c987
movl $0x71, -0x34(%rbp)
jmp 0x2c987
movq -0x8(%rbp), %rdi
movl -0x14(%rbp), %r8d
leaq 0x135ab(%rip), %rsi     # 0x3ff1f
movl $0xab5, %edx            # imm = 0xAB5
leaq 0x137f3(%rip), %rcx     # 0x40173
movb $0x0, %al
callq 0x18220
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0x321f0
movq -0x8(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movl -0x34(%rbp), %eax
movl %eax, -0x1f0(%rbp)
movq -0x30(%rbp), %rdi
callq 0x321a0
movw %ax, -0x1ea(%rbp)
movq -0x20(%rbp), %rdi
callq 0x321a0
movq -0x1f8(%rbp), %rdi
movl -0x1f0(%rbp), %esi
movw -0x1ea(%rbp), %cx
movzwl %cx, %edx
movzwl %ax, %ecx
callq 0x324a0
movq -0x8(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0x8(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x261a0
movq -0x1e8(%rbp), %rdi
movl %eax, %esi
callq 0x2b450
jmp 0x2ca45
movq -0x8(%rbp), %rax
movq %rax, -0x200(%rbp)
movq -0x8(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0x4760
movq -0x200(%rbp), %rdi
movq %rax, %r8
leaq 0x134ed(%rip), %rsi     # 0x3ff1f
movl $0xabd, %edx            # imm = 0xABD
leaq 0x1374e(%rip), %rcx     # 0x4018c
movb $0x0, %al
callq 0x18220
jmp 0x2ca73
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %r8d
movq -0x28(%rbp), %rax
movl (%rax), %r9d
leaq 0x134bf(%rip), %rsi     # 0x3ff1f
movl $0xac2, %edx            # imm = 0xAC2
leaq 0x13735(%rip), %rcx     # 0x401a1
movb $0x0, %al
callq 0x18220
jmp 0x2ca75
addq $0x200, %rsp            # imm = 0x200
popq %rbp
retq
nop