GNU MPFR 4.2.1 Release Candidate

Dennis Clarke dclarke at blastwave.org
Sat Aug 19 02:25:48 CEST 2023


On 8/18/23 15:30, Vincent Lefevre wrote:
> The release of GNU MPFR 4.2.1 ("fondue savoyarde", patch level 1)
> is imminent.  Please help to make this release as good as possible
> by downloading and testing this release candidate:
> 
On IBM POWER9 hardware with GCC 13.2.0 and Debian 12.1 I see all
the tests pass. However I suspect the actual 128-bit floating point
opcodes are not being used here. Yet. I am still digging into that
mess.

My CFLAGS were strict :

-std=iso9899:1999 -pedantic -pedantic-errors -m64 -g -O0 \
-fno-builtin -mcpu=power9 -mno-isel -mno-crypto -mno-htm \
-mno-quad-memory-atomic -mfloat128-hardware \
-mfull-toc \
-mno-multiple -mupdate -mno-avoid-indexed-addresses -mregnames \
-mno-recip -fno-unsafe-math-optimizations -fno-fast-math \
-Wl,-rpath=/opt/bw/lib,--enable-new-dtags

NOTE the full table of contents. I think the GCC folks fixed that
up and the literal data in asm stage should not be a problem.

dax$ cat /etc/debian_version
12.1
dax$ head /proc/cpuinfo
processor       : 0
cpu             : POWER9, altivec supported
clock           : 2166.000000MHz
revision        : 2.2 (pvr 004e 1202)

processor       : 1
cpu             : POWER9, altivec supported
clock           : 2166.000000MHz
revision        : 2.2 (pvr 004e 1202)

dax$

$ ./configure --prefix=/opt/bw --disable-silent-rules \
 > --enable-thread-safe --enable-dependency-tracking \
 > --enable-shared --enable-static --with-gmp=/opt/bw \
 > --enable-float128 --enable-decimal-float

As expected that tossed out this nasty message :

configure: error: compiler doesn't know _Decimal64 (ISO/IEC TR 24732).

Of course it is ugly to even ask for float128 :

checking if compiler knows _Decimal64... no
checking bit-field ordering for _Decimal128... unavailable or unknown
checking if _Float128 with hex constants is supported... no
checking if __float128 can be used as a fallback... no
configure: error: compiler doesn't know _Float128 or __float128 with hex 
constants.
Please use another compiler or build MPFR without --enable-float128.


On an IBM POWER9 server this feels wrong.


     * * *  this works * * *
./configure --prefix=/opt/bw --disable-silent-rules \
--enable-thread-safe --enable-dependency-tracking \
--enable-shared --enable-static --with-gmp=/opt/bw


Results are quite nice :

.
.
.
PASS: tversion
[tversion] MPFR 4.2.1-rc1
[tversion] Compiler: GCC 13.2.0
[tversion] C standard: __STDC__ = 1, __STDC_VERSION__ = 199901L
[tversion] __GNUC__ = 13, __GNUC_MINOR__ = 2, __STRICT_ANSI__
[tversion] __GLIBC__ = 2, __GLIBC_MINOR__ = 36
[tversion] GMP: header 6.3.0, library 6.3.0
[tversion] __GMP_CC = "/opt/bw/gcc13/bin/gcc"
[tversion] __GMP_CFLAGS = "-std=iso9899:2011 -g -O0 -m64 -fno-builtin 
-mcpu=power9 -mno-isel -mno-crypto -mno-htm -mregnames 
-fno-unsafe-math-optimizations -fno-fast-math -mfull-toc -mno-fp-in-toc 
-mno-sum-in-toc -ffp-contract=fast 
-Wl,-rpath=/opt/bw/lib,--enable-new-dtags"
[tversion] WinDLL: __GMP_LIBGMP_DLL = 0, MPFR_WIN_THREAD_SAFE_DLL = undef
[tversion] MPFR_ALLOCA_MAX = 16384
[tversion] TLS = yes, float128 = no, decimal = no, GMP internals = no
[tversion] Shared cache = no
[tversion] intmax_t = yes, printf = yes, IEEE floats = yes
[tversion] gmp_printf: hhd = yes, lld = yes, jd = yes, td = yes, Ld = yes
[tversion] MPFR tuning parameters from src/powerpc64/mparam.h
[tversion] sizeof(long) = 8, sizeof(mpfr_intmax_t) = 8, sizeof(intmax_t) = 8
[tversion] GMP_NUMB_BITS = 64, sizeof(mp_limb_t) = 8
[tversion] Within limb: long = y/y, intmax_t = y/y
[tversion] _MPFR_PREC_FORMAT = 3, sizeof(mpfr_prec_t) = 8
[tversion] _MPFR_EXP_FORMAT = 3, sizeof(mpfr_exp_t) = 8
[tversion] sizeof(mpfr_t) = 32, sizeof(mpfr_ptr) = 8
[tversion] Precision range: [1,9223372036854775551]
[tversion] Max exponent range: [-4611686018427387903,4611686018427387903]
[tversion] Generic ABI code: no
[tversion] Enable formally proven code: no
[tversion] Locale: C
PASS: tabort_prec_max
PASS: tassert
PASS: tabort_defalloc1

