-simple_float_conv


コンパイル・オプション / 最適化オプション

[指定形式]

-simple_float_conv

[詳細説明]

-

浮動小数点型の型変換処理の一部を省略します。

-

本オプション選択時は、次の浮動小数点の型変換を行う生成コードが変化します。

a) 32bit浮動小数点型から符号無し整数型への変換

b) 符号無し整数型から32bit浮動小数点型への変換

c) 32bit浮動小数点型を経由した、整数型から64bit浮動小数点型への変換

[例]

< a) 32bit浮動小数点型から符号無し整数型への変換>
-fpuの指定が有効でない場合は該当しません。

unsigned long func1(float f)
{
    return ((unsigned long)f);
}
 
オプション非指定時:
 _func1:
         FCMP   #4F000000H,R1
         BLT    L12
         FADD   #0CF800000H,R1
 L12:
         FTOI   R1,R1
         RTS
 
オプション指定時:
 _func1:
         FTOI   R1,R1
         RTS

< b) 符号無し整数型から32bit浮動小数点型への変換>
-fpuの指定が有効でない場合は該当しません。

float func2(unsigned long u)
{
       return ((float)u);
}
 
オプション非指定時:
 _func2:
         BTST   #31,R1
         BEQ    L15
         SHLR   #1,R1,R14
         AND    #1,R1
         OR     R14,R1
         ITOF   R1,R1
         FADD   R1,R1
         BRA    L16
 L15:
         ITOF   R1,R1
 L16:
         RTS
 
オプション指定時:
 _func2:
         ITOF   R1,R1
         RTS

< c) 32bit浮動小数点型を経由した、整数型から64bit浮動小数点型への変換>
-dbl_size=8の指定が有効でない場合は該当しません。

 double func3(long l)
 {
       return (double)(float)l;
 }
オプション非指定時:
_func3:
        ITOF    R1,R1
        BRA    __COM_CONVfd
 
オプション指定時:
        BRA    __COM_CONV32sd
 

[備考]

-

本オプション指定時、該当する型変換の処理に対するコード性能は向上しますが、変換結果がC,C++言語規格と異なる場合がありますので、ご注意ください。

-

-optimize=0のとき c)は無効になります。