Bug #79595 [Opn]: zend_init_fpu() alters FPU precision

From: Date: Wed, 20 May 2020 16:53:08 +0000
Subject: Bug #79595 [Opn]: zend_init_fpu() alters FPU precision
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-227097@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79595&edit=1

 ID:                 79595
 User updated by:    v-yitam at microsoft dot com
 Reported by:        v-yitam at microsoft dot com
 Summary:            zend_init_fpu() alters FPU precision
 Status:             Open
 Type:               Bug
 Package:            Math related
 Operating System:   Alpine Linux
 PHP Version:        7.4.5
 Block user comment: N
 Private report:     N

 New Comment:

The patch seems to fix the issue after the preliminary round of testing in Alpine Linux with PHP
7.4.5. Congratulations! Please let us know when this patch will be merged to a stable release.


Previous Comments:
------------------------------------------------------------------------
[2020-05-20 15:56:14] v-yitam at microsoft dot com

My pleasure! Will get back to you later.

------------------------------------------------------------------------
[2020-05-20 15:50:03] cmb@php.net

A possible fix might be <https://github.com/php/php-src/pull/5602>.
Could you please try that, @yitam?

------------------------------------------------------------------------
[2020-05-20 15:20:01] v-yitam at microsoft dot com

This floating point calculation issue happens in Alpine Linux only, so we are targeting 64-bit
builds for Linux only. Thanks for considering!

------------------------------------------------------------------------
[2020-05-20 11:09:56] nikic@php.net

Are you interested in this for 32-bit or 64-bit builds?

I think we can safely disable this code if compiling under __SSE__, because we know that PHP itself
will not use x87 FPU in that case.

For 32-bit builds targeting x87 FPU, I don't think we want to change this, as we do want normal
floating point operations to be based on double precision.

------------------------------------------------------------------------
[2020-05-19 17:20:16] v-yitam at microsoft dot com

Thanks for getting back to us. Indeed, I suspect so:

/* NOTE: This only sets internal precision. MSVC does NOT support double-
   extended precision! */
# define XPFPA_SWITCH_DOUBLE_EXTENDED()

If I changed the macro XPFPA_SWITCH_DOUBLE() to XPFPA_SWITCH_DOUBLE_EXTENDED(), the problem was
resolved in Alpine Linux.

Hence, please investigate further why using XPFPA_SWITCH_DOUBLE() is necessary. On Linux the FPU
should be left at 80-bit precision, especially Alpine, as musl libc's strtod() requires it to
work properly, not to mention it also breaks any functions that expect the standard ABI on Linux.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=79595


--
Edit this bug report at https://bugs.php.net/bug.php?id=79595&edit=1


Thread (21 messages)

« previous php.bugs (#227097) next »