📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

 
(同じ利用者による、間の2版が非表示)
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>
361行目: 361行目:
  # CMakeの設定
  # CMakeの設定
  cmake -G Ninja \
  cmake -G Ninja \
       -DCMAKE_BUILD_TYPE=Release \
       -DCMAKE_BUILD_TYPE=Release                           \
       -DCMAKE_INSTALL_PREFIX=<LLVMツールチェーンのインストールディレクトリ> \
       -DCMAKE_INSTALL_PREFIX=<LLVMツールチェーンのインストールディレクトリ> \
       -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld" \
       -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;lld" \
       -DLLVM_TARGETS_TO_BUILD="X86;AArch64" \
       -DLLVM_TARGETS_TO_BUILD="X86;AArch64"               \
       -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-linux-gnu \
       -DLLVM_DEFAULT_TARGET_TRIPLE=aarch64-linux-gnu       \
       -DLLVM_ENABLE_LLD=ON \
       -DLLVM_ENABLE_LLD=ON                                 \
       -DLLVM_ENABLE_LIBCXX=OFF \
       -DLLVM_ENABLE_LIBCXX=OFF                             \
       -DLLVM_ENABLE_ASSERTIONS=OFF \
       -DLLVM_ENABLE_ASSERTIONS=OFF                         \
       -DLLVM_OPTIMIZED_TABLEGEN=ON \
       -DLLVM_OPTIMIZED_TABLEGEN=ON                         \
      -DLLVM_USE_LINKER=lld \
       -DLLVM_PARALLEL_LINK_JOBS=2                         \
       -DLLVM_PARALLEL_LINK_JOBS=2 \
       ../llvm
       ../llvm
   
   
408行目: 407行目:


==== ARM EABIHF ====
==== ARM EABIHF ====
===== ABI / HF =====
ABIとは、コンパイルされたバイナリコード同士がどのように通信し合うかを定めるプロトコルである。<br>
ABIとは、コンパイルされたバイナリコード同士がどのように通信し合うかを定めるプロトコルである。<br>
ABIは関数を呼び出す際にどのレジスタを使うか、引数をどの順序でスタックに積むか、戻り値をどこに格納するか、構造体のメモリ配置はどうするか、といった細かい取り決めを規定している。<br>
ABIは関数を呼び出す際にどのレジスタを使うか、引数をどの順序でスタックに積むか、戻り値をどこに格納するか、構造体のメモリ配置はどうするか、といった細かい取り決めを規定している。<br>
415行目: 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
   
   
427行目: 449行目:
       -DLLVM_ENABLE_ASSERTIONS=OFF                          \
       -DLLVM_ENABLE_ASSERTIONS=OFF                          \
       -DLLVM_OPTIMIZED_TABLEGEN=ON                          \
       -DLLVM_OPTIMIZED_TABLEGEN=ON                          \
      -DLLVM_USE_LINKER=lld                                \
       -DLLVM_PARALLEL_LINK_JOBS=2                          \
       -DLLVM_PARALLEL_LINK_JOBS=2                          \
       ../llvm
       ../llvm
473行目: 494行目:
  </syntaxhighlight>
  </syntaxhighlight>
<br>
<br>
==== ARM EABI ====
==== ARM EABI ====
Soft Float ABIでは、浮動小数点の値も汎用レジスタを使って受け渡す。<br>
Soft Float ABIでは、浮動小数点の値も汎用レジスタを使って受け渡す。<br>
496行目: 518行目:
       -DLLVM_ENABLE_ASSERTIONS=OFF                        \
       -DLLVM_ENABLE_ASSERTIONS=OFF                        \
       -DLLVM_OPTIMIZED_TABLEGEN=ON                        \
       -DLLVM_OPTIMIZED_TABLEGEN=ON                        \
      -DLLVM_USE_LINKER=lld                                \
       -DLLVM_PARALLEL_LINK_JOBS=2                          \
       -DLLVM_PARALLEL_LINK_JOBS=2                          \
       ../llvm
       ../llvm