Gcc 由于arm none eabi而生成项目不会导致此类指令错误

Gcc 由于arm none eabi而生成项目不会导致此类指令错误,gcc,assembly,arm,Gcc,Assembly,Arm,首先,对不起,我的英语不是很好。。。 我正在尝试为stm32f746g迪斯科写一些项目。我正在使用arm ONE eabi工具包。完整的源代码位于。当我试图构建它时,由于: ./set_toolchain.sh cmake ./ make 我得到下一个错误:错误:没有这样的指令: `rbit %eax,%eax' 但发生错误的代码片段是: __attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value

首先,对不起,我的英语不是很好。。。 我正在尝试为stm32f746g迪斯科写一些项目。我正在使用arm ONE eabi工具包。完整的源代码位于。当我试图构建它时,由于:

./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);
}
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
{
uint32_t结果;
#如果(uu CORTEX_M>=0x03)| |(u CORTEX_SC>=300)
__ASM volatile(“rbit%0,%1”:“=r”(结果):“r”(值));
#否则
int32_t s=4/*sizeof(v)*/*8-1;//结束时需要额外轮班
result=value;//r将是v的反向位;首先获取v的LSB
对于(值>>=1;值;值>>=1)
{
结果(由于代表性低,仍然无法使用注释,如果可能,请将其转换为注释)

eax-是来自intel(x86)平台的寄存器,ARM上不存在此类寄存器

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

upd.:
正如@Notlikethat所指出的,您需要正确设置交叉编译环境,因为当前您是为x86而不是为ARM编译的。

eax
是您使用主机(即x86)编译的一个绝对免费的工具如果您在实际环境中设置了CROSS_COMPILE,而不是运行一个脚本,该脚本在子shell中设置它,然后退出(完全没有实现),该怎么办?