2009-06-30 16 views
2

この種の問題を扱う別のトピックを読みましたが、まだ答えはありません。 ここに私の問題です:iphone dev:インラインasmの問題

私のプロジェクト設定で
int cl, ch, _a = a, _b = b;\ 
    __asm__ ("smull %0, %1, %2, %3\n"   
    "mov %0, %0, lsr %4\n"   
    "orr %0, %0, %1, lsl %5\n"   
    : "=&r" (cl), "=&r" (ch)   
    : "r" (_a), "r" (_b), "i" (r), "i" (32-(r))); 
    cl; }) 

が、私はこれらの次のオプションが link text

をckeckedしていることが確認されしかし、私は、コンソールを持っている:私のヘッダファイルで

、私はこれを持っていますエラー:

{標準入力}:242:選択されたプロセッサをサポートしていない - smull r0,r1,r2,r3' {standard input}:244:unshifted register required -- ORR R0、R0、R1、LSL#20'

お手伝いできますか?

答えて

3

腕のためにファイルをコンパイルしていますか? iPhone用のデフォルトコードは親指用にコンパイルされています(通常、浮動小数点演算をしない限り好ましい)。あなたがリストアップしたASMは腕です。 GCCでは単一のコンパイル単位内でバックエンドを切り替えることができないため、このヘッダを使用するファイルをarmとしてコンパイルするように設定する必要があります。 「GCC 4.xコード生成」の下の「Thumb用コンパイル」の選択を解除して変更できます。

プロジェクト全体をアームとしてコンパイルすると、メモリ使用量やプロキシのパフォーマンスに重大な(悪影響を与える)可能性が高くなります。そのようなヘッダーにマクロを介してASMを組み込むことは、iPhone上で非常に面倒なことを証明することになります。一般的には、すべてのASMを1つのファイルに入れて、そのファイルをアームとしてコンパイルするほうが良いですが、3つの命令シーケンスはどちらかといえば価値がないでしょう。