ぐだぐだ低レベルプログラミング(88)ARM64(AArach64)、整数乗算命令その4

smulEC
Joseph Halfmoon

今回でようやく整数乗算命令の「舐め終わり」です。前回積み残していた「符合付」の命令群です。前々回のようにデスティネーションがソースと等ビット幅であれば出る幕がないですが、前回のようにデスティネーションがソースの倍幅あると必須な奴ら。文字で書いていても何だかよくわからなくなりますが、これで計算はできるのだと。

“ぐだぐだ低レベルプログラミング(88)ARM64(AArach64)、整数乗算命令その4” の続きを読む

ぐだぐだ低レベルプログラミング(87)ARM64(AArach64)、整数乗算命令その3

mul_INSN_AliasU
Joseph Halfmoon

RISC-Vのとき基本整数命令セットを一当たりなめるのは大した回数でなかった記憶。しかしArmの64ビット命令セットA64は命令多いです。まだ整数乗算命令です。今回は前回やってない「パターン2」と「パターン3」ですが符合無のみ。符合付も一度にやるとちょっと疲れそうだったから。そういうところで回数多くなっているな、オイ。 “ぐだぐだ低レベルプログラミング(87)ARM64(AArach64)、整数乗算命令その3” の続きを読む

やっつけな日常(42) Rustに入ればRustに従え、ループを回る、mutの個数?

loopsEC
Joseph Halfmoon

前回は「ありがちな」エレトステネスの篩をRustで練習してみました。しかし気になったのが mut の多さです。小さなプログラムなのに mut と宣言しているところが4か所もありました。普段、Cで書いていたら気にしないのにRustだと mut と書かねばならないのでとても気になります。Rustを作った人たちの思うツボか?

“やっつけな日常(42) Rustに入ればRustに従え、ループを回る、mutの個数?” の続きを読む

MicroPython的午睡(75) Linux版MicroPythonビルド、SSH接続

MicroPythonSSHrunsOnThonny
Joseph Halfmoon

前回ラズパイPico用のMicroPythonをソースからビルド。環境できたのでラズパイPicoに限らず他のマイコン向けのMicroPythonもビルドできるハズ。今回はLinux用のMicroPythonをビルドしてみます。ビルド後、Windows上のThonnyIDEからSSH接続しバックエンドとしてみます。
“MicroPython的午睡(75) Linux版MicroPythonビルド、SSH接続” の続きを読む

ぐだぐだ低レベルプログラミング(86)ARM64(AArach64)、整数乗算命令その2

mulEC
Joseph Halfmoon

前回は整数の掛け算命令について表にまとめたところで終わってました。今回は3つある演算パターンのうち、すべてのレジスタのビット幅が等しい第1のパターンを練習してみます。「普通のMUL命令」もこの分類です。でも基本は積和演算MADDです。MULはMADDのエイリアスという扱い、実際にはMADDだと。
“ぐだぐだ低レベルプログラミング(86)ARM64(AArach64)、整数乗算命令その2” の続きを読む

ぐだぐだ低レベルプログラミング(85)ARM64(AArch64)、整数乗算命令その1

mul_INSN_Alias2
Joseph Halfmoon

前回まで実習していた条件フラグ命令、マニュアルにはまだまだあるな~と思っていたのですが勘違いでした。今回ターゲットのArm Cortex-A72はARMv8の中ではキホンのARMv8p0なので使えないようです。残念。そこで今回から整数の乗算命令に転じます。これがまた、いろいろあるのよ。今回はざっと眺めるだけ、実習なし。 “ぐだぐだ低レベルプログラミング(85)ARM64(AArch64)、整数乗算命令その1” の続きを読む

ぐだぐだ低レベルプログラミング(84)ARM64(AArch64)、条件選択命令群その2

CSEL_2
Joseph Halfmoon

前回は、数多い条件選択命令群のうち「表」の4命令を動かしてみました。今回は「裏(エイリアス)」の5命令を動かしてみたいと思います。共通しているのは、「表」の命令と条件判断がひっくりかえっていること、そして本来3オペランドの「表」命令のソースオペランドに制限を加えていることです。 “ぐだぐだ低レベルプログラミング(84)ARM64(AArch64)、条件選択命令群その2” の続きを読む

