mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00

Instead of using lookup tables, we can use a combination of shifts and byte swapping to achieve the same thing in less cycles and with less code. Benchmark files --------------- pack1.php: ```php for ($i = 0; $i < 10_000_000; ++$i) { pack("J", 0x7FFFFFFFFFFFFFFF); } ``` pack2.php: ```php for ($i = 0; $i < 4000000; ++$i) { pack("nvc*", 0x1234, 0x5678, 65, 66); } ``` On an i7-4790: ``` Benchmark 1: ./sapi/cli/php pack1.php Time (mean ± σ): 408.8 ms ± 3.4 ms [User: 406.1 ms, System: 1.6 ms] Range (min … max): 403.6 ms … 413.6 ms 10 runs Benchmark 2: ./sapi/cli/php_old pack1.php Time (mean ± σ): 451.7 ms ± 7.7 ms [User: 448.5 ms, System: 2.0 ms] Range (min … max): 442.8 ms … 461.2 ms 10 runs Summary ./sapi/cli/php pack1.php ran 1.11 ± 0.02 times faster than ./sapi/cli/php_old pack1.php Benchmark 1: ./sapi/cli/php pack2.php Time (mean ± σ): 239.3 ms ± 6.0 ms [User: 236.2 ms, System: 2.3 ms] Range (min … max): 233.2 ms … 256.8 ms 12 runs Benchmark 2: ./sapi/cli/php_old pack2.php Time (mean ± σ): 271.9 ms ± 3.3 ms [User: 269.7 ms, System: 1.3 ms] Range (min … max): 267.4 ms … 279.0 ms 11 runs Summary ./sapi/cli/php pack2.php ran 1.14 ± 0.03 times faster than ./sapi/cli/php_old pack2.php ``` On an i7-1185G7: ``` Benchmark 1: ./sapi/cli/php pack1.php Time (mean ± σ): 263.7 ms ± 1.8 ms [User: 262.6 ms, System: 0.9 ms] Range (min … max): 261.5 ms … 268.2 ms 11 runs Benchmark 2: ./sapi/cli/php_old pack1.php Time (mean ± σ): 303.3 ms ± 6.5 ms [User: 300.7 ms, System: 2.3 ms] Range (min … max): 297.4 ms … 318.1 ms 10 runs Summary ./sapi/cli/php pack1.php ran 1.15 ± 0.03 times faster than ./sapi/cli/php_old pack1.php Benchmark 1: ./sapi/cli/php pack2.php Time (mean ± σ): 156.7 ms ± 2.9 ms [User: 154.7 ms, System: 1.7 ms] Range (min … max): 151.6 ms … 164.7 ms 19 runs Benchmark 2: ./sapi/cli/php_old pack2.php Time (mean ± σ): 174.6 ms ± 3.3 ms [User: 171.9 ms, System: 2.3 ms] Range (min … max): 170.7 ms … 180.4 ms 17 runs Summary ./sapi/cli/php pack2.php ran 1.11 ± 0.03 times faster than ./sapi/cli/php_old pack2.php ``` Closes GH-18524. Co-authored-by: divinity76 <divinity76@gmail.com>
53 lines
1.8 KiB
C
53 lines
1.8 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 3.01 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available through the world-wide-web at the following url: |
|
|
| https://www.php.net/license/3_01.txt |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Author: |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
#include "basic_functions.h"
|
|
#include "php_math.h"
|
|
#include "php_string.h"
|
|
#include "base64.h"
|
|
#include "php_dir.h"
|
|
#include "php_dns.h"
|
|
#include "php_mail.h"
|
|
#include "md5.h"
|
|
#include "sha1.h"
|
|
#include "html.h"
|
|
#include "exec.h"
|
|
#include "file.h"
|
|
#include "php_ext_syslog.h"
|
|
#include "php_filestat.h"
|
|
#include "php_browscap.h"
|
|
#include "url.h"
|
|
#include "pageinfo.h"
|
|
#include "fsock.h"
|
|
#include "php_image.h"
|
|
#include "info.h"
|
|
#include "php_var.h"
|
|
#include "quot_print.h"
|
|
#include "dl.h"
|
|
#include "php_crypt.h"
|
|
#include "head.h"
|
|
#include "php_output.h"
|
|
#include "php_array.h"
|
|
#include "php_assert.h"
|
|
#include "php_versioning.h"
|
|
#include "php_password.h"
|
|
|
|
#include "php_version.h"
|
|
#define PHP_STANDARD_VERSION PHP_VERSION
|
|
|
|
#define phpext_standard_ptr basic_functions_module_ptr
|
|
PHP_MINIT_FUNCTION(standard_filters);
|
|
PHP_MSHUTDOWN_FUNCTION(standard_filters);
|