Closed
Description
pub fn memzero(data: &mut [u8]) {
for i in 0..data.len() {
data[i] = 0;
}
}
example::memzero:
push rbp
mov rbp, rsp
test rsi, rsi
je .LBB0_13
cmp rsi, 31
jbe .LBB0_2
mov rax, rsi
and rax, -32
je .LBB0_2
lea r8, [rax - 32]
mov ecx, r8d
shr ecx, 5
inc ecx
and rcx, 7
je .LBB0_5
neg rcx
xor edx, edx
xorps xmm0, xmm0
.LBB0_7:
movups xmmword ptr [rdi + rdx], xmm0
movups xmmword ptr [rdi + rdx + 16], xmm0
add rdx, 32
inc rcx
jne .LBB0_7
jmp .LBB0_8
.LBB0_2:
xor eax, eax
.LBB0_12:
mov byte ptr [rdi + rax], 0
inc rax
cmp rax, rsi
jb .LBB0_12
.LBB0_13:
pop rbp
ret
.LBB0_5:
xor edx, edx
.LBB0_8:
cmp r8, 224
jb .LBB0_11
mov rcx, rax
sub rcx, rdx
lea rdx, [rdi + rdx + 240]
xorps xmm0, xmm0
.LBB0_10:
movups xmmword ptr [rdx - 240], xmm0
movups xmmword ptr [rdx - 224], xmm0
movups xmmword ptr [rdx - 208], xmm0
movups xmmword ptr [rdx - 192], xmm0
movups xmmword ptr [rdx - 176], xmm0
movups xmmword ptr [rdx - 160], xmm0
movups xmmword ptr [rdx - 144], xmm0
movups xmmword ptr [rdx - 128], xmm0
movups xmmword ptr [rdx - 112], xmm0
movups xmmword ptr [rdx - 96], xmm0
movups xmmword ptr [rdx - 80], xmm0
movups xmmword ptr [rdx - 64], xmm0
movups xmmword ptr [rdx - 48], xmm0
movups xmmword ptr [rdx - 32], xmm0
movups xmmword ptr [rdx - 16], xmm0
movups xmmword ptr [rdx], xmm0
add rdx, 256
add rcx, -256
jne .LBB0_10
.LBB0_11:
cmp rax, rsi
jne .LBB0_12
jmp .LBB0_13
This is normal before rustc 1.20, which is a performance regression.
Metadata
Metadata
Assignees
Labels
Category: An issue proposing an enhancement or a PR with one.Issue: Problems and improvements with respect to performance of generated code.High priorityRelevant to the compiler team, which will review and decide on the PR/issue.Performance or correctness regression from one stable version to another.