tokio-rs / bytes

Utilities for working with bytes
MIT License
1.91k stars 288 forks source link

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

Open Walnut356 opened 1 year ago

Walnut356 commented 1 year ago

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 commented 11 months ago

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 ```rust 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) ```asm 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 nop add rsp, 40 pop rbx pop rdi pop rsi pop r12 pop r13 pop r14 pop r15 pop rbp ret ```
After (53 lines) ```asm 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 nop add rsp, 32 pop rbp ret ```
In library [Code](https://github.com/Walnut356/SlpProcess/blob/53f018b88297b744bb4c6926b273cba0a97df8a9/slpprocess/src/events/post_frame.rs#L502)
Before (1489 lines) ```asm 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::insert cmp qword ptr [rbp - 88], 0 je .LBB890_5 lea rcx, [rbp - 88] call core::ptr::drop_in_place cmp qword ptr [rbp + 312], 0 je .LBB890_5 lea rcx, [rbp + 312] call core::ptr::drop_in_place .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::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 cmp qword ptr [rbp + 312], 0 je .LBB890_10 lea rcx, [rbp + 312] call core::ptr::drop_in_place .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::::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::::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),core::hash::BuildHasherDefault>>> mov rcx, qword ptr [rbp + 1632] call core::ptr::drop_in_place 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) ```asm 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::insert cmp qword ptr [rbp + 704], 0 je .LBB890_5 lea rcx, [rbp + 704] call core::ptr::drop_in_place cmp qword ptr [rbp + 1104], 0 je .LBB890_5 lea rcx, [rbp + 1104] call core::ptr::drop_in_place .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::insert and r14, -2 cmp qword ptr [rbp + 704], 0 je .LBB890_10 lea rcx, [rbp + 704] call core::ptr::drop_in_place cmp qword ptr [rbp + 1104], 0 je .LBB890_10 lea rcx, [rbp + 1104] call core::ptr::drop_in_place .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::::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::::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),core::hash::BuildHasherDefault>>> mov rcx, qword ptr [rbp + 1592] call core::ptr::drop_in_place 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 ```
paolobarbolini commented 2 months ago

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 ```shell cargo asm --llvm --bin bytes bytes::read_data ``` ## master ```ll ; 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 ```ll ; 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 ```ll ; 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 invoke fastcc void @"core::ptr::drop_in_place"(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 %"::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 "::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 %"::advance.exit.i.i" "::advance.exit.i.i": ; preds = %"::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, %"::advance.exit.i.i" ] %dst.sroa.0.08.i.i = phi ptr [ %buf.i, %bb3.preheader.i.i ], [ %12, %"::advance.exit.i.i" ] %10 = phi ptr [ null, %bb3.preheader.i.i ], [ %14, %"::advance.exit.i.i" ] %.val367.i.i = phi i64 [ %.val6.i, %bb3.preheader.i.i ], [ %13, %"::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 %"::advance.exit.i.i" bytes::buf::buf_impl::Buf::copy_to_slice.exit.i: ; preds = %"::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, %"::advance.exit.i" %_5.i.i13 = phi ptr [ %9, %"::advance.exit.i" ], [ %14, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ] %.val6.i11 = phi i64 [ %8, %"::advance.exit.i" ], [ %13, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ] %.0.i = phi i32 [ %7, %"::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 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 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 - invoke fastcc void @"core::ptr::drop_in_place"(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 %"::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 -"::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 %"::advance.exit.i.i" - -"::advance.exit.i.i": ; preds = %"::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, %"::advance.exit.i.i" ] - %dst.sroa.0.08.i.i = phi ptr [ %buf.i, %bb3.preheader.i.i ], [ %12, %"::advance.exit.i.i" ] - %10 = phi ptr [ null, %bb3.preheader.i.i ], [ %14, %"::advance.exit.i.i" ] - %.val367.i.i = phi i64 [ %.val6.i, %bb3.preheader.i.i ], [ %13, %"::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 %"::advance.exit.i.i" - -bytes::buf::buf_impl::Buf::copy_to_slice.exit.i: ; preds = %"::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, %"::advance.exit.i" - %_5.i.i13 = phi ptr [ %9, %"::advance.exit.i" ], [ %14, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ] - %.val6.i11 = phi i64 [ %8, %"::advance.exit.i" ], [ %13, %bytes::buf::buf_impl::Buf::copy_to_slice.exit.i ] - %.0.i = phi i32 [ %7, %"::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 commented 2 months ago

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 ```asm 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::insert cmp qword ptr [rbp - 96], 0 je .LBB472_10 lea rcx, [rbp - 96] call core::ptr::drop_in_place cmp qword ptr [rbp + 328], 0 je .LBB472_10 lea rcx, [rbp + 328] call core::ptr::drop_in_place .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::insert cmp qword ptr [rbp - 96], 0 je .LBB472_16 lea rcx, [rbp - 96] call core::ptr::drop_in_place cmp qword ptr [rbp + 328], 0 je .LBB472_16 lea rcx, [rbp + 328] call core::ptr::drop_in_place .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::::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::::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),core::hash::BuildHasherDefault>>> 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::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::::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::::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),core::hash::BuildHasherDefault>>> mov rax, qword ptr [rbp + 1920] lock dec qword ptr [rax] jne .LBB472_4 #MEMBARRIER lea rcx, [rbp + 1920] call alloc::sync::Arc::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 ```asm 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::insert cmp qword ptr [rbp + 760], 0 je .LBB471_10 lea rcx, [rbp + 760] call core::ptr::drop_in_place cmp qword ptr [rbp + 1184], 0 je .LBB471_10 lea rcx, [rbp + 1184] call core::ptr::drop_in_place .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::insert cmp qword ptr [rbp + 760], 0 je .LBB471_16 lea rcx, [rbp + 760] call core::ptr::drop_in_place cmp qword ptr [rbp + 1184], 0 je .LBB471_16 lea rcx, [rbp + 1184] call core::ptr::drop_in_place .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::::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::::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),core::hash::BuildHasherDefault>>> 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::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::::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::::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),core::hash::BuildHasherDefault>>> mov rax, qword ptr [rbp + 1728] lock dec qword ptr [rax] jne .LBB471_4 #MEMBARRIER lea rcx, [rbp + 1904] call alloc::sync::Arc::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 ```