diff options
author | Dmitry Stogov <dmitry@php.net> | 2009-03-18 10:49:36 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2009-03-18 10:49:36 +0000 |
commit | 83a6de49b12eee57d2033c6a5d325e63e9b96a6d (patch) | |
tree | 09ca10068da364f9c125e10344a1ddc219000463 /Zend/zend_float.c | |
parent | 6581ded618c07a935952b8996ac277265bedefb0 (diff) | |
download | php-git-83a6de49b12eee57d2033c6a5d325e63e9b96a6d.tar.gz |
Fixed floating point mathematic speed degradation (Christian)
Diffstat (limited to 'Zend/zend_float.c')
-rw-r--r-- | Zend/zend_float.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Zend/zend_float.c b/Zend/zend_float.c new file mode 100644 index 0000000000..0928fe1711 --- /dev/null +++ b/Zend/zend_float.c @@ -0,0 +1,64 @@ +/* + +----------------------------------------------------------------------+ + | Zend Engine | + +----------------------------------------------------------------------+ + | Copyright (c) 1998-2009 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> | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#include "zend.h" +#include "zend_compile.h" +#include "zend_float.h" + +ZEND_API void zend_init_fpu(TSRMLS_D) /* {{{ */ +{ +#if XPFPA_HAVE_CW + XPFPA_DECLARE + + if (!EG(saved_fpu_cw)) { + EG(saved_fpu_cw) = emalloc(sizeof(XPFPA_CW_DATATYPE)); + } + XPFPA_STORE_CW(EG(saved_fpu_cw)); + XPFPA_SWITCH_DOUBLE(); +#else + if (EG(saved_fpu_cw)) { + efree(EG(saved_fpu_cw)); + } + EG(saved_fpu_cw) = NULL; +#endif +} +/* }}} */ + +ZEND_API void zend_shutdown_fpu(TSRMLS_D) /* {{{ */ +{ +#if XPFPA_HAVE_CW + if (EG(saved_fpu_cw)) { + XPFPA_RESTORE_CW(EG(saved_fpu_cw)); + } +#endif + if (EG(saved_fpu_cw)) { + efree(EG(saved_fpu_cw)); + EG(saved_fpu_cw) = NULL; + } +} +/* }}} */ + +ZEND_API void zend_ensure_fpu_mode(TSRMLS_D) /* {{{ */ +{ + XPFPA_DECLARE + + XPFPA_SWITCH_DOUBLE(); +} +/* }}} */ |