2013-09-27 189 views
1

我尝试以下操作:ARM GCC内嵌汇编

int main() 
{ 
    unsigned int result = 0; 

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

} 

我想编译这个对我采用ARM GNU GCC工具链的Cortex A9。

但我不断收到此错误:

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

你能后的GCC命令行吗?在这种情况下,标志是相关的。 –

+0

@JanHudec:我试过-mthumb -mthumb-interwork -march = armv7 -a和-mcpu = cortex-a9 – user2807984

+0

这里的问题可以在这里编辑。请编辑问题本身的信息。请提及gcc版本。 –

回答

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 
+0

正如我在-march = armv7-a试过的评论中提到的,但我仍然得到这个错误 – user2807984

+0

'arm-none-linux-gnueabi-gcc -version'的输出是什么?也许你需要升级你的工具链。例如。 Sourcery CodeBench Lite 2012.09-64)4.7.2适用于这些选项。 – chill

+0

感谢男人:)我正在将这个3月标志添加到汇编标志而不是gcc标志..谢谢:) – user2807984