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 63 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

lucab and others added 23 commits December 28, 2023 14:17
This reworks `UninitSlice::as_uninit_slice_mut()` using equivalent
simpler logic.
I was a little confused about these calls using `Self::` instead of
`self.` here. Is there a reason to use the former instead of the latter?
Back in tokio-rs#362, an assertion was added to ensure that the alignment of
bytes::Shared is even so we can use the least significant bit as a flag.
bytes_mut::Shared uses the same technique but has no such assertion so
I've added one here.
Instead of re-declaring `vec`, we can just use a mut parameter.
These seem to have been commented by accident in tokio-rs#298, and are still
passing.
We're always subtracting here, and we already have a usize, so `sub`
seems like a more appropriate usage to me.
We don't need the original capacity if the shared data is unique, so
let's not calculate it until after that check.
The second argument to `set_vec_pos` always contains the value of
`self.data`. Let's just use `self.data` and remove the second parameter
altogether.
I can't see any reason that get_vec_pos needs a &mut self.
* set len a little more concisely
* inline set_end
* remove kind assertions
* remove a duplicate assertion
* remove redundant assertion and min
* rename set_start to advance_unchecked
CI is [failing][failure] due to unused_imports because Iterator is
already in the prelude. Removing it fixes things up.

[failure]: https://github.com/tokio-rs/bytes/actions/runs/8034858583/job/21946873895
Bytes doesn't have an unsplit method anymore. We can always retrieve
these from git history if necessary.
braddunbar and others added 23 commits April 24, 2024 05:49
* use checked_sub

* return when additional == 0

* move safe operation out of unsafe block

* use spare_capacity_mut instead of chunk_mut

We don't need to check capacity because it's already been reserved
above.

* Add safety comments

* refactor to use guard clauses

This would be better written with let-else, but we won't get that until
`MSRV >= 1.65.x`.

* use if-let instead of unwrap

* reduce scope of unsafe blocks

Co-authored-by: Alice Ryhl <[email protected]>

---------

Co-authored-by: Alice Ryhl <[email protected]>
Follow up to tokio-rs#689

* If `at == self.len()`, we already know `at <= self.len()`.
* If `at == 0`, we already know `at <= self.len()`.
…-rs#709) (tokio-rs#710)

<Arc<T>>::make_mut returns a &mut T, such an API is doable for Bytes too
and thus we should reserve Bytes::make_mut for that.

Furthermore, it would be helpful to use From<Bytes> as a trait bound
in some cases with other traits such as Hyper's body trait, where Hyper
gives you Bytes values.

Finally, making it impl From<Bytes> for BytesMut means the API is more
easily discoverable as it appears on both Bytes and BytesMut.
)

