
今回はFCMP、浮動小数点数の比較命令です。前回のFMAX同様NaN(Not a Number)が絡んできます、メンドクセー。しかしそれ以前にフェイント一発かまされてます。比較結果は条件フラグに反映されるのですが、FPSR(浮動小数ステータス)に条件フラグが存在するのに、PSTATEの条件フラグに反映です。おっと。
“ぐだぐだ低レベルプログラミング(116)ARM64(AArach64)FCMP” の続きを読む
デバイス作る人>>デバイス使う人>>デバイスおたく
今回はFCMP、浮動小数点数の比較命令です。前回のFMAX同様NaN(Not a Number)が絡んできます、メンドクセー。しかしそれ以前にフェイント一発かまされてます。比較結果は条件フラグに反映されるのですが、FPSR(浮動小数ステータス)に条件フラグが存在するのに、PSTATEの条件フラグに反映です。おっと。
“ぐだぐだ低レベルプログラミング(116)ARM64(AArach64)FCMP” の続きを読む
今回は2つのソースオペランドのうち大きい方を求めるFMAXと小さい方を求めるFMINです。でもね、この命令それほどシンプルでもありません。メンドクセー奴、NaN(Not a Number)がからんでくるから。2命令FMAXとFMAXNMの差はNaNのとりあつかい次第。NaNにあまり深入りせずにお楽に行きたいです。
“ぐだぐだ低レベルプログラミング(115)ARM64(AArach64)FMAX, FMIN” の続きを読む
今回はFABS「他」などと省略してしまいましたが、残りはFNEGとFSQRTです。絶対値(FABS)に符号反転(FNEG)そして平方根(FSQRT)です。いずれもソース一つをとって結果ひとつをデスティネーションに返すもの。例によってARMv8.0に半精度はないので、単精度と倍精度のみ。お楽? “ぐだぐだ低レベルプログラミング(114)ARM64(AArach64)FABS他” の続きを読む
前回、浮動小数の積和演算はfused演算だということで、fused演算とそうでない計算の微妙な差を味わいました。今回は残りの積和演算命令を一気にやってみます。というか4つ並べて実行してその差をみるとようやく4個ある意味が良く分かるから。A64の命令多すぎるからさっさとやりたいというのも心の底にあり? “ぐだぐだ低レベルプログラミング(113)ARM64(AArach64)積和演算4種の違い” の続きを読む
今回から浮動小数の積和演算に入ります。「掛けた結果を足しこむ」積和演算は、積分というかコンボリューションというか、信号処理かAIか、近代的な各種アルゴリズムで多用される演算です。何万回どころか何億回も。そのような計算を高速化してくれる積和演算命令ですが、普通に掛けてから足すのとは結果が微妙に違うことがあると。ホントか?
“ぐだぐだ低レベルプログラミング(112)ARM64(AArach64)積和は”fused”” の続きを読む
前回、前々回と浮動小数点レジスタと整数レジスタの間での整数/固定小数点数変換をエクササイズしてきました。しかし今回は浮動小数点レジスタ間での「整数変換」です。フォーマット上は浮動小数、でも中身は整数ピッタンコの値というやつ。またまたメンドイ「丸め」が登場して命令ニーモニック数が激増。A64ホントに命令多いな。 “ぐだぐだ低レベルプログラミング(111)ARM64(AArach64)FRINTx” の続きを読む
前回まで浮動小数点数を整数または固定小数点数に変換するFCVT命令群を練習してきました。今回は逆、整数または固定小数点数を浮動小数点数に変換するSCVTF(符合付整数から)、UCVTF(符合無整数から)命令です。そんなん簡単じゃろう、と思うと意外とメンドイ奴らであります。元は整数なのに「丸め」が関係してくる、どゆこと?
“ぐだぐだ低レベルプログラミング(110)ARM64(AArach64)SCVTF、UCVTF” の続きを読む
前回のFCVT命令群は浮動小数点数を整数に変換するものでした。今回のFCVTは浮動小数点数を固定小数点数に変換する命令です。ハード上は整数、でも小数点位置を心の中に秘めて?いるもの。デジタル信号処理では必須。プログラマが小数点位置を管理しないとならないのでメンドイですが高速に計算できます。
前回は単精度と倍精度の間のフォーマット変換を行うFCVT命令でした。同じ命令が丸めモードの設定で動作が変わるので厄介でした。今回のFCVTxy命令群(xyのところはいろいろ)は、浮動小数点数を整数に変換するもの。丸めモードフラグには関係なしと喜んだら、かえって組み合わせが増えているでないの?もうメンドくてやりきれない?
“ぐだぐだ低レベルプログラミング(108)ARM64(AArach64)FCVTxy、整数変換” の続きを読む
今回はたった1命令、FCVTをエクササイズしてみます。練習に使っているArm Cortex-A72は半精度浮動小数のサポートが無く、以前残念に思ってましたが、今回は無くて良かった、という感じです。単精度があったら組み合わせは3倍、やめてくれです。前回登場のFPCRレジスタのRMビットが活躍します。
“ぐだぐだ低レベルプログラミング(107)ARM64(AArach64)FCVT” の続きを読む
何時までも見て見ぬふりもできないので今回はFPSRとFPCRを調べてみたいと思います。命令ニーモニックではありませぬ。フローティングポイントステータスレジスタとコントロールレジスタ、「メンドイ」浮動小数の例外やら非数(NaN)などの制御とそのステータスを保持するもの。今回はレジスタのビットの配置から。 “ぐだぐだ低レベルプログラミング(106)ARM64(AArach64)FPSR/FPCR” の続きを読む
今回はFMOV命令です。浮動小数点数の転送命令。浮動小数点といっても何の変換操作もなし、単なるビットパターンのコピーです。命令はたった一つFMOV。しかしこれが意外に面倒デス。今回でも組み合わせが多いのに、ターゲットマシンが半精度を使える機種だったらもっとやらないといけなかったです。頭文字Fの命令にチョロイのはいない。
“ぐだぐだ低レベルプログラミング(105)ARM64(AArach64)FMOV” の続きを読む
今回はFloating-point arithmetic(one source)のカテゴリを一気にやります。といっても3命令、FABS、FNEG、FSQRTです。例外とか「コマケー話」を避けていれば浮動小数点の演算そのものは素直で分かりやすい?です。そのうちメンドイ話もやらんといかんですが、今回は無し。平穏無事。。 “ぐだぐだ低レベルプログラミング(104)ARM64(AArach64)FABS、FSQRT他” の続きを読む
前回はFADD命令をさわり、ARMv8p0には半精度浮動小数点型が無かったというお間抜け発覚。今回はFADD以外のFloating-point arithmetic (two sources)の残りFSUB, FMUL, FNMUL, FDIVであります。まあ、以下同文っていう感じなんでありますが。単精度と倍精度。