New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add specialized get_X impls for Bytes struct to reduce dead code #622
base: master
Are you sure you want to change the base?
Conversation
Updated for a more direct 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 exampleuse bytes::{Bytes, Buf};
use std::{fs::File, io::Read, hint::black_box};
fn main() {
let mut file = File::open(r"replace_with_file").unwrap();
let mut buf = Vec::new();
let len = file.read_to_end(&mut buf).unwrap();
let b: Bytes = Bytes::from(buf);
read_data(b, len);
}
#[inline(never)]
pub fn read_data(mut b: Bytes, len: usize) {
for _ in 0..len/4 {
black_box(b.get_i32());
}
} Before (175 lines)bytes::read_data:
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 72
lea rbp, [rsp + 64]
mov qword ptr [rbp], -2
cmp rdx, 3
ja .LBB12_3
mov rbx, qword ptr [rcx + 8]
mov rsi, qword ptr [rcx + 16]
.LBB12_2:
mov rax, qword ptr [rcx]
add rcx, 24
mov rdx, rbx
mov r8, rsi
call qword ptr [rax + 16]
nop
add rsp, 72
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
.LBB12_3:
shr rdx, 2
mov rsi, qword ptr [rcx + 16]
xor r12d, r12d
lea rdi, [rbp - 8]
mov qword ptr [rbp - 16], rcx
mov qword ptr [rbp - 24], rdx
jmp .LBB12_4
.LBB12_6:
mov eax, dword ptr [rbx]
bswap eax
add rsi, -4
mov qword ptr [rcx + 16], rsi
add rbx, 4
mov qword ptr [rcx + 8], rbx
.LBB12_12:
inc r12
mov dword ptr [rbp - 8], eax
#APP
#NO_APP
cmp r12, rdx
je .LBB12_2
.LBB12_4:
cmp rsi, 4
jb .LBB12_7
mov rbx, qword ptr [rcx + 8]
test rbx, rbx
jne .LBB12_6
mov dword ptr [rbp - 4], 0
mov r13d, 4
xor ebx, ebx
lea r14, [rbp - 4]
.LBB12_10:
cmp rsi, r13
mov r15, r13
cmovb r15, rsi
mov rcx, r14
mov rdx, rbx
mov r8, r15
call memcpy
add r14, r15
sub rsi, r15
add rbx, r15
sub r13, r15
jne .LBB12_10
mov rcx, qword ptr [rbp - 16]
mov qword ptr [rcx + 16], rsi
mov qword ptr [rcx + 8], rbx
mov eax, dword ptr [rbp - 4]
bswap eax
mov rdx, qword ptr [rbp - 24]
jmp .LBB12_12
.LBB12_7:
mov ecx, 4
mov rdx, rsi
call bytes::panic_advance
ud2
mov qword ptr [rsp + 16], rdx
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 40
lea rbp, [rdx + 64]
mov rcx, qword ptr [rbp - 16]
call core::ptr::drop_in_place<bytes::bytes::Bytes>
nop
add rsp, 40
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret After (53 lines)bytes::read_data:
push rbp
sub rsp, 64
lea rbp, [rsp + 64]
mov qword ptr [rbp - 8], -2
cmp rdx, 3
ja .LBB12_4
mov rax, qword ptr [rcx + 8]
mov r8, qword ptr [rcx + 16]
jmp .LBB12_2
.LBB12_4:
shr rdx, 2
mov r8, qword ptr [rcx + 16]
lea r10, [rbp - 12]
.LBB12_5:
sub r8, 4
jb .LBB12_6
mov rax, qword ptr [rcx + 8]
mov r9d, dword ptr [rax]
bswap r9d
mov qword ptr [rcx + 16], r8
add rax, 4
mov qword ptr [rcx + 8], rax
mov dword ptr [rbp - 12], r9d
#APP
#NO_APP
dec rdx
jne .LBB12_5
.LBB12_2:
mov r9, qword ptr [rcx]
add rcx, 24
mov rdx, rax
call qword ptr [r9 + 16]
nop
add rsp, 64
pop rbp
ret
.LBB12_6:
mov qword ptr [rbp - 24], rcx
lea rcx, [rip + __unnamed_7]
lea r8, [rip + __unnamed_8]
mov edx, 34
call core::panicking::panic
ud2
mov qword ptr [rsp + 16], rdx
push rbp
sub rsp, 32
lea rbp, [rdx + 64]
mov rcx, qword ptr [rbp - 24]
call core::ptr::drop_in_place<bytes::bytes::Bytes>
nop
add rsp, 32
pop rbp
ret In libraryBefore (1489 lines)slpprocess::events::post_frame::unpack_frames:
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 1816
lea rbp, [rsp + 128]
movdqa xmmword ptr [rbp + 1664], xmm7
movdqa xmmword ptr [rbp + 1648], xmm6
mov qword ptr [rbp + 1640], -2
mov rbx, r9
mov r14, r8
mov qword ptr [rbp + 1632], rdx
mov rdi, rcx
mov r8d, dword ptr [rbp + 1808]
mov rdx, qword ptr [rbp + 1792]
lea rax, [rip + __unnamed_467]
mov qword ptr [rbp + 1544], rax
pxor xmm0, xmm0
movdqu xmmword ptr [rbp + 1552], xmm0
mov qword ptr [rbp + 1568], 0
lea rcx, [rbp - 88]
call slpprocess::events::post_frame::PostFrames::new
movzx esi, word ptr [rbp + 1800]
lea r12, [rbp + 712]
lea rdx, [rbp - 88]
mov r8d, 400
mov rcx, r12
call memcpy
mov qword ptr [rbp + 1112], 0
lea rcx, [rbp - 88]
lea rdx, [rbp + 1544]
mov r8d, esi
mov r9, r12
call hashbrown::map::HashMap<K,V,S,A>::insert
cmp qword ptr [rbp - 88], 0
je .LBB890_5
lea rcx, [rbp - 88]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
cmp qword ptr [rbp + 312], 0
je .LBB890_5
lea rcx, [rbp + 312]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_5:
lea rcx, [rbp - 88]
mov rdx, qword ptr [rbp + 1792]
mov r8d, dword ptr [rbp + 1808]
call slpprocess::events::post_frame::PostFrames::new
shr esi, 8
lea rdx, [rbp - 88]
mov r8d, 400
mov rcx, r12
call memcpy
mov qword ptr [rbp + 1112], 0
lea rcx, [rbp - 88]
lea rdx, [rbp + 1544]
mov r8d, esi
mov r9, r12
call hashbrown::map::HashMap<K,V,S,A>::insert
mov qword ptr [rbp + 1576], r14
and rbx, -2
cmp qword ptr [rbp - 88], 0
je .LBB890_10
lea rcx, [rbp - 88]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
cmp qword ptr [rbp + 312], 0
je .LBB890_10
lea rcx, [rbp + 312]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_10:
mov r15, qword ptr [rbp + 1632]
mov r13, qword ptr [r15 + 16]
mov rax, rbx
test rbx, rbx
je .LBB890_18
mov qword ptr [rbp + 1536], rdi
mov edx, dword ptr [rbp + 1808]
mov eax, edx
shr eax, 8
mov rcx, qword ptr [rbp + 1792]
inc rcx
mov qword ptr [rbp + 1520], rcx
mov ecx, edx
xor cl, 2
or cl, al
sete byte ptr [rbp + 1628]
cmp dl, 3
setb cl
sete dl
cmp al, 5
setb r8b
and r8b, dl
cmp al, 8
setb r9b
and r9b, dl
mov byte ptr [rbp + 1630], r9b
cmp al, 11
setb al
and al, dl
mov byte ptr [rbp + 1631], al
or r8b, cl
mov byte ptr [rbp + 1629], r8b
pxor xmm6, xmm6
pcmpeqd xmm7, xmm7
mov qword ptr [rbp + 1608], r13
jmp .LBB890_12
.LBB890_16:
mov rbx, qword ptr [rbp + 1528]
test rbx, rbx
je .LBB890_17
.LBB890_12:
mov rcx, qword ptr [rbp + 1576]
lea rax, [rcx + 16]
mov qword ptr [rbp + 1576], rax
add rbx, -2
mov qword ptr [rbp + 1528], rbx
mov qword ptr [rbp + 1512], rcx
mov rax, rcx
xor r14d, r14d
jmp .LBB890_13
.LBB890_231:
inc r14
mov rax, qword ptr [rbp + 1512]
lea rax, [rax + 8*r14]
cmp r14, 2
je .LBB890_16
.LBB890_13:
mov rcx, qword ptr [r15 + 16]
mov rsi, rcx
sub rsi, r13
add rsi, qword ptr [rax]
mov qword ptr [rbp + 1600], rsi
mov rdi, rcx
sub rdi, rsi
jb .LBB890_14
mov qword ptr [r15 + 16], rdi
mov rax, qword ptr [r15 + 8]
add rsi, rax
mov qword ptr [r15 + 8], rsi
test rax, rax
je .LBB890_26
cmp rdi, 4
jb .LBB890_26
mov eax, dword ptr [rsi]
bswap eax
add rdi, -4
mov qword ptr [r15 + 16], rdi
add rsi, 4
mov qword ptr [r15 + 8], rsi
lea ecx, [rax + 123]
movsxd r12, ecx
cmp r12, qword ptr [rbp + 1792]
jne .LBB890_23
jmp .LBB890_231
.LBB890_26:
mov dword ptr [rbp + 712], 0
cmp rdi, 4
jb .LBB890_30
xor ebx, ebx
.LBB890_28:
mov r12, rsi
mov esi, 4
sub rsi, rbx
cmp rdi, rsi
cmovb rsi, rdi
lea rcx, [rbx + rbp]
add rcx, 712
mov rdx, r12
mov r8, rsi
call memcpy
add rbx, rsi
sub rdi, rsi
add rsi, r12
cmp rbx, 4
jb .LBB890_28
mov qword ptr [r15 + 16], rdi
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
lea ecx, [rax + 123]
movsxd r12, ecx
cmp r12, qword ptr [rbp + 1792]
je .LBB890_231
.LBB890_23:
cmp qword ptr [rbp + 1520], r12
je .LBB890_231
test rdi, rdi
je .LBB890_25
movzx ecx, byte ptr [rsi]
lea rdx, [rsi + 1]
mov r8, rdi
mov qword ptr [rbp + 1600], 1
dec r8
mov qword ptr [r15 + 16], r8
mov qword ptr [r15 + 8], rdx
je .LBB890_32
add rdi, -2
mov qword ptr [r15 + 16], rdi
add rsi, 2
mov qword ptr [r15 + 8], rsi
cmp qword ptr [rbp + 1568], 0
je .LBB890_43
movzx edx, cl
mov rdi, qword ptr [rbp + 1544]
mov r8, qword ptr [rbp + 1552]
lea r9, [rdi - 808]
xor r10d, r10d
.LBB890_35:
and rdx, r8
movdqu xmm0, xmmword ptr [rdi + rdx]
movdqa xmm1, xmm0
pcmpeqb xmm1, xmm6
pmovmskb r11d, xmm1
.LBB890_36:
test r11w, r11w
je .LBB890_37
lea ebx, [r11 - 1]
and ebx, r11d
rep bsf r11d, r11d
add r11, rdx
and r11, r8
neg r11
imul rsi, r11, 808
mov r11d, ebx
cmp byte ptr [r9 + rsi], cl
jne .LBB890_36
jmp .LBB890_40
.LBB890_37:
pcmpeqb xmm0, xmm7
pmovmskb r11d, xmm0
test r11d, r11d
jne .LBB890_43
add rdx, r10
add rdx, 16
add r10, 16
jmp .LBB890_35
.LBB890_40:
mov rdx, qword ptr [rdi + rsi - 792]
cmp rdx, r12
jbe .LBB890_44
add rdi, rsi
mov rcx, qword ptr [rdi - 800]
mov dword ptr [rcx + 4*r12], eax
mov rax, qword ptr [r15 + 16]
test rax, rax
je .LBB890_42
mov qword ptr [rbp + 1616], r14
mov rcx, qword ptr [r15 + 8]
movzx edx, byte ptr [rcx]
dec rax
mov qword ptr [r15 + 16], rax
inc rcx
mov qword ptr [r15 + 8], rcx
mov rax, qword ptr [rdi - 784]
mov byte ptr [rax + r12], dl
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_65
cmp r14, 2
jb .LBB890_65
movzx eax, word ptr [rsi]
rol ax, 8
add r14, -2
mov qword ptr [r15 + 16], r14
add rsi, 2
mov qword ptr [r15 + 8], rsi
jmp .LBB890_48
.LBB890_65:
mov word ptr [rbp + 712], 0
cmp r14, 2
jb .LBB890_69
xor r13d, r13d
.LBB890_67:
mov rbx, rsi
mov esi, 2
sub rsi, r13
cmp r14, rsi
cmovb rsi, r14
lea rcx, [1*r13 + 712]
add rcx, rbp
mov rdx, rbx
mov r8, rsi
call memcpy
add r13, rsi
sub r14, rsi
add rsi, rbx
cmp r13, 2
jb .LBB890_67
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
movzx eax, word ptr [rbp + 712]
rol ax, 8
.LBB890_48:
mov rcx, qword ptr [rdi - 768]
mov word ptr [rcx + 2*r12], ax
mov rsi, qword ptr [r15 + 8]
mov r13, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_70
cmp r13, 4
jb .LBB890_70
mov r14d, dword ptr [rsi]
bswap r14d
add r13, -4
mov qword ptr [r15 + 16], r13
add rsi, 4
mov qword ptr [r15 + 8], rsi
cmp r13, 4
jae .LBB890_52
jmp .LBB890_75
.LBB890_70:
mov dword ptr [rbp + 712], 0
cmp r13, 4
jb .LBB890_74
xor r14d, r14d
.LBB890_72:
mov rbx, rsi
mov esi, 4
sub rsi, r14
cmp r13, rsi
cmovb rsi, r13
lea rcx, [r14 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r14, rsi
sub r13, rsi
add rsi, rbx
cmp r14, 4
jb .LBB890_72
mov qword ptr [r15 + 16], r13
mov qword ptr [r15 + 8], rsi
mov r14d, dword ptr [rbp + 712]
bswap r14d
cmp r13, 4
jb .LBB890_75
.LBB890_52:
test rsi, rsi
je .LBB890_75
mov eax, dword ptr [rsi]
bswap eax
add r13, -4
mov qword ptr [r15 + 16], r13
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_54
.LBB890_75:
mov dword ptr [rbp + 712], 0
cmp r13, 4
jb .LBB890_79
xor r15d, r15d
.LBB890_77:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r13, rsi
cmovb rsi, r13
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r13, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_77
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r13
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_54:
mov rcx, qword ptr [rdi - 752]
mov dword ptr [rcx + 8*r12], r14d
mov dword ptr [rcx + 8*r12 + 4], eax
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
mov r13, qword ptr [rbp + 1608]
je .LBB890_80
cmp r14, 4
jb .LBB890_80
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_57
.LBB890_80:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_84
xor r15d, r15d
.LBB890_82:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_82
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_57:
mov rcx, qword ptr [rdi - 736]
mov dword ptr [rcx + 4*r12], eax
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_85
cmp r14, 4
jb .LBB890_85
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_60
.LBB890_85:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_89
xor r15d, r15d
.LBB890_87:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_87
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_60:
mov rcx, qword ptr [rdi - 720]
mov dword ptr [rcx + 4*r12], eax
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_90
cmp r14, 4
jb .LBB890_90
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_63
.LBB890_90:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_94
xor r15d, r15d
.LBB890_92:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_92
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_63:
mov rcx, qword ptr [rdi - 704]
mov dword ptr [rcx + 4*r12], eax
mov rax, qword ptr [r15 + 16]
test rax, rax
mov r14, qword ptr [rbp + 1616]
je .LBB890_64
mov rcx, qword ptr [r15 + 8]
movzx edx, byte ptr [rcx]
dec rax
mov qword ptr [r15 + 16], rax
inc rcx
mov qword ptr [r15 + 8], rcx
mov rax, qword ptr [rdi - 688]
mov byte ptr [rax + r12], dl
mov rax, qword ptr [r15 + 16]
test rax, rax
je .LBB890_96
mov rcx, qword ptr [r15 + 8]
movzx edx, byte ptr [rcx]
dec rax
mov qword ptr [r15 + 16], rax
inc rcx
mov qword ptr [r15 + 8], rcx
mov rax, qword ptr [rdi - 672]
mov byte ptr [rax + r12], dl
mov rax, qword ptr [r15 + 16]
test rax, rax
je .LBB890_98
mov rcx, qword ptr [r15 + 8]
movzx edx, byte ptr [rcx]
dec rax
mov qword ptr [r15 + 16], rax
inc rcx
mov qword ptr [r15 + 8], rcx
mov rax, qword ptr [rdi - 656]
mov byte ptr [rax + r12], dl
mov rax, qword ptr [r15 + 16]
test rax, rax
je .LBB890_100
mov rcx, qword ptr [r15 + 8]
dec rax
lea rdx, [rcx + 1]
movzx ecx, byte ptr [rcx]
mov qword ptr [r15 + 16], rax
mov qword ptr [r15 + 8], rdx
mov rax, qword ptr [rdi - 640]
mov byte ptr [rax + r12], cl
mov eax, dword ptr [rbp + 1808]
cmp al, 2
jb .LBB890_231
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_107
cmp r14, 4
jb .LBB890_107
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_105
.LBB890_107:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_111
xor r15d, r15d
.LBB890_109:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_109
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_105:
mov rcx, qword ptr [rdi - 616]
test rcx, rcx
je .LBB890_106
mov dword ptr [rcx + 4*r12], eax
mov r8, qword ptr [r15 + 16]
test r8, r8
je .LBB890_113
mov r9, qword ptr [r15 + 8]
movzx eax, byte ptr [r9]
lea rcx, [r9 + 1]
mov rdx, r8
dec rdx
mov qword ptr [r15 + 16], rdx
mov qword ptr [r15 + 8], rcx
je .LBB890_115
movzx ecx, byte ptr [r9 + 1]
lea rdx, [r9 + 2]
mov r10, r8
add r10, -2
mov qword ptr [r15 + 16], r10
mov qword ptr [r15 + 8], rdx
je .LBB890_117
movzx edx, byte ptr [r9 + 2]
lea r10, [r9 + 3]
mov r11, r8
add r11, -3
mov qword ptr [r15 + 16], r11
mov qword ptr [r15 + 8], r10
je .LBB890_119
movzx r10d, byte ptr [r9 + 3]
lea r11, [r9 + 4]
mov rsi, r8
add rsi, -4
mov qword ptr [r15 + 16], rsi
mov qword ptr [r15 + 8], r11
je .LBB890_121
movzx r11d, byte ptr [r9 + 4]
add r8, -5
mov qword ptr [r15 + 16], r8
add r9, 5
mov qword ptr [r15 + 8], r9
mov r8, qword ptr [rdi - 600]
test r8, r8
je .LBB890_123
shl rcx, 8
or rcx, rax
shl rdx, 16
or rdx, rcx
shl r10, 24
or r10, rdx
shl r11, 32
or r11, r10
mov qword ptr [r8 + 8*r12], r11
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_129
cmp r14, 4
jb .LBB890_129
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_127
.LBB890_129:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_133
xor r15d, r15d
.LBB890_131:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_131
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_127:
mov rcx, qword ptr [rdi - 584]
test rcx, rcx
je .LBB890_128
mov dword ptr [rcx + 4*r12], eax
mov rcx, qword ptr [r15 + 16]
test rcx, rcx
je .LBB890_135
mov rdx, qword ptr [r15 + 8]
movzx eax, byte ptr [rdx]
dec rcx
mov qword ptr [r15 + 16], rcx
inc rdx
mov qword ptr [r15 + 8], rdx
mov rcx, qword ptr [rdi - 568]
test rcx, rcx
je .LBB890_137
test al, al
sete byte ptr [rcx + r12]
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_143
cmp r14, 2
jb .LBB890_143
movzx eax, word ptr [rsi]
rol ax, 8
add r14, -2
mov qword ptr [r15 + 16], r14
add rsi, 2
mov qword ptr [r15 + 8], rsi
jmp .LBB890_141
.LBB890_143:
mov word ptr [rbp + 712], 0
cmp r14, 2
jb .LBB890_147
xor r15d, r15d
.LBB890_145:
mov rbx, rsi
mov esi, 2
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 2
jb .LBB890_145
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
movzx eax, word ptr [rbp + 712]
rol ax, 8
.LBB890_141:
mov rcx, qword ptr [rdi - 552]
test rcx, rcx
mov r14, qword ptr [rbp + 1616]
je .LBB890_142
mov word ptr [rcx + 2*r12], ax
mov rcx, qword ptr [r15 + 16]
test rcx, rcx
je .LBB890_149
mov rdx, qword ptr [r15 + 8]
movzx eax, byte ptr [rdx]
dec rcx
mov qword ptr [r15 + 16], rcx
inc rdx
mov qword ptr [r15 + 8], rdx
mov rcx, qword ptr [rdi - 536]
test rcx, rcx
je .LBB890_151
mov byte ptr [rcx + r12], al
mov rcx, qword ptr [r15 + 16]
test rcx, rcx
je .LBB890_153
mov rdx, qword ptr [r15 + 8]
movzx eax, byte ptr [rdx]
dec rcx
mov qword ptr [r15 + 16], rcx
inc rdx
mov qword ptr [r15 + 8], rdx
mov rcx, qword ptr [rdi - 520]
test rcx, rcx
je .LBB890_155
mov byte ptr [rcx + r12], al
cmp byte ptr [rbp + 1628], 0
jne .LBB890_231
mov rcx, qword ptr [r15 + 16]
test rcx, rcx
je .LBB890_158
mov rdx, qword ptr [r15 + 8]
movzx eax, byte ptr [rdx]
dec rcx
mov qword ptr [r15 + 16], rcx
inc rdx
mov qword ptr [r15 + 8], rdx
mov rcx, qword ptr [rdi - 504]
test rcx, rcx
je .LBB890_160
mov byte ptr [rcx + r12], al
cmp byte ptr [rbp + 1629], 0
jne .LBB890_231
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_170
cmp r14, 4
jb .LBB890_170
mov r13d, dword ptr [rsi]
bswap r13d
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
cmp r14, 4
jae .LBB890_166
jmp .LBB890_175
.LBB890_170:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_174
xor r15d, r15d
.LBB890_172:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_172
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov r13d, dword ptr [rbp + 712]
bswap r13d
cmp r14, 4
jb .LBB890_175
.LBB890_166:
test rsi, rsi
je .LBB890_175
mov ecx, dword ptr [rsi]
bswap ecx
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_168
.LBB890_175:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_179
xor r15d, r15d
.LBB890_177:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_177
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov ecx, dword ptr [rbp + 712]
bswap ecx
.LBB890_168:
mov rax, qword ptr [rdi - 488]
test rax, rax
je .LBB890_169
mov dword ptr [rax + 8*r12], r13d
mov dword ptr [rax + 8*r12 + 4], ecx
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
mov dword ptr [rbp + 1588], ecx
je .LBB890_188
cmp r14, 4
jb .LBB890_188
mov r13d, dword ptr [rsi]
bswap r13d
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
cmp r14, 4
jae .LBB890_184
jmp .LBB890_193
.LBB890_188:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_192
xor r15d, r15d
.LBB890_190:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_190
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov r13d, dword ptr [rbp + 712]
bswap r13d
cmp r14, 4
jb .LBB890_193
.LBB890_184:
test rsi, rsi
je .LBB890_193
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_186
.LBB890_193:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_197
xor r15d, r15d
.LBB890_195:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_195
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_186:
mov rcx, qword ptr [rdi - 472]
test rcx, rcx
je .LBB890_187
mov dword ptr [rcx + 8*r12], r13d
mov dword ptr [rcx + 8*r12 + 4], eax
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_203
cmp r14, 4
jb .LBB890_203
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
mov r13, qword ptr [rbp + 1608]
jmp .LBB890_201
.LBB890_203:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_207
xor r15d, r15d
mov r13, qword ptr [rbp + 1608]
.LBB890_205:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_205
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_201:
mov rcx, qword ptr [rdi - 456]
test rcx, rcx
mov r14, qword ptr [rbp + 1616]
je .LBB890_202
mov dword ptr [rcx + 8*r12], eax
mov eax, dword ptr [rbp + 1588]
mov dword ptr [rcx + 8*r12 + 4], eax
cmp byte ptr [rbp + 1630], 0
jne .LBB890_231
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_211
cmp r14, 3
jbe .LBB890_211
mov eax, dword ptr [rsi]
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
mov rcx, qword ptr [rdi - 440]
test rcx, rcx
jne .LBB890_216
jmp .LBB890_224
.LBB890_211:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_222
xor r15d, r15d
.LBB890_213:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_213
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov rcx, qword ptr [rdi - 440]
test rcx, rcx
je .LBB890_224
mov eax, dword ptr [rbp + 712]
.LBB890_216:
bswap eax
mov dword ptr [rcx + 4*r12], eax
cmp byte ptr [rbp + 1631], 0
mov r14, qword ptr [rbp + 1616]
jne .LBB890_231
mov rsi, qword ptr [r15 + 8]
mov r14, qword ptr [r15 + 16]
test rsi, rsi
je .LBB890_225
cmp r14, 4
jb .LBB890_225
mov eax, dword ptr [rsi]
bswap eax
add r14, -4
mov qword ptr [r15 + 16], r14
add rsi, 4
mov qword ptr [r15 + 8], rsi
jmp .LBB890_220
.LBB890_225:
mov dword ptr [rbp + 712], 0
cmp r14, 4
jb .LBB890_229
xor r15d, r15d
.LBB890_227:
mov rbx, rsi
mov esi, 4
sub rsi, r15
cmp r14, rsi
cmovb rsi, r14
lea rcx, [r15 + rbp]
add rcx, 712
mov rdx, rbx
mov r8, rsi
call memcpy
add r15, rsi
sub r14, rsi
add rsi, rbx
cmp r15, 4
jb .LBB890_227
mov r15, qword ptr [rbp + 1632]
mov qword ptr [r15 + 16], r14
mov qword ptr [r15 + 8], rsi
mov eax, dword ptr [rbp + 712]
bswap eax
.LBB890_220:
mov rcx, qword ptr [rdi - 424]
test rcx, rcx
mov r14, qword ptr [rbp + 1616]
je .LBB890_221
mov dword ptr [rcx + 4*r12], eax
jmp .LBB890_231
.LBB890_17:
mov r13, qword ptr [r15 + 16]
mov rdi, qword ptr [rbp + 1536]
.LBB890_18:
movups xmm0, xmmword ptr [rbp + 1544]
movups xmm1, xmmword ptr [rbp + 1560]
movups xmmword ptr [rdi + 16], xmm1
movups xmmword ptr [rdi], xmm0
lea rcx, [r15 + 24]
mov rax, qword ptr [r15]
mov rdx, qword ptr [r15 + 8]
mov r8, r13
call qword ptr [rax + 16]
mov rax, rdi
movaps xmm6, xmmword ptr [rbp + 1648]
movaps xmm7, xmmword ptr [rbp + 1664]
add rsp, 1816
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
.LBB890_44:
lea r8, [rip + __unnamed_468]
mov rcx, r12
call core::panicking::panic_bounds_check
jmp .LBB890_15
.LBB890_43:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_469]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_14:
mov qword ptr [rbp + 1592], rcx
lea rax, [rbp + 1600]
mov qword ptr [rbp - 88], rax
lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
mov qword ptr [rbp - 80], rax
lea rcx, [rbp + 1592]
mov qword ptr [rbp - 72], rcx
mov qword ptr [rbp - 64], rax
lea rax, [rip + __unnamed_268]
mov qword ptr [rbp + 712], rax
mov qword ptr [rbp + 720], 2
mov qword ptr [rbp + 744], 0
lea rax, [rbp - 88]
mov qword ptr [rbp + 728], rax
mov qword ptr [rbp + 736], 2
lea rdx, [rip + __unnamed_269]
lea rcx, [rbp + 712]
call core::panicking::panic_fmt
jmp .LBB890_15
.LBB890_25:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_32:
mov qword ptr [rbp + 1592], 0
lea rax, [rbp + 1600]
mov qword ptr [rbp - 88], rax
lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
mov qword ptr [rbp - 80], rax
lea rcx, [rbp + 1592]
mov qword ptr [rbp - 72], rcx
mov qword ptr [rbp - 64], rax
lea rax, [rip + __unnamed_268]
mov qword ptr [rbp + 712], rax
mov qword ptr [rbp + 720], 2
mov qword ptr [rbp + 744], 0
lea rax, [rbp - 88]
mov qword ptr [rbp + 728], rax
mov qword ptr [rbp + 736], 2
lea rdx, [rip + __unnamed_269]
lea rcx, [rbp + 712]
call core::panicking::panic_fmt
jmp .LBB890_15
.LBB890_30:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_64:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_42:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_98:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_96:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_100:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_94:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_153:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_123:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_470]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_89:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_121:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_151:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_471]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_84:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_149:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_119:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_79:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_142:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_472]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_117:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_74:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_115:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_137:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_473]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_69:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_113:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_135:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_106:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_474]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_128:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_475]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_155:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_476]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_147:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_133:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_160:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_477]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_158:
lea rcx, [rip + __unnamed_246]
lea r8, [rip + __unnamed_247]
mov edx, 39
call core::panicking::panic
jmp .LBB890_15
.LBB890_111:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_187:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_478]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_202:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_479]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_169:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_480]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_207:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_224:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_481]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_174:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_179:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_192:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_197:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_222:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
jmp .LBB890_15
.LBB890_221:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_482]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_229:
lea rcx, [rip + __unnamed_244]
lea r8, [rip + __unnamed_245]
mov edx, 47
call core::panicking::panic
.LBB890_15:
ud2
mov qword ptr [rsp + 16], rdx
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 72
lea rbp, [rdx + 128]
movdqa xmmword ptr [rsp + 32], xmm7
movdqa xmmword ptr [rsp + 48], xmm6
lea rcx, [rbp + 1544]
call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slpprocess::events::post_frame::PostFrames,core::option::Option<slpprocess::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
mov rcx, qword ptr [rbp + 1632]
call core::ptr::drop_in_place<bytes::bytes::Bytes>
movaps xmm6, xmmword ptr [rsp + 48]
movaps xmm7, xmmword ptr [rsp + 32]
add rsp, 72
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret After (986 lines)slpprocess::events::post_frame::unpack_frames:
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 1784
lea rbp, [rsp + 128]
movdqa xmmword ptr [rbp + 1632], xmm7
movdqa xmmword ptr [rbp + 1616], xmm6
mov qword ptr [rbp + 1608], -2
mov r14, r9
mov r15, r8
mov qword ptr [rbp + 1592], rdx
mov rbx, rcx
mov r8d, dword ptr [rbp + 1776]
mov rdx, qword ptr [rbp + 1760]
lea rax, [rip + __unnamed_467]
mov qword ptr [rbp + 1544], rax
pxor xmm0, xmm0
movdqu xmmword ptr [rbp + 1552], xmm0
mov qword ptr [rbp + 1568], 0
lea rcx, [rbp + 704]
call slpprocess::events::post_frame::PostFrames::new
movzx esi, word ptr [rbp + 1768]
lea rdi, [rbp - 96]
lea rdx, [rbp + 704]
mov r8d, 400
mov rcx, rdi
call memcpy
mov qword ptr [rbp + 304], 0
lea rcx, [rbp + 704]
lea rdx, [rbp + 1544]
mov r8d, esi
mov r9, rdi
call hashbrown::map::HashMap<K,V,S,A>::insert
cmp qword ptr [rbp + 704], 0
je .LBB890_5
lea rcx, [rbp + 704]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
cmp qword ptr [rbp + 1104], 0
je .LBB890_5
lea rcx, [rbp + 1104]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_5:
lea rcx, [rbp + 704]
mov rdx, qword ptr [rbp + 1760]
mov r8d, dword ptr [rbp + 1776]
call slpprocess::events::post_frame::PostFrames::new
shr esi, 8
lea rdx, [rbp + 704]
mov r8d, 400
mov rcx, rdi
call memcpy
mov qword ptr [rbp + 304], 0
lea rcx, [rbp + 704]
lea rdx, [rbp + 1544]
mov r8d, esi
mov r9, rdi
call hashbrown::map::HashMap<K,V,S,A>::insert
and r14, -2
cmp qword ptr [rbp + 704], 0
je .LBB890_10
lea rcx, [rbp + 704]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
cmp qword ptr [rbp + 1104], 0
je .LBB890_10
lea rcx, [rbp + 1104]
call core::ptr::drop_in_place<slpprocess::events::post_frame::PostFrames>
.LBB890_10:
mov r13, qword ptr [rbp + 1592]
mov r8, qword ptr [r13 + 16]
test r14, r14
je .LBB890_18
mov qword ptr [rbp + 1536], rbx
mov edx, dword ptr [rbp + 1776]
mov eax, edx
shr eax, 8
mov rcx, qword ptr [rbp + 1760]
inc rcx
mov qword ptr [rbp + 1512], rcx
mov ecx, edx
xor cl, 2
or cl, al
sete byte ptr [rbp + 1604]
cmp dl, 3
setb cl
sete dl
cmp al, 5
setb r9b
and r9b, dl
cmp al, 8
setb r10b
and r10b, dl
mov byte ptr [rbp + 1606], r10b
cmp al, 11
setb al
and al, dl
mov byte ptr [rbp + 1607], al
or r9b, cl
mov byte ptr [rbp + 1605], r9b
pxor xmm6, xmm6
pcmpeqd xmm7, xmm7
jmp .LBB890_12
.LBB890_16:
mov r14, qword ptr [rbp + 1520]
test r14, r14
mov r15, qword ptr [rbp + 1528]
je .LBB890_17
.LBB890_12:
lea rax, [r15 + 16]
mov qword ptr [rbp + 1528], rax
add r14, -2
mov qword ptr [rbp + 1520], r14
mov qword ptr [rbp + 1504], r15
mov rax, r15
xor r14d, r14d
jmp .LBB890_13
.LBB890_133:
bswap edx
mov dword ptr [rax + 4*rcx], edx
.LBB890_134:
inc r14
mov rax, qword ptr [rbp + 1504]
lea rax, [rax + 8*r14]
cmp r14, 2
mov r8, r15
je .LBB890_16
.LBB890_13:
mov rcx, qword ptr [r13 + 16]
mov rbx, rcx
sub rbx, r8
add rbx, qword ptr [rax]
mov qword ptr [rbp + 1584], rbx
mov rsi, rcx
sub rsi, rbx
jb .LBB890_14
mov qword ptr [r13 + 16], rsi
mov rax, qword ptr [r13 + 8]
add rbx, rax
mov qword ptr [r13 + 8], rbx
cmp rsi, 4
jb .LBB890_22
mov r15, r8
test rax, rax
je .LBB890_23
mov r8d, dword ptr [rbx]
bswap r8d
add rsi, -4
mov qword ptr [r13 + 16], rsi
add rbx, 4
mov qword ptr [r13 + 8], rbx
lea eax, [r8 + 123]
movsxd rcx, eax
cmp rcx, qword ptr [rbp + 1760]
jne .LBB890_27
jmp .LBB890_134
.LBB890_23:
mov dword ptr [rbp - 96], 0
mov r12d, 4
xor ebx, ebx
lea r13, [rbp - 96]
.LBB890_24:
cmp rsi, r12
mov rdi, r12
cmovb rdi, rsi
mov rcx, r13
mov rdx, rbx
mov r8, rdi
call memcpy
add r13, rdi
sub rsi, rdi
add rbx, rdi
sub r12, rdi
jne .LBB890_24
mov r13, qword ptr [rbp + 1592]
mov qword ptr [r13 + 16], rsi
mov qword ptr [r13 + 8], rbx
mov r8d, dword ptr [rbp - 96]
bswap r8d
lea eax, [r8 + 123]
movsxd rcx, eax
cmp rcx, qword ptr [rbp + 1760]
je .LBB890_134
.LBB890_27:
cmp qword ptr [rbp + 1512], rcx
je .LBB890_134
test rsi, rsi
je .LBB890_29
movzx edx, byte ptr [rbx]
lea rax, [rbx + 1]
mov r9, rsi
mov qword ptr [rbp + 1584], 1
dec r9
mov qword ptr [r13 + 16], r9
mov qword ptr [r13 + 8], rax
je .LBB890_31
add rsi, -2
mov qword ptr [r13 + 16], rsi
add rbx, 2
mov qword ptr [r13 + 8], rbx
cmp qword ptr [rbp + 1568], 0
je .LBB890_42
movzx r9d, dl
mov rax, qword ptr [rbp + 1544]
mov r10, qword ptr [rbp + 1552]
lea r11, [rax - 808]
xor esi, esi
.LBB890_34:
and r9, r10
movdqu xmm0, xmmword ptr [rax + r9]
movdqa xmm1, xmm0
pcmpeqb xmm1, xmm6
pmovmskb edi, xmm1
.LBB890_35:
test di, di
je .LBB890_36
lea r12d, [rdi - 1]
and r12d, edi
rep bsf edi, edi
add rdi, r9
and rdi, r10
neg rdi
imul rbx, rdi, 808
mov edi, r12d
cmp byte ptr [r11 + rbx], dl
jne .LBB890_35
jmp .LBB890_39
.LBB890_36:
pcmpeqb xmm0, xmm7
pmovmskb edi, xmm0
test edi, edi
jne .LBB890_42
add r9, rsi
add r9, 16
add rsi, 16
jmp .LBB890_34
.LBB890_39:
mov rdx, qword ptr [rax + rbx - 792]
cmp rdx, rcx
jbe .LBB890_43
add rax, rbx
mov rdx, qword ptr [rax - 800]
mov dword ptr [rdx + 4*rcx], r8d
mov rdx, qword ptr [r13 + 16]
test rdx, rdx
je .LBB890_41
mov r8, qword ptr [r13 + 8]
movzx r9d, byte ptr [r8]
dec rdx
mov qword ptr [r13 + 16], rdx
inc r8
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 784]
mov byte ptr [rdx + rcx], r9b
mov rdx, qword ptr [r13 + 16]
cmp rdx, 1
jbe .LBB890_45
mov r8, qword ptr [r13 + 8]
movzx r9d, word ptr [r8]
rol r9w, 8
add rdx, -2
mov qword ptr [r13 + 16], rdx
add r8, 2
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 768]
mov word ptr [rdx + 2*rcx], r9w
mov rdx, qword ptr [r13 + 16]
cmp rdx, 3
jbe .LBB890_47
mov r9, qword ptr [r13 + 8]
mov r8d, dword ptr [r9]
lea r10, [rdx - 4]
mov qword ptr [r13 + 16], r10
lea r11, [r9 + 4]
mov qword ptr [r13 + 8], r11
cmp r10, 3
jbe .LBB890_49
bswap r8d
mov r10d, dword ptr [r9 + 4]
bswap r10d
add rdx, -8
mov qword ptr [r13 + 16], rdx
add r9, 8
mov qword ptr [r13 + 8], r9
mov rdx, qword ptr [rax - 752]
mov dword ptr [rdx + 8*rcx], r8d
mov dword ptr [rdx + 8*rcx + 4], r10d
mov rdx, qword ptr [r13 + 16]
cmp rdx, 3
jbe .LBB890_51
mov r8, qword ptr [r13 + 8]
mov r9d, dword ptr [r8]
bswap r9d
add rdx, -4
mov qword ptr [r13 + 16], rdx
add r8, 4
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 736]
mov dword ptr [rdx + 4*rcx], r9d
mov rdx, qword ptr [r13 + 16]
cmp rdx, 3
jbe .LBB890_53
mov r8, qword ptr [r13 + 8]
mov r9d, dword ptr [r8]
bswap r9d
add rdx, -4
mov qword ptr [r13 + 16], rdx
add r8, 4
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 720]
mov dword ptr [rdx + 4*rcx], r9d
mov rdx, qword ptr [r13 + 16]
cmp rdx, 3
jbe .LBB890_55
mov r8, qword ptr [r13 + 8]
mov r9d, dword ptr [r8]
bswap r9d
add rdx, -4
mov qword ptr [r13 + 16], rdx
add r8, 4
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 704]
mov dword ptr [rdx + 4*rcx], r9d
mov rdx, qword ptr [r13 + 16]
test rdx, rdx
je .LBB890_57
mov r8, qword ptr [r13 + 8]
movzx r9d, byte ptr [r8]
dec rdx
mov qword ptr [r13 + 16], rdx
inc r8
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 688]
mov byte ptr [rdx + rcx], r9b
mov rdx, qword ptr [r13 + 16]
test rdx, rdx
je .LBB890_59
mov r8, qword ptr [r13 + 8]
movzx r9d, byte ptr [r8]
dec rdx
mov qword ptr [r13 + 16], rdx
inc r8
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 672]
mov byte ptr [rdx + rcx], r9b
mov rdx, qword ptr [r13 + 16]
test rdx, rdx
je .LBB890_61
mov r8, qword ptr [r13 + 8]
movzx r9d, byte ptr [r8]
dec rdx
mov qword ptr [r13 + 16], rdx
inc r8
mov qword ptr [r13 + 8], r8
mov rdx, qword ptr [rax - 656]
mov byte ptr [rdx + rcx], r9b
mov rdx, qword ptr [r13 + 16]
test rdx, rdx
je .LBB890_63
mov r8, qword ptr [r13 + 8]
dec rdx
lea r9, [r8 + 1]
movzx r8d, byte ptr [r8]
mov qword ptr [r13 + 16], rdx
mov qword ptr [r13 + 8], r9
mov rdx, qword ptr [rax - 640]
mov byte ptr [rdx + rcx], r8b
mov edx, dword ptr [rbp + 1776]
cmp dl, 2
jb .LBB890_134
mov r8, qword ptr [r13 + 16]
cmp r8, 3
jbe .LBB890_66
mov r9, qword ptr [r13 + 8]
mov edx, dword ptr [r9]
add r8, -4
mov qword ptr [r13 + 16], r8
add r9, 4
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 616]
test r8, r8
je .LBB890_68
bswap edx
mov dword ptr [r8 + 4*rcx], edx
mov r10, qword ptr [r13 + 16]
test r10, r10
je .LBB890_70
mov r11, qword ptr [r13 + 8]
movzx edx, byte ptr [r11]
lea r8, [r11 + 1]
mov r9, r10
dec r9
mov qword ptr [r13 + 16], r9
mov qword ptr [r13 + 8], r8
je .LBB890_72
movzx r8d, byte ptr [r11 + 1]
lea r9, [r11 + 2]
mov rsi, r10
add rsi, -2
mov qword ptr [r13 + 16], rsi
mov qword ptr [r13 + 8], r9
je .LBB890_74
movzx r9d, byte ptr [r11 + 2]
lea rsi, [r11 + 3]
mov rdi, r10
add rdi, -3
mov qword ptr [r13 + 16], rdi
mov qword ptr [r13 + 8], rsi
je .LBB890_76
movzx esi, byte ptr [r11 + 3]
lea rdi, [r11 + 4]
mov rbx, r10
add rbx, -4
mov qword ptr [r13 + 16], rbx
mov qword ptr [r13 + 8], rdi
je .LBB890_78
movzx edi, byte ptr [r11 + 4]
add r10, -5
mov qword ptr [r13 + 16], r10
add r11, 5
mov qword ptr [r13 + 8], r11
mov r10, qword ptr [rax - 600]
test r10, r10
je .LBB890_80
shl r8, 8
or r8, rdx
shl r9, 16
or r9, r8
shl rsi, 24
or rsi, r9
shl rdi, 32
or rdi, rsi
mov qword ptr [r10 + 8*rcx], rdi
mov r8, qword ptr [r13 + 16]
cmp r8, 3
jbe .LBB890_82
mov r9, qword ptr [r13 + 8]
mov edx, dword ptr [r9]
add r8, -4
mov qword ptr [r13 + 16], r8
add r9, 4
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 584]
test r8, r8
je .LBB890_84
bswap edx
mov dword ptr [r8 + 4*rcx], edx
mov r8, qword ptr [r13 + 16]
test r8, r8
je .LBB890_86
mov r9, qword ptr [r13 + 8]
movzx edx, byte ptr [r9]
dec r8
mov qword ptr [r13 + 16], r8
inc r9
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 568]
test r8, r8
je .LBB890_88
test dl, dl
sete byte ptr [r8 + rcx]
mov r8, qword ptr [r13 + 16]
cmp r8, 1
jbe .LBB890_90
mov r9, qword ptr [r13 + 8]
movzx edx, word ptr [r9]
add r8, -2
mov qword ptr [r13 + 16], r8
add r9, 2
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 552]
test r8, r8
je .LBB890_92
rol dx, 8
mov word ptr [r8 + 2*rcx], dx
mov r8, qword ptr [r13 + 16]
test r8, r8
je .LBB890_94
mov r9, qword ptr [r13 + 8]
movzx edx, byte ptr [r9]
dec r8
mov qword ptr [r13 + 16], r8
inc r9
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 536]
test r8, r8
je .LBB890_96
mov byte ptr [r8 + rcx], dl
mov r8, qword ptr [r13 + 16]
test r8, r8
je .LBB890_98
mov r9, qword ptr [r13 + 8]
movzx edx, byte ptr [r9]
dec r8
mov qword ptr [r13 + 16], r8
inc r9
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 520]
test r8, r8
je .LBB890_100
mov byte ptr [r8 + rcx], dl
cmp byte ptr [rbp + 1604], 0
jne .LBB890_134
mov r8, qword ptr [r13 + 16]
test r8, r8
je .LBB890_103
mov r9, qword ptr [r13 + 8]
movzx edx, byte ptr [r9]
dec r8
mov qword ptr [r13 + 16], r8
inc r9
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 504]
test r8, r8
je .LBB890_105
mov byte ptr [r8 + rcx], dl
cmp byte ptr [rbp + 1605], 0
jne .LBB890_134
mov r9, qword ptr [r13 + 16]
cmp r9, 3
jbe .LBB890_108
mov r10, qword ptr [r13 + 8]
mov r8d, dword ptr [r10]
lea rdx, [r9 - 4]
mov qword ptr [r13 + 16], rdx
lea r11, [r10 + 4]
mov qword ptr [r13 + 8], r11
cmp rdx, 3
jbe .LBB890_110
mov edx, dword ptr [r10 + 4]
add r9, -8
mov qword ptr [r13 + 16], r9
add r10, 8
mov qword ptr [r13 + 8], r10
mov r9, qword ptr [rax - 488]
test r9, r9
je .LBB890_112
bswap r8d
bswap edx
mov dword ptr [r9 + 8*rcx], r8d
mov dword ptr [r9 + 8*rcx + 4], edx
mov r9, qword ptr [r13 + 16]
cmp r9, 3
jbe .LBB890_114
mov r11, qword ptr [r13 + 8]
mov r8d, dword ptr [r11]
lea r10, [r9 - 4]
mov qword ptr [r13 + 16], r10
lea rsi, [r11 + 4]
mov qword ptr [r13 + 8], rsi
cmp r10, 3
jbe .LBB890_116
mov r10d, dword ptr [r11 + 4]
add r9, -8
mov qword ptr [r13 + 16], r9
add r11, 8
mov qword ptr [r13 + 8], r11
mov r9, qword ptr [rax - 472]
test r9, r9
je .LBB890_118
bswap r8d
bswap r10d
mov dword ptr [r9 + 8*rcx], r8d
mov dword ptr [r9 + 8*rcx + 4], r10d
mov r9, qword ptr [r13 + 16]
cmp r9, 3
jbe .LBB890_120
mov r10, qword ptr [r13 + 8]
mov r8d, dword ptr [r10]
add r9, -4
mov qword ptr [r13 + 16], r9
add r10, 4
mov qword ptr [r13 + 8], r10
mov r9, qword ptr [rax - 456]
test r9, r9
je .LBB890_122
bswap r8d
mov dword ptr [r9 + 8*rcx], r8d
mov dword ptr [r9 + 8*rcx + 4], edx
cmp byte ptr [rbp + 1606], 0
jne .LBB890_134
mov r8, qword ptr [r13 + 16]
cmp r8, 3
jbe .LBB890_125
mov r9, qword ptr [r13 + 8]
mov edx, dword ptr [r9]
add r8, -4
mov qword ptr [r13 + 16], r8
add r9, 4
mov qword ptr [r13 + 8], r9
mov r8, qword ptr [rax - 440]
test r8, r8
je .LBB890_127
bswap edx
mov dword ptr [r8 + 4*rcx], edx
cmp byte ptr [rbp + 1607], 0
jne .LBB890_134
mov r8, qword ptr [r13 + 16]
cmp r8, 3
jbe .LBB890_130
mov r9, qword ptr [r13 + 8]
mov edx, dword ptr [r9]
add r8, -4
mov qword ptr [r13 + 16], r8
add r9, 4
mov qword ptr [r13 + 8], r9
mov rax, qword ptr [rax - 424]
test rax, rax
jne .LBB890_133
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_468]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_17:
mov r8, qword ptr [r13 + 16]
mov rbx, qword ptr [rbp + 1536]
.LBB890_18:
movups xmm0, xmmword ptr [rbp + 1544]
movups xmm1, xmmword ptr [rbp + 1560]
movups xmmword ptr [rbx + 16], xmm1
movups xmmword ptr [rbx], xmm0
lea rcx, [r13 + 24]
mov rax, qword ptr [r13]
mov rdx, qword ptr [r13 + 8]
call qword ptr [rax + 16]
mov rax, rbx
movaps xmm6, xmmword ptr [rbp + 1616]
movaps xmm7, xmmword ptr [rbp + 1632]
add rsp, 1784
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret
.LBB890_43:
lea r8, [rip + __unnamed_469]
call core::panicking::panic_bounds_check
jmp .LBB890_15
.LBB890_42:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_470]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_14:
mov qword ptr [rbp + 1576], rcx
lea rax, [rbp + 1584]
mov qword ptr [rbp + 704], rax
lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
mov qword ptr [rbp + 712], rax
lea rcx, [rbp + 1576]
mov qword ptr [rbp + 720], rcx
mov qword ptr [rbp + 728], rax
lea rax, [rip + __unnamed_266]
mov qword ptr [rbp - 96], rax
mov qword ptr [rbp - 88], 2
mov qword ptr [rbp - 64], 0
lea rax, [rbp + 704]
mov qword ptr [rbp - 80], rax
mov qword ptr [rbp - 72], 2
lea rdx, [rip + __unnamed_267]
lea rcx, [rbp - 96]
call core::panicking::panic_fmt
jmp .LBB890_15
.LBB890_22:
mov ecx, 4
mov rdx, rsi
call bytes::panic_advance
jmp .LBB890_15
.LBB890_31:
mov qword ptr [rbp + 1576], 0
lea rax, [rbp + 1584]
mov qword ptr [rbp + 704], rax
lea rax, [rip + core::fmt::num::<impl core::fmt::Debug for usize>::fmt]
mov qword ptr [rbp + 712], rax
lea rcx, [rbp + 1576]
mov qword ptr [rbp + 720], rcx
mov qword ptr [rbp + 728], rax
lea rax, [rip + __unnamed_266]
mov qword ptr [rbp - 96], rax
mov qword ptr [rbp - 88], 2
mov qword ptr [rbp - 64], 0
lea rax, [rbp + 704]
mov qword ptr [rbp - 80], rax
mov qword ptr [rbp - 72], 2
lea rdx, [rip + __unnamed_267]
lea rcx, [rbp - 96]
call core::panicking::panic_fmt
jmp .LBB890_15
.LBB890_29:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_61:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_49:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_53:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_45:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_354]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_57:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_55:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_47:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_59:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_63:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_51:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_41:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_80:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_471]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_96:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_472]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_78:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_94:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_76:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_92:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_473]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_90:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_354]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_74:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_72:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_88:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_474]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_86:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_70:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_68:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_475]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_84:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_476]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_100:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_477]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_82:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_66:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_98:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_105:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_478]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_103:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_265]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_122:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_479]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_114:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_116:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_108:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_118:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_480]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_110:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_120:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_112:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_481]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_125:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
jmp .LBB890_15
.LBB890_127:
lea rcx, [rip + __unnamed_28]
lea r8, [rip + __unnamed_482]
mov edx, 43
call core::panicking::panic
jmp .LBB890_15
.LBB890_130:
lea rcx, [rip + __unnamed_264]
lea r8, [rip + __unnamed_268]
mov edx, 34
call core::panicking::panic
.LBB890_15:
ud2
mov qword ptr [rsp + 16], rdx
push rbp
push r15
push r14
push r13
push r12
push rsi
push rdi
push rbx
sub rsp, 72
lea rbp, [rdx + 128]
movdqa xmmword ptr [rsp + 32], xmm7
movdqa xmmword ptr [rsp + 48], xmm6
lea rcx, [rbp + 1544]
call core::ptr::drop_in_place<std::collections::hash::map::HashMap<u8,(slpprocess::events::post_frame::PostFrames,core::option::Option<slpprocess::events::post_frame::PostFrames>),core::hash::BuildHasherDefault<nohash_hasher::NoHashHasher<u8>>>>
mov rcx, qword ptr [rbp + 1592]
call core::ptr::drop_in_place<bytes::bytes::Bytes>
movaps xmm6, xmmword ptr [rsp + 48]
movaps xmm7, xmmword ptr [rsp + 32]
add rsp, 72
pop rbx
pop rdi
pop rsi
pop r12
pop r13
pop r14
pop r15
pop rbp
ret |
Without this change, there's quite a bit of dead code generated when using these functions with a Bytes object. This is because:
These functions are nearly always inlined in their entirety (including the call to
self.copy_to_slice
)The entire conditional:
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 onself.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 aNone
being returned fromslice.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.