The `is_unique` entry in the vtable for `Bytes` created from a shared
`BytesMut` just called the `shared_is_unique` function from the `bytes`
module. However, that function dereferences the `data` argument` as
`bytes::Shared`, but the actual underlying type is `bytes_mut::Shared`.
@paolobarbolini
Copy link
Contributor

Is this still applicable? I'm trying to reproduce this with cargo-show-asm and the outputs are very similar:

master vs this branch rebased on top of it
cargo asm --llvm --bin bytes bytes::read_data

master

; bytes::read_data
; Function Attrs: noinline nonlazybind uwtable
define internal fastcc void @bytes::read_data(ptr noalias nocapture noundef align 8 dereferenceable(32) %b, i64 noundef %len) unnamed_addr #2 personality ptr @rust_eh_personality {
start:
  %0 = alloca [4 x i8], align 4
  %iter13 = lshr i64 %len, 2
  %_79.not = icmp ult i64 %len, 4
  br i1 %_79.not, label %bb8, label %bb7.lr.ph

bb7.lr.ph:                                        ; preds = %start
  %1 = getelementptr inbounds i8, ptr %b, i64 16
  %2 = getelementptr inbounds i8, ptr %b, i64 8
  br label %bb7

bb8:                                              ; preds = %bb2, %start
  call void @llvm.experimental.noalias.scope.decl(metadata !20)
  call void @llvm.experimental.noalias.scope.decl(metadata !23)
  %_6.i.i = load ptr, ptr %b, align 8, !alias.scope !26, !nonnull !4, !align !9, !noundef !4
  %3 = getelementptr inbounds i8, ptr %_6.i.i, i64 32
  %_2.i.i = load ptr, ptr %3, align 8, !noalias !26, !nonnull !4, !noundef !4
  %_3.i.i = getelementptr inbounds i8, ptr %b, i64 24
  %4 = getelementptr inbounds i8, ptr %b, i64 8
  %_4.i.i = load ptr, ptr %4, align 8, !alias.scope !26, !noundef !4
  %5 = getelementptr inbounds i8, ptr %b, i64 16
  %_5.i.i = load i64, ptr %5, align 8, !alias.scope !26, !noundef !4
  call void %_2.i.i(ptr noalias noundef nonnull align 8 dereferenceable(8) %_3.i.i, ptr noundef %_4.i.i, i64 noundef %_5.i.i)
  ret void

cleanup:                                          ; preds = %bb1.i
  %6 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.experimental.noalias.scope.decl(metadata !27)
  call void @llvm.experimental.noalias.scope.decl(metadata !30)
  %_6.i.i4 = load ptr, ptr %b, align 8, !alias.scope !33, !nonnull !4, !align !9, !noundef !4
  %7 = getelementptr inbounds i8, ptr %_6.i.i4, i64 32
  %_2.i.i5 = load ptr, ptr %7, align 8, !noalias !33, !nonnull !4, !noundef !4
  %_3.i.i6 = getelementptr inbounds i8, ptr %b, i64 24
  %_4.i.i7 = load ptr, ptr %2, align 8, !alias.scope !33, !noundef !4
  %_5.i.i8 = load i64, ptr %1, align 8, !alias.scope !33, !noundef !4
  invoke void %_2.i.i5(ptr noalias noundef nonnull align 8 dereferenceable(8) %_3.i.i6, ptr noundef %_4.i.i7, i64 noundef %_5.i.i8)
          to label %bb5 unwind label %terminate

bb7:                                              ; preds = %bb7.lr.ph, %bb2
  %iter.sroa.0.010 = phi i64 [ 0, %bb7.lr.ph ], [ %_0.i, %bb2 ]
  call void @llvm.experimental.noalias.scope.decl(metadata !34)
  %self.val3.i = load i64, ptr %1, align 8, !alias.scope !34, !noundef !4
  %_2.i = icmp ult i64 %self.val3.i, 4
  br i1 %_2.i, label %bb1.i, label %bb2

bb1.i:                                            ; preds = %bb7
; invoke bytes::panic_advance
  invoke void @bytes::panic_advance(i64 noundef 4, i64 noundef %self.val3.i) #16
          to label %.noexc unwind label %cleanup

.noexc:                                           ; preds = %bb1.i
  unreachable

bb2:                                              ; preds = %bb7
  %_0.i = add nuw nsw i64 %iter.sroa.0.010, 1
  %self.val4.i = load ptr, ptr %2, align 8, !alias.scope !34, !nonnull !4, !noundef !4
  %_27.sroa.0.0.copyload.i = load i32, ptr %self.val4.i, align 1, !noalias !34
  %8 = call noundef i32 @llvm.bswap.i32(i32 %_27.sroa.0.0.copyload.i)
  %9 = add i64 %self.val3.i, -4
  store i64 %9, ptr %1, align 8, !alias.scope !37
  %_14.i.i = getelementptr inbounds i8, ptr %self.val4.i, i64 4
  store ptr %_14.i.i, ptr %2, align 8, !alias.scope !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %0)
  store i32 %8, ptr %0, align 4
  call void asm sideeffect "", "r,~{memory}"(ptr nonnull %0) #15, !srcloc !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %0)
  %exitcond.not = icmp eq i64 %_0.i, %iter13
  br i1 %exitcond.not, label %bb8, label %bb7

terminate:                                        ; preds = %cleanup
  %10 = landingpad { ptr, i32 }
          filter [0 x ptr] zeroinitializer
; call core::panicking::panic_in_cleanup
  call void @core::panicking::panic_in_cleanup() #18
  unreachable

bb5:                                              ; preds = %cleanup
  resume { ptr, i32 } %6
}

this branch

; bytes::read_data
; Function Attrs: noinline nonlazybind uwtable
define internal fastcc void @bytes::read_data(ptr noalias nocapture noundef align 8 dereferenceable(32) %b, i64 noundef %len) unnamed_addr #2 personality ptr @rust_eh_personality {
start:
  %0 = alloca [4 x i8], align 4
  %iter13 = lshr i64 %len, 2
  %_79.not = icmp ult i64 %len, 4
  br i1 %_79.not, label %bb8, label %bb7.lr.ph

bb7.lr.ph:                                        ; preds = %start
  %1 = getelementptr inbounds i8, ptr %b, i64 16
  %2 = getelementptr inbounds i8, ptr %b, i64 8
  br label %bb7

bb8:                                              ; preds = %bb2, %start
  call void @llvm.experimental.noalias.scope.decl(metadata !20)
  call void @llvm.experimental.noalias.scope.decl(metadata !23)
  %_6.i.i = load ptr, ptr %b, align 8, !alias.scope !26, !nonnull !4, !align !9, !noundef !4
  %3 = getelementptr inbounds i8, ptr %_6.i.i, i64 32
  %_2.i.i = load ptr, ptr %3, align 8, !noalias !26, !nonnull !4, !noundef !4
  %_3.i.i = getelementptr inbounds i8, ptr %b, i64 24
  %4 = getelementptr inbounds i8, ptr %b, i64 8
  %_4.i.i = load ptr, ptr %4, align 8, !alias.scope !26, !noundef !4
  %5 = getelementptr inbounds i8, ptr %b, i64 16
  %_5.i.i = load i64, ptr %5, align 8, !alias.scope !26, !noundef !4
  call void %_2.i.i(ptr noalias noundef nonnull align 8 dereferenceable(8) %_3.i.i, ptr noundef %_4.i.i, i64 noundef %_5.i.i)
  ret void

cleanup:                                          ; preds = %bb2.i
  %6 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.experimental.noalias.scope.decl(metadata !27)
  call void @llvm.experimental.noalias.scope.decl(metadata !30)
  %_6.i.i4 = load ptr, ptr %b, align 8, !alias.scope !33, !nonnull !4, !align !9, !noundef !4
  %7 = getelementptr inbounds i8, ptr %_6.i.i4, i64 32
  %_2.i.i5 = load ptr, ptr %7, align 8, !noalias !33, !nonnull !4, !noundef !4
  %_3.i.i6 = getelementptr inbounds i8, ptr %b, i64 24
  %_4.i.i7 = load ptr, ptr %2, align 8, !alias.scope !33, !noundef !4
  %_5.i.i8 = load i64, ptr %1, align 8, !alias.scope !33, !noundef !4
  invoke void %_2.i.i5(ptr noalias noundef nonnull align 8 dereferenceable(8) %_3.i.i6, ptr noundef %_4.i.i7, i64 noundef %_5.i.i8)
          to label %bb5 unwind label %terminate

bb7:                                              ; preds = %bb7.lr.ph, %bb2
  %iter.sroa.0.010 = phi i64 [ 0, %bb7.lr.ph ], [ %_0.i, %bb2 ]
  call void @llvm.experimental.noalias.scope.decl(metadata !34)
  %_3.i = load i64, ptr %1, align 8, !alias.scope !34, !noundef !4
  %_2.i = icmp ugt i64 %_3.i, 3
  br i1 %_2.i, label %bb2, label %bb2.i

bb2.i:                                            ; preds = %bb7
; invoke core::panicking::panic
  invoke void @core::panicking::panic(ptr noalias noundef nonnull readonly align 1 @alloc_41be8e6fb102229d5ede1d827b9ab09a, i64 noundef 34, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_4931790459b81903b108e1ddf6950308) #15
          to label %.noexc unwind label %cleanup

.noexc:                                           ; preds = %bb2.i
  unreachable

bb2:                                              ; preds = %bb7
  %_0.i = add nuw nsw i64 %iter.sroa.0.010, 1
  %_5.i = load ptr, ptr %2, align 8, !alias.scope !34, !noundef !4
  %_7.sroa.0.0.copyload.i = load i32, ptr %_5.i, align 1, !noalias !34
  %8 = call noundef i32 @llvm.bswap.i32(i32 %_7.sroa.0.0.copyload.i)
  %9 = add i64 %_3.i, -4
  store i64 %9, ptr %1, align 8, !alias.scope !37
  %_14.i.i = getelementptr inbounds i8, ptr %_5.i, i64 4
  store ptr %_14.i.i, ptr %2, align 8, !alias.scope !37
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %0)
  store i32 %8, ptr %0, align 4
  call void asm sideeffect "", "r,~{memory}"(ptr nonnull %0) #14, !srcloc !5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %0)
  %exitcond.not = icmp eq i64 %_0.i, %iter13
  br i1 %exitcond.not, label %bb8, label %bb7

terminate:                                        ; preds = %cleanup
  %10 = landingpad { ptr, i32 }
          filter [0 x ptr] zeroinitializer
; call core::panicking::panic_in_cleanup
  call void @core::panicking::panic_in_cleanup() #17
  unreachable

bb5:                                              ; preds = %cleanup
  resume { ptr, i32 } %6
}

master on Rust 1.68.2

; bytes::read_data
; Function Attrs: noinline nonlazybind uwtable
define internal fastcc void @bytes::read_data(ptr noalias nocapture noundef dereferenceable(32) %b, i64 noundef %len) unnamed_addr #0 personality ptr @rust_eh_personality {
start:
  %buf.i = alloca [4 x i8], align 4
  %0 = alloca i32, align 4
  %.not = icmp ult i64 %len, 4
  br i1 %.not, label %start.bb4_crit_edge, label %bb2.lr.ph

start.bb4_crit_edge:                              ; preds = %start
  %_5.i.i.pre = load ptr, ptr %b, align 8, !alias.scope !26
  %.phi.trans.insert = getelementptr inbounds %"bytes::bytes::Bytes", ptr %b, i64 0, i32 1
  %_6.i.i.pre = load i64, ptr %.phi.trans.insert, align 8, !alias.scope !26
  br label %bb4

bb2.lr.ph:                                        ; preds = %start
  %_51 = lshr i64 %len, 2
  %1 = getelementptr i8, ptr %b, i64 8
  %.val6.i.pre = load i64, ptr %1, align 8, !alias.scope !29
  br label %bb2

cleanup:                                          ; preds = %bb1.i
  %2 = landingpad { ptr, i32 }
          cleanup
; invoke core::ptr::drop_in_place<bytes::bytes::Bytes>
  invoke fastcc void @"core::ptr::drop_in_place<bytes::bytes::Bytes>"(ptr noundef nonnull %b) #17
          to label %bb8 unwind label %abort

bb4:                                              ; preds = %bb5, %start.bb4_crit_edge
  %_6.i.i = phi i64 [ %_6.i.i.pre, %start.bb4_crit_edge ], [ %.val6.i11, %bb5 ]
  %_5.i.i = phi ptr [ %_5.i.i.pre, %start.bb4_crit_edge ], [ %_5.i.i13, %bb5 ]
  call void @llvm.experimental.noalias.scope.decl(metadata !26)
  %3 = getelementptr inbounds %"bytes::bytes::Bytes", ptr %b, i64 0, i32 3
  %_7.i.i = load ptr, ptr %3, align 8, !alias.scope !26, !nonnull !4, !align !11, !noundef !4
  %4 = getelementptr inbounds %"bytes::bytes::Vtable", ptr %_7.i.i, i64 0, i32 4
  %_2.i.i = load ptr, ptr %4, align 8, !noalias !26, !nonnull !4, !noundef !4
  %_4.i.i = getelementptr inbounds %"bytes::bytes::Bytes", ptr %b, i64 0, i32 2
  call void %_2.i.i(ptr noalias noundef nonnull align 8 dereferenceable(8) %_4.i.i, ptr noundef %_5.i.i, i64 noundef %_6.i.i)
  ret void

bb2:                                              ; preds = %bb2.lr.ph, %bb5
  %.val6.i = phi i64 [ %.val6.i.pre, %bb2.lr.ph ], [ %.val6.i11, %bb5 ]
  %iter.sroa.0.07 = phi i64 [ 0, %bb2.lr.ph ], [ %5, %bb5 ]
  %5 = add nuw nsw i64 %iter.sroa.0.07, 1
  call void @llvm.experimental.noalias.scope.decl(metadata !29)
  %_2.i = icmp ult i64 %.val6.i, 4
  br i1 %_2.i, label %bb1.i, label %bb2.i2

bb2.i2:                                           ; preds = %bb2
  %.val7.i = load ptr, ptr %b, align 8, !alias.scope !29, !noundef !4
  %6 = icmp eq ptr %.val7.i, null
  br i1 %6, label %bb3.preheader.i.i, label %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i"

bb1.i:                                            ; preds = %bb2
; invoke bytes::panic_advance
  invoke void @bytes::panic_advance(i64 noundef 4, i64 noundef %.val6.i) #18
          to label %.noexc unwind label %cleanup

.noexc:                                           ; preds = %bb1.i
  unreachable

"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i": ; preds = %bb2.i2
  %.val.i.i = load i32, ptr %.val7.i, align 1, !alias.scope !32, !noalias !29
  %7 = call i32 @llvm.bswap.i32(i32 %.val.i.i)
  %8 = add i64 %.val6.i, -4
  store i64 %8, ptr %1, align 8, !alias.scope !35
  %9 = getelementptr inbounds i8, ptr %.val7.i, i64 4
  store ptr %9, ptr %b, align 8, !alias.scope !35
  br label %bb5

bb3.preheader.i.i:                                ; preds = %bb2.i2
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %buf.i), !noalias !29
  store i32 0, ptr %buf.i, align 4, !noalias !29
  call void @llvm.experimental.noalias.scope.decl(metadata !38)
  br label %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i"

"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i": ; preds = %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i", %bb3.preheader.i.i
  %dst.sroa.8.09.i.i = phi i64 [ 4, %bb3.preheader.i.i ], [ %len.i.i.i.i, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
  %dst.sroa.0.08.i.i = phi ptr [ %buf.i, %bb3.preheader.i.i ], [ %12, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
  %10 = phi ptr [ null, %bb3.preheader.i.i ], [ %14, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
  %.val367.i.i = phi i64 [ %.val6.i, %bb3.preheader.i.i ], [ %13, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
  %11 = call i64 @llvm.umin.i64(i64 %.val367.i.i, i64 %dst.sroa.8.09.i.i)
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %dst.sroa.0.08.i.i, ptr nonnull align 1 %10, i64 %11, i1 false), !alias.scope !41, !noalias !45
  %len.i.i.i.i = sub i64 %dst.sroa.8.09.i.i, %11
  %12 = getelementptr inbounds i8, ptr %dst.sroa.0.08.i.i, i64 %11
  %13 = sub i64 %.val367.i.i, %11
  %14 = getelementptr inbounds i8, ptr %10, i64 %11
  %_14.not.i.i = icmp eq i64 %len.i.i.i.i, 0
  br i1 %_14.not.i.i, label %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i, label %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i"

bytes::buf::buf_impl::Buf::copy_to_slice.exit.i: ; preds = %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i"
  store i64 %13, ptr %1, align 8, !alias.scope !46, !noalias !49
  store ptr %14, ptr %b, align 8, !alias.scope !46, !noalias !49
  %bytes.sroa.0.0.copyload.i = load i32, ptr %buf.i, align 4, !noalias !29
  %15 = call i32 @llvm.bswap.i32(i32 %bytes.sroa.0.0.copyload.i)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %buf.i), !noalias !29
  br label %bb5

bb5:                                              ; preds = %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i"
  %_5.i.i13 = phi ptr [ %9, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i" ], [ %14, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ]
  %.val6.i11 = phi i64 [ %8, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i" ], [ %13, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ]
  %.0.i = phi i32 [ %7, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i" ], [ %15, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ]
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %0)
  store i32 %.0.i, ptr %0, align 4
  call void asm sideeffect "", "r,~{memory}"(ptr nonnull %0) #16, !srcloc !3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %0)
  %exitcond.not = icmp eq i64 %5, %_51
  br i1 %exitcond.not, label %bb4, label %bb2

abort:                                            ; preds = %cleanup
  %16 = landingpad { ptr, i32 }
          cleanup
; call core::panicking::panic_cannot_unwind
  call void @core::panicking::panic_cannot_unwind() #19
  unreachable

bb8:                                              ; preds = %cleanup
  resume { ptr, i32 } %2
}

diff between master and this branch

diff -u --color master.ll bytes_get.ll
--- master.ll     2024-09-01 10:45:00.005321680 +0200
+++ bytes_get.ll        2024-09-01 10:44:52.155315422 +0200
@@ -26,7 +26,7 @@
   call void %_2.i.i(ptr noalias noundef nonnull align 8 dereferenceable(8) %_3.i.i, ptr noundef %_4.i.i, i64 noundef %_5.i.i)
   ret void
 
-cleanup:                                          ; preds = %bb1.i
+cleanup:                                          ; preds = %bb2.i
   %6 = landingpad { ptr, i32 }
           cleanup
   call void @llvm.experimental.noalias.scope.decl(metadata !27)
@@ -43,30 +43,30 @@
 bb7:                                              ; preds = %bb7.lr.ph, %bb2
   %iter.sroa.0.010 = phi i64 [ 0, %bb7.lr.ph ], [ %_0.i, %bb2 ]
   call void @llvm.experimental.noalias.scope.decl(metadata !34)
-  %self.val3.i = load i64, ptr %1, align 8, !alias.scope !34, !noundef !4
-  %_2.i = icmp ult i64 %self.val3.i, 4
-  br i1 %_2.i, label %bb1.i, label %bb2
-
-bb1.i:                                            ; preds = %bb7
-; invoke bytes::panic_advance
-  invoke void @bytes::panic_advance(i64 noundef 4, i64 noundef %self.val3.i) #16
+  %_3.i = load i64, ptr %1, align 8, !alias.scope !34, !noundef !4
+  %_2.i = icmp ugt i64 %_3.i, 3
+  br i1 %_2.i, label %bb2, label %bb2.i
+
+bb2.i:                                            ; preds = %bb7
+; invoke core::panicking::panic
+  invoke void @core::panicking::panic(ptr noalias noundef nonnull readonly align 1 @alloc_41be8e6fb102229d5ede1d827b9ab09a, i64 noundef 34, ptr noalias noundef nonnull readonly align 8 dereferenceable(24) @alloc_4931790459b81903b108e1ddf6950308) #15
           to label %.noexc unwind label %cleanup
 
-.noexc:                                           ; preds = %bb1.i
+.noexc:                                           ; preds = %bb2.i
   unreachable
 
 bb2:                                              ; preds = %bb7
   %_0.i = add nuw nsw i64 %iter.sroa.0.010, 1
-  %self.val4.i = load ptr, ptr %2, align 8, !alias.scope !34, !nonnull !4, !noundef !4
-  %_27.sroa.0.0.copyload.i = load i32, ptr %self.val4.i, align 1, !noalias !34
-  %8 = call noundef i32 @llvm.bswap.i32(i32 %_27.sroa.0.0.copyload.i)
-  %9 = add i64 %self.val3.i, -4
+  %_5.i = load ptr, ptr %2, align 8, !alias.scope !34, !noundef !4
+  %_7.sroa.0.0.copyload.i = load i32, ptr %_5.i, align 1, !noalias !34
+  %8 = call noundef i32 @llvm.bswap.i32(i32 %_7.sroa.0.0.copyload.i)
+  %9 = add i64 %_3.i, -4
   store i64 %9, ptr %1, align 8, !alias.scope !37
-  %_14.i.i = getelementptr inbounds i8, ptr %self.val4.i, i64 4
+  %_14.i.i = getelementptr inbounds i8, ptr %_5.i, i64 4
   store ptr %_14.i.i, ptr %2, align 8, !alias.scope !37
   call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %0)
   store i32 %8, ptr %0, align 4
-  call void asm sideeffect "", "r,~{memory}"(ptr nonnull %0) #15, !srcloc !5
+  call void asm sideeffect "", "r,~{memory}"(ptr nonnull %0) #14, !srcloc !5
   call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %0)
   %exitcond.not = icmp eq i64 %_0.i, %iter13
   br i1 %exitcond.not, label %bb8, label %bb7
@@ -75,7 +75,7 @@
   %10 = landingpad { ptr, i32 }
           filter [0 x ptr] zeroinitializer
 ; call core::panicking::panic_in_cleanup
-  call void @core::panicking::panic_in_cleanup() #18
+  call void @core::panicking::panic_in_cleanup() #17
   unreachable
 
 bb5:                                              ; preds = %cleanup

diff between master on 1.68.2 and master on current nightly

diff -u --color master.1.68.2.ll master.ll
--- master.1.68.2.ll      2024-09-01 10:45:44.418690781 +0200
+++ master.ll     2024-09-01 10:45:00.005321680 +0200
@@ -1,119 +1,83 @@
 ; bytes::read_data
 ; Function Attrs: noinline nonlazybind uwtable
-define internal fastcc void @bytes::read_data(ptr noalias nocapture noundef dereferenceable(32) %b, i64 noundef %len) unnamed_addr #0 personality ptr @rust_eh_personality {
+define internal fastcc void @bytes::read_data(ptr noalias nocapture noundef align 8 dereferenceable(32) %b, i64 noundef %len) unnamed_addr #2 personality ptr @rust_eh_personality {
 start:
-  %buf.i = alloca [4 x i8], align 4
-  %0 = alloca i32, align 4
-  %.not = icmp ult i64 %len, 4
-  br i1 %.not, label %start.bb4_crit_edge, label %bb2.lr.ph
-
-start.bb4_crit_edge:                              ; preds = %start
-  %_5.i.i.pre = load ptr, ptr %b, align 8, !alias.scope !26
-  %.phi.trans.insert = getelementptr inbounds %"bytes::bytes::Bytes", ptr %b, i64 0, i32 1
-  %_6.i.i.pre = load i64, ptr %.phi.trans.insert, align 8, !alias.scope !26
-  br label %bb4
-
-bb2.lr.ph:                                        ; preds = %start
-  %_51 = lshr i64 %len, 2
-  %1 = getelementptr i8, ptr %b, i64 8
-  %.val6.i.pre = load i64, ptr %1, align 8, !alias.scope !29
-  br label %bb2
+  %0 = alloca [4 x i8], align 4
+  %iter13 = lshr i64 %len, 2
+  %_79.not = icmp ult i64 %len, 4
+  br i1 %_79.not, label %bb8, label %bb7.lr.ph
+
+bb7.lr.ph:                                        ; preds = %start
+  %1 = getelementptr inbounds i8, ptr %b, i64 16
+  %2 = getelementptr inbounds i8, ptr %b, i64 8
+  br label %bb7
+
+bb8:                                              ; preds = %bb2, %start
+  call void @llvm.experimental.noalias.scope.decl(metadata !20)
+  call void @llvm.experimental.noalias.scope.decl(metadata !23)
+  %_6.i.i = load ptr, ptr %b, align 8, !alias.scope !26, !nonnull !4, !align !9, !noundef !4
+  %3 = getelementptr inbounds i8, ptr %_6.i.i, i64 32
+  %_2.i.i = load ptr, ptr %3, align 8, !noalias !26, !nonnull !4, !noundef !4
+  %_3.i.i = getelementptr inbounds i8, ptr %b, i64 24
+  %4 = getelementptr inbounds i8, ptr %b, i64 8
+  %_4.i.i = load ptr, ptr %4, align 8, !alias.scope !26, !noundef !4
+  %5 = getelementptr inbounds i8, ptr %b, i64 16
+  %_5.i.i = load i64, ptr %5, align 8, !alias.scope !26, !noundef !4
+  call void %_2.i.i(ptr noalias noundef nonnull align 8 dereferenceable(8) %_3.i.i, ptr noundef %_4.i.i, i64 noundef %_5.i.i)
+  ret void
 
 cleanup:                                          ; preds = %bb1.i
-  %2 = landingpad { ptr, i32 }
+  %6 = landingpad { ptr, i32 }
           cleanup
-; invoke core::ptr::drop_in_place<bytes::bytes::Bytes>
-  invoke fastcc void @"core::ptr::drop_in_place<bytes::bytes::Bytes>"(ptr noundef nonnull %b) #17
-          to label %bb8 unwind label %abort
-
-bb4:                                              ; preds = %bb5, %start.bb4_crit_edge
-  %_6.i.i = phi i64 [ %_6.i.i.pre, %start.bb4_crit_edge ], [ %.val6.i11, %bb5 ]
-  %_5.i.i = phi ptr [ %_5.i.i.pre, %start.bb4_crit_edge ], [ %_5.i.i13, %bb5 ]
-  call void @llvm.experimental.noalias.scope.decl(metadata !26)
-  %3 = getelementptr inbounds %"bytes::bytes::Bytes", ptr %b, i64 0, i32 3
-  %_7.i.i = load ptr, ptr %3, align 8, !alias.scope !26, !nonnull !4, !align !11, !noundef !4
-  %4 = getelementptr inbounds %"bytes::bytes::Vtable", ptr %_7.i.i, i64 0, i32 4
-  %_2.i.i = load ptr, ptr %4, align 8, !noalias !26, !nonnull !4, !noundef !4
-  %_4.i.i = getelementptr inbounds %"bytes::bytes::Bytes", ptr %b, i64 0, i32 2
-  call void %_2.i.i(ptr noalias noundef nonnull align 8 dereferenceable(8) %_4.i.i, ptr noundef %_5.i.i, i64 noundef %_6.i.i)
-  ret void
+  call void @llvm.experimental.noalias.scope.decl(metadata !27)
+  call void @llvm.experimental.noalias.scope.decl(metadata !30)
+  %_6.i.i4 = load ptr, ptr %b, align 8, !alias.scope !33, !nonnull !4, !align !9, !noundef !4
+  %7 = getelementptr inbounds i8, ptr %_6.i.i4, i64 32
+  %_2.i.i5 = load ptr, ptr %7, align 8, !noalias !33, !nonnull !4, !noundef !4
+  %_3.i.i6 = getelementptr inbounds i8, ptr %b, i64 24
+  %_4.i.i7 = load ptr, ptr %2, align 8, !alias.scope !33, !noundef !4
+  %_5.i.i8 = load i64, ptr %1, align 8, !alias.scope !33, !noundef !4
+  invoke void %_2.i.i5(ptr noalias noundef nonnull align 8 dereferenceable(8) %_3.i.i6, ptr noundef %_4.i.i7, i64 noundef %_5.i.i8)
+          to label %bb5 unwind label %terminate
+
+bb7:                                              ; preds = %bb7.lr.ph, %bb2
+  %iter.sroa.0.010 = phi i64 [ 0, %bb7.lr.ph ], [ %_0.i, %bb2 ]
+  call void @llvm.experimental.noalias.scope.decl(metadata !34)
+  %self.val3.i = load i64, ptr %1, align 8, !alias.scope !34, !noundef !4
+  %_2.i = icmp ult i64 %self.val3.i, 4
+  br i1 %_2.i, label %bb1.i, label %bb2
 
-bb2:                                              ; preds = %bb2.lr.ph, %bb5
-  %.val6.i = phi i64 [ %.val6.i.pre, %bb2.lr.ph ], [ %.val6.i11, %bb5 ]
-  %iter.sroa.0.07 = phi i64 [ 0, %bb2.lr.ph ], [ %5, %bb5 ]
-  %5 = add nuw nsw i64 %iter.sroa.0.07, 1
-  call void @llvm.experimental.noalias.scope.decl(metadata !29)
-  %_2.i = icmp ult i64 %.val6.i, 4
-  br i1 %_2.i, label %bb1.i, label %bb2.i2
-
-bb2.i2:                                           ; preds = %bb2
-  %.val7.i = load ptr, ptr %b, align 8, !alias.scope !29, !noundef !4
-  %6 = icmp eq ptr %.val7.i, null
-  br i1 %6, label %bb3.preheader.i.i, label %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i"
-
-bb1.i:                                            ; preds = %bb2
+bb1.i:                                            ; preds = %bb7
 ; invoke bytes::panic_advance
-  invoke void @bytes::panic_advance(i64 noundef 4, i64 noundef %.val6.i) #18
+  invoke void @bytes::panic_advance(i64 noundef 4, i64 noundef %self.val3.i) #16
           to label %.noexc unwind label %cleanup
 
 .noexc:                                           ; preds = %bb1.i
   unreachable
 
-"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i": ; preds = %bb2.i2
-  %.val.i.i = load i32, ptr %.val7.i, align 1, !alias.scope !32, !noalias !29
-  %7 = call i32 @llvm.bswap.i32(i32 %.val.i.i)
-  %8 = add i64 %.val6.i, -4
-  store i64 %8, ptr %1, align 8, !alias.scope !35
-  %9 = getelementptr inbounds i8, ptr %.val7.i, i64 4
-  store ptr %9, ptr %b, align 8, !alias.scope !35
-  br label %bb5
-
-bb3.preheader.i.i:                                ; preds = %bb2.i2
-  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %buf.i), !noalias !29
-  store i32 0, ptr %buf.i, align 4, !noalias !29
-  call void @llvm.experimental.noalias.scope.decl(metadata !38)
-  br label %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i"
-
-"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i": ; preds = %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i", %bb3.preheader.i.i
-  %dst.sroa.8.09.i.i = phi i64 [ 4, %bb3.preheader.i.i ], [ %len.i.i.i.i, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
-  %dst.sroa.0.08.i.i = phi ptr [ %buf.i, %bb3.preheader.i.i ], [ %12, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
-  %10 = phi ptr [ null, %bb3.preheader.i.i ], [ %14, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
-  %.val367.i.i = phi i64 [ %.val6.i, %bb3.preheader.i.i ], [ %13, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i" ]
-  %11 = call i64 @llvm.umin.i64(i64 %.val367.i.i, i64 %dst.sroa.8.09.i.i)
-  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 1 %dst.sroa.0.08.i.i, ptr nonnull align 1 %10, i64 %11, i1 false), !alias.scope !41, !noalias !45
-  %len.i.i.i.i = sub i64 %dst.sroa.8.09.i.i, %11
-  %12 = getelementptr inbounds i8, ptr %dst.sroa.0.08.i.i, i64 %11
-  %13 = sub i64 %.val367.i.i, %11
-  %14 = getelementptr inbounds i8, ptr %10, i64 %11
-  %_14.not.i.i = icmp eq i64 %len.i.i.i.i, 0
-  br i1 %_14.not.i.i, label %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i, label %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i"
-
-bytes::buf::buf_impl::Buf::copy_to_slice.exit.i: ; preds = %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i.i"
-  store i64 %13, ptr %1, align 8, !alias.scope !46, !noalias !49
-  store ptr %14, ptr %b, align 8, !alias.scope !46, !noalias !49
-  %bytes.sroa.0.0.copyload.i = load i32, ptr %buf.i, align 4, !noalias !29
-  %15 = call i32 @llvm.bswap.i32(i32 %bytes.sroa.0.0.copyload.i)
-  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %buf.i), !noalias !29
-  br label %bb5
-
-bb5:                                              ; preds = %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i"
-  %_5.i.i13 = phi ptr [ %9, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i" ], [ %14, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ]
-  %.val6.i11 = phi i64 [ %8, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i" ], [ %13, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ]
-  %.0.i = phi i32 [ %7, %"<bytes::bytes::Bytes as bytes::buf::buf_impl::Buf>::advance.exit.i" ], [ %15, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ]
+bb2:                                              ; preds = %bb7
+  %_0.i = add nuw nsw i64 %iter.sroa.0.010, 1
+  %self.val4.i = load ptr, ptr %2, align 8, !alias.scope !34, !nonnull !4, !noundef !4
+  %_27.sroa.0.0.copyload.i = load i32, ptr %self.val4.i, align 1, !noalias !34
+  %8 = call noundef i32 @llvm.bswap.i32(i32 %_27.sroa.0.0.copyload.i)
+  %9 = add i64 %self.val3.i, -4
+  store i64 %9, ptr %1, align 8, !alias.scope !37
+  %_14.i.i = getelementptr inbounds i8, ptr %self.val4.i, i64 4
+  store ptr %_14.i.i, ptr %2, align 8, !alias.scope !37
   call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %0)
-  store i32 %.0.i, ptr %0, align 4
-  call void asm sideeffect "", "r,~{memory}"(ptr nonnull %0) #16, !srcloc !3
+  store i32 %8, ptr %0, align 4
+  call void asm sideeffect "", "r,~{memory}"(ptr nonnull %0) #15, !srcloc !5
   call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %0)
-  %exitcond.not = icmp eq i64 %5, %_51
-  br i1 %exitcond.not, label %bb4, label %bb2
+  %exitcond.not = icmp eq i64 %_0.i, %iter13
+  br i1 %exitcond.not, label %bb8, label %bb7
 
-abort:                                            ; preds = %cleanup
-  %16 = landingpad { ptr, i32 }
-          cleanup
-; call core::panicking::panic_cannot_unwind
-  call void @core::panicking::panic_cannot_unwind() #19
+terminate:                                        ; preds = %cleanup
+  %10 = landingpad { ptr, i32 }
+          filter [0 x ptr] zeroinitializer
+; call core::panicking::panic_in_cleanup
+  call void @core::panicking::panic_in_cleanup() #18
   unreachable
 
-bb8:                                              ; preds = %cleanup
-  resume { ptr, i32 } %2
+bb5:                                              ; preds = %cleanup
+  resume { ptr, i32 } %6
 }

Tested on:

rustc 1.82.0-nightly (a7399ba69 2024-08-31)
binary: rustc
commit-hash: a7399ba69d37b019677a9c47fe89ceb8dd82db2d
commit-date: 2024-08-31
host: x86_64-unknown-linux-gnu
release: 1.82.0-nightly
LLVM version: 19.1.0

and on:

rustc 1.68.2 (9eb3afe9e 2023-03-27)
binary: rustc
commit-hash: 9eb3afe9ebe9c7d2b84b71002d44f4a0edac95e0
commit-date: 2023-03-27
host: x86_64-unknown-linux-gnu
release: 1.68.2
LLVM version: 15.0.6

I guess the newer LLVM version is already smart enough to optimize it?

@Walnut356
Copy link
Author

I think so. It mostly has to do with how things get inlined when get_x is called lots of times in succession. I did a quick check and the codegen before/after rebasing was ~identical. I ran it through the same function I did last time (which, admittedly is a pretty extreme example since it's a few dozen .get_X calls in a row in a tight loop). The source for that is here. All compilations were done on stable

The major points of interest are the branch codegen still being 33% less instructions than current master, and the section between .LBB471_22 and .LBB471_44 which is ~400 straight instructions without any branching on the fast path, whereas the current master still compiles with Jcc -> JMP combos necessitating at least a few small jumps.

Current master
slp_parse::events::post_frame::unpack_frames:
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 1944
        lea rbp, [rsp + 128]
        movdqa xmmword ptr [rbp + 1792], xmm7
        movdqa xmmword ptr [rbp + 1776], xmm6
        mov qword ptr [rbp + 1768], -2
        mov qword ptr [rbp + 1696], r8
        mov qword ptr [rbp + 1736], rdx
        mov qword ptr [rbp + 1712], rcx
        mov rdx, qword ptr [rbp + 1920]
        movups xmm0, xmmword ptr [rip + __unnamed_637+16]
        movaps xmmword ptr [rbp + 1632], xmm0
        movdqu xmm0, xmmword ptr [rip + __unnamed_637]
        movdqa xmmword ptr [rbp + 1616], xmm0
        lock inc        qword ptr [rdx]
        jle .LBB472_1
        mov r13, r9
        lea rcx, [rbp - 96]
        mov qword ptr [rbp + 1704], rdx
        call slp_parse::events::post_frame::PostFrames::new
        movzx esi, word ptr [rbp + 1928]
        lea rdi, [rbp + 752]
        lea rdx, [rbp - 96]
        mov r8d, 424
        mov rcx, rdi
        call memcpy
        mov qword ptr [rbp + 1176], 0
        lea rcx, [rbp - 96]
        lea rdx, [rbp + 1616]
        mov r8d, esi
        mov r9, rdi
        call hashbrown::map::HashMap<K,V,S,A>::insert
        cmp qword ptr [rbp - 96], 0
        je .LBB472_10
        lea rcx, [rbp - 96]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 328], 0
        je .LBB472_10
        lea rcx, [rbp + 328]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
.LBB472_10:
        mov rdx, qword ptr [rbp + 1704]
        lock inc        qword ptr [rdx]
        jle .LBB472_1
        lea rcx, [rbp - 96]
        call slp_parse::events::post_frame::PostFrames::new
        shr esi, 8
        lea rdx, [rbp - 96]
        mov r8d, 424
        mov rcx, rdi
        call memcpy
        mov qword ptr [rbp + 1176], 0
        lea rcx, [rbp - 96]
        lea rdx, [rbp + 1616]
        mov r8d, esi
        mov r9, rdi
        call hashbrown::map::HashMap<K,V,S,A>::insert
        cmp qword ptr [rbp - 96], 0
        je .LBB472_16
        lea rcx, [rbp - 96]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 328], 0
        je .LBB472_16
        lea rcx, [rbp + 328]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
.LBB472_16:
        and r13, -2
        mov rcx, qword ptr [rbp + 1704]
        mov rax, qword ptr [rcx + 184]
        mov qword ptr [rbp + 1656], rax
        movzx edx, byte ptr [rcx + 192]
        movzx ecx, byte ptr [rcx + 193]
        xor eax, eax
        cmp dl, 2
        sete al
        test cl, cl
        sete r8b
        xor r9d, r9d
        cmp cl, 5
        setb r9b
        xor r10d, r10d
        cmp cl, 8
        setb r10b
        xor r11d, r11d
        cmp cl, 11
        setb r11b
        xor esi, esi
        cmp cl, 16
        setb sil
        and r8b, al
        mov byte ptr [rbp + 1751], r8b
        mov byte ptr [rbp + 1750], dl
        cmp dl, 3
        cmovne r9d, eax
        mov dword ptr [rbp + 1672], r9d
        cmovne r10d, eax
        mov dword ptr [rbp + 1676], r10d
        cmovne r11d, eax
        mov dword ptr [rbp + 1680], r11d
        cmovne esi, eax
        mov dword ptr [rbp + 1684], esi
        mov r14, qword ptr [rbp + 1736]
        mov rax, qword ptr [r14 + 16]
        mov qword ptr [rbp + 1600], rax
        pxor xmm6, xmm6
        pcmpeqd xmm7, xmm7
        jmp .LBB472_17
.LBB472_23:
        mov rax, qword ptr [rbp + 1608]
        mov qword ptr [rbp + 1696], rax
.LBB472_17:
        test r13, r13
        je .LBB472_18
        mov rax, qword ptr [rbp + 1696]
        add rax, 16
        mov qword ptr [rbp + 1608], rax
        add r13, -2
        xor eax, eax
        mov qword ptr [rbp + 1664], rax
        mov qword ptr [rbp + 1752], r13
.LBB472_22:
        mov r15, qword ptr [rbp + 1664]
        cmp r15, 16
        je .LBB472_23
        mov rax, qword ptr [r14 + 16]
        mov rdi, rax
        sub rdi, qword ptr [rbp + 1600]
        mov rcx, qword ptr [rbp + 1696]
        add rdi, qword ptr [rcx + r15]
        mov qword ptr [rbp + 1688], rdi
        mov rsi, rax
        sub rsi, rdi
        jb .LBB472_25
        mov qword ptr [r14 + 16], rsi
        mov rax, qword ptr [r14 + 8]
        add rdi, rax
        mov qword ptr [r14 + 8], rdi
        cmp rsi, 4
        jb .LBB472_31
        test rax, rax
        je .LBB472_28
        mov ebx, dword ptr [rdi]
        bswap ebx
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rdi, 4
        mov qword ptr [r14 + 8], rdi
        jmp .LBB472_33
.LBB472_28:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_29:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_29
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov ebx, dword ptr [rbp + 752]
        bswap ebx
        mov r13, qword ptr [rbp + 1752]
.LBB472_33:
        add r15, 8
        mov qword ptr [rbp + 1664], r15
        lea eax, [rbx + 123]
        movsxd r12, eax
        mov qword ptr [rbp + 1760], r12
        mov rax, qword ptr [rbp + 1656]
        cmp rax, r12
        je .LBB472_22
        inc rax
        cmp rax, r12
        je .LBB472_22
        test rsi, rsi
        je .LBB472_36
        movzx eax, byte ptr [rdi]
        lea rcx, [rdi + 1]
        mov rdx, rsi
        mov qword ptr [rbp + 1688], 1
        dec rdx
        mov qword ptr [r14 + 16], rdx
        mov qword ptr [r14 + 8], rcx
        je .LBB472_38
        add rsi, -2
        mov qword ptr [r14 + 16], rsi
        add rdi, 2
        mov qword ptr [r14 + 8], rdi
        cmp qword ptr [rbp + 1640], 0
        je .LBB472_45
        movzx ecx, al
        mov r15, qword ptr [rbp + 1616]
        mov rdx, qword ptr [rbp + 1624]
        lea r8, [r15 - 856]
        xor r9d, r9d
.LBB472_41:
        and rcx, rdx
        movdqu xmm0, xmmword ptr [r15 + rcx]
        movdqa xmm1, xmm0
        pcmpeqb xmm1, xmm6
        pmovmskb r10d, xmm1
.LBB472_42:
        test r10w, r10w
        je .LBB472_43
        rep bsf r11d, r10d
        lea edi, [r10 - 1]
        and edi, r10d
        add r11, rcx
        and r11, rdx
        neg r11
        imul rsi, r11, 856
        mov r10d, edi
        cmp byte ptr [r8 + rsi], al
        jne .LBB472_42
        jmp .LBB472_47
.LBB472_43:
        pcmpeqb xmm0, xmm7
        pmovmskb r10d, xmm0
        test r10d, r10d
        jne .LBB472_45
        add rcx, r9
        add rcx, 16
        add r9, 16
        jmp .LBB472_41
.LBB472_47:
        mov rdi, qword ptr [r15 + rsi - 840]
        mov r14, qword ptr [r15 + rsi - 832]
        lea rax, [rbp + 1760]
        mov qword ptr [rbp - 96], rax
        lea rax, [rip + core::fmt::num::imp::<impl core::fmt::Display for usize>::fmt]
        mov qword ptr [rbp - 88], rax
        lea rcx, [rbp + 1656]
        mov qword ptr [rbp - 80], rcx
        mov qword ptr [rbp - 72], rax
        lea rax, [rip + __unnamed_711]
        mov qword ptr [rbp + 752], rax
        mov qword ptr [rbp + 760], 2
        mov qword ptr [rbp + 784], 0
        lea rax, [rbp - 96]
        mov qword ptr [rbp + 768], rax
        mov qword ptr [rbp + 776], 2
        lea rcx, [rbp + 752]
        call anyhow::__private::format_err
        mov qword ptr [rbp + 1720], rax
        cmp r14, r12
        jbe .LBB472_49
        lea rcx, [rbp + 1720]
        call anyhow::error::<impl core::ops::drop::Drop for anyhow::Error>::drop
        mov dword ptr [rdi + 4*r12], ebx
        mov r14, qword ptr [rbp + 1736]
        mov rax, qword ptr [r14 + 16]
        test rax, rax
        je .LBB472_52
        add r15, rsi
        mov rcx, qword ptr [r14 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r14 + 16], rax
        inc rcx
        mov qword ptr [r14 + 8], rcx
        mov rax, qword ptr [r15 - 824]
        mov rcx, qword ptr [rbp + 1760]
        mov byte ptr [rax + rcx], dl
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 2
        jb .LBB472_58
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_55
        movzx eax, word ptr [rcx]
        rol ax, 8
        add rsi, -2
        mov qword ptr [r14 + 16], rsi
        add rcx, 2
        mov qword ptr [r14 + 8], rcx
        jmp .LBB472_60
.LBB472_55:
        mov word ptr [rbp + 752], 0
        mov ebx, 2
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_56:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_56
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        movzx eax, word ptr [rbp + 752]
        rol ax, 8
        mov r13, qword ptr [rbp + 1752]
.LBB472_60:
        mov rcx, qword ptr [r15 - 808]
        mov rdx, qword ptr [rbp + 1760]
        mov word ptr [rcx + 2*rdx], ax
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_65
        mov rdi, qword ptr [r14 + 8]
        test rdi, rdi
        je .LBB472_62
        mov ebx, dword ptr [rdi]
        bswap ebx
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rdi, 4
        mov qword ptr [r14 + 8], rdi
        cmp rsi, 4
        jae .LBB472_68
        jmp .LBB472_72
.LBB472_62:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_63:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_63
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov ebx, dword ptr [rbp + 752]
        bswap ebx
        mov r13, qword ptr [rbp + 1752]
        cmp rsi, 4
        jb .LBB472_72
.LBB472_68:
        test rdi, rdi
        je .LBB472_69
        mov eax, dword ptr [rdi]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rdi, 4
        mov qword ptr [r14 + 8], rdi
        jmp .LBB472_74
.LBB472_69:
        mov dword ptr [rbp + 752], 0
        mov r14d, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_70:
        cmp rsi, r14
        mov r13, r14
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub r14, r13
        jne .LBB472_70
        mov r14, qword ptr [rbp + 1736]
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
.LBB472_74:
        mov rcx, qword ptr [r15 - 792]
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 8*rdx], ebx
        mov dword ptr [rcx + 8*rdx + 4], eax
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_79
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_76
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        jmp .LBB472_81
.LBB472_76:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_77:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_77
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
.LBB472_81:
        mov rcx, qword ptr [r15 - 776]
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 4*rdx], eax
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_86
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_83
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        jmp .LBB472_88
.LBB472_83:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_84:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_84
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
.LBB472_88:
        mov rcx, qword ptr [r15 - 760]
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 4*rdx], eax
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_93
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_90
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        jmp .LBB472_95
.LBB472_90:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_91:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_91
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
.LBB472_95:
        mov rcx, qword ptr [r15 - 744]
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 4*rdx], eax
        mov rax, qword ptr [r14 + 16]
        test rax, rax
        je .LBB472_96
        mov rcx, qword ptr [r14 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r14 + 16], rax
        inc rcx
        mov qword ptr [r14 + 8], rcx
        mov rax, qword ptr [r15 - 728]
        mov rcx, qword ptr [rbp + 1760]
        mov byte ptr [rax + rcx], dl
        mov rax, qword ptr [r14 + 16]
        test rax, rax
        je .LBB472_98
        mov rcx, qword ptr [r14 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r14 + 16], rax
        inc rcx
        mov qword ptr [r14 + 8], rcx
        mov rax, qword ptr [r15 - 712]
        mov rcx, qword ptr [rbp + 1760]
        mov byte ptr [rax + rcx], dl
        mov rax, qword ptr [r14 + 16]
        test rax, rax
        je .LBB472_100
        mov rcx, qword ptr [r14 + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [r14 + 16], rax
        inc rcx
        mov qword ptr [r14 + 8], rcx
        mov rax, qword ptr [r15 - 696]
        mov rcx, qword ptr [rbp + 1760]
        mov byte ptr [rax + rcx], dl
        mov rax, qword ptr [r14 + 16]
        test rax, rax
        je .LBB472_102
        mov rcx, qword ptr [r14 + 8]
        dec rax
        lea rdx, [rcx + 1]
        movzx ecx, byte ptr [rcx]
        mov qword ptr [r14 + 16], rax
        mov qword ptr [r14 + 8], rdx
        mov rax, qword ptr [r15 - 680]
        mov rdx, qword ptr [rbp + 1760]
        mov byte ptr [rax + rdx], cl
        cmp byte ptr [rbp + 1750], 2
        jb .LBB472_22
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_109
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_106
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 664]
        test rcx, rcx
        jne .LBB472_113
        jmp .LBB472_112
.LBB472_106:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_107:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_107
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
        mov rcx, qword ptr [r15 - 664]
        test rcx, rcx
        je .LBB472_112
.LBB472_113:
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 4*rdx], eax
        mov r9, qword ptr [r14 + 16]
        test r9, r9
        je .LBB472_114
        mov r10, qword ptr [r14 + 8]
        movzx eax, byte ptr [r10]
        lea rcx, [r10 + 1]
        mov rdx, r9
        dec rdx
        mov qword ptr [r14 + 16], rdx
        mov qword ptr [r14 + 8], rcx
        je .LBB472_116
        movzx ecx, byte ptr [r10 + 1]
        lea rdx, [r10 + 2]
        mov r8, r9
        add r8, -2
        mov qword ptr [r14 + 16], r8
        mov qword ptr [r14 + 8], rdx
        je .LBB472_118
        movzx edx, byte ptr [r10 + 2]
        lea r8, [r10 + 3]
        mov r11, r9
        add r11, -3
        mov qword ptr [r14 + 16], r11
        mov qword ptr [r14 + 8], r8
        je .LBB472_120
        movzx r8d, byte ptr [r10 + 3]
        lea r11, [r10 + 4]
        mov rsi, r9
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        mov qword ptr [r14 + 8], r11
        je .LBB472_122
        movzx r11d, byte ptr [r10 + 4]
        add r9, -5
        mov qword ptr [r14 + 16], r9
        add r10, 5
        mov qword ptr [r14 + 8], r10
        mov r9, qword ptr [r15 - 648]
        test r9, r9
        je .LBB472_124
        shl ecx, 8
        or rcx, rax
        shl edx, 16
        or rdx, rcx
        shl r8d, 24
        or r8, rdx
        shl r11, 32
        or r11, r8
        mov rax, qword ptr [rbp + 1760]
        mov qword ptr [r9 + 8*rax], r11
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_130
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_127
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 632]
        test rcx, rcx
        jne .LBB472_134
        jmp .LBB472_133
.LBB472_127:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_128:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_128
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
        mov rcx, qword ptr [r15 - 632]
        test rcx, rcx
        je .LBB472_133
.LBB472_134:
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 4*rdx], eax
        mov rcx, qword ptr [r14 + 16]
        test rcx, rcx
        je .LBB472_135
        mov rdx, qword ptr [r14 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r14 + 16], rcx
        inc rdx
        mov qword ptr [r14 + 8], rdx
        mov rcx, qword ptr [r15 - 616]
        test rcx, rcx
        je .LBB472_137
        mov rdx, qword ptr [rbp + 1760]
        test al, al
        sete byte ptr [rcx + rdx]
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 2
        jb .LBB472_143
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_140
        movzx eax, word ptr [rcx]
        rol ax, 8
        add rsi, -2
        mov qword ptr [r14 + 16], rsi
        add rcx, 2
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 600]
        test rcx, rcx
        jne .LBB472_147
        jmp .LBB472_146
.LBB472_140:
        mov word ptr [rbp + 752], 0
        mov ebx, 2
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_141:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_141
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        movzx eax, word ptr [rbp + 752]
        rol ax, 8
        mov r13, qword ptr [rbp + 1752]
        mov rcx, qword ptr [r15 - 600]
        test rcx, rcx
        je .LBB472_146
.LBB472_147:
        mov rdx, qword ptr [rbp + 1760]
        mov word ptr [rcx + 2*rdx], ax
        mov rcx, qword ptr [r14 + 16]
        test rcx, rcx
        je .LBB472_148
        mov rdx, qword ptr [r14 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r14 + 16], rcx
        inc rdx
        mov qword ptr [r14 + 8], rdx
        mov rcx, qword ptr [r15 - 584]
        test rcx, rcx
        je .LBB472_150
        mov rdx, qword ptr [rbp + 1760]
        mov byte ptr [rcx + rdx], al
        mov rcx, qword ptr [r14 + 16]
        test rcx, rcx
        je .LBB472_152
        mov rdx, qword ptr [r14 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r14 + 16], rcx
        inc rdx
        mov qword ptr [r14 + 8], rdx
        mov rcx, qword ptr [r15 - 568]
        test rcx, rcx
        je .LBB472_154
        mov rdx, qword ptr [rbp + 1760]
        mov byte ptr [rcx + rdx], al
        cmp byte ptr [rbp + 1751], 0
        jne .LBB472_22
        mov rcx, qword ptr [r14 + 16]
        test rcx, rcx
        je .LBB472_157
        mov rdx, qword ptr [r14 + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [r14 + 16], rcx
        inc rdx
        mov qword ptr [r14 + 8], rdx
        mov rcx, qword ptr [r15 - 552]
        test rcx, rcx
        je .LBB472_159
        mov rdx, qword ptr [rbp + 1760]
        mov byte ptr [rcx + rdx], al
        cmp byte ptr [rbp + 1672], 0
        jne .LBB472_22
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_166
        mov rdi, qword ptr [r14 + 8]
        test rdi, rdi
        je .LBB472_163
        mov ebx, dword ptr [rdi]
        bswap ebx
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rdi, 4
        mov qword ptr [r14 + 8], rdi
        cmp rsi, 4
        jae .LBB472_169
        jmp .LBB472_173
.LBB472_163:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_164:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_164
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov ebx, dword ptr [rbp + 752]
        bswap ebx
        mov r13, qword ptr [rbp + 1752]
        cmp rsi, 4
        jb .LBB472_173
.LBB472_169:
        test rdi, rdi
        je .LBB472_170
        mov r8d, dword ptr [rdi]
        bswap r8d
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rdi, 4
        mov qword ptr [r14 + 8], rdi
        mov rax, qword ptr [r15 - 536]
        test rax, rax
        jne .LBB472_177
        jmp .LBB472_176
.LBB472_170:
        mov dword ptr [rbp + 752], 0
        mov r14d, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_171:
        cmp rsi, r14
        mov r13, r14
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub r14, r13
        jne .LBB472_171
        mov r14, qword ptr [rbp + 1736]
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov r8d, dword ptr [rbp + 752]
        bswap r8d
        mov r13, qword ptr [rbp + 1752]
        mov rax, qword ptr [r15 - 536]
        test rax, rax
        je .LBB472_176
.LBB472_177:
        mov rcx, qword ptr [rbp + 1760]
        mov dword ptr [rax + 8*rcx], ebx
        mov dword ptr [rax + 8*rcx + 4], r8d
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_182
        mov rdi, qword ptr [r14 + 8]
        test rdi, rdi
        mov dword ptr [rbp + 1732], r8d
        je .LBB472_179
        mov ebx, dword ptr [rdi]
        bswap ebx
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rdi, 4
        mov qword ptr [r14 + 8], rdi
        cmp rsi, 4
        jae .LBB472_185
        jmp .LBB472_189
.LBB472_179:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_180:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_180
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov ebx, dword ptr [rbp + 752]
        bswap ebx
        mov r13, qword ptr [rbp + 1752]
        mov r8d, dword ptr [rbp + 1732]
        cmp rsi, 4
        jb .LBB472_189
.LBB472_185:
        test rdi, rdi
        je .LBB472_186
        mov eax, dword ptr [rdi]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rdi, 4
        mov qword ptr [r14 + 8], rdi
        mov rcx, qword ptr [r15 - 520]
        test rcx, rcx
        jne .LBB472_193
        jmp .LBB472_192
.LBB472_186:
        mov dword ptr [rbp + 752], 0
        mov r14d, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_187:
        cmp rsi, r14
        mov r13, r14
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub r14, r13
        jne .LBB472_187
        mov r14, qword ptr [rbp + 1736]
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
        mov r8d, dword ptr [rbp + 1732]
        mov rcx, qword ptr [r15 - 520]
        test rcx, rcx
        je .LBB472_192
.LBB472_193:
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 8*rdx], ebx
        mov dword ptr [rcx + 8*rdx + 4], eax
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_198
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_195
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 504]
        test rcx, rcx
        jne .LBB472_202
        jmp .LBB472_201
.LBB472_195:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_196:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_196
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
        mov r8d, dword ptr [rbp + 1732]
        mov rcx, qword ptr [r15 - 504]
        test rcx, rcx
        je .LBB472_201
.LBB472_202:
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 8*rdx], eax
        mov dword ptr [rcx + 8*rdx + 4], r8d
        cmp byte ptr [rbp + 1676], 0
        jne .LBB472_22
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_208
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_205
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 488]
        test rcx, rcx
        jne .LBB472_212
        jmp .LBB472_211
.LBB472_205:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_206:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_206
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
        mov rcx, qword ptr [r15 - 488]
        test rcx, rcx
        je .LBB472_211
.LBB472_212:
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 4*rdx], eax
        cmp byte ptr [rbp + 1680], 0
        jne .LBB472_22
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 4
        jb .LBB472_218
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_215
        mov eax, dword ptr [rcx]
        bswap eax
        add rsi, -4
        mov qword ptr [r14 + 16], rsi
        add rcx, 4
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 472]
        test rcx, rcx
        jne .LBB472_222
        jmp .LBB472_221
.LBB472_215:
        mov dword ptr [rbp + 752], 0
        mov ebx, 4
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_216:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_216
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        mov eax, dword ptr [rbp + 752]
        bswap eax
        mov r13, qword ptr [rbp + 1752]
        mov rcx, qword ptr [r15 - 472]
        test rcx, rcx
        je .LBB472_221
.LBB472_222:
        mov rdx, qword ptr [rbp + 1760]
        mov dword ptr [rcx + 4*rdx], eax
        cmp byte ptr [rbp + 1684], 0
        jne .LBB472_22
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 2
        jb .LBB472_228
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_225
        movzx eax, word ptr [rcx]
        rol ax, 8
        add rsi, -2
        mov qword ptr [r14 + 16], rsi
        add rcx, 2
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 456]
        test rcx, rcx
        jne .LBB472_232
        jmp .LBB472_231
.LBB472_225:
        mov word ptr [rbp + 752], 0
        mov ebx, 2
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_226:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_226
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        movzx eax, word ptr [rbp + 752]
        rol ax, 8
        mov r13, qword ptr [rbp + 1752]
        mov rcx, qword ptr [r15 - 456]
        test rcx, rcx
        je .LBB472_231
.LBB472_232:
        mov rdx, qword ptr [rbp + 1760]
        mov word ptr [rcx + 2*rdx], ax
        mov rsi, qword ptr [r14 + 16]
        cmp rsi, 2
        jb .LBB472_237
        mov rcx, qword ptr [r14 + 8]
        test rcx, rcx
        je .LBB472_234
        movzx eax, word ptr [rcx]
        rol ax, 8
        add rsi, -2
        mov qword ptr [r14 + 16], rsi
        add rcx, 2
        mov qword ptr [r14 + 8], rcx
        mov rcx, qword ptr [r15 - 440]
        test rcx, rcx
        jne .LBB472_241
        jmp .LBB472_240
.LBB472_234:
        mov word ptr [rbp + 752], 0
        mov ebx, 2
        xor edi, edi
        lea r12, [rbp + 752]
.LBB472_235:
        cmp rsi, rbx
        mov r13, rbx
        cmovb r13, rsi
        mov rcx, r12
        mov rdx, rdi
        mov r8, r13
        call memcpy
        add r12, r13
        sub rsi, r13
        add rdi, r13
        sub rbx, r13
        jne .LBB472_235
        mov qword ptr [r14 + 8], rdi
        mov qword ptr [r14 + 16], rsi
        movzx eax, word ptr [rbp + 752]
        rol ax, 8
        mov r13, qword ptr [rbp + 1752]
        mov rcx, qword ptr [r15 - 440]
        test rcx, rcx
        je .LBB472_240
.LBB472_241:
        mov rdx, qword ptr [rbp + 1760]
        mov word ptr [rcx + 2*rdx], ax
        jmp .LBB472_22
.LBB472_49:
        mov rcx, qword ptr [rbp + 1712]
        mov qword ptr [rcx + 8], rax
        mov qword ptr [rcx], 0
        lea rcx, [rbp + 1616]
        call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slp_parse::events::post_frame::PostFrames,core::option::Option<slp_parse::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
        mov rax, qword ptr [rbp + 1704]
        lock dec        qword ptr [rax]
        mov r14, qword ptr [rbp + 1736]
        jne .LBB472_20
.LBB472_19:
        #MEMBARRIER
        lea rcx, [rbp + 1920]
        call alloc::sync::Arc<T,A>::drop_slow
.LBB472_20:
        lea rcx, [r14 + 24]
        mov rax, qword ptr [r14]
        mov rdx, qword ptr [r14 + 8]
        mov r8, qword ptr [r14 + 16]
        call qword ptr [rax + 32]
        mov rax, qword ptr [rbp + 1712]
        movaps xmm6, xmmword ptr [rbp + 1776]
        movaps xmm7, xmmword ptr [rbp + 1792]
        add rsp, 1944
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret
.LBB472_18:
        movdqa xmm0, xmmword ptr [rbp + 1616]
        movdqa xmm1, xmmword ptr [rbp + 1632]
        mov rax, qword ptr [rbp + 1712]
        movdqu xmmword ptr [rax + 16], xmm1
        movdqu xmmword ptr [rax], xmm0
        mov rax, qword ptr [rbp + 1920]
        lock dec        qword ptr [rax]
        je .LBB472_19
        jmp .LBB472_20
.LBB472_45:
        lea rcx, [rip + __unnamed_712]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_25:
        mov qword ptr [rbp + 1720], rax
        lea rax, [rbp + 1688]
        mov qword ptr [rbp - 96], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp - 88], rax
        lea rcx, [rbp + 1720]
        mov qword ptr [rbp - 80], rcx
        mov qword ptr [rbp - 72], rax
        lea rax, [rip + __unnamed_466]
        mov qword ptr [rbp + 752], rax
        mov qword ptr [rbp + 760], 2
        mov qword ptr [rbp + 784], 0
        lea rax, [rbp - 96]
        mov qword ptr [rbp + 768], rax
        mov qword ptr [rbp + 776], 2
        lea rdx, [rip + __unnamed_467]
        lea rcx, [rbp + 752]
        call core::panicking::panic_fmt
        jmp .LBB472_1
.LBB472_31:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_36:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_38:
        mov qword ptr [rbp + 1720], 0
        lea rax, [rbp + 1688]
        mov qword ptr [rbp - 96], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp - 88], rax
        lea rcx, [rbp + 1720]
        mov qword ptr [rbp - 80], rcx
        mov qword ptr [rbp - 72], rax
        lea rax, [rip + __unnamed_466]
        mov qword ptr [rbp + 752], rax
        mov qword ptr [rbp + 760], 2
        mov qword ptr [rbp + 784], 0
        lea rax, [rbp - 96]
        mov qword ptr [rbp + 768], rax
        mov qword ptr [rbp + 776], 2
        lea rdx, [rip + __unnamed_467]
        lea rcx, [rbp + 752]
        call core::panicking::panic_fmt
        jmp .LBB472_1
.LBB472_102:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_58:
        mov ecx, 2
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_72:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_65:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_52:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_93:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_86:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_96:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_79:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_100:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_98:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_143:
        mov ecx, 2
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_118:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_137:
        lea rcx, [rip + __unnamed_713]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_116:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_122:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_150:
        lea rcx, [rip + __unnamed_714]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_148:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_114:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_120:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_146:
        lea rcx, [rip + __unnamed_715]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_130:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_112:
        lea rcx, [rip + __unnamed_716]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_124:
        lea rcx, [rip + __unnamed_717]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_154:
        lea rcx, [rip + __unnamed_718]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_152:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_109:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_135:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_133:
        lea rcx, [rip + __unnamed_719]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_157:
        mov ecx, 1
        xor edx, edx
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_159:
        lea rcx, [rip + __unnamed_720]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_198:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_201:
        lea rcx, [rip + __unnamed_721]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_166:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_173:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_176:
        lea rcx, [rip + __unnamed_722]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_182:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_189:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_192:
        lea rcx, [rip + __unnamed_723]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_208:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_211:
        lea rcx, [rip + __unnamed_724]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_221:
        lea rcx, [rip + __unnamed_725]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_218:
        mov ecx, 4
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_240:
        lea rcx, [rip + __unnamed_726]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_237:
        mov ecx, 2
        mov rdx, rsi
        call bytes::panic_advance
        jmp .LBB472_1
.LBB472_231:
        lea rcx, [rip + __unnamed_727]
        call core::option::unwrap_failed
        jmp .LBB472_1
.LBB472_228:
        mov ecx, 2
        mov rdx, rsi
        call bytes::panic_advance
.LBB472_1:
        ud2
        .long   ($cppxdata$slp_parse::events::post_frame::unpack_frames)@IMGREL
        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 + 1616]
        call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slp_parse::events::post_frame::PostFrames,core::option::Option<slp_parse::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
        mov rax, qword ptr [rbp + 1920]
        lock dec        qword ptr [rax]
        jne .LBB472_4
        #MEMBARRIER
        lea rcx, [rbp + 1920]
        call alloc::sync::Arc<T,A>::drop_slow
.LBB472_4:
        mov r8, qword ptr [rbp + 1736]
        lea rcx, [r8 + 24]
        mov rax, qword ptr [r8]
        mov rdx, qword ptr [r8 + 8]
        mov r8, qword ptr [r8 + 16]
        call qword ptr [rax + 32]
        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
Branch after rebase
slp_parse::events::post_frame::unpack_frames:
        push rbp
        push r15
        push r14
        push r13
        push r12
        push rsi
        push rdi
        push rbx
        sub rsp, 1928
        lea rbp, [rsp + 128]
        movdqa xmmword ptr [rbp + 1776], xmm7
        movdqa xmmword ptr [rbp + 1760], xmm6
        mov qword ptr [rbp + 1752], -2
        mov qword ptr [rbp + 1712], rdx
        mov qword ptr [rbp + 1704], rcx
        mov rdx, qword ptr [rbp + 1904]
        movups xmm0, xmmword ptr [rip + __unnamed_639+16]
        movaps xmmword ptr [rbp + 1648], xmm0
        movdqu xmm0, xmmword ptr [rip + __unnamed_639]
        movdqa xmmword ptr [rbp + 1632], xmm0
        lock inc        qword ptr [rdx]
        jle .LBB471_1
        mov rsi, r9
        mov rdi, r8
        lea rcx, [rbp + 760]
        mov qword ptr [rbp + 1728], rdx
        call slp_parse::events::post_frame::PostFrames::new
        movzx r15d, word ptr [rbp + 1912]
        lea r14, [rbp - 88]
        lea rdx, [rbp + 760]
        mov r8d, 424
        mov rcx, r14
        call memcpy
        mov qword ptr [rbp + 336], 0
        lea rcx, [rbp + 760]
        lea rdx, [rbp + 1632]
        mov r8d, r15d
        mov r9, r14
        call hashbrown::map::HashMap<K,V,S,A>::insert
        cmp qword ptr [rbp + 760], 0
        je .LBB471_10
        lea rcx, [rbp + 760]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 1184], 0
        je .LBB471_10
        lea rcx, [rbp + 1184]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
.LBB471_10:
        mov rdx, qword ptr [rbp + 1728]
        lock inc        qword ptr [rdx]
        jle .LBB471_1
        lea rcx, [rbp + 760]
        call slp_parse::events::post_frame::PostFrames::new
        shr r15d, 8
        lea r12, [rbp - 88]
        lea rdx, [rbp + 760]
        mov r8d, 424
        mov rcx, r12
        call memcpy
        mov qword ptr [rbp + 336], 0
        lea rcx, [rbp + 760]
        lea rdx, [rbp + 1632]
        mov r8d, r15d
        mov r9, r12
        call hashbrown::map::HashMap<K,V,S,A>::insert
        cmp qword ptr [rbp + 760], 0
        je .LBB471_16
        lea rcx, [rbp + 760]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
        cmp qword ptr [rbp + 1184], 0
        je .LBB471_16
        lea rcx, [rbp + 1184]
        call core::ptr::drop_in_place<slp_parse::events::post_frame::PostFrames>
.LBB471_16:
        mov r15, rsi
        and r15, -2
        mov rbx, qword ptr [rbp + 1712]
        mov r13, qword ptr [rbx + 16]
        mov rcx, qword ptr [rbp + 1728]
        mov rax, qword ptr [rcx + 184]
        mov qword ptr [rbp + 1664], rax
        movzx edx, byte ptr [rcx + 192]
        movzx ecx, byte ptr [rcx + 193]
        xor eax, eax
        cmp dl, 2
        sete al
        test cl, cl
        sete r8b
        xor r9d, r9d
        cmp cl, 5
        setb r9b
        xor r10d, r10d
        cmp cl, 8
        setb r10b
        xor r11d, r11d
        cmp cl, 11
        setb r11b
        xor esi, esi
        cmp cl, 16
        setb sil
        and r8b, al
        mov byte ptr [rbp + 1743], r8b
        mov byte ptr [rbp + 1742], dl
        cmp dl, 3
        cmovne r9d, eax
        mov dword ptr [rbp + 1672], r9d
        cmovne r10d, eax
        mov dword ptr [rbp + 1676], r10d
        cmovne r11d, eax
        mov dword ptr [rbp + 1680], r11d
        cmovne esi, eax
        mov dword ptr [rbp + 1684], esi
        pxor xmm6, xmm6
        pcmpeqd xmm7, xmm7
        mov r14, rdi
        jmp .LBB471_17
.LBB471_23:
        mov r14, qword ptr [rbp + 1624]
.LBB471_17:
        test r15, r15
        je .LBB471_18
        lea rax, [r14 + 16]
        mov qword ptr [rbp + 1624], rax
        add r15, -2
        xor r9d, r9d
        mov qword ptr [rbp + 1608], r14
        mov qword ptr [rbp + 1616], r15
.LBB471_22:
        cmp r9, 16
        je .LBB471_23
        mov rax, qword ptr [rbx + 16]
        mov rcx, rax
        sub rcx, r13
        add rcx, qword ptr [r14 + r9]
        mov qword ptr [rbp + 1688], rcx
        mov rdx, rax
        sub rdx, rcx
        jb .LBB471_25
        mov qword ptr [rbx + 16], rdx
        add rcx, qword ptr [rbx + 8]
        mov qword ptr [rbx + 8], rcx
        cmp rdx, 3
        jbe .LBB471_27
        add r9, 8
        mov edi, dword ptr [rcx]
        bswap edi
        lea rax, [rdx - 4]
        mov qword ptr [rbx + 16], rax
        lea r8, [rcx + 4]
        mov qword ptr [rbx + 8], r8
        lea r8d, [rdi + 123]
        movsxd rsi, r8d
        mov qword ptr [rbp + 1744], rsi
        mov r8, qword ptr [rbp + 1664]
        cmp r8, rsi
        je .LBB471_22
        inc r8
        cmp r8, rsi
        je .LBB471_22
        mov qword ptr [rbp + 1696], r9
        test rax, rax
        je .LBB471_31
        movzx eax, byte ptr [rcx + 4]
        lea r8, [rcx + 5]
        mov r9, rdx
        mov qword ptr [rbp + 1688], 1
        add r9, -5
        mov qword ptr [rbx + 16], r9
        mov qword ptr [rbx + 8], r8
        je .LBB471_33
        add rdx, -6
        mov qword ptr [rbx + 16], rdx
        add rcx, 6
        mov qword ptr [rbx + 8], rcx
        cmp qword ptr [rbp + 1656], 0
        je .LBB471_40
        movzx ecx, al
        mov r12, qword ptr [rbp + 1632]
        mov rdx, qword ptr [rbp + 1640]
        lea r8, [r12 - 856]
        xor r9d, r9d
.LBB471_36:
        and rcx, rdx
        movdqu xmm0, xmmword ptr [r12 + rcx]
        movdqa xmm1, xmm0
        pcmpeqb xmm1, xmm6
        pmovmskb r10d, xmm1
.LBB471_37:
        test r10w, r10w
        je .LBB471_38
        rep bsf r11d, r10d
        lea ebx, [r10 - 1]
        and ebx, r10d
        add r11, rcx
        and r11, rdx
        neg r11
        imul r15, r11, 856
        mov r10d, ebx
        cmp byte ptr [r8 + r15], al
        jne .LBB471_37
        jmp .LBB471_42
.LBB471_38:
        pcmpeqb xmm0, xmm7
        pmovmskb r10d, xmm0
        test r10d, r10d
        jne .LBB471_40
        add rcx, r9
        add rcx, 16
        add r9, 16
        jmp .LBB471_36
.LBB471_42:
        mov r14, r13
        mov rbx, qword ptr [r12 + r15 - 840]
        mov r13, qword ptr [r12 + r15 - 832]
        lea rax, [rbp + 1744]
        mov qword ptr [rbp + 760], rax
        lea rax, [rip + core::fmt::num::imp::<impl core::fmt::Display for usize>::fmt]
        mov qword ptr [rbp + 768], rax
        lea rcx, [rbp + 1664]
        mov qword ptr [rbp + 776], rcx
        mov qword ptr [rbp + 784], rax
        lea rax, [rip + __unnamed_717]
        mov qword ptr [rbp - 88], rax
        mov qword ptr [rbp - 80], 2
        mov qword ptr [rbp - 56], 0
        lea rax, [rbp + 760]
        mov qword ptr [rbp - 72], rax
        mov qword ptr [rbp - 64], 2
        lea rcx, [rbp - 88]
        call anyhow::__private::format_err
        mov qword ptr [rbp + 1720], rax
        cmp r13, rsi
        jbe .LBB471_44
        lea rcx, [rbp + 1720]
        call anyhow::error::<impl core::ops::drop::Drop for anyhow::Error>::drop
        mov dword ptr [rbx + 4*rsi], edi
        mov rbx, qword ptr [rbp + 1712]
        mov rax, qword ptr [rbx + 16]
        test rax, rax
        je .LBB471_47
        add r12, r15
        mov rcx, qword ptr [rbx + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [rbx + 16], rax
        inc rcx
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 824]
        mov rcx, qword ptr [rbp + 1744]
        mov byte ptr [rax + rcx], dl
        mov rax, qword ptr [rbx + 16]
        cmp rax, 1
        jbe .LBB471_49
        mov rcx, qword ptr [rbx + 8]
        movzx edx, word ptr [rcx]
        rol dx, 8
        add rax, -2
        mov qword ptr [rbx + 16], rax
        add rcx, 2
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 808]
        mov rcx, qword ptr [rbp + 1744]
        mov word ptr [rax + 2*rcx], dx
        mov rax, qword ptr [rbx + 16]
        cmp rax, 3
        jbe .LBB471_51
        mov r13, r14
        mov rdx, qword ptr [rbx + 8]
        mov ecx, dword ptr [rdx]
        lea r8, [rax - 4]
        mov qword ptr [rbx + 16], r8
        lea r9, [rdx + 4]
        mov qword ptr [rbx + 8], r9
        cmp r8, 3
        mov r15, qword ptr [rbp + 1616]
        mov r14, qword ptr [rbp + 1608]
        jbe .LBB471_53
        bswap ecx
        mov r8d, dword ptr [rdx + 4]
        bswap r8d
        add rax, -8
        mov qword ptr [rbx + 16], rax
        add rdx, 8
        mov qword ptr [rbx + 8], rdx
        mov rax, qword ptr [r12 - 792]
        mov rdx, qword ptr [rbp + 1744]
        mov dword ptr [rax + 8*rdx], ecx
        mov dword ptr [rax + 8*rdx + 4], r8d
        mov rax, qword ptr [rbx + 16]
        cmp rax, 3
        mov r9, qword ptr [rbp + 1696]
        jbe .LBB471_55
        mov rcx, qword ptr [rbx + 8]
        mov edx, dword ptr [rcx]
        bswap edx
        add rax, -4
        mov qword ptr [rbx + 16], rax
        add rcx, 4
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 776]
        mov rcx, qword ptr [rbp + 1744]
        mov dword ptr [rax + 4*rcx], edx
        mov rax, qword ptr [rbx + 16]
        cmp rax, 3
        jbe .LBB471_57
        mov rcx, qword ptr [rbx + 8]
        mov edx, dword ptr [rcx]
        bswap edx
        add rax, -4
        mov qword ptr [rbx + 16], rax
        add rcx, 4
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 760]
        mov rcx, qword ptr [rbp + 1744]
        mov dword ptr [rax + 4*rcx], edx
        mov rax, qword ptr [rbx + 16]
        cmp rax, 3
        jbe .LBB471_59
        mov rcx, qword ptr [rbx + 8]
        mov edx, dword ptr [rcx]
        bswap edx
        add rax, -4
        mov qword ptr [rbx + 16], rax
        add rcx, 4
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 744]
        mov rcx, qword ptr [rbp + 1744]
        mov dword ptr [rax + 4*rcx], edx
        mov rax, qword ptr [rbx + 16]
        test rax, rax
        je .LBB471_61
        mov rcx, qword ptr [rbx + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [rbx + 16], rax
        inc rcx
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 728]
        mov rcx, qword ptr [rbp + 1744]
        mov byte ptr [rax + rcx], dl
        mov rax, qword ptr [rbx + 16]
        test rax, rax
        je .LBB471_63
        mov rcx, qword ptr [rbx + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [rbx + 16], rax
        inc rcx
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 712]
        mov rcx, qword ptr [rbp + 1744]
        mov byte ptr [rax + rcx], dl
        mov rax, qword ptr [rbx + 16]
        test rax, rax
        je .LBB471_65
        mov rcx, qword ptr [rbx + 8]
        movzx edx, byte ptr [rcx]
        dec rax
        mov qword ptr [rbx + 16], rax
        inc rcx
        mov qword ptr [rbx + 8], rcx
        mov rax, qword ptr [r12 - 696]
        mov rcx, qword ptr [rbp + 1744]
        mov byte ptr [rax + rcx], dl
        mov rax, qword ptr [rbx + 16]
        test rax, rax
        je .LBB471_67
        mov rcx, qword ptr [rbx + 8]
        dec rax
        lea rdx, [rcx + 1]
        movzx ecx, byte ptr [rcx]
        mov qword ptr [rbx + 16], rax
        mov qword ptr [rbx + 8], rdx
        mov rax, qword ptr [r12 - 680]
        mov rdx, qword ptr [rbp + 1744]
        mov byte ptr [rax + rdx], cl
        cmp byte ptr [rbp + 1742], 2
        jb .LBB471_22
        mov rcx, qword ptr [rbx + 16]
        cmp rcx, 3
        jbe .LBB471_70
        mov rdx, qword ptr [rbx + 8]
        mov eax, dword ptr [rdx]
        add rcx, -4
        mov qword ptr [rbx + 16], rcx
        add rdx, 4
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 664]
        test rcx, rcx
        je .LBB471_72
        bswap eax
        mov rdx, qword ptr [rbp + 1744]
        mov dword ptr [rcx + 4*rdx], eax
        mov r9, qword ptr [rbx + 16]
        test r9, r9
        je .LBB471_74
        mov r10, qword ptr [rbx + 8]
        movzx eax, byte ptr [r10]
        lea rcx, [r10 + 1]
        mov rdx, r9
        dec rdx
        mov qword ptr [rbx + 16], rdx
        mov qword ptr [rbx + 8], rcx
        je .LBB471_76
        movzx ecx, byte ptr [r10 + 1]
        lea rdx, [r10 + 2]
        mov r8, r9
        add r8, -2
        mov qword ptr [rbx + 16], r8
        mov qword ptr [rbx + 8], rdx
        je .LBB471_78
        movzx edx, byte ptr [r10 + 2]
        lea r8, [r10 + 3]
        mov r11, r9
        add r11, -3
        mov qword ptr [rbx + 16], r11
        mov qword ptr [rbx + 8], r8
        je .LBB471_80
        movzx r8d, byte ptr [r10 + 3]
        lea r11, [r10 + 4]
        mov rsi, r9
        add rsi, -4
        mov qword ptr [rbx + 16], rsi
        mov qword ptr [rbx + 8], r11
        je .LBB471_82
        movzx r11d, byte ptr [r10 + 4]
        add r9, -5
        mov qword ptr [rbx + 16], r9
        add r10, 5
        mov qword ptr [rbx + 8], r10
        mov r9, qword ptr [r12 - 648]
        test r9, r9
        je .LBB471_84
        shl ecx, 8
        or rcx, rax
        shl edx, 16
        or rdx, rcx
        shl r8d, 24
        or r8, rdx
        shl r11, 32
        or r11, r8
        mov rax, qword ptr [rbp + 1744]
        mov qword ptr [r9 + 8*rax], r11
        mov rcx, qword ptr [rbx + 16]
        cmp rcx, 3
        jbe .LBB471_86
        mov rdx, qword ptr [rbx + 8]
        mov eax, dword ptr [rdx]
        add rcx, -4
        mov qword ptr [rbx + 16], rcx
        add rdx, 4
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 632]
        test rcx, rcx
        mov r9, qword ptr [rbp + 1696]
        je .LBB471_88
        bswap eax
        mov rdx, qword ptr [rbp + 1744]
        mov dword ptr [rcx + 4*rdx], eax
        mov rcx, qword ptr [rbx + 16]
        test rcx, rcx
        je .LBB471_90
        mov rdx, qword ptr [rbx + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [rbx + 16], rcx
        inc rdx
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 616]
        test rcx, rcx
        je .LBB471_92
        mov rdx, qword ptr [rbp + 1744]
        test al, al
        sete byte ptr [rcx + rdx]
        mov rcx, qword ptr [rbx + 16]
        cmp rcx, 1
        jbe .LBB471_94
        mov rdx, qword ptr [rbx + 8]
        movzx eax, word ptr [rdx]
        add rcx, -2
        mov qword ptr [rbx + 16], rcx
        add rdx, 2
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 600]
        test rcx, rcx
        je .LBB471_96
        rol ax, 8
        mov rdx, qword ptr [rbp + 1744]
        mov word ptr [rcx + 2*rdx], ax
        mov rcx, qword ptr [rbx + 16]
        test rcx, rcx
        je .LBB471_98
        mov rdx, qword ptr [rbx + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [rbx + 16], rcx
        inc rdx
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 584]
        test rcx, rcx
        je .LBB471_100
        mov rdx, qword ptr [rbp + 1744]
        mov byte ptr [rcx + rdx], al
        mov rcx, qword ptr [rbx + 16]
        test rcx, rcx
        je .LBB471_102
        mov rdx, qword ptr [rbx + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [rbx + 16], rcx
        inc rdx
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 568]
        test rcx, rcx
        je .LBB471_104
        mov rdx, qword ptr [rbp + 1744]
        mov byte ptr [rcx + rdx], al
        cmp byte ptr [rbp + 1743], 0
        jne .LBB471_22
        mov rcx, qword ptr [rbx + 16]
        test rcx, rcx
        je .LBB471_107
        mov rdx, qword ptr [rbx + 8]
        movzx eax, byte ptr [rdx]
        dec rcx
        mov qword ptr [rbx + 16], rcx
        inc rdx
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 552]
        test rcx, rcx
        je .LBB471_109
        mov rdx, qword ptr [rbp + 1744]
        mov byte ptr [rcx + rdx], al
        cmp byte ptr [rbp + 1672], 0
        jne .LBB471_22
        mov rdx, qword ptr [rbx + 16]
        cmp rdx, 3
        jbe .LBB471_112
        mov r8, qword ptr [rbx + 8]
        mov ecx, dword ptr [r8]
        lea rax, [rdx - 4]
        mov qword ptr [rbx + 16], rax
        lea r9, [r8 + 4]
        mov qword ptr [rbx + 8], r9
        cmp rax, 3
        jbe .LBB471_114
        mov eax, dword ptr [r8 + 4]
        add rdx, -8
        mov qword ptr [rbx + 16], rdx
        add r8, 8
        mov qword ptr [rbx + 8], r8
        mov rdx, qword ptr [r12 - 536]
        test rdx, rdx
        je .LBB471_116
        bswap ecx
        bswap eax
        mov r8, qword ptr [rbp + 1744]
        mov dword ptr [rdx + 8*r8], ecx
        mov dword ptr [rdx + 8*r8 + 4], eax
        mov rdx, qword ptr [rbx + 16]
        cmp rdx, 3
        jbe .LBB471_118
        mov r9, qword ptr [rbx + 8]
        mov ecx, dword ptr [r9]
        lea r8, [rdx - 4]
        mov qword ptr [rbx + 16], r8
        lea r10, [r9 + 4]
        mov qword ptr [rbx + 8], r10
        cmp r8, 3
        jbe .LBB471_120
        mov r8d, dword ptr [r9 + 4]
        add rdx, -8
        mov qword ptr [rbx + 16], rdx
        add r9, 8
        mov qword ptr [rbx + 8], r9
        mov rdx, qword ptr [r12 - 520]
        test rdx, rdx
        je .LBB471_122
        bswap ecx
        bswap r8d
        mov r9, qword ptr [rbp + 1744]
        mov dword ptr [rdx + 8*r9], ecx
        mov dword ptr [rdx + 8*r9 + 4], r8d
        mov rdx, qword ptr [rbx + 16]
        cmp rdx, 3
        jbe .LBB471_124
        mov r8, qword ptr [rbx + 8]
        mov ecx, dword ptr [r8]
        add rdx, -4
        mov qword ptr [rbx + 16], rdx
        add r8, 4
        mov qword ptr [rbx + 8], r8
        mov rdx, qword ptr [r12 - 504]
        test rdx, rdx
        mov r9, qword ptr [rbp + 1696]
        je .LBB471_126
        bswap ecx
        mov r8, qword ptr [rbp + 1744]
        mov dword ptr [rdx + 8*r8], ecx
        mov dword ptr [rdx + 8*r8 + 4], eax
        cmp byte ptr [rbp + 1676], 0
        jne .LBB471_22
        mov rcx, qword ptr [rbx + 16]
        cmp rcx, 3
        jbe .LBB471_129
        mov rdx, qword ptr [rbx + 8]
        mov eax, dword ptr [rdx]
        add rcx, -4
        mov qword ptr [rbx + 16], rcx
        add rdx, 4
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 488]
        test rcx, rcx
        je .LBB471_131
        bswap eax
        mov rdx, qword ptr [rbp + 1744]
        mov dword ptr [rcx + 4*rdx], eax
        cmp byte ptr [rbp + 1680], 0
        jne .LBB471_22
        mov rcx, qword ptr [rbx + 16]
        cmp rcx, 3
        jbe .LBB471_134
        mov rdx, qword ptr [rbx + 8]
        mov eax, dword ptr [rdx]
        add rcx, -4
        mov qword ptr [rbx + 16], rcx
        add rdx, 4
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 472]
        test rcx, rcx
        je .LBB471_136
        bswap eax
        mov rdx, qword ptr [rbp + 1744]
        mov dword ptr [rcx + 4*rdx], eax
        cmp byte ptr [rbp + 1684], 0
        jne .LBB471_22
        mov rcx, qword ptr [rbx + 16]
        cmp rcx, 1
        jbe .LBB471_139
        mov rdx, qword ptr [rbx + 8]
        movzx eax, word ptr [rdx]
        add rcx, -2
        mov qword ptr [rbx + 16], rcx
        add rdx, 2
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 456]
        test rcx, rcx
        je .LBB471_141
        rol ax, 8
        mov rdx, qword ptr [rbp + 1744]
        mov word ptr [rcx + 2*rdx], ax
        mov rcx, qword ptr [rbx + 16]
        cmp rcx, 1
        jbe .LBB471_143
        mov rdx, qword ptr [rbx + 8]
        movzx eax, word ptr [rdx]
        add rcx, -2
        mov qword ptr [rbx + 16], rcx
        add rdx, 2
        mov qword ptr [rbx + 8], rdx
        mov rcx, qword ptr [r12 - 440]
        test rcx, rcx
        je .LBB471_145
        rol ax, 8
        mov rdx, qword ptr [rbp + 1744]
        mov word ptr [rcx + 2*rdx], ax
        jmp .LBB471_22
.LBB471_44:
        mov rcx, qword ptr [rbp + 1704]
        mov qword ptr [rcx + 8], rax
        mov qword ptr [rcx], 0
        lea rcx, [rbp + 1632]
        call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slp_parse::events::post_frame::PostFrames,core::option::Option<slp_parse::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
        mov rax, qword ptr [rbp + 1728]
        lock dec        qword ptr [rax]
        mov rbx, qword ptr [rbp + 1712]
        jne .LBB471_20
.LBB471_19:
        #MEMBARRIER
        lea rcx, [rbp + 1904]
        call alloc::sync::Arc<T,A>::drop_slow
.LBB471_20:
        lea rcx, [rbx + 24]
        mov rax, qword ptr [rbx]
        mov rdx, qword ptr [rbx + 8]
        mov r8, qword ptr [rbx + 16]
        call qword ptr [rax + 32]
        mov rax, qword ptr [rbp + 1704]
        movaps xmm6, xmmword ptr [rbp + 1760]
        movaps xmm7, xmmword ptr [rbp + 1776]
        add rsp, 1928
        pop rbx
        pop rdi
        pop rsi
        pop r12
        pop r13
        pop r14
        pop r15
        pop rbp
        ret
.LBB471_18:
        movdqa xmm0, xmmword ptr [rbp + 1632]
        movdqa xmm1, xmmword ptr [rbp + 1648]
        mov rax, qword ptr [rbp + 1704]
        movdqu xmmword ptr [rax + 16], xmm1
        movdqu xmmword ptr [rax], xmm0
        mov rax, qword ptr [rbp + 1728]
        lock dec        qword ptr [rax]
        je .LBB471_19
        jmp .LBB471_20
.LBB471_40:
        lea rcx, [rip + __unnamed_718]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_27:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_682]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_25:
        mov qword ptr [rbp + 1720], rax
        lea rax, [rbp + 1688]
        mov qword ptr [rbp + 760], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp + 768], rax
        lea rcx, [rbp + 1720]
        mov qword ptr [rbp + 776], rcx
        mov qword ptr [rbp + 784], rax
        lea rax, [rip + __unnamed_466]
        mov qword ptr [rbp - 88], rax
        mov qword ptr [rbp - 80], 2
        mov qword ptr [rbp - 56], 0
        lea rax, [rbp + 760]
        mov qword ptr [rbp - 72], rax
        mov qword ptr [rbp - 64], 2
        lea rdx, [rip + __unnamed_467]
        lea rcx, [rbp - 88]
        call core::panicking::panic_fmt
        jmp .LBB471_1
.LBB471_31:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_33:
        mov qword ptr [rbp + 1720], 0
        lea rax, [rbp + 1688]
        mov qword ptr [rbp + 760], rax
        lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
        mov qword ptr [rbp + 768], rax
        lea rcx, [rbp + 1720]
        mov qword ptr [rbp + 776], rcx
        mov qword ptr [rbp + 784], rax
        lea rax, [rip + __unnamed_466]
        mov qword ptr [rbp - 88], rax
        mov qword ptr [rbp - 80], 2
        mov qword ptr [rbp - 56], 0
        lea rax, [rbp + 760]
        mov qword ptr [rbp - 72], rax
        mov qword ptr [rbp - 64], 2
        lea rdx, [rip + __unnamed_467]
        lea rcx, [rbp - 88]
        call core::panicking::panic_fmt
        jmp .LBB471_1
.LBB471_57:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_53:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_65:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_51:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_47:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_67:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_49:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_648]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_63:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_59:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_55:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_61:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_80:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_96:
        lea rcx, [rip + __unnamed_719]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_76:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_100:
        lea rcx, [rip + __unnamed_720]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_94:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_648]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_72:
        lea rcx, [rip + __unnamed_721]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_92:
        lea rcx, [rip + __unnamed_722]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_70:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_78:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_98:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_74:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_102:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_86:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_84:
        lea rcx, [rip + __unnamed_723]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_90:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_104:
        lea rcx, [rip + __unnamed_724]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_88:
        lea rcx, [rip + __unnamed_725]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_82:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_107:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_642]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_109:
        lea rcx, [rip + __unnamed_726]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_112:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_116:
        lea rcx, [rip + __unnamed_727]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_122:
        lea rcx, [rip + __unnamed_728]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_126:
        lea rcx, [rip + __unnamed_729]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_124:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_120:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_118:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_114:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_129:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_131:
        lea rcx, [rip + __unnamed_730]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_136:
        lea rcx, [rip + __unnamed_731]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_134:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_469]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_139:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_648]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_143:
        lea rcx, [rip + __unnamed_468]
        lea r8, [rip + __unnamed_648]
        mov edx, 34
        call core::panicking::panic
        jmp .LBB471_1
.LBB471_145:
        lea rcx, [rip + __unnamed_732]
        call core::option::unwrap_failed
        jmp .LBB471_1
.LBB471_141:
        lea rcx, [rip + __unnamed_733]
        call core::option::unwrap_failed
.LBB471_1:
        ud2
        .long   ($cppxdata$slp_parse::events::post_frame::unpack_frames)@IMGREL
        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 + 1632]
        call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slp_parse::events::post_frame::PostFrames,core::option::Option<slp_parse::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
        mov rax, qword ptr [rbp + 1728]
        lock dec        qword ptr [rax]
        jne .LBB471_4
        #MEMBARRIER
        lea rcx, [rbp + 1904]
        call alloc::sync::Arc<T,A>::drop_slow
.LBB471_4:
        mov r8, qword ptr [rbp + 1712]
        lea rcx, [r8 + 24]
        mov rax, qword ptr [r8]
        mov rdx, qword ptr [r8 + 8]
        mov r8, qword ptr [r8 + 16]
        call qword ptr [rax + 32]
        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.