ぐだぐだ低レベルプログラミング(178)ARM64(AArach64)オプショナル命令確認

Joseph Halfmoon

前回「表引き」命令を練習した後も練習すべき「SIMDのデータ処理命令は尽きまじ」などと思っておったお惚け老人です。しかしマニュアルをよく見てみれば、残り2つのカテゴリのうち一つは ARMv8.3、もう一つは ARMv8.0だけれども「optional」でした。ラズパイ4機で該当の「optional」使えるのか?

※「ぐだぐだ低レベル プログラミング」投稿順indexはこちら

※実機動作確認には以下を使用しております。

    •  Raspberry Pi 4 model B、Cortex-A72コア(ARMv8-A)
    •  Raspberry Pi OS (64bit) bullseye
    •  gcc (Debian 10.2.1-6) 10.2.1 20210110

ARMv8もいろいろレベルがあり、Arm Cortex-A72はARMv8の中でもベーシックな(命令数の少ない)ARMv8p0です。

※A64の最新のマニュアルは以下でダウンロード可能です。

Arm Architecture Reference Manual for A-profile architecture

SIMDデータ処理命令カテゴリ、残りの2つ

「データ処理命令」のみを練習するスタンスで取り組んできております年寄です(システム命令を素に実機上で練習するのはメンドイからね。手抜き。)長らく練習を重ねてまいりましたA64のSIMDデータ処理命令も残りのカテゴリは以下の2つとなりました。

    • SIMD complex number arithmetic
    • The Cryptographic Extension

しかし、マニュアルをば見やれば、複素数を扱うための “SIMD complex number arithmetic” は ARMv8.3以降の命令群でした。あちゃ~、ラズパイ4機(v8.0)では練習不可ね。

一方、AES暗号とSHA1、SHA256ハッシュ関数を計算するのに使える ”The Cryptographic Extension” の方は ARMv8.0 でした。しかし老眼の目でよくみたらば ARMv8.0の「前に optional 」と書いてあります。おっと必修科目じゃないのね。

こういう optional なときにlinux機でお役立ちなのが、/proc/cpuinfo です。ターゲット機上でcatした結果が以下に(コア4個あるので以下のような表示が4回繰り返されます。)cpuinfo

あれれ、もしかして AES とか SHA とかのオプションは実装されてない?

念のため、lscpu命令にも聞いてみました。こんな感じ。lscpu

末尾の赤い線のところ、もしサポートされていれば aes とか sha とか書かれている筈なのだけれども。

そういえば、本シリーズの過去回で書かれているケースがありましたぜ。遥か昔の以下の回です。

ぐだぐだ低レベルプログラミング(3) Arm、32ビット?64ビット?

上記回の中で、Jetson nano機 (コアは Arm Cortex A57だけれども)で /proc/cpuinfoを確認してます。その時の結果を引用するとこんな感じね。

$ cat /proc/cpuinfo
processor : 0
model name : ARMv8 Processor rev 1 (v8l)
BogoMIPS : 38.40
Features : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x1
CPU part : 0xd07
CPU revision : 1
~以下略~

aes、sha1、sha2が並んでいるじゃありませんか。なお、sha2はsha256と同じっす。

ほえほえ~、同じ ARMv8だけれどもラズパイ4機にはaes, shaは無し、Jetson nanoにはありと。

どうしたもんかな~。ときどき思い出したように動かす Jetson nanoを何度目かの復活させるか?メンドイな、また次回よな。。。

ぐだぐだ低レベルプログラミング(177)ARM64(AArach64)SIMD 表引き命令群 へ戻る

ぐだぐだ低レベルプログラミング(179)x86、16/32/64bit、整数レジスタの発展?へ進む