]> granicus.if.org Git - php/commitdiff
Separate the cpuinfo initialization part and call it at startup
authorAnatol Belski <ab@php.net>
Tue, 16 Jan 2018 10:27:18 +0000 (11:27 +0100)
committerAnatol Belski <ab@php.net>
Tue, 16 Jan 2018 10:27:18 +0000 (11:27 +0100)
Zend/zend.c
Zend/zend_cpuinfo.c
Zend/zend_cpuinfo.h

index 4a5fc749b75159dcd3a22dc3606683ac025fff19..effc95deb2060237fc0485a6705b721514bc15e7 100644 (file)
@@ -33,6 +33,7 @@
 #include "zend_virtual_cwd.h"
 #include "zend_smart_str.h"
 #include "zend_smart_string.h"
+#include "zend_cpuinfo.h"
 
 #ifdef ZTS
 ZEND_API int compiler_globals_id;
@@ -752,6 +753,8 @@ int zend_startup(zend_utility_functions *utility_functions, char **extensions) /
        extern zend_php_scanner_globals language_scanner_globals;
 #endif
 
+       zend_cpu_startup();
+
 #ifdef ZEND_WIN32
        php_win32_cp_set_by_id(65001);
 #endif
index 26f3338f3dd78a68b45f0409cffcc35ea5253cb1..ce92460fb4d09419d9d14c908db2d0f985db05d8 100644 (file)
@@ -27,7 +27,7 @@ typedef struct _zend_cpu_info {
        uint32_t initialized;
 } zend_cpu_info;
 
-static zend_cpu_info cpuinfo;
+static zend_cpu_info cpuinfo = {0};
 
 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
 static void __zend_cpuid(uint32_t func, uint32_t subfunc) {
@@ -55,15 +55,19 @@ static void __zend_cpuid(uint32_t func, uint32_t subfunc) {
 }
 #endif
 
-ZEND_API int zend_cpu_supports(zend_cpu_feature feature) {
+void zend_cpu_startup(void)
+{
        if (!cpuinfo.initialized) {
                cpuinfo.initialized = 1;
                __zend_cpuid(0, 0);
                if (cpuinfo.eax == 0) {
-                       return 0;
+                       return;
                }
                __zend_cpuid(1, 0);
        }
+}
+
+ZEND_API int zend_cpu_supports(zend_cpu_feature feature) {
        if (feature & ZEND_CPU_EDX_MASK) {
                return (cpuinfo.edx & (feature & ~ZEND_CPU_EDX_MASK));
        } else {
index e44938fd98193da46f4442c3f411aee9f083c4db..97e33a55ccb242a91980df11bafc850dac5e190f 100644 (file)
@@ -93,6 +93,8 @@ typedef enum _zend_cpu_feature {
 
 ZEND_API int zend_cpu_supports(zend_cpu_feature feature);
 
+void zend_cpu_startup(void);
+
 #endif
 
 /*