MCPcopy Create free account
hub / github.com/NetHack/NetHack / isaac64_update

Function isaac64_update

src/isaac64.c:50–101  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

48}
49
50staticfn void isaac64_update(isaac64_ctx *_ctx){
51 uint64_t *m;
52 uint64_t *r;
53 uint64_t a;
54 uint64_t b;
55 uint64_t x;
56 uint64_t y;
57 int i;
58 m=_ctx->m;
59 r=_ctx->r;
60 a=_ctx->a;
61 b=_ctx->b+(++_ctx->c);
62 for(i=0;i<ISAAC64_SZ/2;i++){
63 x=m[i];
64 a=~(a^a<<21)+m[i+ISAAC64_SZ/2];
65 m[i]=y=m[lower_bits(x)]+a+b;
66 r[i]=b=m[upper_bits(y)]+x;
67 x=m[++i];
68 a=(a^a>>5)+m[i+ISAAC64_SZ/2];
69 m[i]=y=m[lower_bits(x)]+a+b;
70 r[i]=b=m[upper_bits(y)]+x;
71 x=m[++i];
72 a=(a^a<<12)+m[i+ISAAC64_SZ/2];
73 m[i]=y=m[lower_bits(x)]+a+b;
74 r[i]=b=m[upper_bits(y)]+x;
75 x=m[++i];
76 a=(a^a>>33)+m[i+ISAAC64_SZ/2];
77 m[i]=y=m[lower_bits(x)]+a+b;
78 r[i]=b=m[upper_bits(y)]+x;
79 }
80 for(i=ISAAC64_SZ/2;i<ISAAC64_SZ;i++){
81 x=m[i];
82 a=~(a^a<<21)+m[i-ISAAC64_SZ/2];
83 m[i]=y=m[lower_bits(x)]+a+b;
84 r[i]=b=m[upper_bits(y)]+x;
85 x=m[++i];
86 a=(a^a>>5)+m[i-ISAAC64_SZ/2];
87 m[i]=y=m[lower_bits(x)]+a+b;
88 r[i]=b=m[upper_bits(y)]+x;
89 x=m[++i];
90 a=(a^a<<12)+m[i-ISAAC64_SZ/2];
91 m[i]=y=m[lower_bits(x)]+a+b;
92 r[i]=b=m[upper_bits(y)]+x;
93 x=m[++i];
94 a=(a^a>>33)+m[i-ISAAC64_SZ/2];
95 m[i]=y=m[lower_bits(x)]+a+b;
96 r[i]=b=m[upper_bits(y)]+x;
97 }
98 _ctx->b=b;
99 _ctx->a=a;
100 _ctx->n=ISAAC64_SZ;
101}
102
103staticfn void isaac64_mix(uint64_t _x[8]){
104 static const unsigned char SHIFT[8]={9,9,23,15,14,20,17,14};

Callers 2

isaac64_reseedFunction · 0.85
isaac64_next_uint64Function · 0.85

Calls 2

lower_bitsFunction · 0.85
upper_bitsFunction · 0.85

Tested by

no test coverage detected