微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

x86-64是否在端口1上执行地址计算mov的计算,即mov ir,r,i,r?还是p0156?

如何解决x86-64是否在端口1上执行地址计算mov的计算,即mov ir,r,i,r?还是p0156?

我在问是否mov条指令需要计算该地址,即(使用at&t语法

mov i(r,r,i),regmov reg,i(r,reg,i)

必须在端口1上执行,因为它们实际上是带有3个操作数+ MOV的LEA,或者它们可以在端口0156上自由执行。

如果它们确实在端口1上执行LEA部分,则地址计算完成后,端口1将被解除阻塞,或者需要首先完成整个存储器负载

解决方法

所有CPU都会在加载或存储地址端口(而不是ALU端口)的AGU上生成用于加载/存储uops的地址生成。只有LEA才将ALU执行端口用于该移位加法运算。

如果端口1需要复杂的寻址模式,则https://uops.info/和/或https://agner.org/optimize/在其指令表中会这样说。但是它们却没有:加载仅需要p23,并且仅将p237存储为存储地址+ p4存储数据。

(实际上,对于索引存储,只有p23;端口7上的简单存储地址AGU只能处理reg + constant,这意味着如果您在代码中使用索引寻址模式,则地址生成可能会成为瓶颈,否则可能会承受2次加载+每个时钟1家商店。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。