2

その種の問題を扱うさまざまなトピックを読みましたが、まだ答えがありません。ここに私の問題があります:

私のヘッダーファイルには、これがあります:

  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; })

私のプロジェクト設定で、これらの次のオプションが リンクテキストにチェックされていることを確認しました

しかし、コンソールエラーがあります:

{標準入力}:242:選択されたプロセッサはサポートしていません -- smull r0,r1,r2,r3' {standard input}:244:unshifted register required --orr r0,r0,r1,lsl#20'

私たちを手伝ってくれますか ?

4

1 に答える 1

3

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

プロジェクト全体をアームとしてコンパイルすると、メモリ使用量やプロキシ パフォーマンスに重大な (マイナスの) 影響が生じる可能性が高くなります。このようなヘッダーにマクロを介して ASM を含めると、iPhone では非常に面倒です。一般に、すべての ASM を 1 つのファイルに入れ、その 1 つのファイルをアームとしてコンパイルする方がよいでしょうが、おそらく価値のない 3 つの命令シーケンスしかないためです。

于 2009-07-07T20:42:58.607 に答える