相减是否比求反要差?

问题描述 投票:0回答:1

我想知道处理器否定一个数字或执行一个减法会更快。例如:

int a = -3;

比...更有效率

int a = 0 - 3;

换句话说,一个负数是否等于从0减去?还是有一条特殊的CPU指令可以更快地减去减法?

我想编译器不会优化任何东西。

embedded cpu cpu-architecture
1个回答
0
投票

我想编译器不会优化任何东西。

[如果使用C语言编写,这不是一个很好的假设。由于整数的工作方式,两者对于任何不可怕的编译器都是等效的,并且如果将其编译为更有效的代码,这将是未进行优化的错误。比其他。

如果您实际上想询问有关asm的问题,那么答案取决于ISA。


但是,大多数ISA可以用一条指令取反,通常是从立即数或隐式零或从体系结构零寄存器中减去。

例如32位ARM具有rsb(反减)指令,该指令可以采用立即数操作数。 rsb rdst, rsrc, #123的dst = 123-src。立即数为零,这只是个否定。

x86具有neg指令:neg eax完全等同于eax = 0-eax,以相同的方式设置标志。

具有零寄存器(硬连线为零)的3操作数体系结构可以像MIPS subu $t0, $zero, $t0一样完成t0 = 0 - t0。它不需要特殊的指令,因为$zero寄存器始终读为零。同样,AArch64删除了RSB,但具有xzr /wzr64/32位零寄存器。 (尽管它也有一个伪指令neg,它从零寄存器中减去)。

您可以通过使用编译器来查看大部分内容。https://godbolt.org/z/B7N8SK但是您实际上必须编译为机器代码并反汇编,因为gcc / clang倾向于在AArch64和RISC-V上使用neg伪指令。不过,您仍然可以看到ARM32的rsb r0,r0,#0 for int negate(int x){return -x;}

© www.soinside.com 2019 - 2024. All rights reserved.