gcc/libquadmath/quadmath.h
Francois-Xavier Coudert 1ec601bf9f re PR fortran/32049 (Support on x86_64 also kind=16)
/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * Makefile.def: Add libquadmath; build it with language=fortran.
        * configure.ac: Add libquadmath.
        * Makefile.tpl: Handle multiple libs in check-[+language+].
        * Makefile.in: Regenerate.
        * configure: Regenerate.

libquadmath/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        Initial implementation and checkin.

gcc/fortran/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * gfortranspec.c (find_spec_file): New function.
        (lang_specific_driver): Try to find .spec file and use it.
        * trans-io.c (iocall): Define
        * IOCALL_X_REAL128/COMPLEX128(,write).
        (gfc_build_io_library_fndecls): Build decl for __float128 I/O.
        (transfer_expr): Call __float128 I/O functions.
        * trans-types.c (gfc_init_kinds): Allow kind-16 belonging
        to __float128.

gcc/testsuite/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * gfortran.dg/quad_1.f90: New.
        * lib/gcc-defs.exp (gcc-set-multilib-library-path): Use also
        compiler arguments.
        * lib/gfortran.exp (gfortran_link_flags): Add libquadmath to
        library search path; call gcc-set-multilib-library-path with
        arguments such that libgfortran.spec is found.
        (gfortran_init): Add path for libgfortran.spec to
GFORTRAN_UNDER_TEST.

libgomp/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * configure.ac: 
        * configure: Regenerate.

libgfortran/
2010-11-13  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
            Tobias Burnus  <burnus@net-b.de>

        PR fortran/32049
        * Makefile.am: Add missing pow_r16_i4.c, add transfer128.c,
        link libquadmath, if used.
        * acinclude.m4 (LIBGFOR_CHECK_FLOAT128): Add.
        * configure.ac: Use it, touch spec file.
        * gfortran.map: Add pow_r16_i4 and
        transfer_(real,complex)128(,write) functions.
        * intrinsics/cshift0.c (cshift0): Handle __float128 type.
        * intrinsics/erfc_scaled_inc.c: Ditto.
        * intrinsics/pack_generic.c (pack): Ditto
        * intrinsics/spread_generic.c (spread): Ditto.
        * intrinsics/unpack_generic.c (unpack1): Ditto.
        * io/read.c (convert_real): Ditto.
        * io/transfer.c: Update comments.
        * io/transfer128.c: New file.
        * io/write_float.def (write_float): Handle __float128 type.
        * libgfortran.h: #include quadmath_weak.h, define __builtin_infq
        and nanq.
        * m4/mtype.m4: Handle __float128 type.
        * runtime/in_pack_generic.c (internal_pack): Ditto.
        * runtime/in_unpack_generic.c (internal_unpack): Ditto.
        * kinds-override.h: New file.
        * libgfortran.spec.in: Ditto.
        * generated/pow_r16_i4.c: Generated.
        * Makefile.in: Regenerate.
        * configure: Regenerate.
        * config.h: Regenerate.
        * bessel_r10.c: Regenerate.
        * bessel_r16.c: Regenerate.
        * bessel_r4.c: Regenerate.
        * bessel_r8.c: Regenerate.
        * exponent_r16.c: Regenerate.
        * fraction_r16.c: Regenerate.
        * nearest_r16.c: Regenerate.
        * norm2_r10.c: Regenerate.
        * norm2_r16.c: Regenerate.
        * norm2_r4.c: Regenerate.
        * norm2_r8.c: Regenerate.
        * rrspacing_r16.c: Regenerate.
        * set_exponent_r16.c: Regenerate.
        * spacing_r16.c: Regenerate.


Co-Authored-By: Tobias Burnus <burnus@net-b.de>

From-SVN: r166825
2010-11-16 22:23:19 +01:00

