2013-09-27 242 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