📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の1版が非表示) | |||
| 200行目: | 200行目: | ||
|- | |- | ||
! style="background-color:#fff2cc;"| 入力 | ! style="background-color:#fff2cc;"| 入力 | ||
| colspan="2" style="background-color:#fff2cc;"| ソースコード (.c, .cpp) | | colspan="2" style="background-color:#fff2cc; text-align:center;"| ソースコード (.c, .cpp) | ||
|- | |- | ||
! style="background-color:#e3f2fd;"| ① 解析 | ! style="background-color:#e3f2fd;"| ① 解析 | ||
| 223行目: | 223行目: | ||
|- | |- | ||
! style="background-color:#f0f0f0;"| 中間生成物 | ! style="background-color:#f0f0f0;"| 中間生成物 | ||
| colspan="2" style="background-color:#f0f0f0;"| オブジェクトファイル (.o) | | colspan="2" style="background-color:#f0f0f0; text-align:center;"| オブジェクトファイル (.o) | ||
|- | |- | ||
! style="background-color:#e8f5e9;"| ⑥ リンク | ! style="background-color:#e8f5e9;"| ⑥ リンク | ||
| 230行目: | 230行目: | ||
|- | |- | ||
! style="background-color:#c8e6c9;"| 出力 | ! style="background-color:#c8e6c9;"| 出力 | ||
| colspan="2" style="background-color:#c8e6c9;"| 実行ファイル (a.out, . | | colspan="2" style="background-color:#c8e6c9; text-align:center;"| 実行ファイル (例 : a.out, a.exe) | ||
|} | |} | ||
</center> | </center> | ||
| 407行目: | 407行目: | ||
==== ARM EABIHF ==== | ==== ARM EABIHF ==== | ||
===== ABI / HF ===== | |||
ABIとは、コンパイルされたバイナリコード同士がどのように通信し合うかを定めるプロトコルである。<br> | ABIとは、コンパイルされたバイナリコード同士がどのように通信し合うかを定めるプロトコルである。<br> | ||
ABIは関数を呼び出す際にどのレジスタを使うか、引数をどの順序でスタックに積むか、戻り値をどこに格納するか、構造体のメモリ配置はどうするか、といった細かい取り決めを規定している。<br> | ABIは関数を呼び出す際にどのレジスタを使うか、引数をどの順序でスタックに積むか、戻り値をどこに格納するか、構造体のメモリ配置はどうするか、といった細かい取り決めを規定している。<br> | ||
| 414行目: | 415行目: | ||
Hard Float ABIでは、浮動小数点演算の結果を浮動小数点専用のレジスタ (VFPレジスタ) を使用して関数間で受け渡す。<br> | Hard Float ABIでは、浮動小数点演算の結果を浮動小数点専用のレジスタ (VFPレジスタ) を使用して関数間で受け渡す。<br> | ||
<br> | <br> | ||
EABIHFは32ビットARM用のABIである。<br> | |||
* Raspberry Pi OS 32ビットでは、ARMv8でもEABIHF (hard-float) が使用可能。 | |||
* Raspberry Pi OS 64ビットでは、AAPCS64 (ARM Architecture Procedure Call Standard 64-bit) という別のABIを使用。 | |||
<br> | |||
===== VFPレジスタ ===== | |||
Raspberry Pi 4以降でもVFPレジスタは存在するが、実装が進化している。<br> | |||
* ARMv7以前 (Raspberry Pi 2 / 3等) | |||
** VFP (Vector Floating Point) が独立したコプロセッサ | |||
** VFPv3 / VFPv4として実装 | |||
** NEONと一部統合 | |||
*: <br> | |||
* ARMv8-A (Raspberry Pi 4以降) | |||
** 浮動小数点とSIMDが完全に統合 | |||
** 32個の128ビットレジスタ (V0-V31) として実装 | |||
** これらは以下のようにアクセス可能である。 | |||
*** 64ビット浮動小数点 : D0-D31 | |||
*** 32ビット浮動小数点 : S0-S31 | |||
*** 128ビットSIMD:V0-V31 (NEON) | |||
<br> | |||
32 / 64ビットで、利用できる機能やABIが異なるが、いずれにおいても浮動小数点演算用のレジスタは存在し、ハードウェアアクセラレーションが利用できる。<br> | |||
<br> | |||
===== ビルド / インストール ===== | |||
mkdir build && cd build | mkdir build && cd build | ||
| 471行目: | 494行目: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
==== ARM EABI ==== | ==== ARM EABI ==== | ||
Soft Float ABIでは、浮動小数点の値も汎用レジスタを使って受け渡す。<br> | Soft Float ABIでは、浮動小数点の値も汎用レジスタを使って受け渡す。<br> | ||