【发布时间】:2010-04-23 08:32:25
【问题描述】:
例如:
如何在SSA form中表示以下x86:
xor eax, eax
inc ax
通过引入一些伪函数,我想出了:
eax@1 = eax@0 ^ eax@0
ax@1 = LOWORD(eax@1)
al@1 = LOBYTE(ax@1)
ah@1 = HIBYTE(ax@1)
hax@1 = HIWORD(eax@1)
ax@2 = ax@1 + 1
eax@2 = MAKEDWORD(ax@2, HIWORD(eax@1))
al@2 = LOBYTE(ax@2)
ah@2 = HIBYTE(ax@2)
但我认为它太冗长了
【问题讨论】:
-
“SSA 表格”是什么意思?
-
@Eli Bendersky: en.wikipedia.org/wiki/Static_single_assignment_form
-
对简化这个没有任何建议,但我很好奇它在哪里被使用。您是否正在尝试优化/翻译现有的编译应用程序? ***** 看上面的例子,你不是需要在每一步都保持 eax、ax、al 和 ah 同步吗?例如,如果下一条指令是一条路径使用 ax 而另一条使用 eax 的条件分支,该怎么办?然后,您需要更加详细地更新此寄存器的所有版本!
-
@Gautham Ganapathy:我正在反编译(高度混淆)二进制文件。对于分支,SSA 引入了 phi 功能,详见 wiki。
标签: compiler-construction x86 alias dataflow ssa