例如:
如何在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)
但我认为这太冗长了
答案 0 :(得分:2)
使用您的符号:
因为eax包含ax,所以在2到3之间有一个隐含的步骤
步骤2因为任何与自身xor的数字都是0 ... eax @ 0在那时已经死了,因此可以重命名eax @ 1(使用ebx作为重命名以便它可读;显然你会使用虚拟注册,而不是真实的):
然后你可以注意到,因为第3步是一个常数函数,所以步骤4(向常数添加常数)并将两者压缩在一起(即常数折叠)
如果ebx的高16位不支配低于此值的任何内容,您也可以删除第2步。