aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephane Carrez <Stephane.Carrez@worldnet.fr>2000-09-08 22:16:40 +0200
committerStephane Carrez <ciceron@gcc.gnu.org>2000-09-08 22:16:40 +0200
commitdfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3 (patch)
tree1dc567b8266ce8479953260b70b01007f3e1f8f3
parentf246ff2351ae53fa7ee78f29320225db84127f58 (diff)
downloadgcc-dfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3.zip
gcc-dfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3.tar.gz
gcc-dfaf3cdbc47cb897ddb1ade88e8d9f77bc9608a3.tar.bz2
Unsigned -> float conversion for fp-bit.c
From-SVN: r36274
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/Makefile.in4
-rw-r--r--gcc/config/fp-bit.c32
-rw-r--r--gcc/config/fp-bit.h4
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