Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add specialized get_X impls for Bytes struct to reduce dead code #622

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

Walnut356
Copy link

@Walnut356 Walnut356 commented Aug 16, 2023

Without this change, there's quite a bit of dead code generated when using these functions with a Bytes object. This is because:

  1. These functions are nearly always inlined in their entirety (including the call to self.copy_to_slice)

  2. The entire conditional:

        if let Some(ret) = ret {
            // if the direct conversion was possible, advance and return
            $this.advance(SIZE);
            return ret;
        } else {
            // if not we copy the bytes in a temp buffer then convert
            let mut buf = [0; SIZE];
            $this.copy_to_slice(&mut buf); // (do the advance)
            return $typ::$conv(buf);
        }

seems to be meant to handle non-contiguous memory. Bytes is guaranteed to be contiguous, so whenever the else block is triggered it immediately panics on self.copy_to_slice's first assert statement: assert!(self.remaining() >= dst.len());

Due to the above, the generated assembly for multiple sequential bytes.get_x calls is pretty messy and it doesn't look like the compiler is having a fun time with it. This simple change removes the conditional and just has a raw panic on a None being returned from slice.get, cleaning up the generated code a lot and allowing for a lot more optimizations (from what i observed).

I also copied the Buf get_u16 tests over to the bytes tests to confirm the behavior still works as expected.

@Walnut356
Copy link
Author

Walnut356 commented Dec 12, 2023

Updated for a more direct get method - i.e. just dereference the pointer directly since we already have access to it. This eliminates the dead code as described above, but also has slightly better code gen with less redundant checks. From what I can tell, the performance characteristics are just about identical. The CPI is slightly worse, but there's less instructions and less jumping, so it seems to even out.

For the hot functions in one of my libraries, this change reduces code size by quite a decent amount.

(All examples compiled via 1.73.0-x86_64-pc-windows-msvc in release mode)

Simple example
use bytes::{Bytes, Buf};
use std::{fs::File, io::Read, hint::black_box};


fn main() {
    let mut file = File::open(r"replace_with_file").unwrap();
    let mut buf = Vec::new();
    let len = file.read_to_end(&mut buf).unwrap();
    let b: Bytes = Bytes::from(buf);
    read_data(b, len);
}

#[inline(never)]
pub fn read_data(mut b: Bytes, len: usize) {
    for _ in 0..len/4 {
        black_box(b.get_i32());
    }
}
Before (175 lines)
bytes::read_data:
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 72
        lea rbp, [rsp + 64]
        mov qword ptr [rbp], -2
        cmp rdx, 3
        ja .LBB12_3
        mov rbx, qword ptr [rcx + 8]
        mov rsi, qword ptr [rcx + 16]
.LBB12_2:
        mov rax, qword ptr [rcx]
        add rcx, 24
        mov rdx, rbx
        mov r8, rsi
        call qword ptr [rax + 16]
        nop
        add rsp, 72
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret
.LBB12_3:
        shr rdx, 2
        mov rsi, qword ptr [rcx + 16]
        xor r12d, r12d
        lea rdi, [rbp - 8]
        mov qword ptr [rbp - 16], rcx
        mov qword ptr [rbp - 24], rdx
        jmp .LBB12_4
.LBB12_6:
        mov eax, dword ptr [rbx]
        bswap eax
        add rsi, -4
        mov qword ptr [rcx + 16], rsi
        add rbx, 4
        mov qword ptr [rcx + 8], rbx
.LBB12_12:
        inc r12
        mov dword ptr [rbp - 8], eax
        #APP
        #NO_APP
        cmp r12, rdx
        je .LBB12_2
.LBB12_4:
        cmp rsi, 4
        jb .LBB12_7
        mov rbx, qword ptr [rcx + 8]
        test rbx, rbx
        jne .LBB12_6
        mov dword ptr [rbp - 4], 0
        mov r13d, 4
        xor ebx, ebx
        lea r14, [rbp - 4]
.LBB12_10:
        cmp rsi, r13
        mov r15, r13
        cmovb r15, rsi
        mov rcx, r14
        mov rdx, rbx
        mov r8, r15
        call memcpy
        add r14, r15
        sub rsi, r15
        add rbx, r15
        sub r13, r15
        jne .LBB12_10
        mov rcx, qword ptr [rbp - 16]
        mov qword ptr [rcx + 16], rsi
        mov qword ptr [rcx + 8], rbx
        mov eax, dword ptr [rbp - 4]
        bswap eax
        mov rdx, qword ptr [rbp - 24]
        jmp .LBB12_12
.LBB12_7:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        ud2
        mov qword ptr [rsp + 16], rdx
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 40
        lea rbp, [rdx + 64]
        mov rcx, qword ptr [rbp - 16]
        call core::ptr::drop_in_place<bytes::bytes::Bytes>
        nop
        add rsp, 40
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret
After (53 lines)
bytes::read_data:
        push rbp
        sub rsp, 64
        lea rbp, [rsp + 64]
        mov qword ptr [rbp - 8], -2
        cmp rdx, 3
        ja .LBB12_4
        mov rax, qword ptr [rcx + 8]
        mov r8, qword ptr [rcx + 16]
        jmp .LBB12_2
.LBB12_4:
        shr rdx, 2
        mov r8, qword ptr [rcx + 16]
        lea r10, [rbp - 12]
.LBB12_5:
        sub r8, 4
        jb .LBB12_6
        mov rax, qword ptr [rcx + 8]
        mov r9d, dword ptr [rax]
        bswap r9d
        mov qword ptr [rcx + 16], r8
        add rax, 4
        mov qword ptr [rcx + 8], rax
        mov dword ptr [rbp - 12], r9d
        #APP
        #NO_APP
        dec rdx
        jne .LBB12_5
.LBB12_2:
        mov r9, qword ptr [rcx]
        add rcx, 24
        mov rdx, rax
        call qword ptr [r9 + 16]
        nop
        add rsp, 64
        pop rbp
        ret
.LBB12_6:
        mov qword ptr [rbp - 24], rcx
        lea rcx, [rip + __unnamed_7]
        lea r8, [rip + __unnamed_8]
        mov edx, 34
        call core::panicking::panic
        ud2
        mov qword ptr [rsp + 16], rdx
        push rbp
        sub rsp, 32
        lea rbp, [rdx + 64]
        mov rcx, qword ptr [rbp - 24]
        call core::ptr::drop_in_place<bytes::bytes::Bytes>
        nop
        add rsp, 32
        pop rbp
        ret
In library

Code

