小编Bhu*_*bey的帖子

在单CPU指令中可以在0和1之间翻转位/整数/布尔值的任何可能代码

单个x86指令可以在"0"和"1"之间切换布尔值吗?

我想到了以下方法,但都导致了两个指令与-cc标志的gcc.

status =! status;

status = 1 - status;

status  = status == 0 ? 1: 0;

int flip[2] = {1, 0};
status = flip[status];
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?

这就是我尝试过的:https://godbolt.org/g/A3qNUw


我需要的是一个切换输入和返回的函数,以编译为一条指令的方式编写.与此功能类似的东西:

int addOne(int n) { return n+1; }
Run Code Online (Sandbox Code Playgroud)

将Godbolt编译为:

  lea eax, [rdi+1]    # return n+1 in a single instruction
  ret
Run Code Online (Sandbox Code Playgroud)

c c++ x86 assembly micro-optimization

3
推荐指数
1
解决办法
764
查看次数

标签 统计

assembly ×1

c ×1

c++ ×1

micro-optimization ×1

x86 ×1