あらすじ
Armv8-A(AArch64)向けJust-In-TimeアセンブラXbyak_aarch64をRaspberry Pi3で動かしてみた。
Xbyak_aarch64はArmv8-AのAArch64 stateの命令でJITコードを組み立ててそれを動かせるOSSである。
もともとはArmv8-AなCPUを搭載したArmサーバで動かす用途に開発されたっぽい。
Xbyak_aarch64を動かすためには、AArch64 stateが動くCPUで、かつ、64ビットOSが動いていて、かつ、64ビットの実行ファイルをmakeできる環境が必要となる。試してないけど、たぶんAndroidスマホでも動くはず。
実行環境
Hardware(ハードウェア)
Raspberry Pi 3 Model B Rev 1.2
CPUはBCM2835
OS
$ uname -a
$ Linux ubuntu 5.3.0-1029-raspi2 #21~18.04.1-Ubuntu SMP Mon Feb 17 18:03:27 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
実行方法
- UbuntuのサイトからRaspberry Pi3用の64-bit用のUbuntu 18.04.4 LTSをダウンロード。
- ダウンロードしたファイルを展開し、win32diskimagerでマイクロSDHCカードに書き込み。
- Internetにつなぐ必要があるため、Raspberry Pi3に有線LANケーブルを接続する。
- 書き込んだカードをRaspberry Pi3に差し込んで電源onして起動。
- プリセットされているアカウント(ID:ubuntu、Password:ubuntu)があるので、これでログイン(以降も同じ)。
- キーボード設定が英語キーボードになっていたのを日本語キーボードに変更する。
sudo dpkg-reconfigure keyboard-configuration
- 必要なパッケージをインストールするため、以下を実行。
sudo apt update
sudo apt upgrade
sudo apt install g++
- Xbyak_aarch64をダウンロードする。
git clone https://github.com/fujitsu/xbyak_aarch64.git
- サンプルプログラムをmakeしてみる。Xbyak_aarch64はc++11をサポートするため、オプションを付けておく。
cd xbyak_aarch64/sample
g++ -std=c++11 add.cpp
- サンプルプログラム(JITで「3+7」を実行するコードを組み立て、それを実行する)を動かしてみる。標準出力に7が出力され、JITコードが動いているっぽい。
./a.out
7