ぐだぐだ低レベルプログラミング(83)ARM64(AArch64)、条件選択命令群その1

CSEL_Table2
Joseph Halfmoon

前々回から条件フラグNZCV関連の命令に入っておりますが、非常に充実してます。これは32ビット時代のArmがほぼ全ての命令に条件判断を付与できるという過激なあり方だったのを64ビット化するときに廃止してしまった「罪滅ぼし」なんじゃないかと密かに思います。知らんけど。今回は条件付き選択命令。多すぎて1回では終わらず。
“ぐだぐだ低レベルプログラミング(83)ARM64(AArch64)、条件選択命令群その1” の続きを読む

ブロックを積みながら(85) Node-RED、自作モジュールのロード

moduleTest
Joseph Halfmoon

前回はfunctionノードの中で、require(‘os’)的な操作をする方法を練習。これでNode-REDの中から node.js の各種パッケージが使えるようになり嬉しいです。でも「出来合い」のモジュールだけじゃあな。自前のも使いたい、ということで今回は自前モジュールも同じ方法で使えることを確かめました。 “ブロックを積みながら(85) Node-RED、自作モジュールのロード” の続きを読む

ぐだぐだ低レベルプログラミング(82)ARM64(AArch64)、条件付き比較命令

setFlagInstTable
Joseph Halfmoon

前回から、条件フラグNZCV関係に踏み入っております。やる前から分かっていたことですが、真か偽か判定するだけの1ビットのフラグですが、複数条件重なれば、霧のかかった老人の頭では、いずれが真か偽、是々非々、是々非々。特に今回の命令群は条件フラグの操作をするのに条件を判断して行うという奇怪さであります。 “ぐだぐだ低レベルプログラミング(82)ARM64(AArch64)、条件付き比較命令” の続きを読む

ぐだぐだ低レベルプログラミング(81)ARM64(AArch64)、条件フラグ、NZCV

nzcvFalgs
Joseph Halfmoon

面倒なので避けてきましたが、いよいよやらなければならないです。条件フラグ関係。昔から慣れ親しんだモノドモですが、RISC-Vの「フラグは無、その場で判断」方式を学んだあとは、とてもメンドく感じられるようになってます。今回はフラグが格納されている(ようにみえる)レジスタへのアクセスと基本的な上げ下げを動かしてみます。

“ぐだぐだ低レベルプログラミング(81)ARM64(AArch64)、条件フラグ、NZCV” の続きを読む

ぐだぐだ低レベルプログラミング(80)ARM64(AArch64)、Reverse命令一族

REV_RBIT
Joseph Halfmoon

前回は先行ビットカウント命令でした。今回はビット、バイトのリバース命令群です。どちらも「場合によっては」必要な操作で、こういう専用命令なしに処理しようとすると結構メンドイ処理になる操作であります。有って悪いことはないですが、こういう複雑な命令群がいろいろ実装されているArmは複雑(なRISC)?

“ぐだぐだ低レベルプログラミング(80)ARM64(AArch64)、Reverse命令一族” の続きを読む

ぐだぐだ低レベルプログラミング(79)ARM64(AArch64)、先行ビットカウント命令

Joseph Halfmoon

前回はシフト、ローテイトの落穂ひろいでした。今回は先行する(MSB側の)ビットカウントを行う命令です。時々「こういう操作」が必要なことがあり、「こういう専用命令」が無いと時間がかかるので有った方が嬉しい気もするのです。しかしArmはRISCの割には複雑な感じを醸しだしてる気もします(個人の感想です。) “ぐだぐだ低レベルプログラミング(79)ARM64(AArch64)、先行ビットカウント命令” の続きを読む

ぐだぐだ低レベルプログラミング(78)ARM64(AArch64)、シフト、ローテイトの片割

ShiftEC
Joseph Halfmoon

前回まで練習してきた即値でビット数を指定するシフト、ローテイト命令はビットフィールド転送とレジスタ抽出命令のエイリアスでした。しかしシフト、ローテイトには「片割れ」があります。レジスタでビット数を指定できる命令です。そちらも「エイリアス」あり、といいつつ、こちらはモロそのものじゃん。

“ぐだぐだ低レベルプログラミング(78)ARM64(AArch64)、シフト、ローテイトの片割” の続きを読む