Before (1489 lines)
slpprocess::events::post_frame::unpack_frames:
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 1816
        lea rbp, [rsp + 128]
        movdqa xmmword ptr [rbp + 1664], xmm7
        movdqa xmmword ptr [rbp + 1648], xmm6
        mov qword ptr [rbp + 1640], -2
        mov rbx, r9
        mov r14, r8
        mov qword ptr [rbp + 1632], rdx
        mov rdi, rcx
        mov r8d, dword ptr [rbp + 1808]
        mov rdx, qword ptr [rbp + 1792]
        lea rax, [rip + __unnamed_467]
        mov qword ptr [rbp + 1544], rax
        pxor xmm0, xmm0
        movdqu xmmword ptr [rbp + 1552], xmm0
        mov qword ptr [rbp + 1568], 0
        lea rcx, [rbp - 88]
        call slpprocess::events::post_frame::PostFrames::new
        movzx esi, word ptr [rbp + 1800]
        lea r12, [rbp + 712]
        lea rdx, [rbp - 88]
        mov r8d, 400
        mov rcx, r12
        call memcpy
        mov qword ptr [rbp + 1112], 0
        lea rcx, [rbp - 88]
        lea rdx, [rbp + 1544]
        mov r8d, esi
        mov r9, r12
        call hashbrown::map::HashMap<K,V,S,A>::insert
        cmp qword ptr [rbp - 88], 0
        je .LBB890_5
        lea rcx, [rbp - 88]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 312], 0
        je .LBB890_5
        lea rcx, [rbp + 312]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_5:
        lea rcx, [rbp - 88]
        mov rdx, qword ptr [rbp + 1792]
        mov r8d, dword ptr [rbp + 1808]
        call slpprocess::events::post_frame::PostFrames::new
        shr esi, 8
        lea rdx, [rbp - 88]
        mov r8d, 400
        mov rcx, r12
        call memcpy
        mov qword ptr [rbp + 1112], 0
        lea rcx, [rbp - 88]
        lea rdx, [rbp + 1544]
        mov r8d, esi
        mov r9, r12
        call hashbrown::map::HashMap<K,V,S,A>::insert
        mov qword ptr [rbp + 1576], r14
        and rbx, -2
        cmp qword ptr [rbp - 88], 0
        je .LBB890_10
        lea rcx, [rbp - 88]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 312], 0
        je .LBB890_10
        lea rcx, [rbp + 312]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_10:
        mov r15, qword ptr [rbp + 1632]
        mov r13, qword ptr [r15 + 16]
        mov rax, rbx
        test rbx, rbx
        je .LBB890_18
        mov qword ptr [rbp + 1536], rdi
        mov edx, dword ptr [rbp + 1808]
        mov eax, edx
        shr eax, 8
        mov rcx, qword ptr [rbp + 1792]
        inc rcx
        mov qword ptr [rbp + 1520], rcx
        mov ecx, edx
        xor cl, 2
        or cl, al
        sete byte ptr [rbp + 1628]
        cmp dl, 3
        setb cl
        sete dl
        cmp al, 5
        setb r8b
        and r8b, dl
        cmp al, 8
        setb r9b
        and r9b, dl
        mov byte ptr [rbp + 1630], r9b
        cmp al, 11
        setb al
        and al, dl
        mov byte ptr [rbp + 1631], al
        or r8b, cl
        mov byte ptr [rbp + 1629], r8b
        pxor xmm6, xmm6
        pcmpeqd xmm7, xmm7
        mov qword ptr [rbp + 1608], r13
        jmp .LBB890_12
.LBB890_16:
        mov rbx, qword ptr [rbp + 1528]
        test rbx, rbx
        je .LBB890_17
.LBB890_12:
        mov rcx, qword ptr [rbp + 1576]
        lea rax, [rcx + 16]
        mov qword ptr [rbp + 1576], rax
        add rbx, -2
        mov qword ptr [rbp + 1528], rbx
        mov qword ptr [rbp + 1512], rcx
        mov rax, rcx
        xor r14d, r14d
        jmp .LBB890_13
.LBB890_231:
        inc r14
        mov rax, qword ptr [rbp + 1512]
        lea rax, [rax + 8*r14]
        cmp r14, 2
        je .LBB890_16
.LBB890_13:
        mov rcx, qword ptr [r15 + 16]
        mov rsi, rcx
        sub rsi, r13
        add rsi, qword ptr [rax]
        mov qword ptr [rbp + 1600], rsi
        mov rdi, rcx
        sub rdi, rsi
        jb .LBB890_14
        mov qword ptr [r15 + 16], rdi
        mov rax, qword ptr [r15 + 8]
        add rsi, rax
        mov qword ptr [r15 + 8], rsi
        test rax, rax
        je .LBB890_26
        cmp rdi, 4
        jb .LBB890_26
        mov eax, dword ptr [rsi]
        bswap eax
        add rdi, -4
        mov qword ptr [r15 + 16], rdi
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        lea ecx, [rax + 123]
        movsxd r12, ecx
        cmp r12, qword ptr [rbp + 1792]
        jne .LBB890_23
        jmp .LBB890_231
.LBB890_26:
        mov dword ptr [rbp + 712], 0
        cmp rdi, 4
        jb .LBB890_30
        xor ebx, ebx
.LBB890_28:
        mov r12, rsi
        mov esi, 4
        sub rsi, rbx
        cmp rdi, rsi
        cmovb rsi, rdi
        lea rcx, [rbx + rbp]
        add rcx, 712
        mov rdx, r12
        mov r8, rsi
        call memcpy
        add rbx, rsi
        sub rdi, rsi
        add rsi, r12
        cmp rbx, 4
        jb .LBB890_28
        mov qword ptr [r15 + 16], rdi
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
        lea ecx, [rax + 123]
        movsxd r12, ecx
        cmp r12, qword ptr [rbp + 1792]
        je .LBB890_231
.LBB890_23:
        cmp qword ptr [rbp + 1520], r12
        je .LBB890_231
        test rdi, rdi
        je .LBB890_25
        movzx ecx, byte ptr [rsi]
        lea rdx, [rsi + 1]
        mov r8, rdi
        mov qword ptr [rbp + 1600], 1
        dec r8
        mov qword ptr [r15 + 16], r8
        mov qword ptr [r15 + 8], rdx
        je .LBB890_32
        add rdi, -2
        mov qword ptr [r15 + 16], rdi
        add rsi, 2
        mov qword ptr [r15 + 8], rsi
        cmp qword ptr [rbp + 1568], 0
        je .LBB890_43
        movzx edx, cl
        mov rdi, qword ptr [rbp + 1544]
        mov r8, qword ptr [rbp + 1552]
        lea r9, [rdi - 808]
        xor r10d, r10d
.LBB890_35:
        and rdx, r8
        movdqu xmm0, xmmword ptr [rdi + rdx]
        movdqa xmm1, xmm0
        pcmpeqb xmm1, xmm6
        pmovmskb r11d, xmm1
.LBB890_36:
        test r11w, r11w
        je .LBB890_37
        lea ebx, [r11 - 1]
        and ebx, r11d
        rep bsf r11d, r11d
        add r11, rdx
        and r11, r8
        neg r11
        imul rsi, r11, 808
        mov r11d, ebx
        cmp byte ptr [r9 + rsi], cl
        jne .LBB890_36
        jmp .LBB890_40
.LBB890_37:
        pcmpeqb xmm0, xmm7
        pmovmskb r11d, xmm0
        test r11d, r11d
        jne .LBB890_43
        add rdx, r10
        add rdx, 16
        add r10, 16
        jmp .LBB890_35
