// File: /workspace/github_cpp_makefile_star2_O2/skeeto[P]elisp-ffi/ffi-glue.cc
// Function: Machine::read_array()
void read_array() {
        int type = std::cin.get();
        void* raw_ptr = stack.pop().value.ptr;
        size_t length = stack.pop().value.u64;
        out_ << '(';
        switch(type) {
        case 'u': {
            uint8_t* ptr = static_cast<uint8_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << static_cast<unsigned int>(ptr[i]) << ' ';
            }
            break;
        case 'v': {
            uint16_t* ptr = static_cast<uint16_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << ptr[i] << ' ';
            }
            break;
        case 'w': {
            uint32_t* ptr = static_cast<uint32_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << ptr[i] << ' ';
            }
            break;
        case 'x': {
            uint64_t* ptr = static_cast<uint64_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << ptr[i] << ' ';
            }
            break;
        case 'i': {
            int8_t* ptr = static_cast<int8_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << static_cast<int>(ptr[i]) << ' ';
            }
            break;
        case 'j': {
            int16_t* ptr = static_cast<int16_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << ptr[i] << ' ';
            }
            break;
        case 'k': {
            int32_t* ptr = static_cast<int32_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << ptr[i] << ' ';
            }
            break;
        case 'l': {
            int64_t* ptr = static_cast<int64_t*>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << ptr[i] << ' ';
            }
            break;
        case 'f': {
            float* ptr = static_cast<float*>(raw_ptr);
            for(size_t i = 0; i < length; i++) {
                float value = ptr[i];
                if(std::isnan(value)) {
                    out_ << "0.0e+NaN";
                } else if(std::isinf(value)) {
                    if(value < 0) {
                        out_ << "-1.0e+INF";
                    } else {
                        out_ << "1.0e+INF";
                    }
                } else {
                    out_ << value;
                }
                out_ << ' ';
            }}
            break;
        case 'd': {
            double* ptr = static_cast<double*>(raw_ptr);
            for(size_t i = 0; i < length; i++) {
                double value = ptr[i];
                if(std::isnan(value)) {
                    out_ << "0.0e+NaN";
                } else if(std::isinf(value)) {
                    if(value < 0) {
                        out_ << "-1.0e+INF";
                    } else {
                        out_ << "1.0e+INF";
                    }
                } else {
                    out_ << value;
                }
                out_ << ' ';
            }}
            break;
        case 'p': {
            void** ptr = static_cast<void**>(raw_ptr);
            for(size_t i = 0; i < length; i++)
                out_ << ptr[i] << ' ';
            }
            break;
        default:
            std::cerr << "invalid type in read_array: " << static_cast<char>(type) << std::endl;
            return;
        }
        out_ << ")\n$";
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq 0x40f3(%rip), %rdi      # 0x6fc8
callq 0x21f0
movl %eax, %r14d
movq 0x8(%rbx), %rax
movq 0x18(%rbx), %rdi
leaq -0x10(%rax), %rcx
movq -0x8(%rax), %r13
movq %rcx, 0x8(%rbx)
movq -0x18(%rax), %r15
addq $-0x20, %rax
movq %rax, 0x8(%rbx)
pushq $0x28
popq %rsi
callq 0x21e0
leal -0x64(%r14), %eax
cmpl $0x14, %eax
ja 0x31bb
leaq 0x1233(%rip), %rcx      # 0x414c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
xorl %r14d, %r14d
pushq $0x20
popq %rbp
movabsq $0x7ff0000000000000, %r12 # imm = 0x7FF0000000000000
cmpq %r14, %r15
je 0x319d
movsd (%r13,%r14,8), %xmm0
ucomisd %xmm0, %xmm0
jp 0x2f95
movq %xmm0, %rax
btrq $0x3f, %rax
cmpq %r12, %rax
jne 0x2f6e
xorpd %xmm1, %xmm1
ucomisd %xmm0, %xmm1
movq 0x18(%rbx), %rdi
jbe 0x2f79
leaq 0x123d(%rip), %rsi      # 0x41a9
jmp 0x2f80
movq 0x18(%rbx), %rdi
callq 0x2260
jmp 0x2f85
leaq 0x122a(%rip), %rsi      # 0x41aa
callq 0x21a0
movq 0x18(%rbx), %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x2f32
movq 0x18(%rbx), %rdi
leaq 0x1200(%rip), %rsi      # 0x41a0
jmp 0x2f80
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movq (%r13,%r14,8), %rsi
callq 0x2100
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x2fa8
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movl (%r13,%r14,4), %esi
callq 0x2290
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x2fd4
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movq (%r13,%r14,8), %rsi
callq 0x2190
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x3000
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movswl (%r13,%r14,2), %esi
callq 0x2170
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x302c
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movsbl (%r13,%r14), %esi
callq 0x2290
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x3059
xorl %r14d, %r14d
pushq $0x20
popq %rbp
leaq 0x111d(%rip), %r12      # 0x41aa
cmpq %r14, %r15
je 0x319d
movss (%r13,%r14,4), %xmm0
ucomiss %xmm0, %xmm0
jp 0x30ea
movd %xmm0, %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
cmpl $0x7f800000, %eax       # imm = 0x7F800000
jne 0x30c7
xorps %xmm1, %xmm1
ucomiss %xmm0, %xmm1
movq 0x18(%rbx), %rdi
jbe 0x30d2
leaq 0x10e4(%rip), %rsi      # 0x41a9
jmp 0x30d5
movq 0x18(%rbx), %rdi
callq 0x2120
jmp 0x30da
movq %r12, %rsi
callq 0x21a0
movq 0x18(%rbx), %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x308d
movq 0x18(%rbx), %rdi
leaq 0x10ab(%rip), %rsi      # 0x41a0
jmp 0x30d5
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movq (%r13,%r14,8), %rsi
callq 0x2130
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x30fd
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movzbl (%r13,%r14), %esi
callq 0x2100
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x3129
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movl (%r13,%r14,4), %esi
callq 0x2100
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x3152
xorl %r14d, %r14d
pushq $0x20
popq %rbp
cmpq %r14, %r15
je 0x319d
movq 0x18(%rbx), %rdi
movzwl (%r13,%r14,2), %esi
callq 0x2280
movq %rax, %rdi
movl %ebp, %esi
callq 0x21e0
incq %r14
jmp 0x317a
movq 0x18(%rbx), %rdi
leaq 0x1072(%rip), %rsi      # 0x421a
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x21a0
movq 0x3e2e(%rip), %rdi      # 0x6ff0
leaq 0x1034(%rip), %rsi      # 0x41fd
callq 0x21a0
movsbl %r14b, %esi
movq %rax, %rdi
callq 0x21e0
movq %rax, %rdi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x20a0