
前回ようやく2要素を演算した結果の要素のビット幅が変わる奴らをやっつけ終えました。今回から1要素を処理して1要素が得られる系統の命令に入ります。ともかく命令数が多いのでコマケー話は踏みつぶしてサッサと通り過ぎたい気でいるのですがどうなることか。その初回は「カウント系」です。クセさえ分かればどおってことない。ホントか?
“ぐだぐだ低レベルプログラミング(146)ARM64(AArach64)SIMD カウント系” の続きを読む
デバイス作る人>>デバイス使う人>>デバイスおたく
前回ようやく2要素を演算した結果の要素のビット幅が変わる奴らをやっつけ終えました。今回から1要素を処理して1要素が得られる系統の命令に入ります。ともかく命令数が多いのでコマケー話は踏みつぶしてサッサと通り過ぎたい気でいるのですがどうなることか。その初回は「カウント系」です。クセさえ分かればどおってことない。ホントか?
“ぐだぐだ低レベルプログラミング(146)ARM64(AArach64)SIMD カウント系” の続きを読む
前回は、SIMD要素のビット幅が狭く(narrow)なる、広く(wide/long)なる命令の転送パターンを整数加算を例にいくつか練習してみました。今回は、丸め有/丸め無、符合付/符号無、各種組み合わせを練習してみます。題材は整数加算のみなんだけれども。いったいどんだけ組み合わせがあるんじゃ。つくづく命令多過ぎA64。
前回に続きSIMDの比較命令の練習です。今回は浮動小数型。条件一致すればオール1、不一致でオール0が結果です。いつもの通りA64の命令多すぎ、と書いておきます。前回の整数型であったビット比較が無くなって1個減ったと思ったら、絶対値比較が2個も増えている。かえって練習するパターン増だと。流石だなA64。
前回は演算後のHavingで桁あふれに備える系統の命令を実験しました。今回はサチュレーション演算によって桁あふれしない範囲内に結果をとどめるための系統の命令を使ってみます。SQADD、UQSUBなどと命令ニーモニックの中にQを含む命令共です。しかし命令充実(A64の命令数大すぎ。)とても1回じゃ練習しきれませぬ。 “ぐだぐだ低レベルプログラミング(137)ARM64(AArach64)SIMD sqadd” の続きを読む
前回はチラリと代数学が出てきてビビリました。今回はビビらないで済む普通の算術っす。整数の足し算ね。でもSIMDあるあるデス。整数の足し算といっても一筋縄ではいかんのですな(勿論フツーの足し算もあるけれども。)今回は加算後に1ビット右シフトを伴う(値をだいたい半分にするということだね)一族を練習してみます。
“ぐだぐだ低レベルプログラミング(136)ARM64(AArach64)SIMD shadd” の続きを読む
何度も書いてますが、A64の命令、特にSIMD命令多すぎ。SIMDで普通の足し算だのはメンドイのでほぼ省略、ユニークな奴らだけ練習してます。前回はニュートン・ラフソン法にてご利益があるらしい命令をやりました。今回は多項式っす。ここを掘っていくと群、環、体などという者どもが飛び出してくること必定。ヤバイ命令だよ。
“ぐだぐだ低レベルプログラミング(135)ARM64(AArach64)SIMD pmul” の続きを読む