.LBB890_40:
        mov rdx, qword ptr [rdi + rsi - 792]
        cmp rdx, r12
        jbe .LBB890_44
        add rdi, rsi
        mov rcx, qword ptr [rdi - 800]
        mov dword ptr [rcx + 4*r12], eax
        mov rax, qword ptr [r15 + 16]
        test rax, rax
        je .LBB890_42
        mov qword ptr [rbp + 1616], r14
        mov rcx, qword ptr [r15 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r15 + 16], rax
        inc rcx
        mov qword ptr [r15 + 8], rcx
        mov rax, qword ptr [rdi - 784]
        mov byte ptr [rax + r12], dl
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_65
        cmp r14, 2
        jb .LBB890_65
        movzx eax, word ptr [rsi]
        rol ax, 8
        add r14, -2
        mov qword ptr [r15 + 16], r14
        add rsi, 2
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_48
.LBB890_65:
        mov word ptr [rbp + 712], 0
        cmp r14, 2
        jb .LBB890_69
        xor r13d, r13d
.LBB890_67:
        mov rbx, rsi
        mov esi, 2
        sub rsi, r13
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [1*r13 + 712]
        add rcx, rbp
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r13, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r13, 2
        jb .LBB890_67
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        movzx eax, word ptr [rbp + 712]
        rol ax, 8
.LBB890_48:
        mov rcx, qword ptr [rdi - 768]
        mov word ptr [rcx + 2*r12], ax
        mov rsi, qword ptr [r15 + 8]
        mov r13, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_70
        cmp r13, 4
        jb .LBB890_70
        mov r14d, dword ptr [rsi]
        bswap r14d
        add r13, -4
        mov qword ptr [r15 + 16], r13
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        cmp r13, 4
        jae .LBB890_52
        jmp .LBB890_75
.LBB890_70:
        mov dword ptr [rbp + 712], 0
        cmp r13, 4
        jb .LBB890_74
        xor r14d, r14d
