1.4.3. エンディアンのサポート

ARM コンパイラには、リトルエンディアンオブジェクトとビッグエンディアンオブジェクトを生成するためのオプションが用意されています。ARMv6 では、以下に示す 2 つの異なるビッグエンディアンモードをサポートしています。

BE8

ARMv6 バイトインバリアントアドレシングモードを指定します。このモードでは、リトルエンディアンコードとビッグエンディアンコードを生成します。これは ARMv6 ビッグエンディアンイメージのデフォルトのバイトアドレシングモードです。

バイトインバリアントアドレシングモードは、ARMv6 をサポートする ARM プロセッサでのみ使用できます。

BE32

従来のビッグエンディアンモードであり、ビッグエンディアンコードおよびデータを生成します。また、ARMv6 より前にサポートされていたビッグエンディアンモードと同一で、ARMv6 より前のビッグエンディアンイメージのデフォルトのバイトアドレシングモードです。

ARMv6 のビッグエンディアン用にコンパイルする場合、ARM コンパイラでは、BE32 ではなく BE8 としてビッグエンディアンオブジェクトを生成します。BE8 のコードであることを示すフラグがオブジェクトコードに設定されます。このため、CPSR の E ビットを設定して、ARM コアでの BE8 のサポートをイネーブルする必要があります。

従来のオブジェクト(ARMv4T など)と ARMv6 のオブジェクトを(ARMv6 で実行させるために)リンクさせることができますが、この場合、リンカにより従来のオブジェクトコードのエンディアンが BE8 モードに切り替えられるため、生成されるイメージは BE8 になります。

従来の BE32 モードを使用する場合は、初期化コード内で CP15 レジスタ 1 の B ビット(ビット 7)を設定するか、コアへの BIGENDINIT 入力を HIGH に設定する必要があります。

以下を使用すると、BE32 と互換性のあるコードを生成できます。

--no_unaligned_access

また、BE32 と互換性のあるコードは、--BE32 リンカオプションを使用してリンクする必要があります。このオプションを指定しないと、オブジェクトの ARMv6 属性によって BE8 のイメージが生成されます。

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0203GJ
Non-Confidential