📢 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, .exe等)
| 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>