.LBB890_72:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r14
        cmp r13, rsi
        cmovb rsi, r13
        lea rcx, [r14 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r14, rsi
        sub r13, rsi
        add rsi, rbx
        cmp r14, 4
        jb .LBB890_72
        mov qword ptr [r15 + 16], r13
        mov qword ptr [r15 + 8], rsi
        mov r14d, dword ptr [rbp + 712]
        bswap r14d
        cmp r13, 4
        jb .LBB890_75
.LBB890_52:
        test rsi, rsi
        je .LBB890_75
        mov eax, dword ptr [rsi]
        bswap eax
        add r13, -4
        mov qword ptr [r15 + 16], r13
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_54
.LBB890_75:
        mov dword ptr [rbp + 712], 0
        cmp r13, 4
        jb .LBB890_79
        xor r15d, r15d
.LBB890_77:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r13, rsi
        cmovb rsi, r13
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r13, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_77
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r13
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_54:
        mov rcx, qword ptr [rdi - 752]
        mov dword ptr [rcx + 8*r12], r14d
        mov dword ptr [rcx + 8*r12 + 4], eax
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        mov r13, qword ptr [rbp + 1608]
        je .LBB890_80
        cmp r14, 4
        jb .LBB890_80
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_57
.LBB890_80:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_84
        xor r15d, r15d
.LBB890_82:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_82
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_57:
        mov rcx, qword ptr [rdi - 736]
        mov dword ptr [rcx + 4*r12], eax
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_85
        cmp r14, 4
        jb .LBB890_85
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_60
.LBB890_85:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_89
        xor r15d, r15d
.LBB890_87:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_87
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_60:
        mov rcx, qword ptr [rdi - 720]
        mov dword ptr [rcx + 4*r12], eax
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_90
        cmp r14, 4
        jb .LBB890_90
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_63
.LBB890_90:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_94
        xor r15d, r15d
.LBB890_92:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_92
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_63:
        mov rcx, qword ptr [rdi - 704]
        mov dword ptr [rcx + 4*r12], eax
        mov rax, qword ptr [r15 + 16]
        test rax, rax
        mov r14, qword ptr [rbp + 1616]
        je .LBB890_64
        mov rcx, qword ptr [r15 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r15 + 16], rax
        inc rcx
        mov qword ptr [r15 + 8], rcx
        mov rax, qword ptr [rdi - 688]
        mov byte ptr [rax + r12], dl
        mov rax, qword ptr [r15 + 16]
        test rax, rax
        je .LBB890_96
        mov rcx, qword ptr [r15 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r15 + 16], rax
        inc rcx
        mov qword ptr [r15 + 8], rcx
        mov rax, qword ptr [rdi - 672]
        mov byte ptr [rax + r12], dl
        mov rax, qword ptr [r15 + 16]
        test rax, rax
        je .LBB890_98
        mov rcx, qword ptr [r15 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r15 + 16], rax
        inc rcx
        mov qword ptr [r15 + 8], rcx
        mov rax, qword ptr [rdi - 656]
        mov byte ptr [rax + r12], dl
        mov rax, qword ptr [r15 + 16]
        test rax, rax
        je .LBB890_100
        mov rcx, qword ptr [r15 + 8]
        dec rax
        lea rdx, [rcx + 1]
        movzx ecx, byte ptr [rcx]
        mov qword ptr [r15 + 16], rax
        mov qword ptr [r15 + 8], rdx
        mov rax, qword ptr [rdi - 640]
        mov byte ptr [rax + r12], cl
        mov eax, dword ptr [rbp + 1808]
        cmp al, 2
        jb .LBB890_231
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_107
        cmp r14, 4
        jb .LBB890_107
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_105
.LBB890_107:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_111
        xor r15d, r15d
.LBB890_109:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_109
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_105:
        mov rcx, qword ptr [rdi - 616]
        test rcx, rcx
        je .LBB890_106
        mov dword ptr [rcx + 4*r12], eax
        mov r8, qword ptr [r15 + 16]
        test r8, r8
        je .LBB890_113
        mov r9, qword ptr [r15 + 8]
        movzx eax, byte ptr [r9]
        lea rcx, [r9 + 1]
        mov rdx, r8
        dec rdx
        mov qword ptr [r15 + 16], rdx
        mov qword ptr [r15 + 8], rcx
        je .LBB890_115
        movzx ecx, byte ptr [r9 + 1]
        lea rdx, [r9 + 2]
        mov r10, r8
        add r10, -2
        mov qword ptr [r15 + 16], r10
        mov qword ptr [r15 + 8], rdx
        je .LBB890_117
        movzx edx, byte ptr [r9 + 2]
        lea r10, [r9 + 3]
        mov r11, r8
        add r11, -3
        mov qword ptr [r15 + 16], r11
        mov qword ptr [r15 + 8], r10
        je .LBB890_119
        movzx r10d, byte ptr [r9 + 3]
        lea r11, [r9 + 4]
        mov rsi, r8
        add rsi, -4
        mov qword ptr [r15 + 16], rsi
        mov qword ptr [r15 + 8], r11
        je .LBB890_121
        movzx r11d, byte ptr [r9 + 4]
        add r8, -5
        mov qword ptr [r15 + 16], r8
        add r9, 5
        mov qword ptr [r15 + 8], r9
        mov r8, qword ptr [rdi - 600]
        test r8, r8
        je .LBB890_123
        shl rcx, 8
        or rcx, rax
        shl rdx, 16
        or rdx, rcx
        shl r10, 24
        or r10, rdx
        shl r11, 32
        or r11, r10
        mov qword ptr [r8 + 8*r12], r11
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_129
        cmp r14, 4
        jb .LBB890_129
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_127
.LBB890_129:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_133
        xor r15d, r15d
.LBB890_131:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_131
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_127:
        mov rcx, qword ptr [rdi - 584]
        test rcx, rcx
        je .LBB890_128
        mov dword ptr [rcx + 4*r12], eax
        mov rcx, qword ptr [r15 + 16]
        test rcx, rcx
        je .LBB890_135
        mov rdx, qword ptr [r15 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r15 + 16], rcx
        inc rdx
        mov qword ptr [r15 + 8], rdx
        mov rcx, qword ptr [rdi - 568]
        test rcx, rcx
        je .LBB890_137
        test al, al
        sete byte ptr [rcx + r12]
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_143
        cmp r14, 2
        jb .LBB890_143
        movzx eax, word ptr [rsi]
        rol ax, 8
        add r14, -2
        mov qword ptr [r15 + 16], r14
        add rsi, 2
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_141
.LBB890_143:
        mov word ptr [rbp + 712], 0
        cmp r14, 2
        jb .LBB890_147
        xor r15d, r15d
.LBB890_145:
        mov rbx, rsi
        mov esi, 2
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 2
        jb .LBB890_145
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        movzx eax, word ptr [rbp + 712]
        rol ax, 8
.LBB890_141:
        mov rcx, qword ptr [rdi - 552]
        test rcx, rcx
        mov r14, qword ptr [rbp + 1616]
        je .LBB890_142
        mov word ptr [rcx + 2*r12], ax
        mov rcx, qword ptr [r15 + 16]
        test rcx, rcx
        je .LBB890_149
        mov rdx, qword ptr [r15 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r15 + 16], rcx
        inc rdx
        mov qword ptr [r15 + 8], rdx
        mov rcx, qword ptr [rdi - 536]
        test rcx, rcx
        je .LBB890_151
        mov byte ptr [rcx + r12], al
        mov rcx, qword ptr [r15 + 16]
        test rcx, rcx
        je .LBB890_153
        mov rdx, qword ptr [r15 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r15 + 16], rcx
        inc rdx
        mov qword ptr [r15 + 8], rdx
        mov rcx, qword ptr [rdi - 520]
        test rcx, rcx
        je .LBB890_155
        mov byte ptr [rcx + r12], al
        cmp byte ptr [rbp + 1628], 0
        jne .LBB890_231
        mov rcx, qword ptr [r15 + 16]
        test rcx, rcx
        je .LBB890_158
        mov rdx, qword ptr [r15 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r15 + 16], rcx
        inc rdx
        mov qword ptr [r15 + 8], rdx
        mov rcx, qword ptr [rdi - 504]
        test rcx, rcx
        je .LBB890_160
        mov byte ptr [rcx + r12], al
        cmp byte ptr [rbp + 1629], 0
        jne .LBB890_231
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_170
        cmp r14, 4
        jb .LBB890_170
        mov r13d, dword ptr [rsi]
        bswap r13d
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        cmp r14, 4
        jae .LBB890_166
        jmp .LBB890_175
.LBB890_170:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_174
        xor r15d, r15d
.LBB890_172:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_172
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov r13d, dword ptr [rbp + 712]
        bswap r13d
        cmp r14, 4
        jb .LBB890_175
.LBB890_166:
        test rsi, rsi
        je .LBB890_175
        mov ecx, dword ptr [rsi]
        bswap ecx
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_168
.LBB890_175:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_179
        xor r15d, r15d
.LBB890_177:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_177
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov ecx, dword ptr [rbp + 712]
        bswap ecx
.LBB890_168:
        mov rax, qword ptr [rdi - 488]
        test rax, rax
        je .LBB890_169
        mov dword ptr [rax + 8*r12], r13d
        mov dword ptr [rax + 8*r12 + 4], ecx
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        mov dword ptr [rbp + 1588], ecx
        je .LBB890_188
        cmp r14, 4
        jb .LBB890_188
        mov r13d, dword ptr [rsi]
        bswap r13d
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        cmp r14, 4
        jae .LBB890_184
        jmp .LBB890_193
.LBB890_188:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_192
        xor r15d, r15d
.LBB890_190:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_190
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov r13d, dword ptr [rbp + 712]
        bswap r13d
        cmp r14, 4
        jb .LBB890_193
.LBB890_184:
        test rsi, rsi
        je .LBB890_193
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_186
.LBB890_193:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_197
        xor r15d, r15d
.LBB890_195:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_195
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_186:
        mov rcx, qword ptr [rdi - 472]
        test rcx, rcx
        je .LBB890_187
        mov dword ptr [rcx + 8*r12], r13d
        mov dword ptr [rcx + 8*r12 + 4], eax
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_203
        cmp r14, 4
        jb .LBB890_203
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        mov r13, qword ptr [rbp + 1608]
        jmp .LBB890_201
.LBB890_203:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_207
        xor r15d, r15d
        mov r13, qword ptr [rbp + 1608]
.LBB890_205:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_205
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_201:
        mov rcx, qword ptr [rdi - 456]
        test rcx, rcx
        mov r14, qword ptr [rbp + 1616]
        je .LBB890_202
        mov dword ptr [rcx + 8*r12], eax
        mov eax, dword ptr [rbp + 1588]
        mov dword ptr [rcx + 8*r12 + 4], eax
        cmp byte ptr [rbp + 1630], 0
        jne .LBB890_231
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_211
        cmp r14, 3
        jbe .LBB890_211
        mov eax, dword ptr [rsi]
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        mov rcx, qword ptr [rdi - 440]
        test rcx, rcx
        jne .LBB890_216
        jmp .LBB890_224
.LBB890_211:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_222
        xor r15d, r15d
.LBB890_213:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_213
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov rcx, qword ptr [rdi - 440]
        test rcx, rcx
        je .LBB890_224
        mov eax, dword ptr [rbp + 712]
.LBB890_216:
        bswap eax
        mov dword ptr [rcx + 4*r12], eax
        cmp byte ptr [rbp + 1631], 0
        mov r14, qword ptr [rbp + 1616]
        jne .LBB890_231
        mov rsi, qword ptr [r15 + 8]
        mov r14, qword ptr [r15 + 16]
        test rsi, rsi
        je .LBB890_225
        cmp r14, 4
        jb .LBB890_225
        mov eax, dword ptr [rsi]
        bswap eax
        add r14, -4
        mov qword ptr [r15 + 16], r14
        add rsi, 4
        mov qword ptr [r15 + 8], rsi
        jmp .LBB890_220
.LBB890_225:
        mov dword ptr [rbp + 712], 0
        cmp r14, 4
        jb .LBB890_229
        xor r15d, r15d
.LBB890_227:
        mov rbx, rsi
        mov esi, 4
        sub rsi, r15
        cmp r14, rsi
        cmovb rsi, r14
        lea rcx, [r15 + rbp]
        add rcx, 712
        mov rdx, rbx
        mov r8, rsi
        call memcpy
        add r15, rsi
        sub r14, rsi
        add rsi, rbx
        cmp r15, 4
        jb .LBB890_227
        mov r15, qword ptr [rbp + 1632]
        mov qword ptr [r15 + 16], r14
        mov qword ptr [r15 + 8], rsi
        mov eax, dword ptr [rbp + 712]
        bswap eax
.LBB890_220:
        mov rcx, qword ptr [rdi - 424]
        test rcx, rcx
        mov r14, qword ptr [rbp + 1616]
        je .LBB890_221
        mov dword ptr [rcx + 4*r12], eax
        jmp .LBB890_231
.LBB890_17:
        mov r13, qword ptr [r15 + 16]
        mov rdi, qword ptr [rbp + 1536]
.LBB890_18:
        movups xmm0, xmmword ptr [rbp + 1544]
        movups xmm1, xmmword ptr [rbp + 1560]
        movups xmmword ptr [rdi + 16], xmm1
        movups xmmword ptr [rdi], xmm0
        lea rcx, [r15 + 24]
        mov rax, qword ptr [r15]
        mov rdx, qword ptr [r15 + 8]
        mov r8, r13
        call qword ptr [rax + 16]
        mov rax, rdi
        movaps xmm6, xmmword ptr [rbp + 1648]
        movaps xmm7, xmmword ptr [rbp + 1664]
        add rsp, 1816
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret
.LBB890_44:
        lea r8, [rip + __unnamed_468]
        mov rcx, r12
        call core::panicking::panic_bounds_check
        jmp .LBB890_15
.LBB890_43:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_469]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_14:
        mov qword ptr [rbp + 1592], rcx
        lea rax, [rbp + 1600]
        mov qword ptr [rbp - 88], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp - 80], rax
        lea rcx, [rbp + 1592]
        mov qword ptr [rbp - 72], rcx
        mov qword ptr [rbp - 64], rax
        lea rax, [rip + __unnamed_268]
        mov qword ptr [rbp + 712], rax
        mov qword ptr [rbp + 720], 2
        mov qword ptr [rbp + 744], 0
        lea rax, [rbp - 88]
        mov qword ptr [rbp + 728], rax
        mov qword ptr [rbp + 736], 2
        lea rdx, [rip + __unnamed_269]
        lea rcx, [rbp + 712]
        call core::panicking::panic_fmt
        jmp .LBB890_15
