dea*_*sin 6 c++ optimization compare zero
是
if(!test)
Run Code Online (Sandbox Code Playgroud)
比...快
if(test==-1)
Run Code Online (Sandbox Code Playgroud)
我可以生产组装,但是生产了太多的组件,我无法找到我追求的细节.我希望有人知道答案.我猜它们是相同的,除非大多数CPU架构都有某种"比较为零"的捷径.
谢谢你的帮助.
通常,是的.在典型的处理器中测试零或测试符号(负/正)是简单的条件代码检查.这意味着可以重新排序指令以省略测试指令.在伪装配中,请考虑以下因素:
Loop:
LOADCC r1, test // load test into register 1, and set condition codes
BCZS Loop // If zero was set, go to Loop
Run Code Online (Sandbox Code Playgroud)
现在考虑对1进行测试:
Loop:
LOAD r1, test // load test into register 1
SUBT r1, 1 // Subtract Test instruction, with destination suppressed
BCNE Loop // If not equal to 1, go to Loop
Run Code Online (Sandbox Code Playgroud)
现在通常的预优化免责声明:你的程序太慢了吗?不要优化,分析它.