// File: /workspace/github_c_makefile_star2_O0/BatchLabs[P]msgpack-dump/src/cmp.c
// Function: read_obj_data
static bool read_obj_data(cmp_ctx_t *ctx, uint8_t type_marker,
                                          cmp_object_t *obj) {
  switch (obj->type) {
    case CMP_TYPE_POSITIVE_FIXNUM:
      obj->as.u8 = type_marker;
      return true;
    case CMP_TYPE_NEGATIVE_FIXNUM:
      obj->as.s8 = type_marker;
      return true;
    case CMP_TYPE_NIL:
      obj->as.u8 = 0;
      return true;
    case CMP_TYPE_BOOLEAN:
      switch (type_marker) {
        case TRUE_MARKER:
          obj->as.boolean = true;
          return true;
        case FALSE_MARKER:
          obj->as.boolean = false;
          return true;
        default:
          break;
      }
      ctx->error = INTERNAL_ERROR;
      return false;
    case CMP_TYPE_UINT8:
      if (!ctx->read(ctx, &obj->as.u8, sizeof(uint8_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      return true;
    case CMP_TYPE_UINT16:
      if (!ctx->read(ctx, &obj->as.u16, sizeof(uint16_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.u16 = be16(obj->as.u16);
      return true;
    case CMP_TYPE_UINT32:
      if (!ctx->read(ctx, &obj->as.u32, sizeof(uint32_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.u32 = be32(obj->as.u32);
      return true;
    case CMP_TYPE_UINT64:
      if (!ctx->read(ctx, &obj->as.u64, sizeof(uint64_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.u64 = be64(obj->as.u64);
      return true;
    case CMP_TYPE_SINT8:
      if (!ctx->read(ctx, &obj->as.s8, sizeof(int8_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      return true;
    case CMP_TYPE_SINT16:
      if (!ctx->read(ctx, &obj->as.s16, sizeof(int16_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.s16 = be16(obj->as.s16);
      return true;
    case CMP_TYPE_SINT32:
      if (!ctx->read(ctx, &obj->as.s32, sizeof(int32_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.s32 = be32(obj->as.s32);
      return true;
    case CMP_TYPE_SINT64:
      if (!ctx->read(ctx, &obj->as.s64, sizeof(int64_t))) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.s64 = be64(obj->as.s64);
      return true;
    case CMP_TYPE_FLOAT:
    {
      char bytes[4];

      if (!ctx->read(ctx, bytes, 4)) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.flt = decode_befloat(bytes);
      return true;
    }
    case CMP_TYPE_DOUBLE:
    {
      char bytes[8];

      if (!ctx->read(ctx, bytes, 8)) {
        ctx->error = DATA_READING_ERROR;
        return false;
      }
      obj->as.dbl = decode_bedouble(bytes);
      return true;
    }
    case CMP_TYPE_BIN8:
    case CMP_TYPE_BIN16:
    case CMP_TYPE_BIN32:
      return read_type_size(ctx, type_marker, obj->type, &obj->as.bin_size);
    case CMP_TYPE_FIXSTR:
    case CMP_TYPE_STR8:
    case CMP_TYPE_STR16:
    case CMP_TYPE_STR32:
      return read_type_size(ctx, type_marker, obj->type, &obj->as.str_size);
    case CMP_TYPE_FIXARRAY:
    case CMP_TYPE_ARRAY16:
    case CMP_TYPE_ARRAY32:
      return read_type_size(ctx, type_marker, obj->type, &obj->as.array_size);
    case CMP_TYPE_FIXMAP:
    case CMP_TYPE_MAP16:
    case CMP_TYPE_MAP32:
      return read_type_size(ctx, type_marker, obj->type, &obj->as.map_size);
    case CMP_TYPE_FIXEXT1:
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      obj->as.ext.size = 1;
      return true;
    case CMP_TYPE_FIXEXT2:
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      obj->as.ext.size = 2;
      return true;
    case CMP_TYPE_FIXEXT4:
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      obj->as.ext.size = 4;
      return true;
    case CMP_TYPE_FIXEXT8:
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      obj->as.ext.size = 8;
      return true;
    case CMP_TYPE_FIXEXT16:
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      obj->as.ext.size = 16;
      return true;
    case CMP_TYPE_EXT8:
      if (!read_type_size(ctx, type_marker, obj->type, &obj->as.ext.size)) {
        return false;
      }
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      return true;
    case CMP_TYPE_EXT16:
      if (!read_type_size(ctx, type_marker, obj->type, &obj->as.ext.size)) {
        return false;
      }
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      obj->as.ext.type = obj->as.ext.type;
      return true;
    case CMP_TYPE_EXT32:
      if (!read_type_size(ctx, type_marker, obj->type, &obj->as.ext.size)) {
        return false;
      }
      if (!ctx->read(ctx, &obj->as.ext.type, sizeof(int8_t))) {
        ctx->error = EXT_TYPE_READING_ERROR;
        return false;
      }
      obj->as.ext.type = obj->as.ext.type;
      return true;
    default:
      break;
  }

  ctx->error = INVALID_TYPE_ERROR;
  return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movb %sil, %al
movq %rdi, -0x10(%rbp)
movb %al, -0x11(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x20(%rbp), %rax
movzbl (%rax), %eax
movq %rax, -0x38(%rbp)
subq $0x22, %rax
ja 0x61ae
movq -0x38(%rbp), %rax
leaq 0x3b36(%rip), %rcx      # 0x963c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb -0x11(%rbp), %cl
movq -0x20(%rbp), %rax
movb %cl, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movb -0x11(%rbp), %cl
movq -0x20(%rbp), %rax
movb %cl, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movb $0x0, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movzbl -0x11(%rbp), %eax
movl %eax, -0x3c(%rbp)
subl $0xc2, %eax
je 0x5b73
jmp 0x5b56
movl -0x3c(%rbp), %eax
subl $0xc3, %eax
jne 0x5b84
jmp 0x5b62
movq -0x20(%rbp), %rax
movb $0x1, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movb $0x0, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
jmp 0x5b86
movq -0x10(%rbp), %rax
movb $0x11, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x5bc5
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x2, %edx
callq *%rax
testb $0x1, %al
jne 0x5bfd
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movzwl 0x8(%rax), %edi
callq 0x1760
movw %ax, %cx
movq -0x20(%rbp), %rax
movw %cx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x4, %edx
callq *%rax
testb $0x1, %al
jne 0x5c4d
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movl 0x8(%rax), %edi
callq 0x1810
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x8, %edx
callq *%rax
testb $0x1, %al
jne 0x5c9a
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x18f0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x5cea
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x2, %edx
callq *%rax
testb $0x1, %al
jne 0x5d22
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movzwl 0x8(%rax), %edi
callq 0x1760
movw %ax, %cx
movq -0x20(%rbp), %rax
movw %cx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x4, %edx
callq *%rax
testb $0x1, %al
jne 0x5d72
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movl 0x8(%rax), %edi
callq 0x1810
movl %eax, %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x8, %edx
callq *%rax
testb $0x1, %al
jne 0x5dbf
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x18f0
movq %rax, %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
leaq -0x24(%rbp), %rsi
movl $0x4, %edx
callq *%rax
testb $0x1, %al
jne 0x5e0b
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
leaq -0x24(%rbp), %rdi
callq 0x7c30
movq -0x20(%rbp), %rax
movss %xmm0, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
leaq -0x2c(%rbp), %rsi
movl $0x8, %edx
callq *%rax
testb $0x1, %al
jne 0x5e51
movq -0x10(%rbp), %rax
movb $0x9, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
leaq -0x2c(%rbp), %rdi
callq 0x7ca0
movq -0x20(%rbp), %rax
movsd %xmm0, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rdi
movb -0x11(%rbp), %dl
movq -0x20(%rbp), %rax
movb (%rax), %al
movq -0x20(%rbp), %rcx
addq $0x8, %rcx
movzbl %dl, %esi
movzbl %al, %edx
callq 0x62f0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rdi
movb -0x11(%rbp), %dl
movq -0x20(%rbp), %rax
movb (%rax), %al
movq -0x20(%rbp), %rcx
addq $0x8, %rcx
movzbl %dl, %esi
movzbl %al, %edx
callq 0x62f0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rdi
movb -0x11(%rbp), %dl
movq -0x20(%rbp), %rax
movb (%rax), %al
movq -0x20(%rbp), %rcx
addq $0x8, %rcx
movzbl %dl, %esi
movzbl %al, %edx
callq 0x62f0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rdi
movb -0x11(%rbp), %dl
movq -0x20(%rbp), %rax
movb (%rax), %al
movq -0x20(%rbp), %rcx
addq $0x8, %rcx
movzbl %dl, %esi
movzbl %al, %edx
callq 0x62f0
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x5f43
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movl $0x1, 0xc(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x5f86
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movl $0x2, 0xc(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x5fc9
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movl $0x4, 0xc(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x600c
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movl $0x8, 0xc(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x604f
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movl $0x10, 0xc(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rdi
movb -0x11(%rbp), %dl
movq -0x20(%rbp), %rax
movb (%rax), %al
movq -0x20(%rbp), %rcx
addq $0x8, %rcx
addq $0x4, %rcx
movzbl %dl, %esi
movzbl %al, %edx
callq 0x62f0
testb $0x1, %al
jne 0x6094
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x60c3
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rdi
movb -0x11(%rbp), %dl
movq -0x20(%rbp), %rax
movb (%rax), %al
movq -0x20(%rbp), %rcx
addq $0x8, %rcx
addq $0x4, %rcx
movzbl %dl, %esi
movzbl %al, %edx
callq 0x62f0
testb $0x1, %al
jne 0x60fd
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x612c
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movb 0x8(%rax), %cl
movq -0x20(%rbp), %rax
movb %cl, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rdi
movb -0x11(%rbp), %dl
movq -0x20(%rbp), %rax
movb (%rax), %al
movq -0x20(%rbp), %rcx
addq $0x8, %rcx
addq $0x4, %rcx
movzbl %dl, %esi
movzbl %al, %edx
callq 0x62f0
testb $0x1, %al
jne 0x616e
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rdi
movq -0x20(%rbp), %rsi
addq $0x8, %rsi
movl $0x1, %edx
callq *%rax
testb $0x1, %al
jne 0x619a
movq -0x10(%rbp), %rax
movb $0xb, (%rax)
movb $0x0, -0x1(%rbp)
jmp 0x61bb
movq -0x20(%rbp), %rax
movb 0x8(%rax), %cl
movq -0x20(%rbp), %rax
movb %cl, 0x8(%rax)
movb $0x1, -0x1(%rbp)
jmp 0x61bb
jmp 0x61b0
movq -0x10(%rbp), %rax
movb $0xd, (%rax)
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)