由arm-none-eabi构建项目不会导致此类指令错误

时间:2016-06-10 07:11:07

标签: gcc assembly arm

首先,请对不起,我的英语不太好...... 我正在尝试为stm32f746g-disco写一些项目。我正在使用arm-none-eabi工具包。完整的源代码位于http://github.com/Andrew-Bezzubtsev/stm-glib.git。当我试图构建它时:

./set_toolchain.sh
cmake ./
make

我收到下一个错误:错误:没有这样的说明:

`rbit %eax,%eax'

但是发生错误的代码片段是:

__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value)
{
  uint32_t result;

#if       (__CORTEX_M >= 0x03) || (__CORTEX_SC >= 300)
  __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) );
#else
  int32_t s = 4 /*sizeof(v)*/ * 8 - 1; // extra shift needed at end

  result = value;                      // r will be reversed bits of v; first get LSB of v
  for (value >>= 1; value; value >>= 1)
  {
    result <<= 1;
    result |= value & 1;
    s--;
  }
  result <<= s;                       // shift when v's highest bits are zero
#endif
  return(result);
}

请帮助我。

1 个答案:

答案 0 :(得分:3)

(由于低代表仍无法使用评论,请尽可能将其转换为评论)

eax - 是一个来自intel(x86)平台的寄存器,ARM上没有这样的寄存器。

你需要找出为什么“rbit%0,%1”变成“rbit%eax,%eax”

UPD .: 正如@Notlikethat指出的那样 - 您需要正确设置交叉编译环境,因为目前您正在编译x86而不是ARM。