1

我正在尝试以下操作:

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也强制进入拇指模式但没有运气。

这里有什么问题?

4

1 回答 1

1

原因是编译器中的默认 ARM 体系结构没有实现该指令。在uadd8架构 ARMv6T2 和 ARMv7 的 Thumb 模式下以及在 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
于 2013-09-27T09:22:43.660 回答