diff options
author | John David Anglin <dave.anglin@nrc-cnrc.gc.ca> | 2005-12-05 03:23:37 +0000 |
---|---|---|
committer | John David Anglin <danglin@gcc.gnu.org> | 2005-12-05 03:23:37 +0000 |
commit | 7db0cc7eb281e27b860bb763917f0308ecac7ca9 (patch) | |
tree | de455ad5a1f16e22e7656df5d0aea566d7d46947 | |
parent | 56540d20c22609161b4ebcb340b05050b39c6701 (diff) | |
download | gcc-7db0cc7eb281e27b860bb763917f0308ecac7ca9.zip gcc-7db0cc7eb281e27b860bb763917f0308ecac7ca9.tar.gz gcc-7db0cc7eb281e27b860bb763917f0308ecac7ca9.tar.bz2 |
re PR target/25166 (FAIL: gcc.c-torture/execute/conversion.c compilation)
PR target/25166
* pa/pa.c (pa_hpux_init_libfuncs): Add _U_Qfcnvxf_usgl_to_quad and
_U_Qfcnvxf_udbl_to_quad to set of initialized libfuncs.
* pa/quadlib.c (_U_Qfcnvxf_usgl_to_quad, _U_Qfcnvxf_udbl_to_quad): New
functions.
From-SVN: r108039
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/config/pa/pa.c | 2 | ||||
-rw-r--r-- | gcc/config/pa/quadlib.c | 31 |
3 files changed, 34 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 15da7d4..33b61fc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-12-04 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> + + PR target/25166 + * pa/pa.c (pa_hpux_init_libfuncs): Add _U_Qfcnvxf_usgl_to_quad and + _U_Qfcnvxf_udbl_to_quad to set of initialized libfuncs. + * pa/quadlib.c (_U_Qfcnvxf_usgl_to_quad, _U_Qfcnvxf_udbl_to_quad): New + functions. + 2005-12-04 Joseph S. Myers <joseph@codesourcery.com> * c-typeck.c (null_pointer_constant_p): New function. diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index fee8d1c..c9bac91 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -5350,6 +5350,8 @@ pa_hpux_init_libfuncs (void) set_conv_libfunc (sfloat_optab, TFmode, SImode, "_U_Qfcnvxf_sgl_to_quad"); set_conv_libfunc (sfloat_optab, TFmode, DImode, "_U_Qfcnvxf_dbl_to_quad"); + set_conv_libfunc (ufloat_optab, TFmode, SImode, "_U_Qfcnvxf_usgl_to_quad"); + set_conv_libfunc (ufloat_optab, TFmode, DImode, "_U_Qfcnvxf_udbl_to_quad"); } #endif diff --git a/gcc/config/pa/quadlib.c b/gcc/config/pa/quadlib.c index 3766090..bce99d2 100644 --- a/gcc/config/pa/quadlib.c +++ b/gcc/config/pa/quadlib.c @@ -64,7 +64,9 @@ long double _U_Qfneg (long double); int __U_Qfcnvfxt_quad_to_sgl (long double); #endif unsigned int _U_Qfcnvfxt_quad_to_usgl(long double); +long double _U_Qfcnvxf_usgl_to_quad (unsigned int); unsigned long long _U_Qfcnvfxt_quad_to_udbl(long double); +long double _U_Qfcnvxf_udbl_to_quad (unsigned long long); int _U_Qfeq (long double a, long double b) @@ -186,27 +188,42 @@ __U_Qfcnvfxt_quad_to_sgl (long double a) } #endif -/* HP only has signed conversion in library, so need to synthesize an - unsigned version */ +/* HP only has signed conversion in the C library, so need to synthesize + unsigned versions. */ unsigned int -_U_Qfcnvfxt_quad_to_usgl(long double a) +_U_Qfcnvfxt_quad_to_usgl (long double a) { extern long long _U_Qfcnvfxt_quad_to_dbl (long double a); return (unsigned int) _U_Qfcnvfxt_quad_to_dbl (a); } -/* HP only has signed conversion in library, so need to synthesize an - unsigned version */ +long double +_U_Qfcnvxf_usgl_to_quad (unsigned int a) +{ + extern long double _U_Qfcnvxf_dbl_to_quad (long long); + return _U_Qfcnvxf_dbl_to_quad ((long long) a); +} + typedef union { - long long unsigned int u[2]; + unsigned long long u[2]; long double d[1]; } quad_type; unsigned long long -_U_Qfcnvfxt_quad_to_udbl(long double a) +_U_Qfcnvfxt_quad_to_udbl (long double a) { extern quad_type _U_Qfcnvfxt_quad_to_quad (long double a); quad_type u; u = _U_Qfcnvfxt_quad_to_quad(a); return u.u[1]; } + +long double +_U_Qfcnvxf_udbl_to_quad (unsigned long long a) +{ + extern long double _U_Qfcnvxf_quad_to_quad (quad_type a); + quad_type u; + u.u[0] = 0; + u.u[1] = a; + return _U_Qfcnvxf_quad_to_quad (u); +} |