// File: /workspace/github_c_makefile_star2_O2/BatchLabs[P]msgpack-dump/src/dump.c
// Function: dump_msgpack_object
void dump_msgpack_object(msgpack_data *raw_data, cmp_object_t* object, bool print_strings) {
    switch (object->type) {
        case CMP_TYPE_POSITIVE_FIXNUM:
            printf("Positive fixnum: %d", object->as.u8);
            break;
        case CMP_TYPE_FIXMAP:
            printf("Map length : %d (fixed)", object->as.map_size);
            break;
        case CMP_TYPE_FIXARRAY:
            printf("Array length : %d (fixed)", object->as.array_size);
            break;
        case CMP_TYPE_FIXSTR:
            printf("String length : %d (fixed)", object->as.str_size);
            dump_msgpack_string(raw_data, object, object->as.str_size, print_strings);
            break;
        case CMP_TYPE_NIL:
            printf("Nil");
            break;
        case CMP_TYPE_BOOLEAN:
            printf("Boolean : %d", object->as.boolean);
            break;
        case CMP_TYPE_BIN8:
            printf("Data length : %d (8)", object->as.bin_size);
            msgpack_data_skip(raw_data, object->as.bin_size);
            break;
        case CMP_TYPE_BIN16:
            printf("Data length : %d (16)", object->as.bin_size);
            msgpack_data_skip(raw_data, object->as.bin_size);
            break;
        case CMP_TYPE_BIN32:
            printf("Data length : %d (32)", object->as.bin_size);
            msgpack_data_skip(raw_data, object->as.bin_size);
            break;
        case CMP_TYPE_EXT8:
        case CMP_TYPE_EXT16:
        case CMP_TYPE_EXT32:
            perror("Ext is not supported\n");
            exit(6);
            break;
        case CMP_TYPE_FLOAT:
            printf("Float : %f", object->as.flt);
            break;
        case CMP_TYPE_DOUBLE:
            printf("Double : %f", object->as.dbl);
            break;
        case CMP_TYPE_UINT8:
            printf("Integer : %ju (unsigned, 8)", (uintmax_t)object->as.u8);
            break;
        case CMP_TYPE_UINT16:
            printf("Integer : %ju (unsigned, 16)", (uintmax_t)object->as.u16);
            break;
        case CMP_TYPE_UINT32:
            printf("Integer : %ju (unsigned, 32)", (uintmax_t)object->as.u32);
            break;
        case CMP_TYPE_UINT64:
            printf("Integer : %ju (unsigned, 64)", (uintmax_t)object->as.u8);
            break;
        case CMP_TYPE_SINT8:
            printf("Integer : %jd (signed, 8)", (intmax_t)object->as.s8);
            break;
        case CMP_TYPE_SINT16:
            printf("Integer : %jd (signed, 16)", (intmax_t)object->as.s16);
            break;
        case CMP_TYPE_SINT32:
            printf("Integer : %jd (signed, 32)", (intmax_t)object->as.s32);
            break;
        case CMP_TYPE_SINT64:
            printf("Integer : %jd (signed, 64)", (intmax_t)object->as.s64);
            break;
        case CMP_TYPE_FIXEXT1:
        case CMP_TYPE_FIXEXT2:
        case CMP_TYPE_FIXEXT4:
        case CMP_TYPE_FIXEXT8:
        case CMP_TYPE_FIXEXT16:
            perror("Fixext is not supported\n");
            exit(6);
            break;
        case CMP_TYPE_STR8:
            printf("String length : %d (str8)", object->as.str_size);
            dump_msgpack_string(raw_data, object, object->as.str_size, print_strings);
            break;
        case CMP_TYPE_STR16:
            printf("String length : %d (str16)", object->as.str_size);
            dump_msgpack_string(raw_data, object, object->as.str_size, print_strings);
            break;
        case CMP_TYPE_STR32:
            printf("String length : %d (str32)", object->as.str_size);
            dump_msgpack_string(raw_data, object, object->as.str_size, print_strings);
            break;
        case CMP_TYPE_ARRAY16:
            printf("Array length : %d (array16)", object->as.array_size);
            break;
        case CMP_TYPE_ARRAY32:
            printf("Array length : %d (array32)", object->as.array_size);
            break;
        case CMP_TYPE_MAP16:
            printf("Map length : %d (map16)", object->as.map_size);
            break;
        case CMP_TYPE_MAP32:
            printf("Map length : %d (map32)", object->as.map_size);
            break;
        case CMP_TYPE_NEGATIVE_FIXNUM:
            printf("%s: %d", "Negative fixnum", object->as.s8);
            break;
        default:
            printf("%s", "Error: unknown type");
            break;
    }
    printf("\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movzbl (%rsi), %eax
cmpq $0x22, %rax
ja 0x47f1
movl %edx, %r15d
movq %rsi, %rbx
movq %rdi, %r14
leaq 0x1074(%rip), %rcx      # 0x5690
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movzbl 0x8(%rbx), %esi
leaq 0x1163(%rip), %rdi      # 0x5793
jmp 0x47c6
movl 0x8(%rbx), %esi
leaq 0x13cb(%rip), %rdi      # 0x5a0a
jmp 0x47c6
movzwl 0x8(%rbx), %esi
leaq 0x1240(%rip), %rdi      # 0x588f
jmp 0x47ff
movl 0x8(%rbx), %esi
leaq 0x1394(%rip), %rdi      # 0x59f2
jmp 0x47c6
movsd 0x8(%rbx), %xmm0
leaq 0x11f8(%rip), %rdi      # 0x5867
jmp 0x467d
cvtss2sd 0x8(%rbx), %xmm0
leaq 0x11df(%rip), %rdi      # 0x585c
movb $0x1, %al
callq 0x1080
jmp 0x4806
movl 0x8(%rbx), %esi
leaq 0x1219(%rip), %rdi      # 0x58ac
jmp 0x47ff
leaq 0x1155(%rip), %rdi      # 0x57f4
xorl %eax, %eax
callq 0x1080
jmp 0x4806
movl 0x8(%rbx), %esi
leaq 0x1321(%rip), %rdi      # 0x59d6
jmp 0x47c6
movl 0x8(%rbx), %esi
leaq 0x10fb(%rip), %rdi      # 0x57bf
jmp 0x47c6
movsbl 0x8(%rbx), %edx
leaq 0x134e(%rip), %rdi      # 0x5a22
leaq 0x134e(%rip), %rsi      # 0x5a29
xorl %eax, %eax
callq 0x1080
jmp 0x4806
movl 0x8(%rbx), %esi
leaq 0x10e8(%rip), %rdi      # 0x57d9
jmp 0x47d9
movl 0x8(%rbx), %esi
leaq 0x1284(%rip), %rdi      # 0x5984
jmp 0x47d9
movl 0x8(%rbx), %esi
leaq 0x110b(%rip), %rdi      # 0x581a
jmp 0x4764
movsbq 0x8(%rbx), %rsi
leaq 0x11c9(%rip), %rdi      # 0x58e6
jmp 0x47ff
movl 0x8(%rbx), %esi
leaq 0x107b(%rip), %rdi      # 0x57a7
jmp 0x47c6
movzbl 0x8(%rbx), %esi
leaq 0x1137(%rip), %rdi      # 0x5873
jmp 0x47ff
movzbl 0x8(%rbx), %esi
leaq 0x10ac(%rip), %rdi      # 0x57f8
jmp 0x47c6
movl 0x8(%rbx), %esi
leaq 0x10ad(%rip), %rdi      # 0x5805
jmp 0x4764
movl 0x8(%rbx), %esi
leaq 0x10cc(%rip), %rdi      # 0x5830
xorl %eax, %eax
callq 0x1080
movl 0x8(%rbx), %esi
movq %r14, %rdi
callq 0x4508
jmp 0x4806
movslq 0x8(%rbx), %rsi
leaq 0x1195(%rip), %rdi      # 0x591b
jmp 0x47ff
movq 0x8(%rbx), %rsi
leaq 0x11a3(%rip), %rdi      # 0x5936
jmp 0x47ff
movzbl 0x8(%rbx), %esi
leaq 0x1129(%rip), %rdi      # 0x58c9
jmp 0x47ff
movswq 0x8(%rbx), %rsi
leaq 0x1152(%rip), %rdi      # 0x5900
jmp 0x47ff
movl 0x8(%rbx), %esi
leaq 0x11e5(%rip), %rdi      # 0x599f
jmp 0x47d9
movl 0x8(%rbx), %esi
leaq 0x11f4(%rip), %rdi      # 0x59ba
xorl %eax, %eax
callq 0x1080
jmp 0x4806
movl 0x8(%rbx), %esi
leaq 0x1191(%rip), %rdi      # 0x596a
xorl %eax, %eax
callq 0x1080
movl 0x8(%rbx), %edx
movzbl %r15b, %ecx
movq %r14, %rdi
callq 0x4835
jmp 0x4806
leaq 0x1241(%rip), %rdi      # 0x5a39
leaq 0x123d(%rip), %rsi      # 0x5a3c
xorl %eax, %eax
callq 0x1080
pushq $0xa
popq %rdi
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
jmp 0x1040
leaq 0x1132(%rip), %rdi      # 0x5951
jmp 0x4828
leaq 0x101e(%rip), %rdi      # 0x5846
callq 0x10d0
pushq $0x6
popq %rdi
callq 0x10e0