// File: /workspace/github_c_makefile_star2_O0/FredTheDino[P]Fog/src/engine/platform/mixer.cpp
// Function: Mixer::audio_callback(void*, unsigned char*, int)
void audio_callback(void* userdata, u8* stream, int len) {
    START_PERF(AUDIO);
    const u32 SAMPLES = len / sizeof(f32);
    AudioStruct *data = (AudioStruct *) userdata;
    f32 *output_stream = (f32*) stream;
    const f32 TIME_STEP = data->time_step;

    u32 base = audio_struct.sample_index;
    for (u32 channel_id = 0; channel_id < NUM_CHANNELS; channel_id++) {
        for (u32 i = 0; i < SAMPLES; i++)
            audio_struct.channels[channel_id].buffer[(base + i) % CHANNEL_BUFFER_LENGTH] = 0.0;
    }

    START_PERF(AUDIO_SOURCES);
    f32 left_fade[NUM_SOURCES];
    f32 right_fade[NUM_SOURCES];
    for (u32 source_id = 0; source_id < NUM_SOURCES; source_id++) {
        SoundSource *source = data->sources + source_id;
        if (source->positional && source->gain != 0) {
            Vec2 distance = source->position - data->position;
            f32 distance_sq = length_squared(distance);
            f32 falloff = 1.0 / MAX(1.0, distance_sq);
            // NOTE(ed): The lengths cancel out, so this is linear
            // falloff.
            f32 left_dot = dot(distance, V2(1, 0));
            left_fade[source_id] = (left_dot + 1.0) / 2.0 * falloff;
            f32 right_dot = dot(distance, V2(-1, 0));
            right_fade[source_id] = (right_dot + 1.0) / 2.0 * falloff;
        }
    }


    for (u32 source_id = 0; source_id < NUM_SOURCES; source_id++) {
        f32 time = 0;
        for (u32 i = 0; i < SAMPLES; i += 2) {
            time += TIME_STEP;
            SoundSource *source = data->sources + source_id;
            if (source->gain == 0.0) break;
            Sound *sound = Asset::fetch_sound(source->source);
            source->sample += sound->sample_rate * source->pitch * TIME_STEP;
            u64 index = source->sample;
            if (index >= sound->num_samples) {
                if (source->looping) {
                    index = 0;
                    source->sample = 0;
                } else {
                    data->free_sources[data->num_free_sources++] = source_id;
                    source->gain = 0.0;
                    if (source->post_hook)
                        source->post_hook();
                    break;
                }
            }

            f32 left;
            f32 right;
            if (sound->is_stereo) {
                if (sound->bits_per_sample == 16) {
                    left = S16_TO_F32(sound->samples_16[index * 2 + 0]);
                    right = S16_TO_F32(sound->samples_16[index * 2 + 1]);
                } else if (sound->bits_per_sample == 32) {
                    left = sound->samples_32[index * 2 + 0];
                    right = sound->samples_32[index * 2 + 1];
                } else {
                    UNREACHABLE;
                }
                left *= source->gain;
                right *= source->gain;
            } else {
                f32 sample;
                if (sound->bits_per_sample == 16) {
                    sample = S16_TO_F32(sound->samples_16[index]);
                } else if (sound->bits_per_sample == 32) {
                    sample = sound->samples_32[index];
                } else {
                    UNREACHABLE;
                }

                // Distance blending
                left = sample * source->gain;
                right = sample * source->gain;
                if (source->positional) {
                    left *= left_fade[source_id];
                    right *= right_fade[source_id];
                }
            }
            u32 sample_index = (audio_struct.sample_index + i) % CHANNEL_BUFFER_LENGTH;
            audio_struct.channels[source->channel].buffer[sample_index+0] += left;
            audio_struct.channels[source->channel].buffer[sample_index+1] += right;
        }
    }
    STOP_PERF(AUDIO_SOURCES);
    for (u32 i = 0; i < SAMPLES; i++)
        output_stream[i] = 0.0;

    START_PERF(AUDIO_EFFECTS);
    for (u32 channel_id = 0; channel_id < NUM_CHANNELS; channel_id++) {
        Channel *channel = &audio_struct.channels[channel_id];
        channel->effect(base, SAMPLES);
        for (u32 i = 0; i < SAMPLES; i++) {
            output_stream[i] += channel->buffer[(base + i) % CHANNEL_BUFFER_LENGTH];
        }

        for (u32 i = 0; i < SAMPLES; i++) {
            output_stream[i] = CLAMP(-SAMPLE_LIMIT, SAMPLE_LIMIT, output_stream[i]);
        }
    }
    STOP_PERF(AUDIO_EFFECTS);
    audio_struct.sample_index += SAMPLES;  // wraps after ~24h
    STOP_PERF(AUDIO);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x220, %rsp            # imm = 0x220
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movl $0x7, %edi
leaq 0x11ab3(%rip), %rsi     # 0x46d35
callq 0x2e590
movslq -0x14(%rbp), %rax
shrq $0x2, %rax
movl %eax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movss 0x9c8(%rax), %xmm0
movss %xmm0, -0x2c(%rbp)
leaq 0x340c6(%rip), %rax     # 0x69380
movl 0x9b8(%rax), %eax
movl %eax, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
cmpl $0xa, -0x34(%rbp)
jae 0x3533a
movl $0x0, -0x38(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x18(%rbp), %eax
jae 0x3532d
movl -0x34(%rbp), %eax
movl %eax, %ecx
leaq 0x34095(%rip), %rax     # 0x69380
addq $0x648, %rax            # imm = 0x648
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rax
movq %rax, -0x1f8(%rbp)
movl -0x30(%rbp), %eax
addl -0x38(%rbp), %eax
movl $0x46500, %ecx          # imm = 0x46500
xorl %edx, %edx
divl %ecx
movq -0x1f8(%rbp), %rax
movl %edx, %ecx
xorps %xmm0, %xmm0
movss %xmm0, (%rax,%rcx,4)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x352d7
jmp 0x3532f
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x352ca
movl $0x8, %edi
leaq 0x119f5(%rip), %rsi     # 0x46d3b
callq 0x2e590
movl $0x0, -0x144(%rbp)
cmpl $0x20, -0x144(%rbp)
jae 0x3559a
movq -0x20(%rbp), %rax
movl -0x144(%rbp), %ecx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rax
cmpb $0x0, 0x1d(%rax)
je 0x35584
movq -0x150(%rbp), %rax
movss 0x18(%rax), %xmm0
xorps %xmm1, %xmm1
ucomiss %xmm1, %xmm0
jne 0x353a6
jp 0x353a6
jmp 0x35584
movq -0x150(%rbp), %rdi
addq $0x1e, %rdi
movq -0x20(%rbp), %rax
movq 0x9bc(%rax), %rax
movq %rax, -0x160(%rbp)
movsd -0x160(%rbp), %xmm0
callq 0x5850
movlpd %xmm0, -0x158(%rbp)
movq -0x158(%rbp), %rax
movq %rax, -0x170(%rbp)
movsd -0x170(%rbp), %xmm0
callq 0xb370
movss %xmm0, -0x164(%rbp)
movss -0x164(%rbp), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0xfc51(%rip), %xmm0     # 0x45060
ucomisd %xmm1, %xmm0
jbe 0x35427
movsd 0xfc43(%rip), %xmm0     # 0x45060
movsd %xmm0, -0x200(%rbp)
jmp 0x3543b
movss -0x164(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd %xmm0, -0x200(%rbp)
movsd -0x200(%rbp), %xmm1
movsd 0xfc15(%rip), %xmm0     # 0x45060
movsd %xmm0, -0x210(%rbp)
divsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x174(%rbp)
movq -0x158(%rbp), %rax
movq %rax, -0x180(%rbp)
movss 0xfb8f(%rip), %xmm0     # 0x45008
xorps %xmm1, %xmm1
movss %xmm1, -0x204(%rbp)
callq 0xbc10
movlpd %xmm0, -0x188(%rbp)
movsd -0x180(%rbp), %xmm0
movsd -0x188(%rbp), %xmm1
callq 0xb340
movsd -0x210(%rbp), %xmm2
movss -0x204(%rbp), %xmm1
movss %xmm0, -0x178(%rbp)
movss -0x178(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
addsd %xmm2, %xmm0
movsd 0xfb7a(%rip), %xmm2     # 0x45050
mulsd %xmm2, %xmm0
movss -0x174(%rbp), %xmm2
cvtss2sd %xmm2, %xmm2
mulsd %xmm2, %xmm0
cvtsd2ss %xmm0, %xmm0
movl -0x144(%rbp), %eax
movss %xmm0, -0xc0(%rbp,%rax,4)
movq -0x158(%rbp), %rax
movq %rax, -0x198(%rbp)
movss 0xfb05(%rip), %xmm0     # 0x45018
callq 0xbc10
movlpd %xmm0, -0x1a0(%rbp)
movsd -0x198(%rbp), %xmm0
movsd -0x1a0(%rbp), %xmm1
callq 0xb340
movss %xmm0, -0x18c(%rbp)
movss -0x18c(%rbp), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0xfb0f(%rip), %xmm1     # 0x45060
addsd %xmm1, %xmm0
movsd 0x104db(%rip), %xmm1    # 0x45a38
divsd %xmm1, %xmm0
movss -0x174(%rbp), %xmm1
cvtss2sd %xmm1, %xmm1
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movl -0x144(%rbp), %eax
movss %xmm0, -0x140(%rbp,%rax,4)
jmp 0x35586
movl -0x144(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x144(%rbp)
jmp 0x35355
movl $0x0, -0x1a4(%rbp)
cmpl $0x20, -0x1a4(%rbp)
jae 0x35a9d
xorps %xmm0, %xmm0
movss %xmm0, -0x1a8(%rbp)
movl $0x0, -0x1ac(%rbp)
movl -0x1ac(%rbp), %eax
cmpl -0x18(%rbp), %eax
jae 0x35a87
movss -0x2c(%rbp), %xmm0
addss -0x1a8(%rbp), %xmm0
movss %xmm0, -0x1a8(%rbp)
movq -0x20(%rbp), %rax
movl -0x1a4(%rbp), %ecx
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x1b8(%rbp)
movq -0x1b8(%rbp), %rax
movss 0x18(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x35622
jp 0x35622
jmp 0x35a87
movq -0x1b8(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x30680
movq %rax, -0x1c0(%rbp)
movq -0x1c0(%rbp), %rax
movzwl 0x14(%rax), %eax
cvtsi2ss %eax, %xmm0
movq -0x1b8(%rbp), %rax
movss (%rax), %xmm1
movss 0x14(%rax), %xmm2
mulss %xmm2, %xmm0
movss -0x2c(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, (%rax)
movq -0x1b8(%rbp), %rax
movss (%rax), %xmm0
movss 0xfbd4(%rip), %xmm2     # 0x45254
movaps %xmm0, %xmm1
subss %xmm2, %xmm1
cvttss2si %xmm1, %rcx
cvttss2si %xmm0, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, -0x1c8(%rbp)
movq -0x1c8(%rbp), %rax
movq -0x1c0(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jb 0x35744
movq -0x1b8(%rbp), %rax
cmpb $0x0, 0x1c(%rax)
je 0x356e5
movq $0x0, -0x1c8(%rbp)
movq -0x1b8(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, (%rax)
jmp 0x35742
movl -0x1a4(%rbp), %eax
movw %ax, %dx
movq -0x20(%rbp), %rax
movq -0x20(%rbp), %rsi
movw 0x600(%rsi), %cx
movw %cx, %di
addw $0x1, %di
movw %di, 0x600(%rsi)
movzwl %cx, %ecx
movw %dx, 0x602(%rax,%rcx,2)
movq -0x1b8(%rbp), %rax
xorps %xmm0, %xmm0
movss %xmm0, 0x18(%rax)
movq -0x1b8(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x3573d
movq -0x1b8(%rbp), %rax
callq *0x28(%rax)
jmp 0x35a87
jmp 0x35744
movq -0x1c0(%rbp), %rax
cmpb $0x0, 0x17(%rax)
je 0x3589a
movq -0x1c0(%rbp), %rax
movzbl 0x16(%rax), %eax
cmpl $0x10, %eax
jne 0x357c5
movq -0x1c0(%rbp), %rax
movq (%rax), %rax
movq -0x1c8(%rbp), %rcx
movswl (%rax,%rcx,4), %eax
cvtsi2ss %eax, %xmm0
movss 0xfad2(%rip), %xmm1     # 0x45258
divss %xmm1, %xmm0
movss %xmm0, -0x1cc(%rbp)
movq -0x1c0(%rbp), %rax
movq (%rax), %rax
movq -0x1c8(%rbp), %rcx
movswl 0x2(%rax,%rcx,4), %eax
cvtsi2ss %eax, %xmm0
movss 0xfaa4(%rip), %xmm1     # 0x45258
divss %xmm1, %xmm0
movss %xmm0, -0x1d0(%rbp)
jmp 0x3585d
movq -0x1c0(%rbp), %rax
movzbl 0x16(%rax), %eax
cmpl $0x20, %eax
jne 0x3581a
movq -0x1c0(%rbp), %rax
movq (%rax), %rax
movq -0x1c8(%rbp), %rcx
shlq %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, -0x1cc(%rbp)
movq -0x1c0(%rbp), %rax
movq (%rax), %rax
movq -0x1c8(%rbp), %rcx
shlq %rcx
movss 0x4(%rax,%rcx,4), %xmm0
movss %xmm0, -0x1d0(%rbp)
jmp 0x3585b
movq 0x337bf(%rip), %rax     # 0x68fe0
movq (%rax), %rsi
leaq 0x10316(%rip), %rdi     # 0x45b41
leaq 0x11348(%rip), %rdx     # 0x46b7a
movl $0xfc, %ecx
leaq 0x1150b(%rip), %r8      # 0x46d49
leaq 0x10329(%rip), %r9      # 0x45b6e
movb $0x0, %al
callq 0xb100
callq 0xb1f0
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2330
jmp 0x3585d
movq -0x1b8(%rbp), %rax
movss 0x18(%rax), %xmm0
mulss -0x1cc(%rbp), %xmm0
movss %xmm0, -0x1cc(%rbp)
movq -0x1b8(%rbp), %rax
movss 0x18(%rax), %xmm0
mulss -0x1d0(%rbp), %xmm0
movss %xmm0, -0x1d0(%rbp)
jmp 0x359d1
movq -0x1c0(%rbp), %rax
movzbl 0x16(%rax), %eax
cmpl $0x10, %eax
jne 0x358d9
movq -0x1c0(%rbp), %rax
movq (%rax), %rax
movq -0x1c8(%rbp), %rcx
movswl (%rax,%rcx,2), %eax
cvtsi2ss %eax, %xmm0
movss 0xf98d(%rip), %xmm1     # 0x45258
divss %xmm1, %xmm0
movss %xmm0, -0x1d4(%rbp)
jmp 0x3594c
movq -0x1c0(%rbp), %rax
movzbl 0x16(%rax), %eax
cmpl $0x20, %eax
jne 0x35909
movq -0x1c0(%rbp), %rax
movq (%rax), %rax
movq -0x1c8(%rbp), %rcx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, -0x1d4(%rbp)
jmp 0x3594a
movq 0x336d0(%rip), %rax     # 0x68fe0
movq (%rax), %rsi
leaq 0x10227(%rip), %rdi     # 0x45b41
leaq 0x11259(%rip), %rdx     # 0x46b7a
movl $0x107, %ecx            # imm = 0x107
leaq 0x1141c(%rip), %r8      # 0x46d49
leaq 0x1023a(%rip), %r9      # 0x45b6e
movb $0x0, %al
callq 0xb100
callq 0xb1f0
movl $0xffffffff, %edi       # imm = 0xFFFFFFFF
callq 0x2330
jmp 0x3594c
movss -0x1d4(%rbp), %xmm0
movq -0x1b8(%rbp), %rax
mulss 0x18(%rax), %xmm0
movss %xmm0, -0x1cc(%rbp)
movss -0x1d4(%rbp), %xmm0
movq -0x1b8(%rbp), %rax
mulss 0x18(%rax), %xmm0
movss %xmm0, -0x1d0(%rbp)
movq -0x1b8(%rbp), %rax
cmpb $0x0, 0x1d(%rax)
je 0x359cf
movl -0x1a4(%rbp), %eax
movss -0xc0(%rbp,%rax,4), %xmm0
mulss -0x1cc(%rbp), %xmm0
movss %xmm0, -0x1cc(%rbp)
movl -0x1a4(%rbp), %eax
movss -0x140(%rbp,%rax,4), %xmm0
mulss -0x1d0(%rbp), %xmm0
movss %xmm0, -0x1d0(%rbp)
jmp 0x359d1
leaq 0x339a8(%rip), %rax     # 0x69380
movl 0x9b8(%rax), %eax
addl -0x1ac(%rbp), %eax
movl $0x46500, %ecx          # imm = 0x46500
xorl %edx, %edx
divl %ecx
movl %edx, -0x1d8(%rbp)
movss -0x1cc(%rbp), %xmm0
movq -0x1b8(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
leaq 0x33972(%rip), %rax     # 0x69380
addq $0x648, %rax            # imm = 0x648
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rax
movl -0x1d8(%rbp), %ecx
addl $0x0, %ecx
movl %ecx, %ecx
addss (%rax,%rcx,4), %xmm0
movss %xmm0, (%rax,%rcx,4)
movss -0x1d0(%rbp), %xmm0
movq -0x1b8(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
leaq 0x33932(%rip), %rax     # 0x69380
addq $0x648, %rax            # imm = 0x648
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
movq (%rax), %rax
movl -0x1d8(%rbp), %ecx
addl $0x1, %ecx
movl %ecx, %ecx
addss (%rax,%rcx,4), %xmm0
movss %xmm0, (%rax,%rcx,4)
movl -0x1ac(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x1ac(%rbp)
jmp 0x355c6
jmp 0x35a89
movl -0x1a4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1a4(%rbp)
jmp 0x355a4
movl $0x8, %edi
callq 0x2e670
movl $0x0, -0x1dc(%rbp)
movl -0x1dc(%rbp), %eax
cmpl -0x18(%rbp), %eax
jae 0x35adf
movq -0x28(%rbp), %rax
movl -0x1dc(%rbp), %ecx
xorps %xmm0, %xmm0
movss %xmm0, (%rax,%rcx,4)
movl -0x1dc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1dc(%rbp)
jmp 0x35ab1
movl $0x9, %edi
leaq 0x1126d(%rip), %rsi     # 0x46d58
callq 0x2e590
movl $0x0, -0x1e0(%rbp)
cmpl $0xa, -0x1e0(%rbp)
jae 0x35c80
movl -0x1e0(%rbp), %eax
movl %eax, %ecx
leaq 0x3386a(%rip), %rax     # 0x69380
addq $0x648, %rax            # imm = 0x648
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x1e8(%rbp)
movq -0x1e8(%rbp), %rdi
movl -0x30(%rbp), %esi
movl -0x18(%rbp), %edx
callq 0x343b0
movl $0x0, -0x1ec(%rbp)
movl -0x1ec(%rbp), %eax
cmpl -0x18(%rbp), %eax
jae 0x35ba7
movq -0x1e8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x218(%rbp)
movl -0x30(%rbp), %eax
addl -0x1ec(%rbp), %eax
movl $0x46500, %ecx          # imm = 0x46500
xorl %edx, %edx
divl %ecx
movq -0x218(%rbp), %rax
movl %edx, %ecx
movss (%rax,%rcx,4), %xmm0
movq -0x28(%rbp), %rax
movl -0x1ec(%rbp), %ecx
addss (%rax,%rcx,4), %xmm0
movss %xmm0, (%rax,%rcx,4)
movl -0x1ec(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1ec(%rbp)
jmp 0x35b46
movl $0x0, -0x1f0(%rbp)
movl -0x1f0(%rbp), %eax
cmpl -0x18(%rbp), %eax
jae 0x35c6a
movq -0x28(%rbp), %rax
movl -0x1f0(%rbp), %ecx
movss 0xf446(%rip), %xmm0     # 0x45018
ucomiss (%rax,%rcx,4), %xmm0
jbe 0x35bea
movss 0xf438(%rip), %xmm0     # 0x45018
movss %xmm0, -0x21c(%rbp)
jmp 0x35c3f
movq -0x28(%rbp), %rax
movl -0x1f0(%rbp), %ecx
movss (%rax,%rcx,4), %xmm0
movss 0xf407(%rip), %xmm1     # 0x45008
ucomiss %xmm1, %xmm0
jbe 0x35c18
movss 0xf3fa(%rip), %xmm0     # 0x45008
movss %xmm0, -0x220(%rbp)
jmp 0x35c2f
movq -0x28(%rbp), %rax
movl -0x1f0(%rbp), %ecx
movss (%rax,%rcx,4), %xmm0
movss %xmm0, -0x220(%rbp)
movss -0x220(%rbp), %xmm0
movss %xmm0, -0x21c(%rbp)
movss -0x21c(%rbp), %xmm0
movq -0x28(%rbp), %rax
movl -0x1f0(%rbp), %ecx
movss %xmm0, (%rax,%rcx,4)
movl -0x1f0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1f0(%rbp)
jmp 0x35bb1
jmp 0x35c6c
movl -0x1e0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1e0(%rbp)
jmp 0x35afa
movl $0x9, %edi
callq 0x2e670
movl -0x18(%rbp), %ecx
leaq 0x336ec(%rip), %rax     # 0x69380
addl 0x9b8(%rax), %ecx
leaq 0x336df(%rip), %rax     # 0x69380
movl %ecx, 0x9b8(%rax)
movl $0x7, %edi
callq 0x2e670
addq $0x220, %rsp            # imm = 0x220
popq %rbp
retq
nopw (%rax,%rax)