diff options
Diffstat (limited to 'gcc/config/pa/quadlib.c')
-rw-r--r-- | gcc/config/pa/quadlib.c | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/gcc/config/pa/quadlib.c b/gcc/config/pa/quadlib.c deleted file mode 100644 index 2c11600..0000000 --- a/gcc/config/pa/quadlib.c +++ /dev/null @@ -1,245 +0,0 @@ -/* Subroutines for long double support. - Copyright (C) 2000, 2002, 2004, 2005, 2006, 2009 Free Software Foundation, Inc. - -This file is part of GCC. - -GCC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 3, or (at your option) -any later version. - -GCC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -Under Section 7 of GPL version 3, you are granted additional -permissions described in the GCC Runtime Library Exception, version -3.1, as published by the Free Software Foundation. - -You should have received a copy of the GNU General Public License and -a copy of the GCC Runtime Library Exception along with this program; -see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -<http://www.gnu.org/licenses/>. */ - -/* HPUX TFmode compare requires a library call to _U_Qfcmp. It takes - a magic number as its third argument which indicates what to do. - The return value is an integer to be compared against zero. The - comparison conditions are the same as those listed in Table 8-12 - of the PA-RISC 2.0 Architecture book for the fcmp instruction. */ - -/* Raise FP_INVALID on SNaN as a side effect. */ -#define QCMP_INV 1 - -/* Comparison relations. */ -#define QCMP_UNORD 2 -#define QCMP_EQ 4 -#define QCMP_LT 8 -#define QCMP_GT 16 - -int _U_Qfcmp (long double a, long double b, int); -long _U_Qfcnvfxt_quad_to_sgl (long double); - -int _U_Qfeq (long double, long double); -int _U_Qfne (long double, long double); -int _U_Qfgt (long double, long double); -int _U_Qfge (long double, long double); -int _U_Qflt (long double, long double); -int _U_Qfle (long double, long double); -int _U_Qfltgt (long double, long double); -int _U_Qfunle (long double, long double); -int _U_Qfunlt (long double, long double); -int _U_Qfunge (long double, long double); -int _U_Qfungt (long double, long double); -int _U_Qfuneq (long double, long double); -int _U_Qfunord (long double, long double); -int _U_Qford (long double, long double); - -int _U_Qfcomp (long double, long double); - -long double _U_Qfneg (long double); -long double _U_Qfcopysign (long double, long double); - -#ifdef __LP64__ -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) -{ - return (_U_Qfcmp (a, b, QCMP_EQ) != 0); -} - -int -_U_Qfne (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_EQ) == 0); -} - -int -_U_Qfgt (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_GT) != 0); -} - -int -_U_Qfge (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_EQ | QCMP_GT) != 0); -} - -int -_U_Qflt (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_LT) != 0); -} - -int -_U_Qfle (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_EQ | QCMP_LT) != 0); -} - -int -_U_Qfltgt (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_LT | QCMP_GT) != 0); -} - -int -_U_Qfunle (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_EQ | QCMP_LT) != 0); -} - -int -_U_Qfunlt (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_LT) != 0); -} - -int -_U_Qfunge (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_EQ | QCMP_GT) != 0); -} - -int -_U_Qfungt (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_GT) != 0); -} - -int -_U_Qfuneq (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD | QCMP_EQ) != 0); -} - -int -_U_Qfunord (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_UNORD) != 0); -} - -int -_U_Qford (long double a, long double b) -{ - return (_U_Qfcmp (a, b, QCMP_INV | QCMP_EQ | QCMP_LT | QCMP_GT) != 0); -} - -int -_U_Qfcomp (long double a, long double b) -{ - if (_U_Qfcmp (a, b, QCMP_EQ) == 0) - return 0; - - return (_U_Qfcmp (a, b, QCMP_UNORD | QCMP_EQ | QCMP_GT) != 0 ? 1 : -1); -} - -/* Negate long double A. */ -long double -_U_Qfneg (long double a) -{ - union - { - long double ld; - int i[4]; - } u; - - u.ld = a; - u.i[0] ^= 0x80000000; - return u.ld; -} - -/* Return long double A with sign changed to sign of long double B. */ -long double -_U_Qfcopysign (long double a, long double b) -{ - union - { - long double ld; - int i[4]; - } ua, ub; - - ua.ld = a; - ub.ld = b; - ua.i[0] &= 0x7fffffff; - ua.i[0] |= (0x80000000 & ub.i[0]); - return ua.ld; -} - -#ifdef __LP64__ -/* This routine is only necessary for the PA64 port; for reasons unknown - _U_Qfcnvfxt_quad_to_sgl returns the integer in the high 32bits of the - return value. Ugh. */ -int -__U_Qfcnvfxt_quad_to_sgl (long double a) -{ - return _U_Qfcnvfxt_quad_to_sgl (a) >> 32; -} -#endif - -/* 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) -{ - extern long long _U_Qfcnvfxt_quad_to_dbl (long double a); - return (unsigned int) _U_Qfcnvfxt_quad_to_dbl (a); -} - -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 { - unsigned long long u[2]; - long double d[1]; -} quad_type; - -unsigned long long -_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); -} |