@@ -575,6 +575,23 @@ static inline void mersennetwister_reload(php_random_engine_state_mersennetwiste
575
575
state -> cnt = 0 ;
576
576
}
577
577
578
+ static void mersennetwister_seed (void * state , const uint64_t seed ) {
579
+ /* Initialize generator state with seed
580
+ See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier.
581
+ In previous versions, most significant bits (MSBs) of the seed affect
582
+ only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto. */
583
+ php_random_engine_state_mersennetwister * s = state ;
584
+
585
+ s -> s [0 ] = seed & 0xffffffffU ;
586
+ for (s -> cnt = 1 ; s -> cnt < MT_N ; s -> cnt ++ ) {
587
+ s -> s [s -> cnt ] = (1812433253U * (s -> s [s -> cnt - 1 ] ^ (s -> s [s -> cnt - 1 ] >> 30 )) + s -> cnt ) & 0xffffffffU ;
588
+ }
589
+ mersennetwister_reload (s );
590
+
591
+ /* Seed only once */
592
+ s -> seeded = true;
593
+ }
594
+
578
595
static uint64_t mersennetwister_generate (void * state , bool * engine_unsafe ) {
579
596
php_random_engine_state_mersennetwister * s = state ;
580
597
uint32_t s1 ;
@@ -584,10 +601,9 @@ static uint64_t mersennetwister_generate(void *state, bool *engine_unsafe) {
584
601
if (php_random_bytes_silent (& bytes , sizeof (zend_long )) == FAILURE ) {
585
602
bytes = GENERATE_SEED ();
586
603
}
587
- php_mt_srand ( bytes );
604
+ mersennetwister_seed ( state , bytes );
588
605
}
589
606
590
-
591
607
if (s -> cnt >= MT_N ) {
592
608
mersennetwister_reload (s );
593
609
}
@@ -599,23 +615,6 @@ static uint64_t mersennetwister_generate(void *state, bool *engine_unsafe) {
599
615
return (uint64_t ) (s1 ^ (s1 >> 18 ));
600
616
}
601
617
602
- static void mersennetwister_seed (void * state , const uint64_t seed ) {
603
- /* Initialize generator state with seed
604
- See Knuth TAOCP Vol 2, 3rd Ed, p.106 for multiplier.
605
- In previous versions, most significant bits (MSBs) of the seed affect
606
- only MSBs of the state array. Modified 9 Jan 2002 by Makoto Matsumoto. */
607
- php_random_engine_state_mersennetwister * s = state ;
608
-
609
- s -> s [0 ] = seed & 0xffffffffU ;
610
- for (s -> cnt = 1 ; s -> cnt < MT_N ; s -> cnt ++ ) {
611
- s -> s [s -> cnt ] = (1812433253U * (s -> s [s -> cnt - 1 ] ^ (s -> s [s -> cnt - 1 ] >> 30 )) + s -> cnt ) & 0xffffffffU ;
612
- }
613
- mersennetwister_reload (s );
614
-
615
- /* Seed only once */
616
- s -> seeded = true;
617
- }
618
-
619
618
static int mersennetwister_serialize (void * state , HashTable * data ) {
620
619
php_random_engine_state_mersennetwister * s = state ;
621
620
zval tmp ;
@@ -1761,7 +1760,7 @@ PHP_METHOD(Random_Engine_Xoshiro256StarStar, __construct)
1761
1760
PHP_METHOD (Random_Engine_Xoshiro256StarStar , jump )
1762
1761
{
1763
1762
php_random_engine * engine = Z_RANDOM_ENGINE_P (ZEND_THIS );
1764
- php_random_engine_state_xoshiro256starstar * s = ( php_random_engine_state_xoshiro256starstar * ) engine -> state ;
1763
+ php_random_engine_state_xoshiro256starstar * s = engine -> state ;
1765
1764
static const uint64_t jmp [] = { 0x180ec6d33cfd0aba , 0xd5a61266f0c9392c , 0xa9582618e03fc9aa , 0x39abdc4529b1661c };
1766
1765
uint64_t s0 = 0 , s1 = 0 , s2 = 0 , s3 = 0 ;
1767
1766
int i , j ;
0 commit comments