チャンネルごとに 32 ビットとして 128 ビットの NEON レジスタに格納されている ARGB ピクセルがあります。これを 8 ビット チャネル ARGB (ナローイングとサチュレーション) としてメモリに格納する必要があります。
vmla.32 q1, q2, d0; の後に結果を得ました。いくつかのサイクルを直接節約する mul 命令を介してナローイングまたはサチュレーションを達成できるかどうか疑問に思っています。
それについて行く最善の方法は何ですか?
のようなエンコーディングはありませんvmla.32 q1, q2, d0
。あなたが意味したと仮定しましょうq0
。
シンプルで素朴な答えは次のとおりです。
vqmovn.s32 d0, q1 // saturate and narrow 32 -> 16
vqmovn.s16 d0, q0 // saturate and narrow 16 -> 8
これは符号付き飽和を行います。符号なしの値がある場合は.u32
and.u16
型を使用し、符号付きの値があるが符号なしに飽和させたい場合は、vqmovun
命令を使用します。
ある種の絞り込み乗算を実行できるかどうかという質問に対して、それは正確な操作 (および関連する値) に大きく依存します。ただし、を使用していることを考えるとvmla
、答えは「おそらくそうではない」です。
NEON で飽和操作を使用して、最初から拡大を回避できますか?それとも、そのヘッドルームがすべて必要ですか?