Coverage Report

Created: 2026-06-02 06:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 */