New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[PATCH] Add optional GCC-only support for using long doubles on Win32 #14204
Comments
From @steve-m-hayThe attached patch attempts to add optional GCC-only support for using long doubles on Win32, but doesn't quite work and I can't figure out why not. When building with the command "dmake USE_LONG_DOUBLE=define" we get a miniperl.exe created, but when it is used to run the command "..\miniperl.exe -I..\lib -f ..\write_buildcustomize.pl .." it fails like this: Invalid version format (negative version number) at lib/vars.pm line 3. This "Invalid version format" error is typical of messing up the floating point routines (stringify/numify), but I haven't figured out exactly what the problem is yet. I'm recording what I've got so far in this ticket so that it doesn't get lost. |
From @steve-m-hay0001-Add-optional-GCC-only-support-for-using-long-doubles.patchFrom e1b480c084792aaab40916f6c6772bddf665df76 Mon Sep 17 00:00:00 2001
From: Steve Hay <steve.m.hay@googlemail.com>
Date: Fri, 19 Sep 2014 17:49:51 +0100
Subject: [PATCH] Add optional GCC-only support for using long doubles on Win32
---
win32/Makefile | 4 +++
win32/config.gc | 14 +++++-----
win32/config_H.gc | 8 +++---
win32/config_sh.PL | 44 ++++++++++++++++++++++++++++++--
win32/makefile.mk | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
5 files changed, 131 insertions(+), 14 deletions(-)
diff --git a/win32/Makefile b/win32/Makefile
index 16585b2..e5c3c86 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -26,6 +26,7 @@ INST_TOP = $(INST_DRV)\perl
#
# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
# on a 64-bit version of Windows.
+#
#WIN64 = undef
#
@@ -85,12 +86,14 @@ USE_IMP_SYS = define
# then get a number of fails from make test i.e. bugs - complain to them not us ;-).
# You will also be unable to take full advantage of perl5.8's support for multiple
# encodings and may see lower IO performance. You have been warned.
+#
USE_PERLIO = define
#
# Comment this out if you don't want to enable large file support for
# some reason. Should normally only be changed to maintain compatibility
# with an older release of perl.
+#
USE_LARGE_FILES = define
#
@@ -98,6 +101,7 @@ USE_LARGE_FILES = define
# (If you're building a 64-bit perl then you will have 64-bit integers whether
# or not this is uncommented.)
# Note: This option is not supported in 32-bit MSVC60 builds.
+#
#USE_64_BIT_INT = define
#
diff --git a/win32/config.gc b/win32/config.gc
index b57a243..45c4f1b 100644
--- a/win32/config.gc
+++ b/win32/config.gc
@@ -913,19 +913,19 @@ sGMTIME_max="2147483647"
sGMTIME_min="0"
sLOCALTIME_max="2147483647"
sLOCALTIME_min="0"
-sPRIEUldbl='"E"'
-sPRIFUldbl='"F"'
-sPRIGUldbl='"G"'
+sPRIEUldbl='"LE"'
+sPRIFUldbl='"LF"'
+sPRIGUldbl='"LG"'
sPRIXU64='"lX"'
sPRId64='"ld"'
-sPRIeldbl='"e"'
-sPRIfldbl='"f"'
-sPRIgldbl='"g"'
+sPRIeldbl='"Le"'
+sPRIfldbl='"Lf"'
+sPRIgldbl='"Lg"'
sPRIi64='"li"'
sPRIo64='"lo"'
sPRIu64='"lu"'
sPRIx64='"lx"'
-sSCNfldbl='"f"'
+sSCNfldbl='"Lf"'
sched_yield=''
scriptdir='~INST_TOP~~INST_VER~\bin'
scriptdirexp='~INST_TOP~~INST_VER~\bin'
diff --git a/win32/config_H.gc b/win32/config_H.gc
index abb1f9e..e70800a 100644
--- a/win32/config_H.gc
+++ b/win32/config_H.gc
@@ -4500,10 +4500,10 @@
* This symbol, if defined, contains the string used by stdio to
* format long doubles (format 'f') for input.
*/
-/*#define PERL_PRIfldbl "f" / **/
-/*#define PERL_PRIgldbl "g" / **/
-/*#define PERL_PRIeldbl "e" / **/
-/*#define PERL_SCNfldbl "f" / **/
+/*#define PERL_PRIfldbl "Lf" / **/
+/*#define PERL_PRIgldbl "Lg" / **/
+/*#define PERL_PRIeldbl "Le" / **/
+/*#define PERL_SCNfldbl "Lf" / **/
/* NEED_VA_COPY:
* This symbol, if defined, indicates that the system stores
diff --git a/win32/config_sh.PL b/win32/config_sh.PL
index f20be97..ef6ad32 100644
--- a/win32/config_sh.PL
+++ b/win32/config_sh.PL
@@ -151,12 +151,20 @@ else {
$opt{ssizetype} = 'int';
$opt{st_ino_size} = 4;
}
+
+# set 64-bit-int options
if ($opt{use64bitint} eq 'define') {
- $opt{d_nv_preserves_uv} = 'undef';
+ if ($opt{uselongdouble} eq 'define') {
+ $opt{d_nv_preserves_uv} = 'define';
+ $opt{nv_preserves_uv_bits} = 64;
+ }
+ else {
+ $opt{d_nv_preserves_uv} = 'undef';
+ $opt{nv_preserves_uv_bits} = 53;
+ }
$opt{ivdformat} = qq{"I64d"};
$opt{ivsize} = 8;
$opt{ivtype} = $int64;
- $opt{nv_preserves_uv_bits} = 53;
$opt{sPRIXU64} = qq{"I64X"};
$opt{sPRId64} = qq{"I64d"};
$opt{sPRIi64} = qq{"I64i"};
@@ -190,6 +198,38 @@ else {
$opt{uvxformat} = '"lx"';
}
+# set long double options
+if ($opt{uselongdouble} eq 'define') {
+ $opt{d_frexpl} = 'define';
+ $opt{d_isnanl} = 'define';
+ $opt{d_modfl} = 'define';
+ $opt{d_modflproto} = 'define';
+ $opt{d_sqrtl} = 'define';
+ $opt{d_strtold} = 'define';
+ $opt{d_PRIeldbl} = 'define';
+ $opt{d_PRIfldbl} = 'define';
+ $opt{d_PRIgldbl} = 'define';
+ $opt{d_SCNfldbl} = 'define';
+ $opt{nvsize} = 12;
+ $opt{nvtype} = 'long double';
+ $opt{nv_overflows_integers_at} = '256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0';
+}
+else {
+ $opt{d_frexpl} = 'undef';
+ $opt{d_isnanl} = 'undef';
+ $opt{d_modfl} = 'undef';
+ $opt{d_modflproto} = 'undef';
+ $opt{d_sqrtl} = 'undef';
+ $opt{d_strtold} = 'undef';
+ $opt{d_PRIeldbl} = 'undef';
+ $opt{d_PRIfldbl} = 'undef';
+ $opt{d_PRIgldbl} = 'undef';
+ $opt{d_SCNfldbl} = 'undef';
+ $opt{nvsize} = 8;
+ $opt{nvtype} = 'double';
+ $opt{nv_overflows_integers_at} = '256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0';
+}
+
# change the s{GM|LOCAL}TIME_{min|max} for VS2005 (aka VC 8) and
# VS2008 (aka VC 9) or higher (presuming that later versions will have
# at least the range of that).
diff --git a/win32/makefile.mk b/win32/makefile.mk
index 5a69973..2f1d550 100644
--- a/win32/makefile.mk
+++ b/win32/makefile.mk
@@ -32,6 +32,7 @@ INST_TOP *= $(INST_DRV)\perl
#
# Uncomment if you want to build a 32-bit Perl using a 32-bit compiler
# on a 64-bit version of Windows.
+#
#WIN64 *= undef
#
@@ -91,12 +92,14 @@ USE_IMP_SYS *= define
# then get a number of fails from make test i.e. bugs - complain to them not us ;-).
# You will also be unable to take full advantage of perl5.8's support for multiple
# encodings and may see lower IO performance. You have been warned.
+#
USE_PERLIO *= define
#
# Comment this out if you don't want to enable large file support for
# some reason. Should normally only be changed to maintain compatibility
# with an older release of perl.
+#
USE_LARGE_FILES *= define
#
@@ -104,9 +107,16 @@ USE_LARGE_FILES *= define
# (If you're building a 64-bit perl then you will have 64-bit integers whether
# or not this is uncommented.)
# Note: This option is not supported in 32-bit MSVC60 builds.
+#
#USE_64_BIT_INT *= define
#
+# Uncomment this if you want to support the use of long doubles in GCC builds.
+# This option is not supported for MSVC builds.
+#
+#USE_LONG_DOUBLE *=define
+
+#
# uncomment exactly one of the following
#
# Visual C++ 6.x (aka Visual C++ 98)
@@ -292,6 +302,7 @@ USE_IMP_SYS *= undef
USE_PERLIO *= undef
USE_LARGE_FILES *= undef
USE_64_BIT_INT *= undef
+USE_LONG_DOUBLE *= undef
.IF "$(USE_IMP_SYS)" == "define"
PERL_MALLOC = undef
@@ -358,6 +369,12 @@ CCTYPE = SDK2003SP1
USE_64_BIT_INT != undef
.ENDIF
+# Disable the long double option for MSVC builds since that compiler
+# does not support it.
+.IF "$(CCTYPE)" != "GCC"
+USE_LONG_DOUBLE != undef
+.ENDIF
+
ARCHITECTURE = $(PROCESSOR_ARCHITECTURE)
.IF "$(ARCHITECTURE)" == "AMD64"
ARCHITECTURE = x64
@@ -428,6 +445,11 @@ LIB32 = $(ARCHPREFIX)ar rc
IMPLIB = $(ARCHPREFIX)dlltool
RSC = $(ARCHPREFIX)windres
+.IF "$(USE_LONG_DOUBLE)" == "define"
+BUILDOPT += -D__USE_MINGW_ANSI_STDIO
+MINIBUILDOPT += -D__USE_MINGW_ANSI_STDIO
+.ENDIF
+
GCCWRAPV *= $(shell for /f "delims=. tokens=1,2,3" %i in ('$(CC) -dumpversion') do @if "%i"=="4" (if "%j" geq "3" echo define) else if "%i" geq "5" (echo define))
.IF "$(GCCWRAPV)" == "define"
@@ -949,6 +971,7 @@ CFG_VARS = \
usemultiplicity=$(USE_MULTI) ~ \
useperlio=$(USE_PERLIO) ~ \
use64bitint=$(USE_64_BIT_INT) ~ \
+ uselongdouble=$(USE_LONG_DOUBLE) ~ \
uselargefiles=$(USE_LARGE_FILES) ~ \
usesitecustomize=$(USE_SITECUST) ~ \
LINK_FLAGS=$(LINK_FLAGS) ~ \
@@ -1024,6 +1047,7 @@ config.w32 : $(CFGSH_TMPL)
@echo #undef HAS_ATOLL>>$@
@echo #undef HAS_STRTOLL>>$@
@echo #undef HAS_STRTOULL>>$@
+ @echo #undef Size_t_size>>$@
@echo #undef IVTYPE>>$@
@echo #undef UVTYPE>>$@
@echo #undef IVSIZE>>$@
@@ -1036,7 +1060,20 @@ config.w32 : $(CFGSH_TMPL)
@echo #undef UVxf>>$@
@echo #undef UVXf>>$@
@echo #undef USE_64_BIT_INT>>$@
- @echo #undef Size_t_size>>$@
+ @echo #undef HAS_FREXPL>>$@
+ @echo #undef HAS_ISNANL>>$@
+ @echo #undef HAS_MODFL>>$@
+ @echo #undef HAS_MODFL_PROTO>>$@
+ @echo #undef HAS_SQRTL>>$@
+ @echo #undef HAS_STRTOLD>>$@
+ @echo #undef PERL_PRIfldbl>>$@
+ @echo #undef PERL_PRIgldbl>>$@
+ @echo #undef PERL_PRIeldbl>>$@
+ @echo #undef PERL_SCNfldbl>>$@
+ @echo #undef NVTYPE>>$@
+ @echo #undef NVSIZE>>$@
+ @echo #undef NV_OVERFLOWS_INTEGERS_AT>>$@
+ @echo #undef USE_LONG_DOUBLE>>$@
.IF "$(USE_LARGE_FILES)"=="define"
@echo #define Off_t $(INT64)>>$@
@echo #define LSEEKSIZE ^8>>$@
@@ -1066,8 +1103,13 @@ config.w32 : $(CFGSH_TMPL)
@echo #define UVTYPE unsigned $(INT64)>>$@
@echo #define IVSIZE ^8>>$@
@echo #define UVSIZE ^8>>$@
+.IF "$(USE_LONG_DOUBLE)"=="define"
+ @echo #define NV_PRESERVES_UV>>$@
+ @echo #define NV_PRESERVES_UV_BITS 64>>$@
+.ELSE
@echo #undef NV_PRESERVES_UV>>$@
@echo #define NV_PRESERVES_UV_BITS 53>>$@
+.ENDIF
@echo #define IVdf "I64d">>$@
@echo #define UVuf "I64u">>$@
@echo #define UVof "I64o">>$@
@@ -1088,6 +1130,37 @@ config.w32 : $(CFGSH_TMPL)
@echo #define UVXf "lX">>$@
@echo #undef USE_64_BIT_INT>>$@
.ENDIF
+.IF "$(USE_LONG_DOUBLE)"=="define"
+ @echo #define HAS_FREXPL>>$@
+ @echo #define HAS_ISNANL>>$@
+ @echo #define HAS_MODFL>>$@
+ @echo #define HAS_MODFL_PROTO>>$@
+ @echo #define HAS_SQRTL>>$@
+ @echo #define HAS_STRTOLD>>$@
+ @echo #define PERL_PRIfldbl "Lf">>$@
+ @echo #define PERL_PRIgldbl "Lg">>$@
+ @echo #define PERL_PRIeldbl "Le">>$@
+ @echo #define PERL_SCNfldbl "Lf">>$@
+ @echo #define NVTYPE long double>>$@
+ @echo #define NVSIZE ^12>>$@
+ @echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0>>$@
+ @echo #define USE_LONG_DOUBLE>>$@
+.ELSE
+ @echo #undef HAS_FREXPL>>$@
+ @echo #undef HAS_ISNANL>>$@
+ @echo #undef HAS_MODFL>>$@
+ @echo #undef HAS_MODFL_PROTO>>$@
+ @echo #undef HAS_SQRTL>>$@
+ @echo #undef HAS_STRTOLD>>$@
+ @echo #undef PERL_PRIfldbl>>$@
+ @echo #undef PERL_PRIgldbl>>$@
+ @echo #undef PERL_PRIeldbl>>$@
+ @echo #undef PERL_SCNfldbl>>$@
+ @echo #define NVTYPE double>>$@
+ @echo #define NVSIZE ^8>>$@
+ @echo #define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0>>$@
+ @echo #undef USE_LONG_DOUBLE>>$@
+.ENDIF
@echo #endif>>$@
..\git_version.h : $(MINIPERL) ..\make_patchnum.pl
--
1.8.4.msysgit.0
|
From @bulk88On Mon Nov 03 00:55:36 2014, shay wrote:
I hit that when I tried to make Intel C long double build. The problem is MS CRT silently accepts %lf as a 8 byte double (the #ifdefs in the CRT source wind up with %lf being identical to %f) on C stack, not a 12 byte double on C stack. va_arg macro/function incorrectly advances the va_list ptr, and all further var args are gibberish too. Mingw offers its own printf/etc for static linking into your binary, which is 12 byte long double compliant. ICC doesn't have an equivalent printf, so I tried using the mingw's .o to make the long double aware printf get linked in and then gave up (i'd have to separate the printf symbols from the .o from the rest of mingw's CRT static link code, and then I realized I might as well compile it from scratch, then I gave up). i attached a patch of how far I got. The sad thing is MS CRT's source code has provisions for long doubles, it is just not compiled in by default. Win16 and Visual C for Win16 and MS C for DOS has 12 byte long doubles. MS seems to have discontinued them during the switch to Win32. -- |
From @bulk880001-icc-longdouble-wip.patchFrom 6d149aa0e5feff84216d4da035c7f1b2278e81bc Mon Sep 17 00:00:00 2001
From: Daniel Dragan <bulk88@hotmail.com>
Date: Thu, 9 Jan 2014 03:10:40 -0500
Subject: [PATCH] icc longdouble wip
---
generate_uudmap.c | 2 ++
perl.h | 12 ++++++++++++
uconfig.h | 8 ++++----
util.c | 9 +++++++--
win32/Makefile | 10 +++++-----
win32/config.vc | 18 +++++++++---------
win32/config_H.vc | 30 +++++++++++++++---------------
7 files changed, 54 insertions(+), 35 deletions(-)
diff --git a/generate_uudmap.c b/generate_uudmap.c
index b6307c0..b72f374 100644
--- a/generate_uudmap.c
+++ b/generate_uudmap.c
@@ -108,6 +108,8 @@ int main(int argc, char **argv) {
int bits;
struct mg_data_raw_t *p = mg_data_raw;
+ fprintf(stderr, "sizeof ld %d\n", sizeof(long double));
+
if (argc < 4 || argv[1][0] == '\0' || argv[2][0] == '\0'
|| argv[3][0] == '\0') {
fprintf(stderr, "Usage: %s uudemap.h bitcount.h mg_data.h\n", argv[0]);
diff --git a/perl.h b/perl.h
index b6e0c3e..6c7d5bd 100644
--- a/perl.h
+++ b/perl.h
@@ -1671,6 +1671,7 @@ typedef UVTYPE UV;
# endif
# if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
# undef USE_LONG_DOUBLE /* Ouch! */
+ #error undefed ULD
# endif
#endif
@@ -1763,10 +1764,15 @@ typedef NVTYPE NV;
# include <ieeefp.h>
#endif
+#ifndef USE_LONG_DOUBLE
+#error no LD
+#endif
+
#ifdef USE_LONG_DOUBLE
# ifdef I_SUNMATH
# include <sunmath.h>
# endif
+# include <mathimf.h>
# define NV_DIG LDBL_DIG
# ifdef LDBL_MANT_DIG
# define NV_MANT_DIG LDBL_MANT_DIG
@@ -1798,6 +1804,7 @@ typedef NVTYPE NV;
# endif
# endif
# endif
+
# ifdef HAS_SQRTL
# define Perl_cos cosl
# define Perl_sin sinl
@@ -1843,6 +1850,7 @@ EXTERN_C long double modfl(long double, long double *);
# endif
# endif
#else
+#error die
# define NV_DIG DBL_DIG
# ifdef DBL_MANT_DIG
# define NV_MANT_DIG DBL_MANT_DIG
@@ -5833,6 +5841,10 @@ extern void moncontrol(int);
*/
+#ifndef HAS_SQRTL
+#error no long
+#endif
+
#endif /* Include guard */
/*
diff --git a/uconfig.h b/uconfig.h
index 8e728ab..e29fabd 100644
--- a/uconfig.h
+++ b/uconfig.h
@@ -4361,10 +4361,10 @@
* This symbol, if defined, contains the string used by stdio to
* format long doubles (format 'f') for input.
*/
-/*#define PERL_PRIfldbl "llf" / **/
-/*#define PERL_PRIgldbl "llg" / **/
-/*#define PERL_PRIeldbl "lle" / **/
-/*#define PERL_SCNfldbl "llf" / **/
+#define PERL_PRIfldbl "llf" / **/
+#define PERL_PRIgldbl "llg" / **/
+#define PERL_PRIeldbl "lle" / **/
+#define PERL_SCNfldbl "llf" / **/
/* PERL_MAD:
* This symbol, if defined, indicates that the Misc Attribution
diff --git a/util.c b/util.c
index f308e93..455b7bb 100644
--- a/util.c
+++ b/util.c
@@ -4769,10 +4769,12 @@ Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
{
int retval;
va_list ap;
+ restart:
PERL_ARGS_ASSERT_MY_SNPRINTF;
va_start(ap, format);
+ memset(buffer, 0, len);
#ifdef HAS_VSNPRINTF
- retval = vsnprintf(buffer, len, format, ap);
+ retval = ___mingw_vsnprintf(buffer, len, format, ap);
#else
retval = vsprintf(buffer, format, ap);
#endif
@@ -4784,8 +4786,11 @@ Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
||
(len > 0 && (Size_t)retval >= len)
#endif
- )
+ ) {
+ DebugBreak();
+ goto restart;
Perl_croak_nocontext("panic: my_snprintf buffer overflow");
+ }
return retval;
}
diff --git a/win32/Makefile b/win32/Makefile
index 885f8ce..2c90bef 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -134,14 +134,14 @@ CCTYPE = MSVC90
#
# If you are using Intel C++ Compiler uncomment this
#
-#__ICC = define
+__ICC = define
#
# uncomment next line if you want debug version of perl (big,slow)
# If not enabled, we automatically try to use maximum optimization
# with all compilers that are known to have a working optimizer.
#
-#CFG = Debug
+CFG = Debug
#
# uncomment to enable linking with setargv.obj under the Visual C
@@ -443,10 +443,10 @@ LOCDEFS = -DPERLDLL -DPERL_CORE
SUBSYS = console
CXX_FLAG = -TP -EHsc
-LIBC = msvcrt.lib
+LIBC = msvcrtd.lib
!IF "$(CFG)" == "Debug"
-OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+OPTIMIZE = -Od -MDd -Zi -DDEBUGGING
LINK_DBG = -debug
!ELSE
# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
@@ -517,7 +517,7 @@ LIBBASEFILES = $(LIBBASEFILES) bufferoverflowU.lib
LIBFILES = $(LIBBASEFILES) $(LIBC)
#EXTRACFLAGS = -nologo -GF -W4 -wd4127 -wd4706
-EXTRACFLAGS = -nologo -GF -W3
+EXTRACFLAGS = -nologo -GF -W3 /Qlong-double /Qpc80 -DUSE_LONG_DOUBLE -DHAS_LONG_DOUBLE
CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
$(PCHFLAGS) $(OPTIMIZE)
LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
diff --git a/win32/config.vc b/win32/config.vc
index a15b926..bc90fd8 100644
--- a/win32/config.vc
+++ b/win32/config.vc
@@ -449,7 +449,7 @@ d_socklen_t='undef'
d_sockpair='undef'
d_socks5_init='undef'
d_sprintf_returns_strlen='define'
-d_sqrtl='undef'
+d_sqrtl='define'
d_srand48_r='undef'
d_srandom_r='undef'
d_sresgproto='undef'
@@ -828,16 +828,16 @@ nm_opt=''
nm_so_opt=''
nonxs_ext='Errno'
nroff=''
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
+nvEUformat='"LE"'
+nvFUformat='"LF"'
+nvGUformat='"LG"'
nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
+nveformat='"Le"'
+nvfformat='"Lf"'
+nvgformat='"Lg"'
+nvsize='12'
+nvtype='long double'
o_nonblock='O_NONBLOCK'
obj_ext='.obj'
old_pthread_create_joinable=''
diff --git a/win32/config_H.vc b/win32/config_H.vc
index f55a6d2..7f612f3 100644
--- a/win32/config_H.vc
+++ b/win32/config_H.vc
@@ -1930,9 +1930,9 @@
* C preprocessor can make decisions based on it. It is only
* defined if the system supports long doubles.
*/
-#define HAS_LONG_DOUBLE /**/
+/*#define HAS_LONG_DOUBLE /**/
#ifdef HAS_LONG_DOUBLE
-#define LONG_DOUBLESIZE 8 /**/
+#define LONG_DOUBLESIZE 16 /**/
#endif
/* HAS_LONG_LONG:
@@ -3558,7 +3558,7 @@
* available to break a long double floating-point number into
* a normalized fraction and an integral power of 2.
*/
-/*#define HAS_FREXPL / **/
+#define HAS_FREXPL
/* HAS_STRUCT_FS_DATA:
* This symbol, if defined, indicates that the struct fs_data
@@ -3780,8 +3780,8 @@
* and 1.150000. The bug has been seen in certain versions of glibc,
* release 2.2.2 is known to be okay.
*/
-/*#define HAS_MODFL / **/
-/*#define HAS_MODFL_PROTO / **/
+#define HAS_MODFL
+#define HAS_MODFL_PROTO
/*#define HAS_MODFL_POW32_BUG / **/
/* HAS_MPROTECT:
@@ -3954,7 +3954,7 @@
* This symbol, if defined, indicates that the sqrtl routine is
* available to do long double square roots.
*/
-/*#define HAS_SQRTL / **/
+#define HAS_SQRTL / **/
/* HAS_SETRESGID_PROTO:
* This symbol, if defined, indicates that the system provides
@@ -4361,10 +4361,10 @@
* This symbol, if defined, contains the string used by stdio to
* format long doubles (format 'f') for input.
*/
-/*#define PERL_PRIfldbl "f" / **/
-/*#define PERL_PRIgldbl "g" / **/
-/*#define PERL_PRIeldbl "e" / **/
-/*#define PERL_SCNfldbl "f" / **/
+#define PERL_PRIfldbl "f"
+#define PERL_PRIgldbl "g"
+#define PERL_PRIeldbl "e"
+#define PERL_SCNfldbl "f"
/* PERL_MAD:
* This symbol, if defined, indicates that the Misc Attribution
@@ -4479,7 +4479,7 @@
#define I64TYPE __int64 /**/
#define U64TYPE unsigned __int64 /**/
#endif
-#define NVTYPE double /**/
+#define NVTYPE long double /**/
#define IVSIZE 4 /**/
#define UVSIZE 4 /**/
#define I8SIZE 1 /**/
@@ -4492,7 +4492,7 @@
#define I64SIZE 8 /**/
#define U64SIZE 8 /**/
#endif
-#define NVSIZE 8 /**/
+#define NVSIZE 12 /**/
#define NV_PRESERVES_UV
#define NV_PRESERVES_UV_BITS 32
#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
@@ -4548,9 +4548,9 @@
#define UVof "lo" /**/
#define UVxf "lx" /**/
#define UVXf "lX" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
+#define NVef "Le" /**/
+#define NVff "Lf" /**/
+#define NVgf "Lg" /**/
/* SELECT_MIN_BITS:
* This symbol holds the minimum number of bits operated by select.
--
1.8.0.msysgit.0
|
The RT System itself - Status changed from 'new' to 'open' |
From @bulk88On Mon Nov 03 00:55:36 2014, shay wrote:
I ran into that problem when i tried making a Intel C long dobule build. On Visual C, long double is type defed to double. %lf passed to MS CRT is 8 bytes long, but ICC and I assume GCC, say %lf is 12 bytes long. In MS CRT va_arg function/macro, will adjust va_list ptr by 8 bytes for %lf, same as for %f. All further args are gibberish too. Mingw includes its own copies of printf and friends for static linking so long doubles work even though the binary links to msvcrt.dll. I tried using them in object code form for the ICC build but got bogged down trying to separate those printf functions from all the other static link code in mingw's default .o files that get linked (mingw's equivalent to msvcrt.lib, which contains more than just thunks to msvcrt.dll/msvcrt*0.dll). Visual C for Win16 and MS C for DOS did do 12 byte long doubles. In the Win16 to Win32 transition MS dropped 12 byte long doubles. IDK why. It is sad that MS CRT's source code contains provisions for long doubles in the printf src code. The long double option is just not compiled in (it really can't be on VC, since without compiler support for 80 bit floats, you will be writing everything in inline assembly for VC and long double is a typedef to char[12] array). I've attached a patch on how far I got with LD on ICC for reference. -- |
From @bulk880001-icc-longdouble-wip.patchFrom 6d149aa0e5feff84216d4da035c7f1b2278e81bc Mon Sep 17 00:00:00 2001
From: Daniel Dragan <bulk88@hotmail.com>
Date: Thu, 9 Jan 2014 03:10:40 -0500
Subject: [PATCH] icc longdouble wip
---
generate_uudmap.c | 2 ++
perl.h | 12 ++++++++++++
uconfig.h | 8 ++++----
util.c | 9 +++++++--
win32/Makefile | 10 +++++-----
win32/config.vc | 18 +++++++++---------
win32/config_H.vc | 30 +++++++++++++++---------------
7 files changed, 54 insertions(+), 35 deletions(-)
diff --git a/generate_uudmap.c b/generate_uudmap.c
index b6307c0..b72f374 100644
--- a/generate_uudmap.c
+++ b/generate_uudmap.c
@@ -108,6 +108,8 @@ int main(int argc, char **argv) {
int bits;
struct mg_data_raw_t *p = mg_data_raw;
+ fprintf(stderr, "sizeof ld %d\n", sizeof(long double));
+
if (argc < 4 || argv[1][0] == '\0' || argv[2][0] == '\0'
|| argv[3][0] == '\0') {
fprintf(stderr, "Usage: %s uudemap.h bitcount.h mg_data.h\n", argv[0]);
diff --git a/perl.h b/perl.h
index b6e0c3e..6c7d5bd 100644
--- a/perl.h
+++ b/perl.h
@@ -1671,6 +1671,7 @@ typedef UVTYPE UV;
# endif
# if !(defined(HAS_LONG_DOUBLE) && (LONG_DOUBLESIZE > DOUBLESIZE))
# undef USE_LONG_DOUBLE /* Ouch! */
+ #error undefed ULD
# endif
#endif
@@ -1763,10 +1764,15 @@ typedef NVTYPE NV;
# include <ieeefp.h>
#endif
+#ifndef USE_LONG_DOUBLE
+#error no LD
+#endif
+
#ifdef USE_LONG_DOUBLE
# ifdef I_SUNMATH
# include <sunmath.h>
# endif
+# include <mathimf.h>
# define NV_DIG LDBL_DIG
# ifdef LDBL_MANT_DIG
# define NV_MANT_DIG LDBL_MANT_DIG
@@ -1798,6 +1804,7 @@ typedef NVTYPE NV;
# endif
# endif
# endif
+
# ifdef HAS_SQRTL
# define Perl_cos cosl
# define Perl_sin sinl
@@ -1843,6 +1850,7 @@ EXTERN_C long double modfl(long double, long double *);
# endif
# endif
#else
+#error die
# define NV_DIG DBL_DIG
# ifdef DBL_MANT_DIG
# define NV_MANT_DIG DBL_MANT_DIG
@@ -5833,6 +5841,10 @@ extern void moncontrol(int);
*/
+#ifndef HAS_SQRTL
+#error no long
+#endif
+
#endif /* Include guard */
/*
diff --git a/uconfig.h b/uconfig.h
index 8e728ab..e29fabd 100644
--- a/uconfig.h
+++ b/uconfig.h
@@ -4361,10 +4361,10 @@
* This symbol, if defined, contains the string used by stdio to
* format long doubles (format 'f') for input.
*/
-/*#define PERL_PRIfldbl "llf" / **/
-/*#define PERL_PRIgldbl "llg" / **/
-/*#define PERL_PRIeldbl "lle" / **/
-/*#define PERL_SCNfldbl "llf" / **/
+#define PERL_PRIfldbl "llf" / **/
+#define PERL_PRIgldbl "llg" / **/
+#define PERL_PRIeldbl "lle" / **/
+#define PERL_SCNfldbl "llf" / **/
/* PERL_MAD:
* This symbol, if defined, indicates that the Misc Attribution
diff --git a/util.c b/util.c
index f308e93..455b7bb 100644
--- a/util.c
+++ b/util.c
@@ -4769,10 +4769,12 @@ Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
{
int retval;
va_list ap;
+ restart:
PERL_ARGS_ASSERT_MY_SNPRINTF;
va_start(ap, format);
+ memset(buffer, 0, len);
#ifdef HAS_VSNPRINTF
- retval = vsnprintf(buffer, len, format, ap);
+ retval = ___mingw_vsnprintf(buffer, len, format, ap);
#else
retval = vsprintf(buffer, format, ap);
#endif
@@ -4784,8 +4786,11 @@ Perl_my_snprintf(char *buffer, const Size_t len, const char *format, ...)
||
(len > 0 && (Size_t)retval >= len)
#endif
- )
+ ) {
+ DebugBreak();
+ goto restart;
Perl_croak_nocontext("panic: my_snprintf buffer overflow");
+ }
return retval;
}
diff --git a/win32/Makefile b/win32/Makefile
index 885f8ce..2c90bef 100644
--- a/win32/Makefile
+++ b/win32/Makefile
@@ -134,14 +134,14 @@ CCTYPE = MSVC90
#
# If you are using Intel C++ Compiler uncomment this
#
-#__ICC = define
+__ICC = define
#
# uncomment next line if you want debug version of perl (big,slow)
# If not enabled, we automatically try to use maximum optimization
# with all compilers that are known to have a working optimizer.
#
-#CFG = Debug
+CFG = Debug
#
# uncomment to enable linking with setargv.obj under the Visual C
@@ -443,10 +443,10 @@ LOCDEFS = -DPERLDLL -DPERL_CORE
SUBSYS = console
CXX_FLAG = -TP -EHsc
-LIBC = msvcrt.lib
+LIBC = msvcrtd.lib
!IF "$(CFG)" == "Debug"
-OPTIMIZE = -Od -MD -Zi -DDEBUGGING
+OPTIMIZE = -Od -MDd -Zi -DDEBUGGING
LINK_DBG = -debug
!ELSE
# -O1 yields smaller code, which turns out to be faster than -O2 on x86 and x64
@@ -517,7 +517,7 @@ LIBBASEFILES = $(LIBBASEFILES) bufferoverflowU.lib
LIBFILES = $(LIBBASEFILES) $(LIBC)
#EXTRACFLAGS = -nologo -GF -W4 -wd4127 -wd4706
-EXTRACFLAGS = -nologo -GF -W3
+EXTRACFLAGS = -nologo -GF -W3 /Qlong-double /Qpc80 -DUSE_LONG_DOUBLE -DHAS_LONG_DOUBLE
CFLAGS = $(EXTRACFLAGS) $(INCLUDES) $(DEFINES) $(LOCDEFS) \
$(PCHFLAGS) $(OPTIMIZE)
LINK_FLAGS = -nologo -nodefaultlib $(LINK_DBG) \
diff --git a/win32/config.vc b/win32/config.vc
index a15b926..bc90fd8 100644
--- a/win32/config.vc
+++ b/win32/config.vc
@@ -449,7 +449,7 @@ d_socklen_t='undef'
d_sockpair='undef'
d_socks5_init='undef'
d_sprintf_returns_strlen='define'
-d_sqrtl='undef'
+d_sqrtl='define'
d_srand48_r='undef'
d_srandom_r='undef'
d_sresgproto='undef'
@@ -828,16 +828,16 @@ nm_opt=''
nm_so_opt=''
nonxs_ext='Errno'
nroff=''
-nvEUformat='"E"'
-nvFUformat='"F"'
-nvGUformat='"G"'
+nvEUformat='"LE"'
+nvFUformat='"LF"'
+nvGUformat='"LG"'
nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0'
nv_preserves_uv_bits='32'
-nveformat='"e"'
-nvfformat='"f"'
-nvgformat='"g"'
-nvsize='8'
-nvtype='double'
+nveformat='"Le"'
+nvfformat='"Lf"'
+nvgformat='"Lg"'
+nvsize='12'
+nvtype='long double'
o_nonblock='O_NONBLOCK'
obj_ext='.obj'
old_pthread_create_joinable=''
diff --git a/win32/config_H.vc b/win32/config_H.vc
index f55a6d2..7f612f3 100644
--- a/win32/config_H.vc
+++ b/win32/config_H.vc
@@ -1930,9 +1930,9 @@
* C preprocessor can make decisions based on it. It is only
* defined if the system supports long doubles.
*/
-#define HAS_LONG_DOUBLE /**/
+/*#define HAS_LONG_DOUBLE /**/
#ifdef HAS_LONG_DOUBLE
-#define LONG_DOUBLESIZE 8 /**/
+#define LONG_DOUBLESIZE 16 /**/
#endif
/* HAS_LONG_LONG:
@@ -3558,7 +3558,7 @@
* available to break a long double floating-point number into
* a normalized fraction and an integral power of 2.
*/
-/*#define HAS_FREXPL / **/
+#define HAS_FREXPL
/* HAS_STRUCT_FS_DATA:
* This symbol, if defined, indicates that the struct fs_data
@@ -3780,8 +3780,8 @@
* and 1.150000. The bug has been seen in certain versions of glibc,
* release 2.2.2 is known to be okay.
*/
-/*#define HAS_MODFL / **/
-/*#define HAS_MODFL_PROTO / **/
+#define HAS_MODFL
+#define HAS_MODFL_PROTO
/*#define HAS_MODFL_POW32_BUG / **/
/* HAS_MPROTECT:
@@ -3954,7 +3954,7 @@
* This symbol, if defined, indicates that the sqrtl routine is
* available to do long double square roots.
*/
-/*#define HAS_SQRTL / **/
+#define HAS_SQRTL / **/
/* HAS_SETRESGID_PROTO:
* This symbol, if defined, indicates that the system provides
@@ -4361,10 +4361,10 @@
* This symbol, if defined, contains the string used by stdio to
* format long doubles (format 'f') for input.
*/
-/*#define PERL_PRIfldbl "f" / **/
-/*#define PERL_PRIgldbl "g" / **/
-/*#define PERL_PRIeldbl "e" / **/
-/*#define PERL_SCNfldbl "f" / **/
+#define PERL_PRIfldbl "f"
+#define PERL_PRIgldbl "g"
+#define PERL_PRIeldbl "e"
+#define PERL_SCNfldbl "f"
/* PERL_MAD:
* This symbol, if defined, indicates that the Misc Attribution
@@ -4479,7 +4479,7 @@
#define I64TYPE __int64 /**/
#define U64TYPE unsigned __int64 /**/
#endif
-#define NVTYPE double /**/
+#define NVTYPE long double /**/
#define IVSIZE 4 /**/
#define UVSIZE 4 /**/
#define I8SIZE 1 /**/
@@ -4492,7 +4492,7 @@
#define I64SIZE 8 /**/
#define U64SIZE 8 /**/
#endif
-#define NVSIZE 8 /**/
+#define NVSIZE 12 /**/
#define NV_PRESERVES_UV
#define NV_PRESERVES_UV_BITS 32
#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0
@@ -4548,9 +4548,9 @@
#define UVof "lo" /**/
#define UVxf "lx" /**/
#define UVXf "lX" /**/
-#define NVef "e" /**/
-#define NVff "f" /**/
-#define NVgf "g" /**/
+#define NVef "Le" /**/
+#define NVff "Lf" /**/
+#define NVgf "Lg" /**/
/* SELECT_MIN_BITS:
* This symbol holds the minimum number of bits operated by select.
--
1.8.0.msysgit.0
|
From @steve-m-hayOn Tue Nov 04 02:33:51 2014, bulk88 wrote:
I thought that's what I was using by specifying __USE_MINGW_ANSI_STDIO in the gcc build, so I'm not sure why it didn't work out. Do you you know if there's anything else I need to do with gcc to get their long double support working? |
From @sisyphus-----Original Message-----
__USE_MINGW_ANSI_STDIO ought to be defined to a true value. I don't think If you're already dong that and it's not working then I don't know what's Cheers, |
From @steve-m-hayOn Wed Nov 05 02:40:37 2014, sisyphus wrote:
It's defined on the gcc command-line so I don't have the problem of it not being seen until after headers are included. My patch only specified -D__USE_MINGW_ANSI_STDIO, rather than defining it to a true value, but changing that to -D__USE_MINGW_ANSI_STDIO=1 sadly makes no difference :-/ |
From @bulk88Make a sv.i with USE_MINGW_ANSI_STDIO and a sv.o. Review the .i and objdump /dumpbin (try both!) the sv.o to see what symbols it is is using. Attach the sv.i and sv.o here and I could also take a look. |
From @steve-m-hayWould it be possible for someone on a platform where long doubles actually work to post the config.h files of two builds: One with long doubles disabled and the other with long doubles enabled, but otherwise identical? It would be instructive to see the differences between them to see whether I've missed some config settings that need twiddling. (I realize that things will need twiddling differently on Windows than elsewhere, but it might still be helpful.) |
From [Unknown Contact. See original ticket]Would it be possible for someone on a platform where long doubles actually work to post the config.h files of two builds: One with long doubles disabled and the other with long doubles enabled, but otherwise identical? It would be instructive to see the differences between them to see whether I've missed some config settings that need twiddling. (I realize that things will need twiddling differently on Windows than elsewhere, but it might still be helpful.) |
From @steve-m-hayOn Wed Nov 05 06:08:44 2014, bulk88 wrote:
I've attached the outputs of: gcc -c -I.\include -I. -I.. -I..\lib\CORE -DWIN32 -DPERLDLL -DPERL_CORE -s -O2 -D__USE_MINGW_ANSI_STDIO=1 -fwrapv -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL -omini\sv.o ..\sv.c gcc -E -I.\include -I. -I.. -I..\lib\CORE -DWIN32 -DPERLDLL -DPERL_CORE -s -O2 -D__USE_MINGW_ANSI_STDIO=1 -fwrapv -DPERL_EXTERNAL_GLOB -DPERL_IS_MINIPERL -omini\sv.i ..\sv.c objdump -x -s sv.o >sv.objdump dumpbin /all sv.o >sv.dumpbin |
From @steve-m-hay |
From @doughera88On Wed, Nov 05, 2014 at 06:10:23AM -0800, Steve Hay via RT wrote:
Here are the differences for config.sh for Debian GNU/Linux. ######################################### 102c101
######################################### 39c40
Hope this helps, -- |
From @bingosOn Wed, Nov 05, 2014 at 06:10:23AM -0800, Steve Hay via RT wrote:
http://cpanidx.org/heh/longdouble/ FreeBSD and Linux config.h files with and without -Duselongdouble (with longdouble being -ld-) Cheers, --
|
From @sisyphus-----Original Message-----
On checking I find that -D__USE_MINGW_ANSI_STDIO on the command line is Cheers, |
From @steve-m-hayOn Wed Nov 05 09:39:53 2014, chris@bingosnet.co.uk wrote:
Fantastic! Thanks, Chris. That's led me straight to the problem: I'd forgotten to adjust NVef/NVff/NVgf (and also Gconvert). With them adjusted suitably I now have a working miniperl.exe. Hopefully perl.exe will work too and I'll commit this soon :-) |
From @steve-m-hayOn Thu Nov 06 00:25:57 2014, shay wrote:
This is now committed with commit 890b508. It builds and passes all tests except for two pack tests: C:\Dev\Git\perl\t>..\perl harness op/pack.t Test Summary Report op/pack.t (Wstat: 0 Tests: 14704 Failed: 2) Any ideas as to what's gone wrong there? There is two other things: Looking at the config.h diffs between normal and long-double builds on FreeBSD and Linux I noticed that they both #undef NV_ZERO_IS_ALLBITS_ZERO for long-double builds. I haven't done that in this MinGW/gcc change so far. Do I need to? (I tried it, but it didn't fix the above test failures.) FreeBSD and Linux also changed MEM_ALIGNBYTES from 8 to 16, which I also haven't done here, but then they do have NVSIZE 16, whereas MinGW/gcc is 12. Do I need to do anything with MEM_ALIGNBYTES? Otherwise, I think I covered everything. (This ticket should probably be left open, with the title suitably changed, for the unfinished ICC work also recorded here.) |
From @sisyphus-----Original Message-----
The same two tests fail (in the same way) for me. I don't understand those tests. Is there some simpler code that can reproduce this anomalous result ? I'd like to thank you for taking this on Steve - it's something long You can take that "reservation" as a thinly veiled suggestion that it would Anyway .... one step at a time; and I expect you're a bit weary after having Cheers, |
From @sisyphus-----Original Message-----
The 64-bit build is worse. (Perl -V is attached.) op/pack.t (Wstat: 0 And that test script also sometimes crashes just prior to exit. I also get a crash in: I'm using the gcc that shipped with x64 StrawberryPerl-5.20.0: Steve, are you able to verify that this is not just me doing something wrong I also built a 32-bit 5.21.6 using the gcc compiler that shipped with x86 Cheers, |
From @sisyphusSummary of my perl5 (revision 5 version 21 subversion 6) configuration: Platform: Characteristics of this binary (from libperl): |
From @sisyphus-----Original Message-----
Hang on, looks like sizeof(long double) differs between 32-bit and 64-bit This script: ############################### void foo() { EOC foo(); on 32-bit ld perl-5.21.6 outputs: 18 64 but on 64-bit ld perl-5.21.6 outputs: 18 64 I don't know how that will affect the way 64-bit perl runs, but it's an I wonder why sizeof(long double) differs between 32-bit and 64-bit mingw-w64 Cheers, |
From @sisyphus-----Original Message-----
Just to clarify - it's the anomaly (on 64-bit builds) between what %Config I didn't mean that we should make C's sizeof(long double) report the same Cheers, |
From @steve-m-hayOn 21 November 2014 07:34, <sisyphus1@optusnet.com.au> wrote:
It's more than just an anomaly: It's the cause of all the extra Thanks for reporting those test failures; I clearly hadn't got round And thanks for spotting the longdblsize error. I've just fixed that in |
From @sisyphusSteve, here's another little glitch that I've come across. C:\>perl -V:nvtype C:\>perl -V:nvsize C:\>perl -MPOSIX -le "$x=POSIX::strtold('12345.1');" C:\> On the 64-bit build of 5.21.6 (where nvsize is set incorrectly) it's the C:\>perl -V:nvtype C:\>perl -V:nvsize C:\>perl -MPOSIX -le "$x=POSIX::strtold('12345.1');" AFAIK, POSIX::strtold() should have been implemented for these perls. Cheers, |
From @steve-m-hayOn 27 November 2014 at 03:46, <sisyphus1@optusnet.com.au> wrote:
I think that must be a gremlin lurking in POSIX.pm/xs. I made the perl -V:d_strtold Assuming that prints 'define' as it should then it's just POSIX that |
From @steve-m-hayOn 27 November 2014 at 09:02, Steve Hay <steve.m.hay@googlemail.com> wrote:
Does the attached (untested) blind stab in the dark fix it? |
From @steve-m-hay0001-Enable-POSIX-strtold-on-Windows-GCC-USE_LONG_DOUBLE-.patchFrom cd23470b782536aa82a4f98a6ada0ff9a4cc5004 Mon Sep 17 00:00:00 2001
From: Steve Hay <steve.m.hay@googlemail.com>
Date: Thu, 27 Nov 2014 09:08:56 +0000
Subject: [PATCH] Enable POSIX::strtold() on Windows (GCC) USE_LONG_DOUBLE
builds
---
ext/POSIX/POSIX.xs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs
index 9d41bf0..39b7f36 100644
--- a/ext/POSIX/POSIX.xs
+++ b/ext/POSIX/POSIX.xs
@@ -1134,7 +1134,9 @@ char *tzname[] = { "" , "" };
# define setuid(a) not_here("setuid")
# define setgid(a) not_here("setgid")
#endif /* NETWARE */
+#ifndef USE_LONG_DOUBLE
# define strtold(s1,s2) not_here("strtold")
+#endif /* USE_LONG_DOUBLE */
#else
# ifndef HAS_MKFIFO
--
1.8.4.msysgit.0
|
From @demerphqOn 21 November 2014 at 08:16, <sisyphus1@optusnet.com.au> wrote:
It is not a mingw issue, it is an x86 issue. I dont recall exactly the Where the compiler does use the extended precisions floats it store them Yves -- |
From @sisyphus
Yes, that rectifies the problem on the 32-bit. Can't see any reason it Cheers, |
From @steve-m-hayOn 27 November 2014 at 11:27, <sisyphus1@optusnet.com.au> wrote:
Thanks for spotting (and testing). Now pushed to blead in commit |
From @jkeenanOn Thu Nov 27 06:13:29 2014, shay wrote:
Is this ticket closable? -- |
From @steve-m-hayOn Tue Mar 17 18:49:44 2015, jkeenan wrote:
Yes, except that I wrote in https://rt-archive.perl.org/perl5/Ticket/Display.html?id=123113#txn-1317316 "This ticket should probably be left open, with the title suitably changed, for the unfinished ICC work also recorded here." But maybe it would be better to raise a new ticket for that separate work? |
From @jkeenanOn Wed, 18 Mar 2015 08:39:53 GMT, shay wrote:
Could you create that ICC-specific ticket? (We could then close this one, AFAICT.) Thank you very much. -- |
From @steve-m-hayOn Sun, 26 Feb 2017 15:29:43 -0800, jkeenan wrote:
I've finally got round to doing this in #132478 (with the two test failures also now recorded separately in #132479). Closing this ticket now. |
@steve-m-hay - Status changed from 'open' to 'resolved' |
Migrated from rt.perl.org#123113 (status was 'resolved')
Searchable as RT123113$
The text was updated successfully, but these errors were encountered: