RISC-Vベクトル拡張仕様書の読み直し。浮動小数点の型変換命令。型変換命令には、サイズも変わるものがあり、その際は書き込みベクトルレジスタのサイズも変わる。
13.17. 単一幅浮動所数点/整数型変換命令
浮動小数点値、符号なし整数、符号あり整数との間の変換操作が用意されており、変換元と変換先の両方がSEW幅である。
vfcvt.xu.f.v vd, vs2, vm # 浮動小数点から符号なし整数への変換. vfcvt.x.f.v vd, vs2, vm # 浮動小数点から符号付き整数への変換. vfcvt.rtz.xu.f.v vd, vs2, vm # 浮動小数点からtruncateを使用した符号なし整数への変換. vfcvt.rtz.x.f.v vd, vs2, vm # 浮動小数点からtruncateを使用した符号付き整数への変換. vfcvt.f.xu.v vd, vs2, vm # 符号なし整数から浮動小数点への変換. vfcvt.f.x.v vd, vs2, vm # 符号付き整数から浮動小数点への変換.
変換命令は、スカラ変換命令と同じ例外的な条件に関するルールに従います。 これらの変換は,ゼロに向かって丸めるrtz
の変種を除いて,frm
の動的丸めモードを使用します。
Note: rtz バリエーションは、C や Java などの言語で一般的な、 浮動小数点から整数への切り捨て変換を高速化するために提供されています。
13.18. 幅拡張浮動小数点/整数型変換命令
より小さな整数型や浮動小数点型のデータタイプを2倍の幅の型に変換する変換命令群が用意されています。
vfwcvt.xu.f.v vd, vs2, vm # 浮動小数点を倍幅の符号なし整数に変換. vfwcvt.x.f.v vd, vs2, vm # 浮動小数点を倍幅の符号付き整数に変換. vfwcvt.rtz.xu.f.v vd, vs2, vm # 浮動小数点をtruncateを使用した倍幅の符号なし整数に変換. vfwcvt.rtz.x.f.v vd, vs2, vm # 浮動小数点をtruncateを使用した倍幅の符号付き整数に変換. vfwcvt.f.xu.v vd, vs2, vm # 符号なし整数を倍幅の浮動小数点に変換. vfwcvt.f.x.v vd, vs2, vm # 符号付き整数を倍幅の浮動小数点に変換. vfwcvt.f.f.v vd, vs2, vm # 単一幅浮動小数点を倍幅の浮動小数点に変換.
これらの命令は、他の幅拡張命令(幅拡張ベクトル算術演算命令参照)と同様に、ベクトルレジスタのオーバーラップに対する制約があります。
Note: 倍幅のIEEE浮動小数点値は、常に単一幅の整数を正確に表すことができます。 Note: 倍幅のIEEE浮動小数点値は、常に単一幅のIEEE浮動小数点値を正確に表すことができます。 Note: 浮動小数点の幅拡張変換のフルセットは、単一の命令としてはサポートされていませんが、任意の幅拡張変換は、 同等の結果と追加の例外フラグを発生させずに、いくつかの倍のステップとして実装することができます。
13.19. 浮動小数点/整数 幅縮小型変換命令
vfncvt.xu.f.w vd, vs2, vm # 倍幅の浮動小数点を符号付き整数に変換. vfncvt.x.f.w vd, vs2, vm # 倍幅の浮動小数点を符号なし整数に変換. vfncvt.rtz.xu.f.w vd, vs2, vm # 倍幅の浮動小数点をtruncateを使用した符号なし整数に変換. vfncvt.rtz.x.f.w vd, vs2, vm # 倍幅の浮動小数点をtruncateを使用した符号付き整数に変換. vfncvt.f.xu.w vd, vs2, vm # 倍幅の符号なし整数を浮動小数点に変換. vfncvt.f.x.w vd, vs2, vm # 倍幅の符号付き整数を浮動小数点に変換. vfncvt.f.f.w vd, vs2, vm # 倍幅浮動小数点を単一幅の浮動小数点に変換. vfncvt.rod.f.f.w vd, vs2, vm # 倍幅浮動小数点をodd方向の丸めに使用して単一幅の浮動小数点に変換.
これらの命令は、他の幅縮小命令(ベクトル幅縮小算術演算命令参照)と同様に、ベクトルレジスタのオーバーラップに制約があります。
Note: 浮動小数点型幅拡張変換のフルセットは、単一の命令としてはサポートされていません。 変換は半減ステップのシーケンスで実装できます。 最後の半減ステップ以外が round-towards-odd (vfncvt.rod.f.f.w) を使用した場合、結果は同等に丸められ、同じ例外フラグが立てられます。 最後のステップだけは、希望する丸め方向を使用する必要があります。