将指令序列转换为图表

Translating an instruction sequence into a diagram

大家好,我绘制了指令序列图以及如何将其解码为操作。我还展示了它们之间的数据依赖性如何创建关键操作路径。我唯一的问题是,如果我这样做正确,我也对如何找到 %rbx 感到困惑。如果您对我的图表有任何疑问,请问我,现在它只是一个草稿。谢谢你的时间。

.L15: # loop:

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

顺便说一句,IACA 可以为您生成这样的图表。它是来自 Intel 的闭源免费软件,适用于 Linux.


您应该区分整数 add 与 FP addsdmulsd

Jester 说得对,xmm1 应该来自 vmovsd 负载。

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


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

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


回复:您的评论:该代码有两条带有内存源操作数的指令,因此有两个负载。