这个问题更多是出于好奇而不是必要:
是否可以以某种方式重写 c 代码if ( !boolvar ) { ...
,以便将其编译为 1 个 cpu 指令?
我已经尝试在理论层面上考虑这个问题,这就是我想出的:
if ( !boolvar ) { ...
需要先否定变量,然后根据该变量进行分支-> 2条指令(否定+分支)
if ( boolvar == false ) { ...
需要将 false 的值加载到寄存器中,然后根据该值进行分支 -> 2 条指令(加载 + 分支)
if ( boolvar != true ) { ...
需要将 true 的值加载到寄存器中,然后根据 -> 2 条指令进行分支(“如果不等于分支”)(加载 +“如果不等于分支”)
我的假设错了吗?有什么我忽略的吗?
我知道我可以生成程序的中间 asm 版本,但我不知道如何以某种方式使用它,因此我一方面可以打开编译器优化,同时没有if
优化掉空语句(或者让if 语句与其内容一起优化,给出一些非通用的答案)
PS:当然我也为此搜索了google和SO,但是搜索词这么短,我真的找不到任何有用的东西
PPS:我可以使用语义上等效的版本,但语法上不等效,例如不使用if
.
编辑:如果我对发出的 asm 指令的假设是错误的,请随时纠正我。
Edit2:我实际上在 15 年前学习了 asm,并在 5 年前重新学习了 alpha 架构,但我希望我的问题仍然足够清楚,可以弄清楚我在问什么。此外,如果它有助于找到一个好的答案,您可以自由假设消费 cpu 中常见的任何类型的处理器扩展,直到 AVX2(截至撰写本文时的当前 haswell cpu)。