packages feed

passage-0.1: cbits/runtime/src/kiss.h

/*****************************************************************************/
/* Implementation of a 32-bit KISS generator which uses no multiply instructions */

extern unsigned int rx, ry, rz, rw, rc;
#pragma omp threadprivate (rx,ry,rz,rw,rc)

static inline
void init_genrand(unsigned long seed) {
  rx = seed;
  ry = seed + 1;
  rz = seed + 2;
  rw = seed + 3;
  rc = seed & 1;
}

static inline
unsigned long genrand_int32(void) {

  int t;
  ry ^= ry << 5;
  ry ^= ry >> 7;
  ry ^= ry << 22;
  t = rz + rw + rc;
  rz = rw;
  rc = t < 0;
  rw = t & 2147483647;
  rx += 1411392427;
  return rx + ry + rw;
}