.LBB890_25:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_32:
        mov qword ptr [rbp + 1592], 0
        lea rax, [rbp + 1600]
        mov qword ptr [rbp - 88], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp - 80], rax
        lea rcx, [rbp + 1592]
        mov qword ptr [rbp - 72], rcx
        mov qword ptr [rbp - 64], rax
        lea rax, [rip + __unnamed_268]
        mov qword ptr [rbp + 712], rax
        mov qword ptr [rbp + 720], 2
        mov qword ptr [rbp + 744], 0
        lea rax, [rbp - 88]
        mov qword ptr [rbp + 728], rax
        mov qword ptr [rbp + 736], 2
        lea rdx, [rip + __unnamed_269]
        lea rcx, [rbp + 712]
        call core::panicking::panic_fmt
        jmp .LBB890_15
.LBB890_30:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_64:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_42:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_98:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_96:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_100:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_94:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_153:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_123:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_470]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_89:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_121:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_151:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_471]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_84:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_149:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_119:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_79:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_142:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_472]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_117:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_74:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_115:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_137:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_473]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_69:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_113:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_135:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_106:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_474]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_128:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_475]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_155:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_476]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_147:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_133:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_160:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_477]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_158:
        lea rcx, [rip + __unnamed_246]
        lea r8, [rip + __unnamed_247]
        mov edx, 39
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_111:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_187:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_478]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_202:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_479]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_169:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_480]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_207:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_224:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_481]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_174:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_179:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_192:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_197:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_222:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_221:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_482]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_229:
        lea rcx, [rip + __unnamed_244]
        lea r8, [rip + __unnamed_245]
        mov edx, 47
        call core::panicking::panic
.LBB890_15:
        ud2
        mov qword ptr [rsp + 16], rdx
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 72
        lea rbp, [rdx + 128]
        movdqa xmmword ptr [rsp + 32], xmm7
        movdqa xmmword ptr [rsp + 48], xmm6
        lea rcx, [rbp + 1544]
        call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slpprocess::events::post_frame::PostFrames,core::option::Option<slpprocess::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
        mov rcx, qword ptr [rbp + 1632]
        call core::ptr::drop_in_place<bytes::bytes::Bytes>
        movaps xmm6, xmmword ptr [rsp + 48]
        movaps xmm7, xmmword ptr [rsp + 32]
        add rsp, 72
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret
After (986 lines)
slpprocess::events::post_frame::unpack_frames:
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 1784
        lea rbp, [rsp + 128]
        movdqa xmmword ptr [rbp + 1632], xmm7
        movdqa xmmword ptr [rbp + 1616], xmm6
        mov qword ptr [rbp + 1608], -2
        mov r14, r9
        mov r15, r8
        mov qword ptr [rbp + 1592], rdx
        mov rbx, rcx
        mov r8d, dword ptr [rbp + 1776]
        mov rdx, qword ptr [rbp + 1760]
        lea rax, [rip + __unnamed_467]
        mov qword ptr [rbp + 1544], rax
        pxor xmm0, xmm0
        movdqu xmmword ptr [rbp + 1552], xmm0
        mov qword ptr [rbp + 1568], 0
        lea rcx, [rbp + 704]
        call slpprocess::events::post_frame::PostFrames::new
        movzx esi, word ptr [rbp + 1768]
        lea rdi, [rbp - 96]
        lea rdx, [rbp + 704]
        mov r8d, 400
        mov rcx, rdi
        call memcpy
        mov qword ptr [rbp + 304], 0
        lea rcx, [rbp + 704]
        lea rdx, [rbp + 1544]
        mov r8d, esi
        mov r9, rdi
        call hashbrown::map::HashMap<K,V,S,A>::insert
        cmp qword ptr [rbp + 704], 0
        je .LBB890_5
        lea rcx, [rbp + 704]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 1104], 0
        je .LBB890_5
        lea rcx, [rbp + 1104]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_5:
        lea rcx, [rbp + 704]
        mov rdx, qword ptr [rbp + 1760]
        mov r8d, dword ptr [rbp + 1776]
        call slpprocess::events::post_frame::PostFrames::new
        shr esi, 8
        lea rdx, [rbp + 704]
        mov r8d, 400
        mov rcx, rdi
        call memcpy
        mov qword ptr [rbp + 304], 0
        lea rcx, [rbp + 704]
        lea rdx, [rbp + 1544]
        mov r8d, esi
        mov r9, rdi
        call hashbrown::map::HashMap<K,V,S,A>::insert
        and r14, -2
        cmp qword ptr [rbp + 704], 0
        je .LBB890_10
        lea rcx, [rbp + 704]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 1104], 0
        je .LBB890_10
        lea rcx, [rbp + 1104]
        call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_10:
        mov r13, qword ptr [rbp + 1592]
        mov r8, qword ptr [r13 + 16]
        test r14, r14
        je .LBB890_18
        mov qword ptr [rbp + 1536], rbx
        mov edx, dword ptr [rbp + 1776]
        mov eax, edx
        shr eax, 8
        mov rcx, qword ptr [rbp + 1760]
        inc rcx
        mov qword ptr [rbp + 1512], rcx
        mov ecx, edx
        xor cl, 2
        or cl, al
        sete byte ptr [rbp + 1604]
        cmp dl, 3
        setb cl
        sete dl
        cmp al, 5
        setb r9b
        and r9b, dl
        cmp al, 8
        setb r10b
        and r10b, dl
        mov byte ptr [rbp + 1606], r10b
        cmp al, 11
        setb al
        and al, dl
        mov byte ptr [rbp + 1607], al
        or r9b, cl
        mov byte ptr [rbp + 1605], r9b
        pxor xmm6, xmm6
        pcmpeqd xmm7, xmm7
        jmp .LBB890_12
