
前回はシフト、ローテイトの落穂ひろいでした。今回は先行する(MSB側の)ビットカウントを行う命令です。時々「こういう操作」が必要なことがあり、「こういう専用命令」が無いと時間がかかるので有った方が嬉しい気もするのです。しかしArmはRISCの割には複雑な感じを醸しだしてる気もします(個人の感想です。) “ぐだぐだ低レベルプログラミング(79)ARM64(AArch64)、先行ビットカウント命令” の続きを読む
デバイス作る人>>デバイス使う人>>デバイスおたく
前回はシフト、ローテイトの落穂ひろいでした。今回は先行する(MSB側の)ビットカウントを行う命令です。時々「こういう操作」が必要なことがあり、「こういう専用命令」が無いと時間がかかるので有った方が嬉しい気もするのです。しかしArmはRISCの割には複雑な感じを醸しだしてる気もします(個人の感想です。) “ぐだぐだ低レベルプログラミング(79)ARM64(AArch64)、先行ビットカウント命令” の続きを読む
前回まで練習してきた即値でビット数を指定するシフト、ローテイト命令はビットフィールド転送とレジスタ抽出命令のエイリアスでした。しかしシフト、ローテイトには「片割れ」があります。レジスタでビット数を指定できる命令です。そちらも「エイリアス」あり、といいつつ、こちらはモロそのものじゃん。
前回までのビットフィールド転送命令群と比べて今回のレジスタ抽出命令EXTRの動作は分かり易いです。エイリアスもシンプル、たった1個。ROR(右ローテイト)命令だけです。ただ、左にシフトして取り出すような操作のEXTRに対して、詰まっているデータから見ると右ローテイトに見えると。左右が時々混乱するのは私だけ? “ぐだぐだ低レベルプログラミング(77)ARM64(AArch64)、EXTR、RORでもある” の続きを読む
前回は符号付きのビットフィールドMOV命令、SBFMのエクササイズでした。今回は符号無のビットフィールドMOV命令、UBFMです。これまた多くのエイリアスの名のもとにいろいろな命令に化ける命令です。似た命令であるSBFMと「対称」と思って見に行くと期待を裏切られます。SBFMであったものが無いです。でも無くても大丈夫。 “ぐだぐだ低レベルプログラミング(76)ARM64(AArch64)、UBFM命令、伸縮自在” の続きを読む
今回は前回に引き続き第72回で調べたビットフィールドMOV命令をエクササイズしたいと思います。今回の命令はSBFM命令(サイン付きBFM)です。SBFM命令の動作説明図を上に再掲載します。しかし図を見てもなんだかよく分からない命令デス。しかしこれが変幻自在、エイリアスの隠れ蓑の下で多数の「重要命令」の実体となります。
“ぐだぐだ低レベルプログラミング(75)ARM64(AArch64)、SBFM命令、変幻自在” の続きを読む
今回は、前々回調べたビットフィールドMOV命令の実習です。最初から躓きました。BFM命令の別名(エイリアス)のBFC命令、アセンブラに拒否られました。実体命令であるBFMは存在しているんですがね。そのくせディスアセンブラは頼みもしないのにBFM命令をBFC命令にディスアセンブルしてくれます。いろいろあるのね、きっと。
前回、MOV命令の込み入った事情を図にしただけで「実習はまた今度」などと書きました。しかし今回も「また今度」の回であります。MOV命令の親戚?ビットフィールドMOV命令群がこれまた込み入っているためであります。ビットフィールド転送命令と聞くと地味な?感じがしますが、これがどうして非常に多数の命令に化けるのであります。
前回まで論理演算命令の「代表」AND命令をやりました。今回からは他の論理演算ORRやXORは飛ばし、転送命令MOVへ入りたいと思います。A64の命令多すぎ、さっさとやらないと終わりませぬ。しかしMOV、されどMOVであります。例によってMOVという実体なくaliasで紡がれているのですが事情いささか込み入っております。
前回に続き、A64の論理演算命令群、AND一族の2回目です。今回は演算結果をフラグに反映する「S」のついた命令どもをエクササイズしてみます。またands命令の「エイリアス」、tst命令についてもそのコード生成確認とともに練習してみます。Arm64ビットのクセに慣れればこれはこれでらくちん。
前回ようやく終わったadd系(足し算)の次はsub系(引き算)かというと似たことを繰り返しても仕方ないなと思いました。そこで算術演算命令の中で「微妙な」cmp系へ行きたいと思います。RISCあるあるの「実はcmp命令なんて無い」というオチの命令群です。勿論ちゃんと動作します。裏ではsub系命令が暗躍?していますぞ。