8.187 --unaligned_access、--no_unaligned_access

ARM アーキテクチャベースプロセッサでのデータへの非境界整列アクセスを有効または無効にできます。

デフォルト

デフォルトは、データへの非境界整列アクセスをサポートしている ARM アーキテクチャベースプロセッサでは --unaligned_access です。これには以下が含まれます。
  • すべての ARMv6 アーキテクチャベースのプロセッサ。
  • ARMv7-A、ARMv7-R、および ARMv7-M アーキテクチャベースのプロセッサ。
デフォルトは、データへの非境界整列アクセスに対応していない ARM アーキテクチャベースプロセッサでは --no_unaligned_access です。これには以下が含まれます。
  • すべての ARMv6 より前のアーキテクチャベースのプロセッサ。
  • ARMv6-M アーキテクチャベースのプロセッサ。

使用法

--unaligned_access
--cpu=ARM1136J-S などのデータへの非境界整列アクセスをサポートするプロセッサで --unaligned_access を使用すると、パック構造体へのアクセスを高速化できます。
ARMv6-M を除く ARMv6 で非境界整列のサポートを有効にするには、以下を実行する必要があります。
  • 初期化コードで CP15 レジスタの A ビット(ビット 1)をクリアします。
  • 初期化コードで CP15 レジスタ 1 の U ビット(ビット 22)を設定します。
    U ビットの初期値は、プロセッサへの UBITINIT 入力によって決定されます。MMU がオンになっていること、および、メモリがノーマルメモリとしてマークされていることが必要です。
ARMv6-M では、すべての非境界整列データアクセスがエラーになります。
ARMv7 で非境界整列のサポートを有効にするには、以下を実行する必要があります。
  • ARMv7-A と ARMv7-R では、システム制御レジスタ(SCTLR)で、A ビット、ビット 1 をクリアします。
  • ARMv7-M では、コンフィギュレーションおよび制御レジスタ(CCR)の UNALIGN_TRP ビット、ビット 3 を消去します。
ライブラリには、非境界整列アクセスを利用する目的で設計された特殊なバージョンの特定のライブラリ関数が含まれています。非境界整列アクセスのサポートがイネーブルされている場合は、コンパイルツールはこれらのライブラリ関数を使用して、非境界整列アクセスを利用します。
--no_unaligned_access
--no_unaligned_access は、ARMv6 プロセッサと ARMv7 プロセッサで非境界整列ワードまたはハーフワードへのアクセスを生成しないときに使用します。
非境界整列アクセスを生成せずに ARMv6 ターゲットでモジュロの 4 バイトの境界調整チェックを有効にするには、以下の手順を実行する必要があります。
  • 初期化コードで CP15 レジスタ 1 の A ビット(ビット 1)を設定します。
  • 初期化コードで CP15 レジスタ 1 の U ビット(ビット 22)を設定します。
    U ビットの初期値は、プロセッサへの UBITINIT 入力によって決定されます。
ARMv7 での境界調整失敗チェックを有効にするには、次を実行します。
  • ARMv7-A および ARMv7-R で、SCTLR で A ビット、ビット 1 を設定します。
  • ARMv7-M では、CCR で UNALIGN_TRP ビット、ビット 3 を設定します。

ARM プロセッサでは、 long long 整数への非境界整列アクセスなど、非境界整列ダブルワードアクセスはサポートしていません。ダブルワードアクセスは、8 バイトまたは 4 バイト境界で整列される必要があります。
ライブラリには、非境界整列アクセスを利用する目的で設計された特殊なバージョンの特定のライブラリ関数が含まれています。非境界整列アクセスのサポートがディセーブルされているときにこのような拡張されたライブラリ関数が使用されないようにするには、 C および C++ のソースファイルとアセンブリ言語ソースファイルの混合をコンパイルする際に、コンパイラコマンドラインとアセンブラのコマンドラインの両方で --no_unaligned_access を指定する必要があります。

制約条件

データへの非境界整列アクセスをサポートしているプロセッサ用にコンパイルされたコードは、ソフトウェアの境界整列のサポートの選択がプロセッサの境界整列のサポートの選択と一致している場合にのみ、正確に実行されます。
関連する参考文書
8.42 --cpu=name コンパイラオプション
関連情報
--unaligned_access、--no_unaligned_access アセンブラオプション
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.