
前回から64bitのRISC-V搭載のK210にターゲットを切り替えたのですが、今回はまさかの問題勃発。Flashに書き込めません。というか接続するとPCの挙動が不審。どうしたものか。そこで困ったときのラズパイ頼み、Picoの母艦のラズパイ4機にK210ボードへの書き込みをお願い。OK、単精度浮動小数点add命令動いています。
デバイス作る人>>デバイス使う人>>デバイスおたく
前回から64bitのRISC-V搭載のK210にターゲットを切り替えたのですが、今回はまさかの問題勃発。Flashに書き込めません。というか接続するとPCの挙動が不審。どうしたものか。そこで困ったときのラズパイ頼み、Picoの母艦のラズパイ4機にK210ボードへの書き込みをお願い。OK、単精度浮動小数点add命令動いています。
RISC-VインタナショナルがVectorなどの拡張命令セット多数を制定したとのニュースが流れるなか、こちらはようやく64ビット命令に入ります。前回まで32ビットのRISC-V、GD32VF103でしたが、今回からは64ビット、Kendryte社のK210です。前回同様VSCode+PlatformIOでのビルドは同じ、しかしプラットフォームが異なるのでまずはアセンブラ命令を走らせる環境の確認から。
前回の乗算に比べると今回の除算命令は分かり易いです。商と余りのどちらか結果はひとつだけという割り切りの効果でしょう。C書いていたら、どちらか一つを求めるのが普通だし、プログラミング言語的にもあっている感じ。そんなこんななのでサクッとやりたいと思います。割り算だよ。
前回は、RISC-Vの乗算命令と除算命令を1命令づつ動かしてみました。今回は 乗算命令 の全貌を見てみます。といっても4命令ですが。実装がシンプルになるように考慮した結果でしょうが、命令の使用方法はクセが強い、気がします(個人の感想です。)それにnucleriのツールチェーンにも制限が?
今回は、CISC風に言うと 無条件JMP、CALL、RETといった制御転送系の命令です。しかし例のごとくで、RISC-Vには CALL に相当する JALとJALRしかありません。「ジャル」一つでJMPもRETも皆やってしまう。清々しいというのはこういうものを言うような気がします。書き方は結構なんでもあり、なんだけれども。 “ぐだぐだ低レベルプログラミング(37) RISC-V、無条件JMPもRETも皆CALL” の続きを読む
前回、メモリアドレスをロードする小技をやったので、今回のロード、ストアでそれを使うかと思っていたですが、その影もありません。単純な命令テストだな。だって時間無かったのだもん。すみません。まあ一応RV32Iが定義しているロードストア命令の全種類を網羅、といっても8個ばかりですが。
前回条件分岐をやり、今回はロード、ストアのつもりだったのですが、1つ忘れていることに気づきました。32ビットの即値、つまりはメモリアドレスのロードです。RISC系CPUでは限られた命令のビット幅との兼ね合いで苦労する部分ですが、RISC-Vはカッコよく始末している方ではないかと思います。とりあえずシンボルアドレスをGETしてメモリロードをしてみます。 “ぐだぐだ低レベルプログラミング(35) RISC-V、32ビットのアドレスをロードする小技” の続きを読む
前回は比較命令でした。比較した結果を格納するフラグが無いと知ってちょっとギョッとしましたが、キャリーやオーバーフローに対応する結果がレジスタに入れば問題ない、と。今回は条件分岐です。フラグが無いので分岐命令自身がレジスタの内容を判定して飛びます。慣れたらかえって便利かも。必要十分な命令がそろっているし。
前回は、論理演算 and命令を使って、オペランドによって生成される命令がRV32Iだったり、RV32Cになったりするのを目にしました。今回は算術演算 add と sub です。RISC-Vに「直交的な」エンコーディングを想像してはなりませぬ。今回は2つの命令の「割り切った」関係を観察したいと思います。割り算じゃないけど。
前回、RISC-Vにmv(move)命令は実は無いのだ、という衝撃?の事実をおさらいしました。今回は、and(論理積)命令です。andみたいなプリミティブな操作の命令に何か細工をする余地などあるのか?ま、当然「工夫」があるわけですが。でもね、andとorとxorは一緒、流石に。1回で3命令進捗!
前回、RISC-Vのアセンブラを再開できたので、今回からは1命令づつ命令を動かしていきたいと思います。最初はMOVE(RISC-VのニーモニックではMV)命令です。単なるレジスタ間の転送。しかし、そこにある「仕掛け」をみるとRISC-Vのやり方というものが理解できる感じがします。単なるMOVE、されどMOVEか。クセが強いのう。