将指令序列转换为图表

时间:2015-12-02 01:14:27

标签: loops assembly optimization diagram

大家好,我做了一个指令序列图以及它如何被解码成操作。我还展示了它们之间的数据依赖关系如何创建关键的操作路径。我唯一的问题就是如果我正确地做到这一点,我也很困惑如何找到%rbx。请问我对你的图表有任何问题,现在它是草稿。谢谢你的时间。

.L15: # loop:

vmovsd 0(%rbp,%rcx,8), %xmm1 
vmulsd (%rax,%rcx,8), %xmm1, %xmm1 
vaddsd %xmm1, %xmm0, %xmm0 
addq $1, %rcx 
cmpq %rbx, %rcx 
jl .L15 # If <, goto loop

enter image description here

1 个答案:

答案 0 :(得分:1)

BTW,IACA可以为您生成这样的图表。它是来自英特尔的闭源免费软件,适用于Linux。

您应该将整数add与FP addsdmulsd区分开来。

Jester是对的,xmm1应来自vmovsd负载。

vaddsd写xmm0。您正在使用AT&amp; T语法,因此目标是最后一个操作数。您的图表显示它修改xmm1,但xmm0实际上是累加器。

add修改rcx,但您的图表并未反映出来。涉及rcx的依赖链是形成循环的因素,因此向上返回的箭头在那里是有意义的。

xmm0类似,箭头应形成一个循环(闭环)。

re:你的评论:代码有两个带内存源操作数的指令,因此有两个加载。