mirror of
https://github.com/php/php-src.git
synced 2024-11-24 10:24:11 +08:00
88dfc475c5
On startup, PHP deliberately changes the floating point control word to enforce binary64 format for the calculations for best consistency across platforms. However, this is unnessary when compiling under `__SSE__`, because in this case the x87 instructions are not used. Therefore, we can skip the modification, which has the benefit that system libraries are free to work in the mode of their liking.
60 lines
1.9 KiB
C
60 lines
1.9 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| Zend Engine |
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) Zend Technologies Ltd. (http://www.zend.com) |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 2.00 of the Zend license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| http://www.zend.com/license/2_00.txt. |
|
|
| If you did not receive a copy of the Zend license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@zend.com so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Authors: Christian Seiler <chris_se@gmx.net> |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
#include "zend.h"
|
|
#include "zend_compile.h"
|
|
#include "zend_float.h"
|
|
|
|
ZEND_API void zend_init_fpu(void) /* {{{ */
|
|
{
|
|
/* under __SSE__ the FPCW is irrelevant; no need to change it */
|
|
#if XPFPA_HAVE_CW && !defined(__SSE__)
|
|
XPFPA_DECLARE
|
|
|
|
if (!EG(saved_fpu_cw_ptr)) {
|
|
EG(saved_fpu_cw_ptr) = (void*)&EG(saved_fpu_cw);
|
|
}
|
|
XPFPA_STORE_CW(EG(saved_fpu_cw_ptr));
|
|
XPFPA_SWITCH_DOUBLE();
|
|
#else
|
|
EG(saved_fpu_cw_ptr) = NULL;
|
|
#endif
|
|
}
|
|
/* }}} */
|
|
|
|
ZEND_API void zend_shutdown_fpu(void) /* {{{ */
|
|
{
|
|
#if XPFPA_HAVE_CW && !defined(__SSE__)
|
|
if (EG(saved_fpu_cw_ptr)) {
|
|
XPFPA_RESTORE_CW(EG(saved_fpu_cw_ptr));
|
|
}
|
|
#endif
|
|
EG(saved_fpu_cw_ptr) = NULL;
|
|
}
|
|
/* }}} */
|
|
|
|
ZEND_API void zend_ensure_fpu_mode(void) /* {{{ */
|
|
{
|
|
#ifndef __SSE__
|
|
XPFPA_DECLARE
|
|
|
|
XPFPA_SWITCH_DOUBLE();
|
|
#endif
|
|
}
|
|
/* }}} */
|