In perl.git, the branch blead has been updated <http://perl5.git.perl.org/perl.git/commitdiff/533686c97e2bcc046e9f800c5a5501785c800c62?hp=fb2eed93790ce9b6d4c7cfd4bca70e7e1769d10d>
- Log ----------------------------------------------------------------- commit 533686c97e2bcc046e9f800c5a5501785c800c62 Author: Jarkko Hietaniemi <[email protected]> Date: Sun Feb 1 12:16:59 2015 -0500 infnan: define NV_QNAN and NV_SNAN if feasible M perl.h commit d70489e16d7069fd5b21251ab9fee0030401c284 Author: Jarkko Hietaniemi <[email protected]> Date: Thu Jan 29 21:21:35 2015 -0500 infnan: comment tweak, IS_NUMBER_NOT_INT also if saw infnan M perl.h commit 498b0fa9b0b73af65d2cf95771a5a46515b62d34 Author: Jarkko Hietaniemi <[email protected]> Date: Sun Feb 1 12:17:41 2015 -0500 infnan: define NV_NAN (and NV_QNAN, NV_SNAN) if sunmath M perl.h commit 02e75e52e271c046df890b5089c2cb1953332c0d Author: Jarkko Hietaniemi <[email protected]> Date: Sat Jan 31 19:02:22 2015 -0500 Add NV_MANT_REAL_DIG. M perl.h commit 63a6ab05390e9366b7c3b10a6ac0714a82d2db1f Author: Jarkko Hietaniemi <[email protected]> Date: Wed Jan 28 21:00:59 2015 -0500 Add NV_IMPLICIT_BIT define. M perl.h commit 804d4e644e0717ca427c4a5f9e246097308e9c7a Author: Jarkko Hietaniemi <[email protected]> Date: Wed Jan 28 20:42:57 2015 -0500 Add NV_MIX_ENDIAN define. M perl.h commit d701dd28c38c0931ebcc0600a9bd5c8e71ea777f Author: Jarkko Hietaniemi <[email protected]> Date: Wed Jan 28 20:41:44 2015 -0500 Add NV_LITTLE_ENDIAN and NV_BIG_ENDIAN defines. M perl.h commit f03a9d388af16900bace7cd0767491dfc4c14ae0 Author: Jarkko Hietaniemi <[email protected]> Date: Wed Jan 28 20:38:04 2015 -0500 Wrong ifdef guard. M perl.h commit 075bc52772543e73ecc82a4b1c5f1a15307ed8b7 Author: Jarkko Hietaniemi <[email protected]> Date: Wed Jan 28 20:37:09 2015 -0500 Add DOUBLE_BIG_ENDIAN define. M perl.h commit 3fd106b1b3fe86e032abaa6004ddd46dabfcc482 Author: Jarkko Hietaniemi <[email protected]> Date: Wed Jan 28 20:34:24 2015 -0500 Move the endianness defines from sv.c to perl.h M perl.h M sv.c ----------------------------------------------------------------------- Summary of changes: perl.h | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- sv.c | 35 +++----------------------- 2 files changed, 91 insertions(+), 33 deletions(-) diff --git a/perl.h b/perl.h index 286e8d0..ea6e991 100644 --- a/perl.h +++ b/perl.h @@ -4323,9 +4323,11 @@ static const union { unsigned int __i; float __f; } __PL_inf_u = # endif # if !defined(NV_NAN) && defined(LDBL_QNAN) # define NV_NAN LDBL_QNAN +# define NV_QNAN LDBL_QNAN # endif # if !defined(NV_NAN) && defined(LDBL_SNAN) # define NV_NAN LDBL_SNAN +# define NV_SNAN LDBL_SNAN # endif #endif #if !defined(NV_NAN) && defined(DBL_NAN) @@ -4333,9 +4335,11 @@ static const union { unsigned int __i; float __f; } __PL_inf_u = #endif #if !defined(NV_NAN) && defined(DBL_QNAN) # define NV_NAN (NV)DBL_QNAN +# define NV_QNAN DBL_QNAN #endif #if !defined(NV_NAN) && defined(DBL_SNAN) # define NV_NAN (NV)DBL_SNAN +# define NV_SNAN DBL_QNAN #endif #if !defined(NV_NAN) && defined(NAN) # define NV_NAN (NV)NAN @@ -4346,6 +4350,11 @@ static const union { unsigned int __i; float __f; } __PL_inf_u = #if !defined(NV_NAN) && defined(SNAN) # define NV_NAN (NV)SNAN #endif +#if !defined(NV_NAN) && defined(I_SUNMATH) +# define NV_NAN (NV)quiet_nan() +# define NV_QNAN (NV)quiet_nan() +# define NV_SNAN (NV)signaling_nan() +#endif #if !defined(NV_NAN) # if INTSIZE == 4 /* See the discussion near __PL_inf_u. */ @@ -6254,7 +6263,7 @@ int flock(int fd, int op); int). value returned in pointed- to UV */ #define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */ -#define IS_NUMBER_NOT_INT 0x04 /* saw . or E notation */ +#define IS_NUMBER_NOT_INT 0x04 /* saw . or E notation or infnan */ #define IS_NUMBER_NEG 0x08 /* leading minus sign */ #define IS_NUMBER_INFINITY 0x10 /* this is big */ #define IS_NUMBER_NAN 0x20 /* this is not */ @@ -6413,6 +6422,84 @@ extern void moncontrol(int); #define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE #define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE|PERL_PV_ESCAPE_NONASCII +#if DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN || \ + DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN || \ + DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN +# define DOUBLE_LITTLE_ENDIAN +#endif + +#if DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_BIG_ENDIAN || \ + DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_BIG_ENDIAN || \ + DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN +# define DOUBLE_BIG_ENDIAN +#endif + +#if DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_LE_BE || \ + DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_MIXED_ENDIAN_BE_LE +# define DOUBLE_MIX_ENDIAN +#endif + +/* All the basic IEEE formats have the implicit bit, + * except for the 80-bit extended formats, which will undef this. */ +#define NV_IMPLICIT_BIT + +#ifdef LONG_DOUBLEKIND + +# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN || \ + LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \ + LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN +# define LONGDOUBLE_LITTLE_ENDIAN +# endif + +# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN || \ + LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN || \ + LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN +# define LONGDOUBLE_BIG_ENDIAN +# endif + +# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \ + LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN +# define LONGDOUBLE_X86_80_BIT +# ifdef USE_LONG_DOUBLE +# undef NV_IMPLICIT_BIT +# endif +# endif + +# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN || \ + LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN +# define LONGDOUBLE_DOUBLEDOUBLE +# endif + +#endif /* LONG_DOUBLEKIND */ + +#if NVSIZE == DOUBLESIZE +# ifdef DOUBLE_LITTLE_ENDIAN +# define NV_LITTLE_ENDIAN +# endif +# ifdef DOUBLE_BIG_ENDIAN +# define NV_BIG_ENDIAN +# endif +# ifdef DOUBLE_MIX_ENDIAN +# define NV_MIX_ENDIAN +# endif +#elif NVSIZE == LONG_DOUBLESIZE +# ifdef LONGDOUBLE_LITTLE_ENDIAN +# define NV_LITTLE_ENDIAN +# endif +# ifdef LONGDOUBLE_BIG_ENDIAN +# define NV_BIG_ENDIAN +# endif +#endif + +/* The implicit bit platforms include the implicit bit + * in the NV_MANT_DIG. The bit isn't really there, however, + * so the real count of mantissa bits is one less. */ +#ifdef NV_IMPLICIT_BIT +# define NV_MANT_REAL_DIG (NV_MANT_DIG - 1) +#else +# define NV_MANT_REAL_DIG +#endif + /* (KEEP THIS LAST IN perl.h!) diff --git a/sv.c b/sv.c index a0e1801..cf888fd 100644 --- a/sv.c +++ b/sv.c @@ -10834,34 +10834,7 @@ Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, sv_vcatpvfn_flags(sv, pat, patlen, args, svargs, svmax, maybe_tainted, SV_GMAGIC|SV_SMAGIC); } -#if DOUBLEKIND == DOUBLE_IS_IEEE_754_32_BIT_LITTLE_ENDIAN || \ - DOUBLEKIND == DOUBLE_IS_IEEE_754_64_BIT_LITTLE_ENDIAN || \ - DOUBLEKIND == DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN -# define DOUBLE_LITTLE_ENDIAN -#endif - -#ifdef HAS_LONG_DOUBLEKIND - -# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN || \ - LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \ - LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN -# define LONGDOUBLE_LITTLE_ENDIAN -# endif - -# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN || \ - LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN || \ - LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN -# define LONGDOUBLE_BIG_ENDIAN -# endif - -# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN || \ - LONG_DOUBLEKIND == LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN -# define LONGDOUBLE_X86_80_BIT -# endif - -# if LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN || \ - LONG_DOUBLEKIND == LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN -# define LONGDOUBLE_DOUBLEDOUBLE +#ifdef LONGDOUBLE_DOUBLEDOUBLE /* The first double can be as large as 2**1023, or '1' x '0' x 1023. * The second double can be as small as 2**-1074, or '0' x 1073 . '1'. * The sum of them can be '1' . '0' x 2096 . '1', with implied radix point @@ -10871,10 +10844,8 @@ Perl_sv_vcatpvfn(pTHX_ SV *const sv, const char *const pat, const STRLEN patlen, * of dynamically growing buffer might be better, start at just 16 bytes * (for example) and grow only when necessary. Or maybe just by looking * at the exponents of the two doubles? */ -# define DOUBLEDOUBLE_MAXBITS 2098 -# endif - -#endif /* HAS_LONG_DOUBLE */ +# define DOUBLEDOUBLE_MAXBITS 2098 +#endif /* vhex will contain the values (0..15) of the hex digits ("nybbles" * of 4 bits); 1 for the implicit 1, and the mantissa bits, four bits -- Perl5 Master Repository
