re PR fortran/46625 (libquadmath: Mangle internal symbols; rename __float128 <-> string functions)
PR fortran/46625 * quadmath.map (QUADMATH_1.0): Remove quadmath_strtopQ and quadmath_dtoaq. Add strtoflt128 and quadmath_flt128tostr. * quadmath_weak.h (quadmath_strtopQ, quadmath_dtoaq): Remove. (strtoflt128, quadmath_flt128tostr): Add. * gdtoa/strtopQ.c (quadmath_strtopQ): Rename to... (strtoflt128): ... this. Return __float128, instead of writing to memory pointed by last argument. * quadmath.h: Use C style comments instead of C++ style. (quadmath_strtopQ, quadmath_dtoaq): Remove prototypes. (strtoflt128, quadmath_flt128tostr): Add prototypes. * libquadmath.texi (quadmath_dtoaq): Rename to quadmath_flt128tostr. (quadmath_strtopQ): Rename to strtoflt128. Adjust prototype, adjust examples. * quadmath_io.c (quadmath_dtoaq): Rename to... (quadmath_flt128tostr): ... this. libgfortran/ * io/write_float.def (DTOAQ): Use quadmath_flt128tostr instead of quadmath_dtoa. * io/transfer128.c (tmp1, tmp2): New variables, bring in strtoflt128 and quadmath_flt128tostr. (transfer_real128, transfer_real128_write, transfer_complex128, transfer_complex128_write): Remove tmp1/tmp2 variables. * io/read.c (convert_real): Use strtoflt128 instead of quadmath_strtopQ, adjust for the changed arguments and return value. From-SVN: r168856
This commit is contained in:
parent
327f73c19e
commit
e313241f91
|
@ -1,3 +1,16 @@
|
||||||
|
2011-01-16 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR fortran/46625
|
||||||
|
* io/write_float.def (DTOAQ): Use quadmath_flt128tostr
|
||||||
|
instead of quadmath_dtoa.
|
||||||
|
* io/transfer128.c (tmp1, tmp2): New variables, bring in
|
||||||
|
strtoflt128 and quadmath_flt128tostr.
|
||||||
|
(transfer_real128, transfer_real128_write, transfer_complex128,
|
||||||
|
transfer_complex128_write): Remove tmp1/tmp2 variables.
|
||||||
|
* io/read.c (convert_real): Use strtoflt128 instead of
|
||||||
|
quadmath_strtopQ, adjust for the changed arguments and return
|
||||||
|
value.
|
||||||
|
|
||||||
2011-01-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
2011-01-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||||
|
|
||||||
PR libgfortran/47296
|
PR libgfortran/47296
|
||||||
|
|
|
@ -165,7 +165,7 @@ convert_real (st_parameter_dt *dtp, void *dest, const char *buffer, int length)
|
||||||
#if defined(HAVE_GFC_REAL_16)
|
#if defined(HAVE_GFC_REAL_16)
|
||||||
# if defined(GFC_REAL_16_IS_FLOAT128)
|
# if defined(GFC_REAL_16_IS_FLOAT128)
|
||||||
case 16:
|
case 16:
|
||||||
__qmath_(quadmath_strtopQ) (buffer, NULL, dest);
|
*((GFC_REAL_16*) dest) = __qmath_(strtoflt128) (buffer, NULL);
|
||||||
break;
|
break;
|
||||||
# elif defined(HAVE_STRTOLD)
|
# elif defined(HAVE_STRTOLD)
|
||||||
case 16:
|
case 16:
|
||||||
|
|
|
@ -61,18 +61,17 @@ extern void transfer_complex128_write (st_parameter_dt *, void *, int);
|
||||||
export_proto(transfer_complex128_write);
|
export_proto(transfer_complex128_write);
|
||||||
|
|
||||||
|
|
||||||
/* Make sure that libquadmath is pulled in. The functions quadmath_strtopQ
|
/* Make sure that libquadmath is pulled in. The functions strtoflt128
|
||||||
and quadmath_dtoaq are weakly referrenced in convert_real and write_float;
|
and quadmath_flt128tostr are weakly referrenced in convert_real and
|
||||||
the pointer assignment with USED attribute make sure that there is a
|
write_float; the pointer assignment with USED attribute make sure
|
||||||
non-weakref dependence if the quadmath functions are used. That avoids
|
that there is a non-weakref dependence if the quadmath functions
|
||||||
segfault when libquad is statically linked. */
|
are used. That avoids segfault when libquadmath is statically linked. */
|
||||||
|
static void __attribute__((used)) *tmp1 = strtoflt128;
|
||||||
|
static void __attribute__((used)) *tmp2 = quadmath_flt128tostr;
|
||||||
|
|
||||||
void
|
void
|
||||||
transfer_real128 (st_parameter_dt *dtp, void *p, int kind)
|
transfer_real128 (st_parameter_dt *dtp, void *p, int kind)
|
||||||
{
|
{
|
||||||
static void __attribute__((used)) *tmp1 = quadmath_strtopQ;
|
|
||||||
static void __attribute__((used)) *tmp2 = quadmath_dtoaq;
|
|
||||||
|
|
||||||
transfer_real (dtp, p, kind);
|
transfer_real (dtp, p, kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,9 +79,6 @@ transfer_real128 (st_parameter_dt *dtp, void *p, int kind)
|
||||||
void
|
void
|
||||||
transfer_real128_write (st_parameter_dt *dtp, void *p, int kind)
|
transfer_real128_write (st_parameter_dt *dtp, void *p, int kind)
|
||||||
{
|
{
|
||||||
static void __attribute__((used)) *tmp1 = quadmath_strtopQ;
|
|
||||||
static void __attribute__((used)) *tmp2 = quadmath_dtoaq;
|
|
||||||
|
|
||||||
transfer_real (dtp, p, kind);
|
transfer_real (dtp, p, kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,9 +86,6 @@ transfer_real128_write (st_parameter_dt *dtp, void *p, int kind)
|
||||||
void
|
void
|
||||||
transfer_complex128 (st_parameter_dt *dtp, void *p, int kind)
|
transfer_complex128 (st_parameter_dt *dtp, void *p, int kind)
|
||||||
{
|
{
|
||||||
static void __attribute__((used)) *tmp1 = quadmath_strtopQ;
|
|
||||||
static void __attribute__((used)) *tmp2 = quadmath_dtoaq;
|
|
||||||
|
|
||||||
transfer_complex (dtp, p, kind);
|
transfer_complex (dtp, p, kind);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,9 +93,6 @@ transfer_complex128 (st_parameter_dt *dtp, void *p, int kind)
|
||||||
void
|
void
|
||||||
transfer_complex128_write (st_parameter_dt *dtp, void *p, int kind)
|
transfer_complex128_write (st_parameter_dt *dtp, void *p, int kind)
|
||||||
{
|
{
|
||||||
/* static void __attribute__((used)) *tmp1 = quadmath_strtopQ;
|
|
||||||
static void __attribute__((used)) *tmp2 = quadmath_dtoaq;*/
|
|
||||||
|
|
||||||
transfer_complex_write (dtp, p, kind);
|
transfer_complex_write (dtp, p, kind);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -975,7 +975,7 @@ sprintf (buffer, "%+-#" STR(MIN_FIELD_WIDTH) ".*" \
|
||||||
|
|
||||||
#if defined(GFC_REAL_16_IS_FLOAT128)
|
#if defined(GFC_REAL_16_IS_FLOAT128)
|
||||||
#define DTOAQ \
|
#define DTOAQ \
|
||||||
__qmath_(quadmath_dtoaq) (buffer, size, ndigits - 1, tmp);
|
__qmath_(quadmath_flt128tostr) (buffer, size, ndigits - 1, tmp);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define WRITE_FLOAT(x,y)\
|
#define WRITE_FLOAT(x,y)\
|
||||||
|
|
|
@ -1,5 +1,22 @@
|
||||||
2011-01-16 Jakub Jelinek <jakub@redhat.com>
|
2011-01-16 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR fortran/46625
|
||||||
|
* quadmath.map (QUADMATH_1.0): Remove quadmath_strtopQ
|
||||||
|
and quadmath_dtoaq. Add strtoflt128 and quadmath_flt128tostr.
|
||||||
|
* quadmath_weak.h (quadmath_strtopQ, quadmath_dtoaq): Remove.
|
||||||
|
(strtoflt128, quadmath_flt128tostr): Add.
|
||||||
|
* gdtoa/strtopQ.c (quadmath_strtopQ): Rename to...
|
||||||
|
(strtoflt128): ... this. Return __float128, instead of writing
|
||||||
|
to memory pointed by last argument.
|
||||||
|
* quadmath.h: Use C style comments instead of C++ style.
|
||||||
|
(quadmath_strtopQ, quadmath_dtoaq): Remove prototypes.
|
||||||
|
(strtoflt128, quadmath_flt128tostr): Add prototypes.
|
||||||
|
* libquadmath.texi (quadmath_dtoaq): Rename to quadmath_flt128tostr.
|
||||||
|
(quadmath_strtopQ): Rename to strtoflt128. Adjust prototype,
|
||||||
|
adjust examples.
|
||||||
|
* quadmath_io.c (quadmath_dtoaq): Rename to...
|
||||||
|
(quadmath_flt128tostr): ... this.
|
||||||
|
|
||||||
* quadmath.h (__quadmath_throw, __quadmath_nth): Define.
|
* quadmath.h (__quadmath_throw, __quadmath_nth): Define.
|
||||||
Use it for all prototypes.
|
Use it for all prototypes.
|
||||||
|
|
||||||
|
|
|
@ -49,18 +49,15 @@ THIS SOFTWARE.
|
||||||
#define _3 0
|
#define _3 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
__float128
|
||||||
#ifdef KR_headers
|
strtoflt128(CONST char *s, char **sp)
|
||||||
quadmath_strtopQ(s, sp, V) CONST char *s; char **sp; void *V;
|
|
||||||
#else
|
|
||||||
quadmath_strtopQ(CONST char *s, char **sp, void *V)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
static FPI fpi0 = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, SI };
|
static FPI fpi0 = { 113, 1-16383-113+1, 32766 - 16383 - 113 + 1, 1, SI };
|
||||||
ULong bits[4];
|
ULong bits[4];
|
||||||
Long exp;
|
Long exp;
|
||||||
int k;
|
int k;
|
||||||
ULong *L = (ULong*)V;
|
union { __float128 f; ULong L[4]; } u;
|
||||||
|
ULong *L = &u.L[0];
|
||||||
#ifdef Honor_FLT_ROUNDS
|
#ifdef Honor_FLT_ROUNDS
|
||||||
#include "gdtoa_fltrnds.h"
|
#include "gdtoa_fltrnds.h"
|
||||||
#else
|
#else
|
||||||
|
@ -102,5 +99,5 @@ quadmath_strtopQ(CONST char *s, char **sp, void *V)
|
||||||
}
|
}
|
||||||
if (k & STRTOG_Neg)
|
if (k & STRTOG_Neg)
|
||||||
L[_0] |= 0x80000000L;
|
L[_0] |= 0x80000000L;
|
||||||
return k;
|
return u.f;
|
||||||
}
|
}
|
||||||
|
|
|
@ -198,20 +198,20 @@ The following mathematical functions are available:
|
||||||
@chapter I/O Library Routines
|
@chapter I/O Library Routines
|
||||||
|
|
||||||
@menu
|
@menu
|
||||||
* @code{quadmath_strtopQ}: quadmath_strtopQ, Convert from string
|
* @code{strtoflt128}: strtoflt128, Convert from string
|
||||||
* @code{quadmath_dtoaq}: quadmath_dtoaq, Convert to string
|
* @code{quadmath_flt128tostr}: quadmath_flt128tostr, Convert to string
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
@node quadmath_strtopQ
|
@node strtoflt128
|
||||||
@section @code{quadmath_strtopQ} --- Convert from string
|
@section @code{strtoflt128} --- Convert from string
|
||||||
|
|
||||||
The function @code{dmath_strtopQ} converts a string into a
|
The function @code{dmath_strtopQ} converts a string into a
|
||||||
@code{__float128} number.
|
@code{__float128} number.
|
||||||
|
|
||||||
@table @asis
|
@table @asis
|
||||||
@item Syntax
|
@item Syntax
|
||||||
@code{int quadmath_strtopQ (const char *s, char **sp, void *V)}
|
@code{__float128 strtoflt128 (const char *s, char **sp)}
|
||||||
|
|
||||||
@c The return values are defined in gdtoa/gdtoa.h STRTOG_*
|
@c The return values are defined in gdtoa/gdtoa.h STRTOG_*
|
||||||
@c However, the values are currently not exported - thus we
|
@c However, the values are currently not exported - thus we
|
||||||
|
@ -221,7 +221,6 @@ The function @code{dmath_strtopQ} converts a string into a
|
||||||
@multitable @columnfractions .15 .70
|
@multitable @columnfractions .15 .70
|
||||||
@item @var{s} @tab input string
|
@item @var{s} @tab input string
|
||||||
@item @var{sp} @tab the address of the next character in the string
|
@item @var{sp} @tab the address of the next character in the string
|
||||||
@item @var{V} @tab @code{__float128} containing the converted number
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
The argument @var{sp} contains, if not @code{NULL}, the address of the
|
The argument @var{sp} contains, if not @code{NULL}, the address of the
|
||||||
|
@ -234,9 +233,8 @@ next character following the parts of the string, which have been read.
|
||||||
int main ()
|
int main ()
|
||||||
@{
|
@{
|
||||||
__float128 r;
|
__float128 r;
|
||||||
char str[200];
|
|
||||||
|
|
||||||
quadmath_strtopQ ("1.2345678", NULL, &r);
|
r = strtoflt128 ("1.2345678", NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@}
|
@}
|
||||||
|
@ -244,15 +242,15 @@ int main ()
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
|
|
||||||
@node quadmath_dtoaq
|
@node quadmath_flt128tostr
|
||||||
@section @code{quadmath_dtoaq} --- Convert to string
|
@section @code{quadmath_flt128tostr} --- Convert to string
|
||||||
|
|
||||||
The function @code{quadmath_dtoaq} converts a @code{__float128} floating-point
|
The function @code{quadmath_flt128tostr} converts a @code{__float128} floating-point
|
||||||
number into a string.
|
number into a string.
|
||||||
|
|
||||||
@table @asis
|
@table @asis
|
||||||
@item Syntax
|
@item Syntax
|
||||||
@code{void quadmath_dtoaq (char *s, size_t size, size_t n, __float128 x)}
|
@code{void quadmath_flt128tostr (char *s, size_t size, size_t n, __float128 x)}
|
||||||
|
|
||||||
@item @emph{Arguments}:
|
@item @emph{Arguments}:
|
||||||
@multitable @columnfractions .15 .70
|
@multitable @columnfractions .15 .70
|
||||||
|
@ -273,7 +271,7 @@ int main ()
|
||||||
|
|
||||||
r = 2.0q;
|
r = 2.0q;
|
||||||
r = sqrtq(r);
|
r = sqrtq(r);
|
||||||
quadmath_dtoaq (str, sizeof (str), 20, r);
|
quadmath_flt128tostr (str, sizeof (str), 20, r);
|
||||||
printf("%s\n", str);
|
printf("%s\n", str);
|
||||||
/* Prints: +1.41421356237309504880e+00 */
|
/* Prints: +1.41421356237309504880e+00 */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -23,8 +23,8 @@ Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
// Define the complex type corresponding to __float128
|
/* Define the complex type corresponding to __float128
|
||||||
// ("_Complex __float128" is not allowed)
|
("_Complex __float128" is not allowed) */
|
||||||
typedef _Complex float __attribute__((mode(TC))) __complex128;
|
typedef _Complex float __attribute__((mode(TC))) __complex128;
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
@ -35,7 +35,7 @@ typedef _Complex float __attribute__((mode(TC))) __complex128;
|
||||||
# define __quadmath_nth(fct) __attribute__((__nothrow__)) fct
|
# define __quadmath_nth(fct) __attribute__((__nothrow__)) fct
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Prototypes for real functions
|
/* Prototypes for real functions */
|
||||||
extern __float128 acosq (__float128) __quadmath_throw;
|
extern __float128 acosq (__float128) __quadmath_throw;
|
||||||
extern __float128 acoshq (__float128) __quadmath_throw;
|
extern __float128 acoshq (__float128) __quadmath_throw;
|
||||||
extern __float128 asinq (__float128) __quadmath_throw;
|
extern __float128 asinq (__float128) __quadmath_throw;
|
||||||
|
@ -103,7 +103,7 @@ extern __float128 y1q (__float128) __quadmath_throw;
|
||||||
extern __float128 ynq (int, __float128) __quadmath_throw;
|
extern __float128 ynq (int, __float128) __quadmath_throw;
|
||||||
|
|
||||||
|
|
||||||
// Prototypes for complex functions
|
/* Prototypes for complex functions */
|
||||||
extern __float128 cabsq (__complex128) __quadmath_throw;
|
extern __float128 cabsq (__complex128) __quadmath_throw;
|
||||||
extern __float128 cargq (__complex128) __quadmath_throw;
|
extern __float128 cargq (__complex128) __quadmath_throw;
|
||||||
extern __float128 cimagq (__complex128) __quadmath_throw;
|
extern __float128 cimagq (__complex128) __quadmath_throw;
|
||||||
|
@ -130,13 +130,13 @@ extern __complex128 ctanq (__complex128) __quadmath_throw;
|
||||||
extern __complex128 ctanhq (__complex128) __quadmath_throw;
|
extern __complex128 ctanhq (__complex128) __quadmath_throw;
|
||||||
|
|
||||||
|
|
||||||
// Prototypes for our I/O functions
|
/* Prototypes for string <-> __float128 conversion functions */
|
||||||
extern int quadmath_strtopQ (const char *, char **, void *) __quadmath_throw;
|
extern __float128 strtoflt128 (const char *, char **) __quadmath_throw;
|
||||||
extern void quadmath_dtoaq (char *, size_t, size_t, __float128)
|
extern void quadmath_flt128tostr (char *, size_t, size_t, __float128)
|
||||||
__quadmath_throw;
|
__quadmath_throw;
|
||||||
|
|
||||||
|
|
||||||
// Macros
|
/* Macros */
|
||||||
#define FLT128_MAX 1.18973149535723176508575932662800702e4932Q
|
#define FLT128_MAX 1.18973149535723176508575932662800702e4932Q
|
||||||
#define FLT128_MIN 3.36210314311209350626267781732175260e-4932Q
|
#define FLT128_MIN 3.36210314311209350626267781732175260e-4932Q
|
||||||
#define FLT128_EPSILON 1.92592994438723585305597794258492732e-34Q
|
#define FLT128_EPSILON 1.92592994438723585305597794258492732e-34Q
|
||||||
|
@ -144,8 +144,8 @@ extern void quadmath_dtoaq (char *, size_t, size_t, __float128)
|
||||||
#define FLT128_MANT_DIG 113
|
#define FLT128_MANT_DIG 113
|
||||||
#define FLT128_MIN_EXP (-16381)
|
#define FLT128_MIN_EXP (-16381)
|
||||||
#define FLT128_MAX_EXP 16384
|
#define FLT128_MAX_EXP 16384
|
||||||
// TODO -- One day, we need to add the following macros:
|
/* TODO -- One day, we need to add the following macros:
|
||||||
// FLT128_DIG, FLT128_MIN_10_EXP, FLT128_MAX_10_EXP
|
FLT128_DIG, FLT128_MIN_10_EXP, FLT128_MAX_10_EXP */
|
||||||
|
|
||||||
|
|
||||||
#define HUGE_VALQ __builtin_huge_valq()
|
#define HUGE_VALQ __builtin_huge_valq()
|
||||||
|
|
|
@ -65,6 +65,7 @@ QUADMATH_1.0 {
|
||||||
y0q;
|
y0q;
|
||||||
y1q;
|
y1q;
|
||||||
ynq;
|
ynq;
|
||||||
|
|
||||||
cabsq;
|
cabsq;
|
||||||
cargq;
|
cargq;
|
||||||
cimagq;
|
cimagq;
|
||||||
|
@ -89,8 +90,9 @@ QUADMATH_1.0 {
|
||||||
csqrtq;
|
csqrtq;
|
||||||
ctanq;
|
ctanq;
|
||||||
ctanhq;
|
ctanhq;
|
||||||
quadmath_strtopQ;
|
|
||||||
quadmath_dtoaq;
|
strtoflt128;
|
||||||
|
quadmath_flt128tostr;
|
||||||
local:
|
local:
|
||||||
*;
|
*;
|
||||||
};
|
};
|
||||||
|
|
|
@ -101,7 +101,7 @@ format (char * res, const __float128 x, size_t n)
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
quadmath_dtoaq (char *s, size_t size, size_t n, __float128 x)
|
quadmath_flt128tostr (char *s, size_t size, size_t n, __float128 x)
|
||||||
{
|
{
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
memset (buffer, 0, sizeof(buffer));
|
memset (buffer, 0, sizeof(buffer));
|
||||||
|
|
|
@ -130,8 +130,8 @@ __qmath3 (ctanq)
|
||||||
__qmath3 (ctanhq)
|
__qmath3 (ctanhq)
|
||||||
|
|
||||||
|
|
||||||
// Prototypes for our I/O functions
|
// Prototypes for string <-> flt128 conversion functions
|
||||||
__qmath3 (quadmath_strtopQ)
|
__qmath3 (strtoflt128)
|
||||||
__qmath3 (quadmath_dtoaq)
|
__qmath3 (quadmath_flt128tostr)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue