/src/php-src/ext/random/php_random_uint128.h
Line | Count | Source |
1 | | /* |
2 | | +----------------------------------------------------------------------+ |
3 | | | Copyright © The PHP Group and Contributors. | |
4 | | +----------------------------------------------------------------------+ |
5 | | | This source file is subject to the Modified BSD License that is | |
6 | | | bundled with this package in the file LICENSE, and is available | |
7 | | | through the World Wide Web at <https://www.php.net/license/>. | |
8 | | | | |
9 | | | SPDX-License-Identifier: BSD-3-Clause | |
10 | | +----------------------------------------------------------------------+ |
11 | | | Authors: Tim Düsterhus <timwolla@php.net> | |
12 | | | Go Kudo <zeriyoshi@php.net> | |
13 | | | | |
14 | | | Based on code from: Melissa O'Neill <oneill@pcg-random.org> | |
15 | | +----------------------------------------------------------------------+ |
16 | | */ |
17 | | |
18 | | #ifndef PHP_RANDOM_UINT128_H |
19 | | # define PHP_RANDOM_UINT128_H |
20 | | |
21 | | # include <stdint.h> |
22 | | |
23 | | # if !defined(__SIZEOF_INT128__) || defined(PHP_RANDOM_FORCE_EMULATE_128) |
24 | | typedef struct php_random_uint128_t { |
25 | | uint64_t hi; |
26 | | uint64_t lo; |
27 | | } php_random_uint128_t; |
28 | | |
29 | | static inline uint64_t php_random_uint128_hi(php_random_uint128_t num) |
30 | | { |
31 | | return num.hi; |
32 | | } |
33 | | |
34 | | static inline uint64_t php_random_uint128_lo(php_random_uint128_t num) |
35 | | { |
36 | | return num.lo; |
37 | | } |
38 | | |
39 | | static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo) |
40 | | { |
41 | | php_random_uint128_t r; |
42 | | |
43 | | r.hi = hi; |
44 | | r.lo = lo; |
45 | | |
46 | | return r; |
47 | | } |
48 | | |
49 | | static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2) |
50 | | { |
51 | | php_random_uint128_t r; |
52 | | |
53 | | r.lo = (num1.lo + num2.lo); |
54 | | r.hi = (num1.hi + num2.hi + (r.lo < num1.lo)); |
55 | | |
56 | | return r; |
57 | | } |
58 | | |
59 | | static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2) |
60 | | { |
61 | | php_random_uint128_t r; |
62 | | const uint64_t |
63 | | x0 = num1.lo & 0xffffffffULL, |
64 | | x1 = num1.lo >> 32, |
65 | | y0 = num2.lo & 0xffffffffULL, |
66 | | y1 = num2.lo >> 32, |
67 | | z0 = (((x1 * y0) + (x0 * y0 >> 32)) & 0xffffffffULL) + x0 * y1; |
68 | | |
69 | | r.hi = num1.hi * num2.lo + num1.lo * num2.hi; |
70 | | r.lo = num1.lo * num2.lo; |
71 | | r.hi += x1 * y1 + ((x1 * y0 + (x0 * y0 >> 32)) >> 32) + (z0 >> 32); |
72 | | |
73 | | return r; |
74 | | } |
75 | | |
76 | | static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num) |
77 | | { |
78 | | const uint64_t |
79 | | v = (num.hi ^ num.lo), |
80 | | s = num.hi >> 58U; |
81 | | |
82 | | return (v >> s) | (v << ((-s) & 63)); |
83 | | } |
84 | | # else |
85 | | typedef __uint128_t php_random_uint128_t; |
86 | | |
87 | | static inline uint64_t php_random_uint128_hi(php_random_uint128_t num) |
88 | 0 | { |
89 | 0 | return (uint64_t) (num >> 64); |
90 | 0 | } Unexecuted instantiation: exif.c:php_random_uint128_hi Unexecuted instantiation: csprng.c:php_random_uint128_hi Unexecuted instantiation: engine_mt19937.c:php_random_uint128_hi Unexecuted instantiation: engine_pcgoneseq128xslrr64.c:php_random_uint128_hi Unexecuted instantiation: engine_secure.c:php_random_uint128_hi Unexecuted instantiation: engine_user.c:php_random_uint128_hi Unexecuted instantiation: engine_xoshiro256starstar.c:php_random_uint128_hi Unexecuted instantiation: gammasection.c:php_random_uint128_hi Unexecuted instantiation: random.c:php_random_uint128_hi Unexecuted instantiation: randomizer.c:php_random_uint128_hi Unexecuted instantiation: zend_utils.c:php_random_uint128_hi Unexecuted instantiation: spl_directory.c:php_random_uint128_hi Unexecuted instantiation: spl_observer.c:php_random_uint128_hi Unexecuted instantiation: array.c:php_random_uint128_hi Unexecuted instantiation: basic_functions.c:php_random_uint128_hi Unexecuted instantiation: exec.c:php_random_uint128_hi Unexecuted instantiation: file.c:php_random_uint128_hi Unexecuted instantiation: filters.c:php_random_uint128_hi Unexecuted instantiation: ftp_fopen_wrapper.c:php_random_uint128_hi Unexecuted instantiation: head.c:php_random_uint128_hi Unexecuted instantiation: html.c:php_random_uint128_hi Unexecuted instantiation: http_fopen_wrapper.c:php_random_uint128_hi Unexecuted instantiation: link.c:php_random_uint128_hi Unexecuted instantiation: mail.c:php_random_uint128_hi Unexecuted instantiation: php_fopen_wrapper.c:php_random_uint128_hi Unexecuted instantiation: streamsfuncs.c:php_random_uint128_hi Unexecuted instantiation: string.c:php_random_uint128_hi Unexecuted instantiation: strnatcmp.c:php_random_uint128_hi Unexecuted instantiation: uniqid.c:php_random_uint128_hi Unexecuted instantiation: url_scanner_ex.c:php_random_uint128_hi Unexecuted instantiation: var.c:php_random_uint128_hi Unexecuted instantiation: fopen_wrappers.c:php_random_uint128_hi Unexecuted instantiation: main.c:php_random_uint128_hi Unexecuted instantiation: php_open_temporary_file.c:php_random_uint128_hi Unexecuted instantiation: php_variables.c:php_random_uint128_hi Unexecuted instantiation: streams.c:php_random_uint128_hi Unexecuted instantiation: internal_functions_cli.c:php_random_uint128_hi |
91 | | |
92 | | static inline uint64_t php_random_uint128_lo(php_random_uint128_t num) |
93 | 0 | { |
94 | 0 | return (uint64_t) num; |
95 | 0 | } Unexecuted instantiation: exif.c:php_random_uint128_lo Unexecuted instantiation: csprng.c:php_random_uint128_lo Unexecuted instantiation: engine_mt19937.c:php_random_uint128_lo Unexecuted instantiation: engine_pcgoneseq128xslrr64.c:php_random_uint128_lo Unexecuted instantiation: engine_secure.c:php_random_uint128_lo Unexecuted instantiation: engine_user.c:php_random_uint128_lo Unexecuted instantiation: engine_xoshiro256starstar.c:php_random_uint128_lo Unexecuted instantiation: gammasection.c:php_random_uint128_lo Unexecuted instantiation: random.c:php_random_uint128_lo Unexecuted instantiation: randomizer.c:php_random_uint128_lo Unexecuted instantiation: zend_utils.c:php_random_uint128_lo Unexecuted instantiation: spl_directory.c:php_random_uint128_lo Unexecuted instantiation: spl_observer.c:php_random_uint128_lo Unexecuted instantiation: array.c:php_random_uint128_lo Unexecuted instantiation: basic_functions.c:php_random_uint128_lo Unexecuted instantiation: exec.c:php_random_uint128_lo Unexecuted instantiation: file.c:php_random_uint128_lo Unexecuted instantiation: filters.c:php_random_uint128_lo Unexecuted instantiation: ftp_fopen_wrapper.c:php_random_uint128_lo Unexecuted instantiation: head.c:php_random_uint128_lo Unexecuted instantiation: html.c:php_random_uint128_lo Unexecuted instantiation: http_fopen_wrapper.c:php_random_uint128_lo Unexecuted instantiation: link.c:php_random_uint128_lo Unexecuted instantiation: mail.c:php_random_uint128_lo Unexecuted instantiation: php_fopen_wrapper.c:php_random_uint128_lo Unexecuted instantiation: streamsfuncs.c:php_random_uint128_lo Unexecuted instantiation: string.c:php_random_uint128_lo Unexecuted instantiation: strnatcmp.c:php_random_uint128_lo Unexecuted instantiation: uniqid.c:php_random_uint128_lo Unexecuted instantiation: url_scanner_ex.c:php_random_uint128_lo Unexecuted instantiation: var.c:php_random_uint128_lo Unexecuted instantiation: fopen_wrappers.c:php_random_uint128_lo Unexecuted instantiation: main.c:php_random_uint128_lo Unexecuted instantiation: php_open_temporary_file.c:php_random_uint128_lo Unexecuted instantiation: php_variables.c:php_random_uint128_lo Unexecuted instantiation: streams.c:php_random_uint128_lo Unexecuted instantiation: internal_functions_cli.c:php_random_uint128_lo |
96 | | |
97 | | static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo) |
98 | 10 | { |
99 | 10 | php_random_uint128_t r; |
100 | | |
101 | 10 | r = ((php_random_uint128_t) hi << 64) + lo; |
102 | | |
103 | 10 | return r; |
104 | 10 | } Unexecuted instantiation: exif.c:php_random_uint128_constant Unexecuted instantiation: csprng.c:php_random_uint128_constant Unexecuted instantiation: engine_mt19937.c:php_random_uint128_constant engine_pcgoneseq128xslrr64.c:php_random_uint128_constant Line | Count | Source | 98 | 10 | { | 99 | 10 | php_random_uint128_t r; | 100 | | | 101 | 10 | r = ((php_random_uint128_t) hi << 64) + lo; | 102 | | | 103 | 10 | return r; | 104 | 10 | } |
Unexecuted instantiation: engine_secure.c:php_random_uint128_constant Unexecuted instantiation: engine_user.c:php_random_uint128_constant Unexecuted instantiation: engine_xoshiro256starstar.c:php_random_uint128_constant Unexecuted instantiation: gammasection.c:php_random_uint128_constant Unexecuted instantiation: random.c:php_random_uint128_constant Unexecuted instantiation: randomizer.c:php_random_uint128_constant Unexecuted instantiation: zend_utils.c:php_random_uint128_constant Unexecuted instantiation: spl_directory.c:php_random_uint128_constant Unexecuted instantiation: spl_observer.c:php_random_uint128_constant Unexecuted instantiation: array.c:php_random_uint128_constant Unexecuted instantiation: basic_functions.c:php_random_uint128_constant Unexecuted instantiation: exec.c:php_random_uint128_constant Unexecuted instantiation: file.c:php_random_uint128_constant Unexecuted instantiation: filters.c:php_random_uint128_constant Unexecuted instantiation: ftp_fopen_wrapper.c:php_random_uint128_constant Unexecuted instantiation: head.c:php_random_uint128_constant Unexecuted instantiation: html.c:php_random_uint128_constant Unexecuted instantiation: http_fopen_wrapper.c:php_random_uint128_constant Unexecuted instantiation: link.c:php_random_uint128_constant Unexecuted instantiation: mail.c:php_random_uint128_constant Unexecuted instantiation: php_fopen_wrapper.c:php_random_uint128_constant Unexecuted instantiation: streamsfuncs.c:php_random_uint128_constant Unexecuted instantiation: string.c:php_random_uint128_constant Unexecuted instantiation: strnatcmp.c:php_random_uint128_constant Unexecuted instantiation: uniqid.c:php_random_uint128_constant Unexecuted instantiation: url_scanner_ex.c:php_random_uint128_constant Unexecuted instantiation: var.c:php_random_uint128_constant Unexecuted instantiation: fopen_wrappers.c:php_random_uint128_constant Unexecuted instantiation: main.c:php_random_uint128_constant Unexecuted instantiation: php_open_temporary_file.c:php_random_uint128_constant Unexecuted instantiation: php_variables.c:php_random_uint128_constant Unexecuted instantiation: streams.c:php_random_uint128_constant Unexecuted instantiation: internal_functions_cli.c:php_random_uint128_constant |
105 | | |
106 | | static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2) |
107 | 6 | { |
108 | 6 | return num1 + num2; |
109 | 6 | } Unexecuted instantiation: exif.c:php_random_uint128_add Unexecuted instantiation: csprng.c:php_random_uint128_add Unexecuted instantiation: engine_mt19937.c:php_random_uint128_add engine_pcgoneseq128xslrr64.c:php_random_uint128_add Line | Count | Source | 107 | 6 | { | 108 | 6 | return num1 + num2; | 109 | 6 | } |
Unexecuted instantiation: engine_secure.c:php_random_uint128_add Unexecuted instantiation: engine_user.c:php_random_uint128_add Unexecuted instantiation: engine_xoshiro256starstar.c:php_random_uint128_add Unexecuted instantiation: gammasection.c:php_random_uint128_add Unexecuted instantiation: random.c:php_random_uint128_add Unexecuted instantiation: randomizer.c:php_random_uint128_add Unexecuted instantiation: zend_utils.c:php_random_uint128_add Unexecuted instantiation: spl_directory.c:php_random_uint128_add Unexecuted instantiation: spl_observer.c:php_random_uint128_add Unexecuted instantiation: array.c:php_random_uint128_add Unexecuted instantiation: basic_functions.c:php_random_uint128_add Unexecuted instantiation: exec.c:php_random_uint128_add Unexecuted instantiation: file.c:php_random_uint128_add Unexecuted instantiation: filters.c:php_random_uint128_add Unexecuted instantiation: ftp_fopen_wrapper.c:php_random_uint128_add Unexecuted instantiation: head.c:php_random_uint128_add Unexecuted instantiation: html.c:php_random_uint128_add Unexecuted instantiation: http_fopen_wrapper.c:php_random_uint128_add Unexecuted instantiation: link.c:php_random_uint128_add Unexecuted instantiation: mail.c:php_random_uint128_add Unexecuted instantiation: php_fopen_wrapper.c:php_random_uint128_add Unexecuted instantiation: streamsfuncs.c:php_random_uint128_add Unexecuted instantiation: string.c:php_random_uint128_add Unexecuted instantiation: strnatcmp.c:php_random_uint128_add Unexecuted instantiation: uniqid.c:php_random_uint128_add Unexecuted instantiation: url_scanner_ex.c:php_random_uint128_add Unexecuted instantiation: var.c:php_random_uint128_add Unexecuted instantiation: fopen_wrappers.c:php_random_uint128_add Unexecuted instantiation: main.c:php_random_uint128_add Unexecuted instantiation: php_open_temporary_file.c:php_random_uint128_add Unexecuted instantiation: php_variables.c:php_random_uint128_add Unexecuted instantiation: streams.c:php_random_uint128_add Unexecuted instantiation: internal_functions_cli.c:php_random_uint128_add |
110 | | |
111 | | static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2) |
112 | 4 | { |
113 | 4 | return num1 * num2; |
114 | 4 | } Unexecuted instantiation: exif.c:php_random_uint128_multiply Unexecuted instantiation: csprng.c:php_random_uint128_multiply Unexecuted instantiation: engine_mt19937.c:php_random_uint128_multiply engine_pcgoneseq128xslrr64.c:php_random_uint128_multiply Line | Count | Source | 112 | 4 | { | 113 | 4 | return num1 * num2; | 114 | 4 | } |
Unexecuted instantiation: engine_secure.c:php_random_uint128_multiply Unexecuted instantiation: engine_user.c:php_random_uint128_multiply Unexecuted instantiation: engine_xoshiro256starstar.c:php_random_uint128_multiply Unexecuted instantiation: gammasection.c:php_random_uint128_multiply Unexecuted instantiation: random.c:php_random_uint128_multiply Unexecuted instantiation: randomizer.c:php_random_uint128_multiply Unexecuted instantiation: zend_utils.c:php_random_uint128_multiply Unexecuted instantiation: spl_directory.c:php_random_uint128_multiply Unexecuted instantiation: spl_observer.c:php_random_uint128_multiply Unexecuted instantiation: array.c:php_random_uint128_multiply Unexecuted instantiation: basic_functions.c:php_random_uint128_multiply Unexecuted instantiation: exec.c:php_random_uint128_multiply Unexecuted instantiation: file.c:php_random_uint128_multiply Unexecuted instantiation: filters.c:php_random_uint128_multiply Unexecuted instantiation: ftp_fopen_wrapper.c:php_random_uint128_multiply Unexecuted instantiation: head.c:php_random_uint128_multiply Unexecuted instantiation: html.c:php_random_uint128_multiply Unexecuted instantiation: http_fopen_wrapper.c:php_random_uint128_multiply Unexecuted instantiation: link.c:php_random_uint128_multiply Unexecuted instantiation: mail.c:php_random_uint128_multiply Unexecuted instantiation: php_fopen_wrapper.c:php_random_uint128_multiply Unexecuted instantiation: streamsfuncs.c:php_random_uint128_multiply Unexecuted instantiation: string.c:php_random_uint128_multiply Unexecuted instantiation: strnatcmp.c:php_random_uint128_multiply Unexecuted instantiation: uniqid.c:php_random_uint128_multiply Unexecuted instantiation: url_scanner_ex.c:php_random_uint128_multiply Unexecuted instantiation: var.c:php_random_uint128_multiply Unexecuted instantiation: fopen_wrappers.c:php_random_uint128_multiply Unexecuted instantiation: main.c:php_random_uint128_multiply Unexecuted instantiation: php_open_temporary_file.c:php_random_uint128_multiply Unexecuted instantiation: php_variables.c:php_random_uint128_multiply Unexecuted instantiation: streams.c:php_random_uint128_multiply Unexecuted instantiation: internal_functions_cli.c:php_random_uint128_multiply |
115 | | |
116 | | static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num) |
117 | 0 | { |
118 | 0 | const uint64_t |
119 | 0 | v = ((uint64_t) (num >> 64U)) ^ (uint64_t) num, |
120 | 0 | s = num >> 122U; |
121 | |
|
122 | 0 | return (v >> s) | (v << ((-s) & 63)); |
123 | 0 | } Unexecuted instantiation: exif.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: csprng.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: engine_mt19937.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: engine_pcgoneseq128xslrr64.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: engine_secure.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: engine_user.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: engine_xoshiro256starstar.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: gammasection.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: random.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: randomizer.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: zend_utils.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: spl_directory.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: spl_observer.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: array.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: basic_functions.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: exec.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: file.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: filters.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: ftp_fopen_wrapper.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: head.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: html.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: http_fopen_wrapper.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: link.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: mail.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: php_fopen_wrapper.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: streamsfuncs.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: string.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: strnatcmp.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: uniqid.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: url_scanner_ex.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: var.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: fopen_wrappers.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: main.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: php_open_temporary_file.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: php_variables.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: streams.c:php_random_pcgoneseq128xslrr64_rotr64 Unexecuted instantiation: internal_functions_cli.c:php_random_pcgoneseq128xslrr64_rotr64 |
124 | | # endif |
125 | | |
126 | | #endif /* PHP_RANDOM_UINT128_H */ |