--unaligned_access--no_unaligned_access

これらのオプションを使用すると、ARM アーキテクチャベースのプロセッサでのデータへの非境界整列アクセスを有効または無効にできます。

Show/hideデフォルト

デフォルトは、データへの非境界整列アクセスをサポートしている ARM アーキテクチャベースのプロセッサの --unaligned_access です。これには以下が含まれます。

  • すべての ARMv6 アーキテクチャベースのプロセッサ。

  • ARMv7-A、ARMv7-R、および ARMv7-M アーキテクチャベースのプロセッサ。

デフォルトは、データへの非境界整列アクセスに対応していない ARM アーキテクチャベースのプロセッサでは --no_unaligned_access です。これには以下が含まれます。

  • すべての ARMv6 より前のアーキテクチャベースのプロセッサ。

  • ARMv6-M アーキテクチャベースのプロセッサ。

Show/hide使用法

--unaligned_access

--cpu=ARM1136J-S などのデータへの非境界整列アクセスをサポートするプロセッサで --unaligned_access を使用すると、パック構造体へのアクセスを高速化できます。

非境界整列のサポートを有効にするには、以下の手順を実行する必要があります。

  • 初期化コードで CP15 レジスタの A ビット(ビット 1)をクリアします。

  • 初期化コードで CP15 レジスタ 1 の U ビット(ビット 22)を設定します。

    U ビットの初期値は、コアへの UBITINIT 入力によって決定されます。MMU がオンになっていること、および、メモリがノーマルメモリとしてマークされていることが必要です。

ライブラリには、非境界整列アクセスを利用する目的で設計された特殊なバージョンの特定のライブラリ関数が含まれています。非境界整列アクセスのサポートがイネーブルされている場合は、コンパイルツールはこれらのライブラリ関数を使用して、非境界整列アクセスを利用します。

--no_unaligned_access

--no_unaligned_access は、ARMv6 プロセッサで非境界整列ワードまたはハーフワードへのアクセスを生成しないときに使用します。

非境界整列アクセスを生成せずに ARMv6 ターゲットでモジュロの 4 バイトの境界調整チェックを有効にするには、以下の手順を実行する必要があります。

  • 初期化コードで CP15 レジスタ 1 の A ビット(ビット 1)を設定します。

  • 初期化コードで CP15 レジスタ 1 の U ビット(ビット 22)を設定します。

    U ビットの初期値は、コアへの UBITINIT 入力によって決定されます。

Note

long long 整数への非境界整列アクセスなどの非境界整列ダブルワードアクセスは、ARM プロセッサコアではサポートされていません。ダブルワードアクセスは、8 バイトまたは 4 バイト境界で整列される必要があります。

コンパイラは、モジュロ 8 バイトの境界調整チェックをサポートしていません。すなわち、CP15 レジスタ 1 のコンフィギュレーション U = 0, A = 1 は、コンパイラ(より一般的には ARM コンパイラツールセット)ではサポートされません。

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

Show/hide制約条件

データへの非境界整列アクセスをサポートしているプロセッサ用にコンパイルされたコードは、ソフトウェアの境界整列のサポートの選択がプロセッサコアの境界整列のサポートの選択と一致している場合にのみ、正確に実行されます。

Show/hide関連項目

Copyright © 2010 ARM. All rights reserved.ARM DUI 0491BJ
Non-ConfidentialID011811