相关疑难解决方法(0)

长度更改前缀 (LCP) 是否会导致简单 x86_64 指令停顿?

考虑一个简单的指令,例如

mov RCX, RDI          # 48 89 f9
Run Code Online (Sandbox Code Playgroud)

48 是 x86_64 的 REX 前缀。它不是LCP。但请考虑添加 LCP(用于对齐目的):

.byte 0x67
mov RCX, RDI          # 67 48 89 f9
Run Code Online (Sandbox Code Playgroud)

67 是地址大小前缀,在本例中用于没有地址的指令。该指令也没有立即数,并且不使用 F7 操作码(假 LCP 停止;F7 将是 TEST、NOT、NEG、MUL、IMUL、DIV + IDIV)。假设它也不跨越 16 字节边界。这些是 Intel优化参考手册中提到的 LCP 停顿情况。

该指令是否会导致 LCP 停顿(在 Skylake、Haswell 等上)?两个 LCP 怎么样?

我日常驾驶的是 MacBook。所以我无法访问 VTune,也无法查看 ILD_STALL 事件。还有其他方法可以知道吗?

performance assembly x86-64 cpu-architecture micro-optimization

4
推荐指数
1
解决办法
669
查看次数