.LBB890_16:
        mov r14, qword ptr [rbp + 1520]
        test r14, r14
        mov r15, qword ptr [rbp + 1528]
        je .LBB890_17
.LBB890_12:
        lea rax, [r15 + 16]
        mov qword ptr [rbp + 1528], rax
        add r14, -2
        mov qword ptr [rbp + 1520], r14
        mov qword ptr [rbp + 1504], r15
        mov rax, r15
        xor r14d, r14d
        jmp .LBB890_13
.LBB890_133:
        bswap edx
        mov dword ptr [rax + 4*rcx], edx
.LBB890_134:
        inc r14
        mov rax, qword ptr [rbp + 1504]
        lea rax, [rax + 8*r14]
        cmp r14, 2
        mov r8, r15
        je .LBB890_16
.LBB890_13:
        mov rcx, qword ptr [r13 + 16]
        mov rbx, rcx
        sub rbx, r8
        add rbx, qword ptr [rax]
        mov qword ptr [rbp + 1584], rbx
        mov rsi, rcx
        sub rsi, rbx
        jb .LBB890_14
        mov qword ptr [r13 + 16], rsi
        mov rax, qword ptr [r13 + 8]
        add rbx, rax
        mov qword ptr [r13 + 8], rbx
        cmp rsi, 4
        jb .LBB890_22
        mov r15, r8
        test rax, rax
        je .LBB890_23
        mov r8d, dword ptr [rbx]
        bswap r8d
        add rsi, -4
        mov qword ptr [r13 + 16], rsi
        add rbx, 4
        mov qword ptr [r13 + 8], rbx
        lea eax, [r8 + 123]
        movsxd rcx, eax
        cmp rcx, qword ptr [rbp + 1760]
        jne .LBB890_27
        jmp .LBB890_134
.LBB890_23:
        mov dword ptr [rbp - 96], 0
        mov r12d, 4
        xor ebx, ebx
        lea r13, [rbp - 96]
.LBB890_24:
        cmp rsi, r12
        mov rdi, r12
        cmovb rdi, rsi
        mov rcx, r13
        mov rdx, rbx
        mov r8, rdi
        call memcpy
        add r13, rdi
        sub rsi, rdi
        add rbx, rdi
        sub r12, rdi
        jne .LBB890_24
        mov r13, qword ptr [rbp + 1592]
        mov qword ptr [r13 + 16], rsi
        mov qword ptr [r13 + 8], rbx
        mov r8d, dword ptr [rbp - 96]
        bswap r8d
        lea eax, [r8 + 123]
        movsxd rcx, eax
        cmp rcx, qword ptr [rbp + 1760]
        je .LBB890_134
.LBB890_27:
        cmp qword ptr [rbp + 1512], rcx
        je .LBB890_134
        test rsi, rsi
        je .LBB890_29
        movzx edx, byte ptr [rbx]
        lea rax, [rbx + 1]
        mov r9, rsi
        mov qword ptr [rbp + 1584], 1
        dec r9
        mov qword ptr [r13 + 16], r9
        mov qword ptr [r13 + 8], rax
        je .LBB890_31
        add rsi, -2
        mov qword ptr [r13 + 16], rsi
        add rbx, 2
        mov qword ptr [r13 + 8], rbx
        cmp qword ptr [rbp + 1568], 0
        je .LBB890_42
        movzx r9d, dl
        mov rax, qword ptr [rbp + 1544]
        mov r10, qword ptr [rbp + 1552]
        lea r11, [rax - 808]
        xor esi, esi
.LBB890_34:
        and r9, r10
        movdqu xmm0, xmmword ptr [rax + r9]
        movdqa xmm1, xmm0
        pcmpeqb xmm1, xmm6
        pmovmskb edi, xmm1
.LBB890_35:
        test di, di
        je .LBB890_36
        lea r12d, [rdi - 1]
        and r12d, edi
        rep bsf edi, edi
        add rdi, r9
        and rdi, r10
        neg rdi
        imul rbx, rdi, 808
        mov edi, r12d
        cmp byte ptr [r11 + rbx], dl
        jne .LBB890_35
        jmp .LBB890_39
.LBB890_36:
        pcmpeqb xmm0, xmm7
        pmovmskb edi, xmm0
        test edi, edi
        jne .LBB890_42
        add r9, rsi
        add r9, 16
        add rsi, 16
        jmp .LBB890_34
