[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

15.11 変換

マシンモード間の変換は全て、明示的な変換演算で表す必要がある。 例えば、あるバイトとある全語の和を表す式を、 (plus:SI (reg:QI 34) (reg:SI 80)) と書くことはできない。 なぜなら、plus という演算では、二つのオペランドは同じマシンモード を持つ必要があるからである。 このため、バイトの大きさのオペランドを変換演算で以下のように包む必要がある。

 
(plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))

変換演算は単なるプレースホルダーではない。というのは、指定された 変換前のモードから変換後のモードへ変換する方法はひとつだけでは ないからである。変換演算のコードで、変換方法を指定するのである。

以下のどの変換演算でも、xVOIDmode であってはならない。 変換を行なうべきがモードが判らないからである。 変換は、コンパイル時に行なうか、x をレジスタに保持するかのどちらかで なければならない。

(sign_extend:m x)

x をマシンモード m へ符号拡張した結果を 表現する。m は固定小数点モードでなければならず、 x は、m より幅の狭いモードの固定小数点値でなければならない。

(zero_extend:m x)

x をマシンモード m へゼロ拡張した結果を 表現する。m は固定小数点モードでなければならず、 x は、m より幅の狭いモードの固定小数点値でなければならない。

(float_extend:m x)

x をマシンモード m に拡張した結果を表現する。 m は浮動小数点モードでなければならず、x は、m より 幅の狭いモードの浮動小数点数値でなければならない。

(truncate:m x)

x をマシンモード m に打切った結果を表現する。 m は固定小数点モードでなければならず、xm より幅の広いモードの固定少数点値でなければならない。

(float_truncate:m x)

x をマシンモード m に打切った結果を表現する。 m は浮動小数点モードでなければならず、xm より幅の広いモードの浮動少数点値でなければならない。

(float:m x)

固定小数点値 x を符号付きとみなし、浮動小数点モード m に 変換した結果を表す。

(unsigned_float:m x)

固定小数点値 x を符号無しとみなし、浮動小数点モード m に 変換した結果を表す。

(fix:m x)

m が固定小数点モードの場合、浮動小数点値 x をモード m の 符号付き整数に変換した結果を表現する。 丸めをどのように行なうかは規定されないので、C プログラムをコンパイルする ときにこの演算が正しく使えるのは、オペランドが整数値を持つ時だけである。

(unsigned_fix:m x)

浮動小数点値 x をモード m の符号なし整数に変換した結果を表現する。 丸めをどのように行なうかは規定されない。

(fix:m x)

m が浮動小数点モードの場合、浮動小数点値 x(モードm で有効) を整数に変換した結果を表現する。この結果は浮動小数点モード m で 表現される。丸めは 0 に向かって行なわれる。


This document was generated using texi2html 1.78.