// File: /workspace/github_c_makefile_star2_O2/algorithm-archivists[P]GathVL/src/objects/../../include/stb_image_resize.h
// Function: stbir__calculate_memory(stbir__info*)
static stbir_uint32 stbir__calculate_memory(stbir__info *info)
{
    int pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale);
    int filter_height = stbir__get_filter_pixel_width(info->vertical_filter, info->vertical_scale);

    info->horizontal_num_contributors = stbir__get_contributors(info->horizontal_scale, info->horizontal_filter, info->input_w, info->output_w);
    info->vertical_num_contributors   = stbir__get_contributors(info->vertical_scale  , info->vertical_filter  , info->input_h, info->output_h);

    // One extra entry because floating point precision problems sometimes cause an extra to be necessary.
    info->ring_buffer_num_entries = filter_height + 1;

    info->horizontal_contributors_size = info->horizontal_num_contributors * sizeof(stbir__contributors);
    info->horizontal_coefficients_size = stbir__get_total_horizontal_coefficients(info) * sizeof(float);
    info->vertical_contributors_size = info->vertical_num_contributors * sizeof(stbir__contributors);
    info->vertical_coefficients_size = stbir__get_total_vertical_coefficients(info) * sizeof(float);
    info->decode_buffer_size = (info->input_w + pixel_margin * 2) * info->channels * sizeof(float);
    info->horizontal_buffer_size = info->output_w * info->channels * sizeof(float);
    info->ring_buffer_size = info->output_w * info->channels * info->ring_buffer_num_entries * sizeof(float);
    info->encode_buffer_size = info->output_w * info->channels * sizeof(float);

    STBIR_ASSERT(info->horizontal_filter != 0);
    STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late
    STBIR_ASSERT(info->vertical_filter != 0);
    STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late

    if (stbir__use_height_upsampling(info))
        // The horizontal buffer is for when we're downsampling the height and we
        // can't output the result of sampling the decode buffer directly into the
        // ring buffers.
        info->horizontal_buffer_size = 0;
    else
        // The encode buffer is to retain precision in the height upsampling method
        // and isn't used when height downsampling.
        info->encode_buffer_size = 0;

    return info->horizontal_contributors_size + info->horizontal_coefficients_size
        + info->vertical_contributors_size + info->vertical_coefficients_size
        + info->decode_buffer_size + info->horizontal_buffer_size
        + info->ring_buffer_size + info->encode_buffer_size;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movl 0x5c(%rdi), %edi
movss 0x44(%rbx), %xmm0
callq 0x15ae1
movl %eax, %ebp
movl 0x60(%rbx), %edi
movss 0x48(%rbx), %xmm0
callq 0x15aef
movl %eax, %r14d
movss 0x44(%rbx), %xmm0
movl 0x5c(%rbx), %edi
movl 0x8(%rbx), %esi
movl 0x20(%rbx), %edx
callq 0x15b89
movl %eax, 0xc0(%rbx)
movss 0x48(%rbx), %xmm0
movl 0x60(%rbx), %edi
movl 0xc(%rbx), %esi
movl 0x24(%rbx), %edx
callq 0x15b89
movl %eax, 0xc4(%rbx)
incl %r14d
movl %r14d, 0xcc(%rbx)
movl 0xc0(%rbx), %r14d
leal (,%r14,8), %eax
movl %eax, 0xf0(%rbx)
movl 0x5c(%rbx), %edi
movss 0x44(%rbx), %xmm0
callq 0x15e0a
imull %r14d, %eax
shll $0x2, %eax
movl %eax, 0xf4(%rbx)
movl 0xc4(%rbx), %r14d
leal (,%r14,8), %eax
movl %eax, 0xf8(%rbx)
movl 0x60(%rbx), %edi
movss 0x48(%rbx), %xmm0
callq 0x15e0a
imull %r14d, %eax
shll $0x2, %eax
movl %eax, 0xfc(%rbx)
addl %ebp, %ebp
addl 0x8(%rbx), %ebp
movl 0x4c(%rbx), %edx
movl 0x5c(%rbx), %ecx
imull %edx, %ebp
shll $0x2, %ebp
movl %ebp, 0x100(%rbx)
imull 0x20(%rbx), %edx
shll $0x2, %edx
movl %edx, 0x104(%rbx)
movl 0xcc(%rbx), %esi
imull %edx, %esi
movl %esi, 0x108(%rbx)
movl %edx, 0x10c(%rbx)
testl %ecx, %ecx
je 0x15a65
cmpl $0x6, %ecx
jae 0x15a84
movl 0x60(%rbx), %ecx
testl %ecx, %ecx
je 0x15aa3
cmpl $0x6, %ecx
jae 0x15ac2
movss 0x48(%rbx), %xmm0
xorl %ecx, %ecx
xorl %edi, %edi
ucomiss 0x59cf(%rip), %xmm0     # 0x1b3fc
setbe %dil
movl %edx, %r8d
cmovbel %ecx, %r8d
cmovbel %edx, %ecx
andl $0x0, 0x104(%rbx,%rdi,8)
addl %eax, %ebp
addl %esi, %ebp
addl 0xf0(%rbx), %ebp
addl 0xf4(%rbx), %ebp
addl 0xf8(%rbx), %ebp
addl %r8d, %ecx
addl %ebp, %ecx
movl %ecx, %eax
popq %rbx
popq %r14
popq %rbp
retq
leaq 0x738d(%rip), %rdi      # 0x1cdf9
leaq 0x73a3(%rip), %rsi      # 0x1ce16
leaq 0x73c9(%rip), %rcx      # 0x1ce43
movl $0x8d7, %edx            # imm = 0x8D7
callq 0x5130
leaq 0x73ec(%rip), %rdi      # 0x1ce77
leaq 0x7384(%rip), %rsi      # 0x1ce16
leaq 0x73aa(%rip), %rcx      # 0x1ce43
movl $0x8d8, %edx            # imm = 0x8D8
callq 0x5130
leaq 0x7432(%rip), %rdi      # 0x1cedc
leaq 0x7365(%rip), %rsi      # 0x1ce16
leaq 0x738b(%rip), %rcx      # 0x1ce43
movl $0x8d9, %edx            # imm = 0x8D9
callq 0x5130
leaq 0x742e(%rip), %rdi      # 0x1cef7
leaq 0x7346(%rip), %rsi      # 0x1ce16
leaq 0x736c(%rip), %rcx      # 0x1ce43
movl $0x8da, %edx            # imm = 0x8DA
callq 0x5130