diff options
author | Stephane Carrez <Stephane.Carrez@worldnet.fr> | 2000-09-08 22:16:40 +0200 |
---|---|---|
committer | Stephane Carrez <ciceron@gcc.gnu.org> | 2000-09-08 22:16:40 +0200 |
commit | dfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3 (patch) | |
tree | 1dc567b8266ce8479953260b70b01007f3e1f8f3 | |
parent | f246ff2351ae53fa7ee78f29320225db84127f58 (diff) | |
download | gcc-dfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3.zip gcc-dfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3.tar.gz gcc-dfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3.tar.bz2 |
Unsigned -> float conversion for fp-bit.c
From-SVN: r36274
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/Makefile.in | 4 | ||||
-rw-r--r-- | gcc/config/fp-bit.c | 32 | ||||
-rw-r--r-- | gcc/config/fp-bit.h | 4 |
4 files changed, 46 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c92af02..1e5446d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2000-09-08 Stephane Carrez <Stephane.Carrez@worldnet.fr> + + * Makefile.in (DPBIT_FUNCS): Add _usi_to_df. + (FPBIT_FUNCS): Add _usi_to_sf. + * config/fp-bit.c (usi_to_float): New function. + * config/fp-bit.h (L_usi_to_sf, L_usi_to_df): Define. + (usi_to_float): Add appropriate #define. + 2000-09-08 Bernd Schmidt <bernds@redhat.co.uk> * i386-protos.h (sse_comparison_operator, mmx_reg_operand): Declare diff --git a/gcc/Makefile.in b/gcc/Makefile.in index fd51627..bebe9d6 100644 --- a/gcc/Makefile.in +++ b/gcc/Makefile.in @@ -753,12 +753,12 @@ LIB2FUNCS_EH = _eh FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \ _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \ _lt_sf _le_sf _unord_sf _si_to_sf _sf_to_si _negate_sf _make_sf \ - _sf_to_df _thenan_sf _sf_to_usi + _sf_to_df _thenan_sf _sf_to_usi _usi_to_sf DPBIT_FUNCS = _pack_df _unpack_df _addsub_df _mul_df _div_df \ _fpcmp_parts_df _compare_df _eq_df _ne_df _gt_df _ge_df \ _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \ - _df_to_sf _thenan_df _df_to_usi + _df_to_sf _thenan_df _df_to_usi _usi_to_df # The files that "belong" in CONFIG_H are deliberately omitted # because having them there would not be useful in actual practice. diff --git a/gcc/config/fp-bit.c b/gcc/config/fp-bit.c index 70a3f25..5f88518 100644 --- a/gcc/config/fp-bit.c +++ b/gcc/config/fp-bit.c @@ -1169,6 +1169,38 @@ si_to_float (SItype arg_a) } #endif /* L_si_to_sf || L_si_to_df */ +#if defined(L_usi_to_sf) || defined(L_usi_to_df) +FLO_type +usi_to_float (USItype arg_a) +{ + fp_number_type in; + + in.sign = 0; + if (!arg_a) + { + in.class = CLASS_ZERO; + } + else + { + in.class = CLASS_NUMBER; + in.normal_exp = FRACBITS + NGARDS; + in.fraction.ll = arg_a; + + while (in.fraction.ll > (1LL << (FRACBITS + NGARDS))) + { + in.fraction.ll >>= 1; + in.normal_exp += 1; + } + while (in.fraction.ll < (1LL << (FRACBITS + NGARDS))) + { + in.fraction.ll <<= 1; + in.normal_exp -= 1; + } + } + return pack_d (&in); +} +#endif + #if defined(L_sf_to_si) || defined(L_df_to_si) SItype float_to_si (FLO_type arg_a) diff --git a/gcc/config/fp-bit.h b/gcc/config/fp-bit.h index 0a020e1..1eb134d 100644 --- a/gcc/config/fp-bit.h +++ b/gcc/config/fp-bit.h @@ -66,6 +66,8 @@ Boston, MA 02111-1307, USA. */ #define L_le_df #define L_unord_sf #define L_unord_df +#define L_usi_to_sf +#define L_usi_to_df #define L_si_to_sf #define L_si_to_df #define L_sf_to_si @@ -193,6 +195,7 @@ typedef unsigned int UDItype __attribute__ ((mode (DI))); # define _lt_f2 __ltsf2 # define _le_f2 __lesf2 # define _unord_f2 __unordsf2 +# define usi_to_float __floatunsisf # define si_to_float __floatsisf # define float_to_si __fixsfsi # define float_to_usi __fixunssfsi @@ -211,6 +214,7 @@ typedef unsigned int UDItype __attribute__ ((mode (DI))); # define _lt_f2 __ltdf2 # define _le_f2 __ledf2 # define _unord_f2 __unorddf2 +# define usi_to_float __floatunsidf # define si_to_float __floatsidf # define float_to_si __fixdfsi # define float_to_usi __fixunsdfsi |