【发布时间】:2019-07-24 14:56:21
【问题描述】:
像 Kaby Lake 这样的现代 CPU 如何处理小分支? (在下面的代码中,它是到标签 LBB1_67 的跳转)。据我所知,分支不会有害,因为跳转不如解码窗口大小的 16 字节块大小。
或者是否有可能由于某些宏操作融合,分支将被完全省略?
sbb rdx, qword ptr [rbx - 8]
setb r8b
setl r9b
mov rdi, qword ptr [rbx]
mov rsi, qword ptr [rbx + 8]
vmovdqu xmm0, xmmword ptr [rbx + 16]
cmp cl, 18
je .LBB1_67
mov r9d, r8d
.LBB1_67: # in Loop: Header=BB1_63 Depth=1
vpcmpeqb xmm0, xmm0, xmmword ptr [rbx - 16]
vpmovmskb ecx, xmm0
cmp ecx, 65535
sete cl
cmp rdi, qword ptr [rbx - 32]
sbb rsi, qword ptr [rbx - 24]
setb dl
and dl, cl
or dl, r9b
【问题讨论】:
标签: performance x86-64 cpu-architecture avx branch-prediction