web-dev-qa-db-ja.com

Xcode 4でThumbではなくARM)用にコンパイルする方法はありますか?

Appleは、多くの浮動小数点演算が実行されている場合、親指ではなくARM)でコンパイルすることを推奨しています。私のアプリ全体はほぼ1つの大きな浮動小数点演算です。

IOSアプリ開発ワークフローガイドで彼らが言っていることは次のとおりです。

iOSデバイスは2つの命令セットARMとThumbをサポートします。Thumbを使用すると通常ARMと比較してコードサイズが約35%削減されるため、XcodeはデフォルトでThumb命令を使用します。広範な浮動小数点コードを持つアプリケーションはThumbではなくARM命令を使用すると、パフォーマンスが向上します。CompileforThumbビルド設定をNoに設定することで、アプリケーションのThumbをオフにして、ARM用にコンパイルできます。

ただし、ビルド設定で「CompileforThumb」設定が見つかりません。彼らはそれを改名しましたか?または、これはXcode 4では現在利用できませんか?

28
openfrog

まず、浮動小数点のパフォーマンスを向上させるためにThumb命令セット用にコンパイルしないというアドバイスは、実際には古いARMv6デバイスにのみ適用されます。

ARMv7ハードウェア(iPhone 3G S以降、すべてのiPadを含む)は、より効率的なThumb-2命令セットを使用します。これは、同じ種類の浮動小数点の速度低下の影響を受けません。 ARMv7ビルドの場合、ほとんどすべての場合、Thumb用にビルドすることをお勧めします。私は私の答えでこれについてもう少し詳細を提供します ここ

ARMv7デバイスはiOSデバイスの大多数であるため、このコンパイラ設定が一般的なオプションとして公開されなくなったのはこのためかもしれません。

ARMv6ビルドのみでこれを実行する場合は、ビルド設定に移動して、[その他のCフラグ]オプションにマウスを合わせることができます。このオプションの右側に表示される小さなプラスボタンをクリックして、ARMv6アーキテクチャの条件を追加します。これをもう一度実行して、ARMv7アーキテクチャ用に作成します。 ARMv6アーキテクチャでは、-mno-thumbのコンパイラフラグを追加します(Kevinが示唆しているように)。

次のような結果になるはずです。

Build settings for ARMv6

これを使用した古いARMv6デバイスでパフォーマンスが向上したため、アプリケーションの1つでこれを実行します。ただし、ARMv6でThumb用にビルドしていない場合、別のアプリケーションの速度が低下したため、最初にこれをプロファイルする必要があります。

さらに、 現在、Xcode 4.2に同梱されているLLVMコンパイラ3.0のバグ (4.2.1で修正されたと聞いています)があり、Thumbで浮動小数点計算が間違ってコンパイルされます。 ARMv6。その特定のバージョンのXcodeを使用している場合は、古いデバイスで適切に動作するためにこれを行う必要があります。

49
Brad Larson

Xcode4に「CompileforThumb」が存在するかどうかはわかりませんが、その他のCフラグビルド設定にいつでも-mno-thumbを追加できます。

8
Lily Ballard

元の質問について:Xcode 4.2.1の「CompileforThumb」(「ProjectBuildSettings」の「CodeGeneration」セクションの下)は、LLVM GCC 4.2を使用している場合にのみ使用可能であることに気付きました(「 C/C++/Objective-C用のコンパイラ ")!

Apple LLVM 3.0でコンパイルする場合、「Compile forThumb」オプションは見つかりません。ただし、Bradがすでに述べたように、「Other C Flags」オプションを変更して、Thumbモードをオフにすることができます。 。

もう1つの興味深い点:プロジェクトでsqliteアマルガメーションソースを使用しています(fts-全文検索が必要です)。LLVM3.0でコンパイルしてから、データベースにアクセスするたびにarmv6デバイスで奇妙でランダムなクラッシュが発生しました。 armv6デバイス用にコンパイルするときにThumbモードが無効になっていないためです。

3
xoconoxtle