2009-05-04 289 views
0

我正在使用內聯彙編for iphone,我在設備調試模式下工作。內聯彙編錯誤

的指令如下:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp)); 

而且我正在一個錯誤:

error : expected ')' before tokedn '(' error: unknown register name 'r' in 'asm'

我使用X-碼3.0和GCC 4.0。有任何想法嗎?

回答

0

一個校正指令是 ASM( 「smlatb%0%1%2%3 \ n \ t」 的: 「= R」(溫度): 「R」(treg5):「R 「(fac5):」r「(Temp));

+0

我編輯了原始問題以包含此更新信息。 – unwind 2009-05-05 06:31:18

0

我認爲你應該做這樣的事情:

__asm__("smlatb %0, %1, %2 ,%3 \n\t": "=r"(Temp): "r"(treg5) : "r"(fac5) : "r"(Temp)); 

詳見this Stack Overflow question

+0

嗨 我已經做到了,即在asm之前和之後添加了2個下劃線字符,但我仍然得到相同的錯誤。 – Manish 2009-05-05 06:00:10

0

我加的CodeWarrior風格聯彙編 __asm {
smlatb溫度,treg5,FAC5,溫度} 和下GCC 4.0語言編譯選項卡下prject設置我選擇 選項允許的CodeWarrior風格的內聯彙編 還選擇 允許'asm''inline''typeof'選項並且代碼最終生效

0

您有太多:(冒號)。它們被用作分隔符。因此,您應該有一個將彙編代碼與輸出變量分開,另一個將輸出變量與輸入變量分開。這是像asm ("assembly" : <output> : <inputs> : [extra attributes])。查看GCC的'內聯程序集',你會看到一些例子。

+0

感謝看着例子解決了我的問題 – Manish 2009-05-07 07:06:12

1

應該只有三個冒號,而不是四個。

第一個冒號後面的參數指定了輸入,然後是輸出,然後是clobber列表。

如果您有多個參數,您可以使用逗號來分隔它們,而不是冒號。

在你的例子中。我假設,那個溫度是你的輸出,treg5,fac5是你的輸入。 你可能想要這樣的東西。

__asm__("smlatb %0, %1, %2, %0 \n\t" 
     : "=r"(Temp) 
     : "0"(Temp), "r"(treg5), "r"(fac5) 
     :); 

順便說一句,在vfpmath庫中有一些很好的iphone ARM程序集的例子。