🐕

Big endianのトリビア

2023/02/10に公開

現在の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 オプションの説明がわかりやすいです。

https://developer.arm.com/documentation/dui0493/g/linker-command-line-options/--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

https://reviews.llvm.org/D128612

これによると、命令のエンコーディングはどちらのエンディアンのモードでもLittle endianになると書かれていますので、ArmのBE-8と同等のようですね。

関連

https://zenn.dev/tetsu_koba/articles/3bd92ec53face9

Discussion