simple_histogram:
testl %edx, %edx
jle .LBB0_13
movl %edx, %eax
cmpl $8, %edx
jae .LBB0_3
xorl %edx, %edx
jmp .LBB0_12
.LBB0_3:
vpbroadcastq %rdi, %zmm0
cmpl $16, %edx
jae .LBB0_5
xorl %edx, %edx
.LBB0_9:
movq %rdx, %r8
movl %eax, %edx
andl $2147483640, %edx
.LBB0_10:
vpmovzxdq (%rsi,%r8,4), %zmm1
addq $8, %r8
vpsllq $2, %zmm1, %zmm1
vpaddq %zmm1, %zmm0, %zmm1
vmovq %xmm1, %r9
vextracti128 $1, %ymm1, %xmm2
vpextrq $1, %xmm1, %r10
addl %ecx, (%r9)
addl %ecx, (%r10)
vmovq %xmm2, %r11
vpextrq $1, %xmm2, %r10
vextracti32x4 $2, %zmm1, %xmm2
vextracti32x4 $3, %zmm1, %xmm1
addl %ecx, (%r11)
addl %ecx, (%r10)
vmovq %xmm2, %r11
vpextrq $1, %xmm2, %r10
addl %ecx, (%r11)
addl %ecx, (%r10)
vmovq %xmm1, %r11
vpextrq $1, %xmm1, %r10
addl %ecx, (%r11)
addl %ecx, (%r10)
cmpq %r8, %rdx
jne .LBB0_10
cmpl %eax, %edx
jne .LBB0_12
jmp .LBB0_13
.LBB0_5:
movl $6916, %r8d
movl %eax, %edx
andl $2147483632, %edx
xorl %r9d, %r9d
bextrl %r8d, %eax, %r8d
shlq $6, %r8
.LBB0_6:
vpmovzxdq (%rsi,%r9), %zmm1
vpmovzxdq 32(%rsi,%r9), %zmm2
addq $64, %r9
vpsllq $2, %zmm1, %zmm1
vpsllq $2, %zmm2, %zmm2
vpaddq %zmm1, %zmm0, %zmm1
vpaddq %zmm2, %zmm0, %zmm2
vmovq %xmm1, %r10
vextracti128 $1, %ymm1, %xmm3
addl %ecx, (%r10)
vpextrq $1, %xmm1, %r10
addl %ecx, (%r10)
vmovq %xmm3, %r10
addl %ecx, (%r10)
vpextrq $1, %xmm3, %r10
vextracti32x4 $2, %zmm1, %xmm3
vextracti32x4 $3, %zmm1, %xmm1
addl %ecx, (%r10)
vmovq %xmm3, %r10
addl %ecx, (%r10)
vpextrq $1, %xmm3, %r10
addl %ecx, (%r10)
vmovq %xmm1, %r10
addl %ecx, (%r10)
vpextrq $1, %xmm1, %r10
vextracti128 $1, %ymm2, %xmm1
addl %ecx, (%r10)
vmovq %xmm2, %r10
addl %ecx, (%r10)
vpextrq $1, %xmm2, %r10
addl %ecx, (%r10)
vmovq %xmm1, %r10
addl %ecx, (%r10)
vpextrq $1, %xmm1, %r10
vextracti32x4 $2, %zmm2, %xmm1
addl %ecx, (%r10)
vmovq %xmm1, %r10
addl %ecx, (%r10)
vpextrq $1, %xmm1, %r10
vextracti32x4 $3, %zmm2, %xmm1
addl %ecx, (%r10)
vmovq %xmm1, %r10
vpextrq $1, %xmm1, %r11
addl %ecx, (%r10)
addl %ecx, (%r11)
cmpq %r9, %r8
jne .LBB0_6
cmpl %eax, %edx
je .LBB0_13
testb $8, %al
jne .LBB0_9
.LBB0_12:
movl (%rsi,%rdx,4), %r8d
incq %rdx
addl %ecx, (%rdi,%r8,4)
cmpq %rdx, %rax
jne .LBB0_12
.LBB0_13:
vzeroupper
retq
see #158292 (comment)
-O3 -march=znver5 -mllvm -enable-histogram-loop-vectorization
https://godbolt.org/z/jesqYadr6