编译时:
short foo (short x)
{
__asm ("mov %0, 0" : "=r" (x));
return x;
}
我得到了
foo:
mov r0, 0
sxth r0, r0
bx lr
我不想要额外的指令sxth(signed extract halfword)。
之所以存在,是因为ABI(本例中为ARM AEABI)要求将函数返回值符号扩展为完整寄存器,但GCC不知道我的汇编代码可能对寄存器执行了什么操作给了我。
我如何告诉GCC我保证将寄存器正确地签名扩展,这样就不必插入这条额外的指令了?
我原本以为它可以从我给它一个短片作为“= r”约束的表达式来推断这一点。