.
.
.
============================================================================
Testsuite summary for MPFR 4.2.1-rc1
============================================================================
# TOTAL: 198
# PASS:  195
# SKIP:  3
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================
gmake[3]: Leaving directory 
'/opt/bw/build/mpfr-4.2.1-rc1_ppc64le_debian.002/tests'
gmake[2]: Leaving directory 
'/opt/bw/build/mpfr-4.2.1-rc1_ppc64le_debian.002/tests'
[tversion] MPFR 4.2.1-rc1
[tversion] Compiler: GCC 13.2.0
[tversion] C standard: __STDC__ = 1, __STDC_VERSION__ = 199901L
[tversion] __GNUC__ = 13, __GNUC_MINOR__ = 2, __STRICT_ANSI__
[tversion] __GLIBC__ = 2, __GLIBC_MINOR__ = 36
[tversion] GMP: header 6.3.0, library 6.3.0
[tversion] __GMP_CC = "/opt/bw/gcc13/bin/gcc"
[tversion] __GMP_CFLAGS = "-std=iso9899:2011 -g -O0 -m64 -fno-builtin 
-mcpu=power9 -mno-isel -mno-crypto -mno-htm -mregnames 
-fno-unsafe-math-optimizations -fno-fast-math -mfull-toc -mno-fp-in-toc 
-mno-sum-in-toc -ffp-contract=fast 
-Wl,-rpath=/opt/bw/lib,--enable-new-dtags"
[tversion] WinDLL: __GMP_LIBGMP_DLL = 0, MPFR_WIN_THREAD_SAFE_DLL = undef
[tversion] MPFR_ALLOCA_MAX = 16384
[tversion] TLS = yes, float128 = no, decimal = no, GMP internals = no
[tversion] Shared cache = no
[tversion] intmax_t = yes, printf = yes, IEEE floats = yes
[tversion] gmp_printf: hhd = yes, lld = yes, jd = yes, td = yes, Ld = yes
[tversion] MPFR tuning parameters from src/powerpc64/mparam.h
[tversion] sizeof(long) = 8, sizeof(mpfr_intmax_t) = 8, sizeof(intmax_t) = 8
[tversion] GMP_NUMB_BITS = 64, sizeof(mp_limb_t) = 8
[tversion] Within limb: long = y/y, intmax_t = y/y
[tversion] _MPFR_PREC_FORMAT = 3, sizeof(mpfr_prec_t) = 8
[tversion] _MPFR_EXP_FORMAT = 3, sizeof(mpfr_exp_t) = 8
[tversion] sizeof(mpfr_t) = 32, sizeof(mpfr_ptr) = 8
[tversion] Precision range: [1,9223372036854775551]
[tversion] Max exponent range: [-4611686018427387903,4611686018427387903]
[tversion] Generic ABI code: no
[tversion] Enable formally proven code: no
[tversion] Locale: C



There are three skipped tests :

SKIP: tget_set_d64
SKIP: tget_set_d128
SKIP: tset_float128


I suspect those shall always be skipped unless I can get onto a
z/OS system with the IBM xlC compiler. I do have xlC 16.1.1 on
this POWER9 system but have not yet tried that with MPFR.

In any case 4.2.1-rc1 looks good on this machine. I will try the
big endian IBM server and also RISC-V next.



--
Dennis Clarke
RISC-V/SPARC/PPC/ARM/CISC
UNIX and Linux spoken
GreyBeard and suspenders optional



More information about the gmp-discuss mailing list