Coverage Report

Created: 2025-06-13 06:43

/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 */