ARM GCC内联汇编

时间:2013-09-27 06:26:04

标签: c gcc assembly arm

我正在尝试以下方法:

int main()
{
    unsigned int result = 0;

    unsigned int op1 = 10, op2 = 20;
    asm volatile ("uadd8 %0, %1, %2" :
                "=r" (result) :
                "r" (op1), "r" (op2) );

}

我想为Cortex A9编译这个我正在使用arm GNU GCC工具链。

但我一直收到这个错误:

arm-none-linux-gnueabi-gcc test_2.c

Assembler messages:

Error: selected processor does not support ARM mode `uadd8 r4,r3,r2'

我尝试通过添加.code 16强制转换为拇指模式,但没有运气。

这里有什么问题?

1 个答案:

答案 0 :(得分:1)

原因是编译器中的默认ARM体系结构未实现该指令。架构ARMv6T2和ARMv7的Thumb模式支持uadd8,ARMv6和ARMv7支持ARM模式。因此,您需要将正确的-march=选项传递给gcc。例如:

 -march=armv6
 -march=armv6t2 -mthumb
 -march=armv7-a
 -march=armv7-a -marm

您可以使用以下命令检查编译的默认(或选项设置)架构:

arm-elf-gcc -E -dM -x c /dev/null | grep ARM_ARCH
相关问题