109 lines
3.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef QUADMATH_H
#define QUADMATH_H
#include <stdlib.h>
// Define the complex type corresponding to __float128
// ("_Complex __float128" is not allowed)
typedef _Complex float __attribute__((mode(TC))) __complex128;
// Prototypes for real functions
extern __float128 acosq (__float128);
extern __float128 acoshq (__float128);
extern __float128 asinq (__float128);
extern __float128 asinhq (__float128);
extern __float128 atanq (__float128);
extern __float128 atanhq (__float128);
extern __float128 atan2q (__float128, __float128);
extern __float128 cbrtq (const __float128);
extern __float128 ceilq (__float128);
extern __float128 copysignq (__float128, __float128);
extern __float128 coshq (__float128);
extern __float128 cosq (__float128);
extern __float128 erfq (__float128);
extern __float128 erfcq (__float128);
extern __float128 expq (__float128);
extern __float128 expm1q (__float128);
extern __float128 fabsq (__float128);
extern int finiteq (const __float128);
extern __float128 floorq (__float128);
extern __float128 fmodq (__float128, __float128);
extern __float128 frexpq (__float128, int *);
extern __float128 hypotq (__float128, __float128);
extern int isinfq (__float128);
extern int isnanq (const __float128);
extern __float128 j0q (__float128);
extern __float128 j1q (__float128);
extern __float128 jnq (int, __float128);
extern __float128 ldexpq (__float128, int);
extern __float128 lgammaq (__float128);
extern long long int llroundq (__float128);
extern __float128 logq (__float128);
extern __float128 log10q (__float128);
extern __float128 log1pq (__float128);
extern long int lroundq (__float128);
extern __float128 modfq (__float128, __float128 *);
extern __float128 nanq (const char *);
extern __float128 nextafterq (__float128, __float128);
extern __float128 powq (__float128, __float128);
extern __float128 remainderq (__float128, __float128);
extern __float128 rintq (__float128);
extern __float128 roundq (__float128);
extern __float128 scalblnq (__float128, long int);
extern __float128 scalbnq (__float128, int);
extern int signbitq (const __float128);
extern void sincosq (__float128, __float128 *, __float128 *);
extern __float128 sinhq (__float128);
extern __float128 sinq (__float128);
extern __float128 sqrtq (const __float128);
extern __float128 tanq (__float128);
extern __float128 tanhq (__float128);
extern __float128 tgammaq (__float128);
extern __float128 truncq (__float128);
extern __float128 y0q (__float128);
extern __float128 y1q (__float128);
extern __float128 ynq (int, __float128);
// Prototypes for complex functions
extern __float128 cabsq (__complex128);
extern __float128 cargq (__complex128);
extern __complex128 ccosq (__complex128);
extern __complex128 ccoshq (__complex128);
extern __complex128 cexpq (__complex128);
extern __complex128 cexpiq (__float128);
extern __complex128 clogq (__complex128);
extern __complex128 clog10q (__complex128);
extern __complex128 cpowq (__complex128, __complex128);
extern __complex128 csinq (__complex128);
extern __complex128 csinhq (__complex128);
extern __complex128 csqrtq (__complex128);
extern __complex128 ctanq (__complex128);
extern __complex128 ctanhq (__complex128);
// Prototypes for our I/O functions
extern int quadmath_strtopQ (const char *, char **, void *);
extern void quadmath_dtoaq (char *, size_t, size_t, __float128);
// Macros
#define FLT128_MAX 1.18973149535723176508575932662800702e4932Q
#define FLT128_MIN 3.36210314311209350626267781732175260e-4932Q
#define FLT128_EPSILON 1.92592994438723585305597794258492732e-34Q
#define FLT128_DENORM_MIN 6.475175119438025110924438958227646552e-4966Q
#define FLT128_MANT_DIG 113
#define FLT128_MIN_EXP (-16381)
#define FLT128_MAX_EXP 16384
// TODO -- One day, we need to add the following macros:
// FLT128_DIG, FLT128_MIN_10_EXP, FLT128_MAX_10_EXP
#define HUGE_VALQ __builtin_huge_valq()
/* The following alternative is valid, but brings the warning:
(floating constant exceeds range of __float128) */
/* #define HUGE_VALQ (__extension__ 0x1.0p32767Q) */
#endif