我正在尝试做一些代码优化来消除分支,原始的c代码是
if( a < b )
k = (k<<1) + 1;
else
k = (k<<1)
Run Code Online (Sandbox Code Playgroud)
我打算用下面的汇编代码替换它
mov a, %rax
mov b, %rbx
mov k, %rcx
xor %rdx %rdx
shl 1, %rcx
cmp %rax, %rax
setb %rdx
add %rdx,%rcx
mov %rcx, k
Run Code Online (Sandbox Code Playgroud)
所以我写了内联汇编代码,如打击,
#define next(a, b, k)\
__asm__("shl $0x1, %0; \
xor %%rbx, %%rbx; \
cmp %1, %2; \
setb %%rbx; \
addl %%rbx,%0;":"+c"(k) :"g"(a),"g"(b))
Run Code Online (Sandbox Code Playgroud)
当我编译下面的代码时,我得到了错误:
operand type mismatch for `add'
operand type mismatch for `setb'
Run Code Online (Sandbox Code Playgroud)
我该如何解决?