.LBB890_39:
        mov rdx, qword ptr [rax + rbx - 792]
        cmp rdx, rcx
        jbe .LBB890_43
        add rax, rbx
        mov rdx, qword ptr [rax - 800]
        mov dword ptr [rdx + 4*rcx], r8d
        mov rdx, qword ptr [r13 + 16]
        test rdx, rdx
        je .LBB890_41
        mov r8, qword ptr [r13 + 8]
        movzx r9d, byte ptr [r8]
        dec rdx
        mov qword ptr [r13 + 16], rdx
        inc r8
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 784]
        mov byte ptr [rdx + rcx], r9b
        mov rdx, qword ptr [r13 + 16]
        cmp rdx, 1
        jbe .LBB890_45
        mov r8, qword ptr [r13 + 8]
        movzx r9d, word ptr [r8]
        rol r9w, 8
        add rdx, -2
        mov qword ptr [r13 + 16], rdx
        add r8, 2
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 768]
        mov word ptr [rdx + 2*rcx], r9w
        mov rdx, qword ptr [r13 + 16]
        cmp rdx, 3
        jbe .LBB890_47
        mov r9, qword ptr [r13 + 8]
        mov r8d, dword ptr [r9]
        lea r10, [rdx - 4]
        mov qword ptr [r13 + 16], r10
        lea r11, [r9 + 4]
        mov qword ptr [r13 + 8], r11
        cmp r10, 3
        jbe .LBB890_49
        bswap r8d
        mov r10d, dword ptr [r9 + 4]
        bswap r10d
        add rdx, -8
        mov qword ptr [r13 + 16], rdx
        add r9, 8
        mov qword ptr [r13 + 8], r9
        mov rdx, qword ptr [rax - 752]
        mov dword ptr [rdx + 8*rcx], r8d
        mov dword ptr [rdx + 8*rcx + 4], r10d
        mov rdx, qword ptr [r13 + 16]
        cmp rdx, 3
        jbe .LBB890_51
        mov r8, qword ptr [r13 + 8]
        mov r9d, dword ptr [r8]
        bswap r9d
        add rdx, -4
        mov qword ptr [r13 + 16], rdx
        add r8, 4
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 736]
        mov dword ptr [rdx + 4*rcx], r9d
        mov rdx, qword ptr [r13 + 16]
        cmp rdx, 3
        jbe .LBB890_53
        mov r8, qword ptr [r13 + 8]
        mov r9d, dword ptr [r8]
        bswap r9d
        add rdx, -4
        mov qword ptr [r13 + 16], rdx
        add r8, 4
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 720]
        mov dword ptr [rdx + 4*rcx], r9d
        mov rdx, qword ptr [r13 + 16]
        cmp rdx, 3
        jbe .LBB890_55
        mov r8, qword ptr [r13 + 8]
        mov r9d, dword ptr [r8]
        bswap r9d
        add rdx, -4
        mov qword ptr [r13 + 16], rdx
        add r8, 4
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 704]
        mov dword ptr [rdx + 4*rcx], r9d
        mov rdx, qword ptr [r13 + 16]
        test rdx, rdx
        je .LBB890_57
        mov r8, qword ptr [r13 + 8]
        movzx r9d, byte ptr [r8]
        dec rdx
        mov qword ptr [r13 + 16], rdx
        inc r8
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 688]
        mov byte ptr [rdx + rcx], r9b
        mov rdx, qword ptr [r13 + 16]
        test rdx, rdx
        je .LBB890_59
        mov r8, qword ptr [r13 + 8]
        movzx r9d, byte ptr [r8]
        dec rdx
        mov qword ptr [r13 + 16], rdx
        inc r8
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 672]
        mov byte ptr [rdx + rcx], r9b
        mov rdx, qword ptr [r13 + 16]
        test rdx, rdx
        je .LBB890_61
        mov r8, qword ptr [r13 + 8]
        movzx r9d, byte ptr [r8]
        dec rdx
        mov qword ptr [r13 + 16], rdx
        inc r8
        mov qword ptr [r13 + 8], r8
        mov rdx, qword ptr [rax - 656]
        mov byte ptr [rdx + rcx], r9b
        mov rdx, qword ptr [r13 + 16]
        test rdx, rdx
        je .LBB890_63
        mov r8, qword ptr [r13 + 8]
        dec rdx
        lea r9, [r8 + 1]
        movzx r8d, byte ptr [r8]
        mov qword ptr [r13 + 16], rdx
        mov qword ptr [r13 + 8], r9
        mov rdx, qword ptr [rax - 640]
        mov byte ptr [rdx + rcx], r8b
        mov edx, dword ptr [rbp + 1776]
        cmp dl, 2
        jb .LBB890_134
        mov r8, qword ptr [r13 + 16]
        cmp r8, 3
        jbe .LBB890_66
        mov r9, qword ptr [r13 + 8]
        mov edx, dword ptr [r9]
        add r8, -4
        mov qword ptr [r13 + 16], r8
        add r9, 4
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 616]
        test r8, r8
        je .LBB890_68
        bswap edx
        mov dword ptr [r8 + 4*rcx], edx
        mov r10, qword ptr [r13 + 16]
        test r10, r10
        je .LBB890_70
        mov r11, qword ptr [r13 + 8]
        movzx edx, byte ptr [r11]
        lea r8, [r11 + 1]
        mov r9, r10
        dec r9
        mov qword ptr [r13 + 16], r9
        mov qword ptr [r13 + 8], r8
        je .LBB890_72
        movzx r8d, byte ptr [r11 + 1]
        lea r9, [r11 + 2]
        mov rsi, r10
        add rsi, -2
        mov qword ptr [r13 + 16], rsi
        mov qword ptr [r13 + 8], r9
        je .LBB890_74
        movzx r9d, byte ptr [r11 + 2]
        lea rsi, [r11 + 3]
        mov rdi, r10
        add rdi, -3
        mov qword ptr [r13 + 16], rdi
        mov qword ptr [r13 + 8], rsi
        je .LBB890_76
        movzx esi, byte ptr [r11 + 3]
        lea rdi, [r11 + 4]
        mov rbx, r10
        add rbx, -4
        mov qword ptr [r13 + 16], rbx
        mov qword ptr [r13 + 8], rdi
        je .LBB890_78
        movzx edi, byte ptr [r11 + 4]
        add r10, -5
        mov qword ptr [r13 + 16], r10
        add r11, 5
        mov qword ptr [r13 + 8], r11
        mov r10, qword ptr [rax - 600]
        test r10, r10
        je .LBB890_80
        shl r8, 8
        or r8, rdx
        shl r9, 16
        or r9, r8
        shl rsi, 24
        or rsi, r9
        shl rdi, 32
        or rdi, rsi
        mov qword ptr [r10 + 8*rcx], rdi
        mov r8, qword ptr [r13 + 16]
        cmp r8, 3
        jbe .LBB890_82
        mov r9, qword ptr [r13 + 8]
        mov edx, dword ptr [r9]
        add r8, -4
        mov qword ptr [r13 + 16], r8
        add r9, 4
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 584]
        test r8, r8
        je .LBB890_84
        bswap edx
        mov dword ptr [r8 + 4*rcx], edx
        mov r8, qword ptr [r13 + 16]
        test r8, r8
        je .LBB890_86
        mov r9, qword ptr [r13 + 8]
        movzx edx, byte ptr [r9]
        dec r8
        mov qword ptr [r13 + 16], r8
        inc r9
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 568]
        test r8, r8
        je .LBB890_88
        test dl, dl
        sete byte ptr [r8 + rcx]
        mov r8, qword ptr [r13 + 16]
        cmp r8, 1
        jbe .LBB890_90
        mov r9, qword ptr [r13 + 8]
        movzx edx, word ptr [r9]
        add r8, -2
        mov qword ptr [r13 + 16], r8
        add r9, 2
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 552]
        test r8, r8
        je .LBB890_92
        rol dx, 8
        mov word ptr [r8 + 2*rcx], dx
        mov r8, qword ptr [r13 + 16]
        test r8, r8
        je .LBB890_94
        mov r9, qword ptr [r13 + 8]
        movzx edx, byte ptr [r9]
        dec r8
        mov qword ptr [r13 + 16], r8
        inc r9
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 536]
        test r8, r8
        je .LBB890_96
        mov byte ptr [r8 + rcx], dl
        mov r8, qword ptr [r13 + 16]
        test r8, r8
        je .LBB890_98
        mov r9, qword ptr [r13 + 8]
        movzx edx, byte ptr [r9]
        dec r8
        mov qword ptr [r13 + 16], r8
        inc r9
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 520]
        test r8, r8
        je .LBB890_100
        mov byte ptr [r8 + rcx], dl
        cmp byte ptr [rbp + 1604], 0
        jne .LBB890_134
        mov r8, qword ptr [r13 + 16]
        test r8, r8
        je .LBB890_103
        mov r9, qword ptr [r13 + 8]
        movzx edx, byte ptr [r9]
        dec r8
        mov qword ptr [r13 + 16], r8
        inc r9
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 504]
        test r8, r8
        je .LBB890_105
        mov byte ptr [r8 + rcx], dl
        cmp byte ptr [rbp + 1605], 0
        jne .LBB890_134
        mov r9, qword ptr [r13 + 16]
        cmp r9, 3
        jbe .LBB890_108
        mov r10, qword ptr [r13 + 8]
        mov r8d, dword ptr [r10]
        lea rdx, [r9 - 4]
        mov qword ptr [r13 + 16], rdx
        lea r11, [r10 + 4]
        mov qword ptr [r13 + 8], r11
        cmp rdx, 3
        jbe .LBB890_110
        mov edx, dword ptr [r10 + 4]
        add r9, -8
        mov qword ptr [r13 + 16], r9
        add r10, 8
        mov qword ptr [r13 + 8], r10
        mov r9, qword ptr [rax - 488]
        test r9, r9
        je .LBB890_112
        bswap r8d
        bswap edx
        mov dword ptr [r9 + 8*rcx], r8d
        mov dword ptr [r9 + 8*rcx + 4], edx
        mov r9, qword ptr [r13 + 16]
        cmp r9, 3
        jbe .LBB890_114
        mov r11, qword ptr [r13 + 8]
        mov r8d, dword ptr [r11]
        lea r10, [r9 - 4]
        mov qword ptr [r13 + 16], r10
        lea rsi, [r11 + 4]
        mov qword ptr [r13 + 8], rsi
        cmp r10, 3
        jbe .LBB890_116
        mov r10d, dword ptr [r11 + 4]
        add r9, -8
        mov qword ptr [r13 + 16], r9
        add r11, 8
        mov qword ptr [r13 + 8], r11
        mov r9, qword ptr [rax - 472]
        test r9, r9
        je .LBB890_118
        bswap r8d
        bswap r10d
        mov dword ptr [r9 + 8*rcx], r8d
        mov dword ptr [r9 + 8*rcx + 4], r10d
        mov r9, qword ptr [r13 + 16]
        cmp r9, 3
        jbe .LBB890_120
        mov r10, qword ptr [r13 + 8]
        mov r8d, dword ptr [r10]
        add r9, -4
        mov qword ptr [r13 + 16], r9
        add r10, 4
        mov qword ptr [r13 + 8], r10
        mov r9, qword ptr [rax - 456]
        test r9, r9
        je .LBB890_122
        bswap r8d
        mov dword ptr [r9 + 8*rcx], r8d
        mov dword ptr [r9 + 8*rcx + 4], edx
        cmp byte ptr [rbp + 1606], 0
        jne .LBB890_134
        mov r8, qword ptr [r13 + 16]
        cmp r8, 3
        jbe .LBB890_125
        mov r9, qword ptr [r13 + 8]
        mov edx, dword ptr [r9]
        add r8, -4
        mov qword ptr [r13 + 16], r8
        add r9, 4
        mov qword ptr [r13 + 8], r9
        mov r8, qword ptr [rax - 440]
        test r8, r8
        je .LBB890_127
        bswap edx
        mov dword ptr [r8 + 4*rcx], edx
        cmp byte ptr [rbp + 1607], 0
        jne .LBB890_134
        mov r8, qword ptr [r13 + 16]
        cmp r8, 3
        jbe .LBB890_130
        mov r9, qword ptr [r13 + 8]
        mov edx, dword ptr [r9]
        add r8, -4
        mov qword ptr [r13 + 16], r8
        add r9, 4
        mov qword ptr [r13 + 8], r9
        mov rax, qword ptr [rax - 424]
        test rax, rax
        jne .LBB890_133
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_468]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_17:
        mov r8, qword ptr [r13 + 16]
        mov rbx, qword ptr [rbp + 1536]
