µTh*_*ory -1 performance assembly compilation
我知道对于带符号的32位或64位整数-x并~x + 1返回相同的结果.
但我有几个问题:
-x有直接的硬件实现吗?编译器是否将它们转换为相同的操作?
这取决于编译器的智能程度以及是否已启用优化.通常,您可以期待一个好的编译器为两者生成相同的代码.
为什么?
一些优化有一个规则,以优化~x + 1到-x,有些则没有.这种优化通常是窥视孔优化器的一部分,您可能需要阅读链接的文章以获取详细信息.
如果没有,它们是如何翻译的?
这取决于目标平台.例如,在i386上,x在eax寄存器中,-x可能会被翻译为
neg %eax
Run Code Online (Sandbox Code Playgroud)
而~x + 1可能被翻译成
not %eax
inc %eax
Run Code Online (Sandbox Code Playgroud)
在其他平台上,翻译是不同的.例如,在ARM上,第一个是
rsb r0,r0,#0
Run Code Online (Sandbox Code Playgroud)
第二是
mvn r0,r0
add r0,r0,#1
Run Code Online (Sandbox Code Playgroud)
如果没有,那么-x是否有直接的硬件实现?
通常,有一个否定指令或编译器根据定义简单地将值从0减去为0 - x = - x.
| 归档时间: |
|
| 查看次数: |
41 次 |
| 最近记录: |