将指令序列转换为图表
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 addsd
和 mulsd
。
Jester 说得对,xmm1 应该来自 vmovsd
负载。
vaddsd
写入 xmm0。您使用的是 AT&T 语法,因此目标是最后一个操作数。您的图表显示它修改了 xmm1,但 xmm0 实际上是累加器。
add
修改了 rcx
,但您的图表并未反映这一点。涉及 rcx 的依赖链构成了循环,因此向上返回的箭头在那里是有意义的。
与xmm0
一样,箭头应形成一个循环(闭环)。
回复:您的评论:该代码有两条带有内存源操作数的指令,因此有两个负载。
大家好,我绘制了指令序列图以及如何将其解码为操作。我还展示了它们之间的数据依赖性如何创建关键操作路径。我唯一的问题是,如果我这样做正确,我也对如何找到 %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 addsd
和 mulsd
。
Jester 说得对,xmm1 应该来自 vmovsd
负载。
vaddsd
写入 xmm0。您使用的是 AT&T 语法,因此目标是最后一个操作数。您的图表显示它修改了 xmm1,但 xmm0 实际上是累加器。
add
修改了 rcx
,但您的图表并未反映这一点。涉及 rcx 的依赖链构成了循环,因此向上返回的箭头在那里是有意义的。
与xmm0
一样,箭头应形成一个循环(闭环)。
回复:您的评论:该代码有两条带有内存源操作数的指令,因此有两个负载。