Big endianのトリビア
現在のCPUのほとんどがLittle endianで動作しています。昔ハードウェアのエンジニアから聞いたことにはLittle endianの方が回路がシンプルになるそうです。
Big endianのみをサポートするCPUは見かけなくなりました。現在Big endianをサポートするCPUは両方のエンディアンに対応していて、Little endianの方がメインで使われています。
Big endianが使われる分野
ルーターやスイッチなどのネットワーク機器にBig endianが使われているそうです。インターネットを流れるパケットのバイトオーダーはネットワークバイトオーダーと決められていて、それはBig endianです。
人間が目でバイト単位でダンプされたデータを読むときにもBig endianの方が読みやすいですね。
Armのbig endianの形式には2種類ある
ArmのCPUは両方のエンディアンに対応していますが、ARMv6からBig endianの方式が変わりました。
それは、データの読み書きはBig endianだけど、命令列はLittle endianというものです。
この新しい方式をBE-8
と呼び、従来の全てのアクセスがBig endianになる方式を BE-32
と呼んで区別するようになりました。
これはコンパイラの --be8
オプションの説明がわかりやすいです。
This option specifies ARMv6 Byte Invariant Addressing big-endian mode.
This is the default Byte Addressing mode for ARMv6 and later big-endian images.It means that the linker reverses the endianness of the instructions to give little-endian code and big-endian data for input objects that have been compiled or assembled as big-endian.
Byte Invariant Addressing mode is only available on ARM processors that support ARMv6 and above.
もっと詳しく知りたい方はBE-8
, BE-32
のキーワードで検索してみてください。
CPUの内部構造を考えると、命令のフェッチ、デコードをする部分はエンディアンにかかわらず共通にしたということなのでしょうね。
RISC-VのBig endian
これによると、命令のエンコーディングはどちらのエンディアンのモードでもLittle endianになると書かれていますので、ArmのBE-8
と同等のようですね。
関連
Discussion