/src/php-src/ext/random/php_random_uint128.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | +----------------------------------------------------------------------+ |
3 | | | Copyright (c) The PHP Group | |
4 | | +----------------------------------------------------------------------+ |
5 | | | This source file is subject to version 3.01 of the PHP license, | |
6 | | | that is bundled with this package in the file LICENSE, and is | |
7 | | | available through the world-wide-web at the following url: | |
8 | | | https://www.php.net/license/3_01.txt | |
9 | | | If you did not receive a copy of the PHP license and are unable to | |
10 | | | obtain it through the world-wide-web, please send a note to | |
11 | | | license@php.net so we can mail you a copy immediately. | |
12 | | +----------------------------------------------------------------------+ |
13 | | | Authors: Tim Düsterhus <timwolla@php.net> | |
14 | | | Go Kudo <zeriyoshi@php.net> | |
15 | | | | |
16 | | | Based on code from: Melissa O'Neill <oneill@pcg-random.org> | |
17 | | +----------------------------------------------------------------------+ |
18 | | */ |
19 | | |
20 | | #ifndef PHP_RANDOM_UINT128_H |
21 | | # define PHP_RANDOM_UINT128_H |
22 | | |
23 | | # include <stdint.h> |
24 | | |
25 | | # if !defined(__SIZEOF_INT128__) || defined(PHP_RANDOM_FORCE_EMULATE_128) |
26 | | typedef struct _php_random_uint128_t { |
27 | | uint64_t hi; |
28 | | uint64_t lo; |
29 | | } php_random_uint128_t; |
30 | | |
31 | | static inline uint64_t php_random_uint128_hi(php_random_uint128_t num) |
32 | | { |
33 | | return num.hi; |
34 | | } |
35 | | |
36 | | static inline uint64_t php_random_uint128_lo(php_random_uint128_t num) |
37 | | { |
38 | | return num.lo; |
39 | | } |
40 | | |
41 | | static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo) |
42 | | { |
43 | | php_random_uint128_t r; |
44 | | |
45 | | r.hi = hi; |
46 | | r.lo = lo; |
47 | | |
48 | | return r; |
49 | | } |
50 | | |
51 | | static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2) |
52 | | { |
53 | | php_random_uint128_t r; |
54 | | |
55 | | r.lo = (num1.lo + num2.lo); |
56 | | r.hi = (num1.hi + num2.hi + (r.lo < num1.lo)); |
57 | | |
58 | | return r; |
59 | | } |
60 | | |
61 | | static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2) |
62 | | { |
63 | | php_random_uint128_t r; |
64 | | const uint64_t |
65 | | x0 = num1.lo & 0xffffffffULL, |
66 | | x1 = num1.lo >> 32, |
67 | | y0 = num2.lo & 0xffffffffULL, |
68 | | y1 = num2.lo >> 32, |
69 | | z0 = (((x1 * y0) + (x0 * y0 >> 32)) & 0xffffffffULL) + x0 * y1; |
70 | | |
71 | | r.hi = num1.hi * num2.lo + num1.lo * num2.hi; |
72 | | r.lo = num1.lo * num2.lo; |
73 | | r.hi += x1 * y1 + ((x1 * y0 + (x0 * y0 >> 32)) >> 32) + (z0 >> 32); |
74 | | |
75 | | return r; |
76 | | } |
77 | | |
78 | | static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num) |
79 | | { |
80 | | const uint64_t |
81 | | v = (num.hi ^ num.lo), |
82 | | s = num.hi >> 58U; |
83 | | |
84 | | return (v >> s) | (v << ((-s) & 63)); |
85 | | } |
86 | | # else |
87 | | typedef __uint128_t php_random_uint128_t; |
88 | | |
89 | | static inline uint64_t php_random_uint128_hi(php_random_uint128_t num) |
90 | 0 | { |
91 | 0 | return (uint64_t) (num >> 64); |
92 | 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 |
93 | | |
94 | | static inline uint64_t php_random_uint128_lo(php_random_uint128_t num) |
95 | 0 | { |
96 | 0 | return (uint64_t) num; |
97 | 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 |
98 | | |
99 | | static inline php_random_uint128_t php_random_uint128_constant(uint64_t hi, uint64_t lo) |
100 | 25 | { |
101 | 25 | php_random_uint128_t r; |
102 | | |
103 | 25 | r = ((php_random_uint128_t) hi << 64) + lo; |
104 | | |
105 | 25 | return r; |
106 | 25 | } 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 | 100 | 25 | { | 101 | 25 | php_random_uint128_t r; | 102 | | | 103 | 25 | r = ((php_random_uint128_t) hi << 64) + lo; | 104 | | | 105 | 25 | return r; | 106 | 25 | } |
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 |
107 | | |
108 | | static inline php_random_uint128_t php_random_uint128_add(php_random_uint128_t num1, php_random_uint128_t num2) |
109 | 15 | { |
110 | 15 | return num1 + num2; |
111 | 15 | } 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 | 109 | 15 | { | 110 | 15 | return num1 + num2; | 111 | 15 | } |
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 |
112 | | |
113 | | static inline php_random_uint128_t php_random_uint128_multiply(php_random_uint128_t num1, php_random_uint128_t num2) |
114 | 10 | { |
115 | 10 | return num1 * num2; |
116 | 10 | } 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 | 114 | 10 | { | 115 | 10 | return num1 * num2; | 116 | 10 | } |
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 |
117 | | |
118 | | static inline uint64_t php_random_pcgoneseq128xslrr64_rotr64(php_random_uint128_t num) |
119 | 0 | { |
120 | 0 | const uint64_t |
121 | 0 | v = ((uint64_t) (num >> 64U)) ^ (uint64_t) num, |
122 | 0 | s = num >> 122U; |
123 | |
|
124 | 0 | return (v >> s) | (v << ((-s) & 63)); |
125 | 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 |
126 | | # endif |
127 | | |
128 | | #endif /* PHP_RANDOM_UINT128_H */ |