如何从内联汇编返回一个字节或短

时间:2014-12-19 16:41:35

标签: gcc inline-assembly

编译时:

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”约束的表达式来推断这一点。

0 个答案:

没有答案