.LBB890_18:
        movups xmm0, xmmword ptr [rbp + 1544]
        movups xmm1, xmmword ptr [rbp + 1560]
        movups xmmword ptr [rbx + 16], xmm1
        movups xmmword ptr [rbx], xmm0
        lea rcx, [r13 + 24]
        mov rax, qword ptr [r13]
        mov rdx, qword ptr [r13 + 8]
        call qword ptr [rax + 16]
        mov rax, rbx
        movaps xmm6, xmmword ptr [rbp + 1616]
        movaps xmm7, xmmword ptr [rbp + 1632]
        add rsp, 1784
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret
.LBB890_43:
        lea r8, [rip + __unnamed_469]
        call core::panicking::panic_bounds_check
        jmp .LBB890_15
.LBB890_42:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_470]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_14:
        mov qword ptr [rbp + 1576], rcx
        lea rax, [rbp + 1584]
        mov qword ptr [rbp + 704], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp + 712], rax
        lea rcx, [rbp + 1576]
        mov qword ptr [rbp + 720], rcx
        mov qword ptr [rbp + 728], rax
        lea rax, [rip + __unnamed_266]
        mov qword ptr [rbp - 96], rax
        mov qword ptr [rbp - 88], 2
        mov qword ptr [rbp - 64], 0
        lea rax, [rbp + 704]
        mov qword ptr [rbp - 80], rax
        mov qword ptr [rbp - 72], 2
        lea rdx, [rip + __unnamed_267]
        lea rcx, [rbp - 96]
        call core::panicking::panic_fmt
        jmp .LBB890_15
.LBB890_22:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB890_15
.LBB890_31:
        mov qword ptr [rbp + 1576], 0
        lea rax, [rbp + 1584]
        mov qword ptr [rbp + 704], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp + 712], rax
        lea rcx, [rbp + 1576]
        mov qword ptr [rbp + 720], rcx
        mov qword ptr [rbp + 728], rax
        lea rax, [rip + __unnamed_266]
        mov qword ptr [rbp - 96], rax
        mov qword ptr [rbp - 88], 2
        mov qword ptr [rbp - 64], 0
        lea rax, [rbp + 704]
        mov qword ptr [rbp - 80], rax
        mov qword ptr [rbp - 72], 2
        lea rdx, [rip + __unnamed_267]
        lea rcx, [rbp - 96]
        call core::panicking::panic_fmt
        jmp .LBB890_15
.LBB890_29:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_61:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_49:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_53:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_45:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_354]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_57:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_55:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_47:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_59:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_63:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_51:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_41:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_80:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_471]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_96:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_472]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_78:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_94:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_76:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_92:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_473]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_90:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_354]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_74:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_72:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_88:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_474]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_86:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_70:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_68:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_475]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_84:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_476]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_100:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_477]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_82:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_66:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_98:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_105:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_478]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_103:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_265]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_122:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_479]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_114:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_116:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_108:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_118:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_480]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_110:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_120:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_112:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_481]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_125:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_127:
        lea rcx, [rip + __unnamed_28]
        lea r8, [rip + __unnamed_482]
        mov edx, 43
        call core::panicking::panic
        jmp .LBB890_15
.LBB890_130:
        lea rcx, [rip + __unnamed_264]
        lea r8, [rip + __unnamed_268]
        mov edx, 34
        call core::panicking::panic
.LBB890_15:
        ud2
        mov qword ptr [rsp + 16], rdx
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 72
        lea rbp, [rdx + 128]
        movdqa xmmword ptr [rsp + 32], xmm7
        movdqa xmmword ptr [rsp + 48], xmm6
        lea rcx, [rbp + 1544]
        call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slpprocess::events::post_frame::PostFrames,core::option::Option<slpprocess::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
        mov rcx, qword ptr [rbp + 1592]
        call core::ptr::drop_in_place<bytes::bytes::Bytes>
        movaps xmm6, xmmword ptr [rsp + 48]
        movaps xmm7, xmmword ptr [rsp + 32]
        add rsp, 72
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant