SHOW:
|
|
- or go back to the newest paste.
1 | static thread_local uint64_t RandomStateA = | |
2 | - | static thread_local uint64_t RandomStateA = |
2 | + | static_cast<uint64_t>(time(nullptr)); |
3 | - | static_cast<uint64_t>(time(nullptr)); |
3 | + | static thread_local uint64_t RandomStateB = xorShiftStar64(); |
4 | - | static thread_local uint64_t RandomStateB = xorShiftStar64(); |
4 | + | |
5 | uint64_t getRandomUnsigned64() { | |
6 | uint64_t A = RandomStateA; | |
7 | const uint64_t B = RandomStateB; | |
8 | RandomStateA = B; | |
9 | ||
10 | A ^= A << 23; | |
11 | A ^= A >> 17; | |
12 | A ^= B ^ (B >> 26); | |
13 | ||
14 | RandomStateB = A; | |
15 | return A + B; | |
16 | } | |
17 | ||
18 | ========================================================================== | |
19 | - | 00000000004006b0 <gwp_asan::random::getRandomUnsigned64()>: |
19 | + | 0000000000400780 <gwp_asan::random::getRandomUnsigned64()>: |
20 | - | 4006b0: 53 push %rbx |
20 | + | 400780: 41 57 push %r15 |
21 | - | 4006b1: 66 66 66 64 48 8b 04 data16 data16 data16 mov %fs:0x0,%rax |
21 | + | 400782: 41 56 push %r14 |
22 | - | 4006b8: 25 00 00 00 00 |
22 | + | 400784: 41 55 push %r13 |
23 | - | 4006bd: 48 89 c3 mov %rax,%rbx |
23 | + | 400786: 41 54 push %r12 |
24 | - | # TLS init check/branch for RandomStateA. |
24 | + | 400788: 53 push %rbx |
25 | - | 4006c0: 80 b8 d8 ff ff ff 00 cmpb $0x0,-0x28(%rax) |
25 | + | 400789: 66 66 66 64 48 8b 04 data16 data16 data16 mov %fs:0x0,%rax |
26 | - | 4006c7: 74 51 je 40071a <gwp_asan::random::getRandomUnsigned64()+0x6a> # |
26 | + | 400790: 25 00 00 00 00 |
27 | - | # TLS init check/branch for RandomStateB (with an unneccessary `%rbx = %rax` copy). |
27 | + | 400795: 49 89 c6 mov %rax,%r14 |
28 | - | 4006c9: 48 89 d8 mov %rbx,%rax |
28 | + | 400798: 8a 88 f8 ff ff ff mov -0x8(%rax),%cl |
29 | - | 4006cc: 80 bb e8 ff ff ff 01 cmpb $0x1,-0x18(%rbx) |
29 | + | 40079e: 84 c9 test %cl,%cl |
30 | - | 4006d3: 75 6c jne 400741 <gwp_asan::random::getRandomUnsigned64()+0x91> |
30 | + | 4007a0: 74 55 je 4007f7 <gwp_asan::random::getRandomUnsigned64()+0x77> |
31 | - | 4006d5: 48 89 d8 mov %rbx,%rax |
31 | + | 4007a2: 4d 8b a6 e8 ff ff ff mov -0x18(%r14),%r12 |
32 | - | 4006d8: 48 8b 93 e0 ff ff ff mov -0x20(%rbx),%rdx |
32 | + | 4007a9: 4d 8b ae f0 ff ff ff mov -0x10(%r14),%r13 |
33 | - | 4006df: 48 8b b3 d0 ff ff ff mov -0x30(%rbx),%rsi |
33 | + | 4007b0: 4c 89 f0 mov %r14,%rax |
34 | - | 4006e6: 48 89 93 d0 ff ff ff mov %rdx,-0x30(%rbx) |
34 | + | 4007b3: 4d 89 ae e8 ff ff ff mov %r13,-0x18(%r14) |
35 | - | 4006ed: 48 89 f1 mov %rsi,%rcx |
35 | + | 4007ba: 4c 89 e3 mov %r12,%rbx |
36 | - | 4006f0: 48 c1 e1 17 shl $0x17,%rcx |
36 | + | 4007bd: 48 c1 e3 17 shl $0x17,%rbx |
37 | - | 4006f4: 48 31 f1 xor %rsi,%rcx |
37 | + | 4007c1: 4c 31 e3 xor %r12,%rbx |
38 | - | 4006f7: 48 89 d0 mov %rdx,%rax |
38 | + | 4007c4: 4c 89 e8 mov %r13,%rax |
39 | - | 4006fa: 48 c1 e8 1a shr $0x1a,%rax |
39 | + | 4007c7: 48 c1 e8 1a shr $0x1a,%rax |
40 | - | 4006fe: 48 31 d0 xor %rdx,%rax |
40 | + | 4007cb: 4c 31 e8 xor %r13,%rax |
41 | - | 400701: 48 31 c8 xor %rcx,%rax |
41 | + | 4007ce: 48 31 d8 xor %rbx,%rax |
42 | - | 400704: 48 c1 e9 11 shr $0x11,%rcx |
42 | + | 4007d1: 48 c1 eb 11 shr $0x11,%rbx |
43 | - | 400708: 48 31 c1 xor %rax,%rcx |
43 | + | 4007d5: 48 31 c3 xor %rax,%rbx |
44 | - | 40070b: 48 89 8b e0 ff ff ff mov %rcx,-0x20(%rbx) |
44 | + | 4007d8: 84 c9 test %cl,%cl |
45 | - | 400712: 48 01 d1 add %rdx,%rcx |
45 | + | 4007da: 0f 84 d6 00 00 00 je 4008b6 <gwp_asan::random::getRandomUnsigned64()+0x136> |
46 | - | 400715: 48 89 c8 mov %rcx,%rax |
46 | + | 4007e0: 49 89 9e f0 ff ff ff mov %rbx,-0x10(%r14) |
47 | - | 400718: 5b pop %rbx |
47 | + | 4007e7: 49 01 dd add %rbx,%r13 |
48 | - | 400719: c3 retq |
48 | + | 4007ea: 4c 89 e8 mov %r13,%rax |
49 | 4007ed: 5b pop %rbx | |
50 | 4007ee: 41 5c pop %r12 | |
51 | 4007f0: 41 5d pop %r13 | |
52 | 4007f2: 41 5e pop %r14 | |
53 | 4007f4: 41 5f pop %r15 | |
54 | 4007f6: c3 retq |