MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / threefry

Function threefry

src/backend/oneapi/kernel/random_engine_threefry.hpp:75–160  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

73}
74
75void threefry(uint k[2], uint c[2], uint X[2]) {
76 uint ks[3];
77
78 setSkeinParity(&ks[2]);
79 ks[0] = k[0];
80 X[0] = c[0];
81 ks[2] ^= k[0];
82 ks[1] = k[1];
83 X[1] = c[1];
84 ks[2] ^= k[1];
85
86 X[0] += ks[0];
87 X[1] += ks[1];
88
89 X[0] += X[1];
90 X[1] = rotL(X[1], R0);
91 X[1] ^= X[0];
92 X[0] += X[1];
93 X[1] = rotL(X[1], R1);
94 X[1] ^= X[0];
95 X[0] += X[1];
96 X[1] = rotL(X[1], R2);
97 X[1] ^= X[0];
98 X[0] += X[1];
99 X[1] = rotL(X[1], R3);
100 X[1] ^= X[0];
101
102 /* InjectKey(r=1) */
103 X[0] += ks[1];
104 X[1] += ks[2];
105 X[1] += 1; /* X[2-1] += r */
106
107 X[0] += X[1];
108 X[1] = rotL(X[1], R4);
109 X[1] ^= X[0];
110 X[0] += X[1];
111 X[1] = rotL(X[1], R5);
112 X[1] ^= X[0];
113 X[0] += X[1];
114 X[1] = rotL(X[1], R6);
115 X[1] ^= X[0];
116 X[0] += X[1];
117 X[1] = rotL(X[1], R7);
118 X[1] ^= X[0];
119
120 /* InjectKey(r=2) */
121 X[0] += ks[2];
122 X[1] += ks[0];
123 X[1] += 2;
124
125 X[0] += X[1];
126 X[1] = rotL(X[1], R0);
127 X[1] ^= X[0];
128 X[0] += X[1];
129 X[1] = rotL(X[1], R1);
130 X[1] ^= X[0];
131 X[0] += X[1];
132 X[1] = rotL(X[1], R2);

Callers 2

operator()Method · 0.70
operator()Method · 0.70

Calls 2

setSkeinParityFunction · 0.70
rotLFunction · 0.70

Tested by

no test coverage detected