]> granicus.if.org Git - php/commitdiff
Eliminated useless allocation of FPU control word on each request startup
authorDmitry Stogov <dmitry@php.net>
Fri, 9 Jul 2010 09:02:14 +0000 (09:02 +0000)
committerDmitry Stogov <dmitry@php.net>
Fri, 9 Jul 2010 09:02:14 +0000 (09:02 +0000)
Zend/zend_float.c
Zend/zend_globals.h

index 5c38ba997729d14d7a3bfe345b5c7cf2358b87f2..ea13ed79885f7c3beb8e8338d728ef11bf984470 100644 (file)
@@ -27,16 +27,13 @@ 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));
+       if (!EG(saved_fpu_cw_ptr)) {
+               EG(saved_fpu_cw_ptr) = (void*)&EG(saved_fpu_cw);
        }
-       XPFPA_STORE_CW(EG(saved_fpu_cw));
+       XPFPA_STORE_CW(EG(saved_fpu_cw_ptr));
        XPFPA_SWITCH_DOUBLE();
 #else
-       if (EG(saved_fpu_cw)) {
-               efree(EG(saved_fpu_cw));
-       }
-       EG(saved_fpu_cw) = NULL;
+       EG(saved_fpu_cw_ptr) = NULL;
 #endif
 }
 /* }}} */
@@ -44,14 +41,11 @@ ZEND_API void zend_init_fpu(TSRMLS_D) /* {{{ */
 ZEND_API void zend_shutdown_fpu(TSRMLS_D) /* {{{ */
 {
 #if XPFPA_HAVE_CW
-       if (EG(saved_fpu_cw)) {
-               XPFPA_RESTORE_CW(EG(saved_fpu_cw));
+       if (EG(saved_fpu_cw_ptr)) {
+               XPFPA_RESTORE_CW(EG(saved_fpu_cw_ptr));
        }
 #endif
-       if (EG(saved_fpu_cw)) {
-               efree(EG(saved_fpu_cw));
-               EG(saved_fpu_cw) = NULL;
-       }
+       EG(saved_fpu_cw_ptr) = NULL;
 }
 /* }}} */
 
index f8bc38c20d03e323bb4d8f7a7da3680b82545dea..444670578008f424eb042e0caec91e285d863494 100644 (file)
@@ -34,6 +34,7 @@
 #include "zend_objects.h"
 #include "zend_objects_API.h"
 #include "zend_modules.h"
+#include "zend_float.h"
 
 #ifdef ZEND_MULTIBYTE
 #include "zend_multibyte.h"
@@ -261,7 +262,10 @@ struct _zend_executor_globals {
 
        zend_bool active; 
 
-       void *saved_fpu_cw;
+       void *saved_fpu_cw_ptr;
+#if XPFPA_HAVE_CW
+       XPFPA_CW_DATATYPE saved_fpu_cw;
+#endif
 
        void *reserved[ZEND_MAX_RESERVED_RESOURCES];
 };