我正在尝试以下方法:
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
强制转换为拇指模式,但没有运气。
这里有什么问题?
答案 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