/*
fichier test_init3.c
créé le 5 juin 2007 par Yann Guidon - whygee@f-cpu.org

teste l'influence de la valeur d'initialisation de l'état interne
 cas spécial : tout à 0 => cycle de 1 pas (registres bloqués)
*/

#include <stdio.h>

#define MACRO_tGFSR32x4_SHFT(current, last, ptr) \
  current ^= last;        \
  current ^= ptr;         \
  t = current;            \
  current >>= 1;          \
  t &= 0x01010101;        \
  current &= 0x7F7F7F7F;  \
  t <<= 4;                \
  current ^= t;           \
  t <<= 3;                \
  current ^= t;

int main() {
  unsigned int r0, r1, r2, r3, a, t, i;

  for (a=0; a<256; a++) {
    printf("%d ",a);
    fflush(stdout);

    r0=a; r1=0; r2=0; r3=0; i=0;

    do {
      MACRO_tGFSR32x4_SHFT(r0, r3, 0)
      MACRO_tGFSR32x4_SHFT(r1, r0, 0)
      MACRO_tGFSR32x4_SHFT(r2, r1, 0)
      MACRO_tGFSR32x4_SHFT(r3, r2, 0)
      i++;
    } while ((i<=300000000) && !( (r0==a) && ((r1|r2|r3)==0) ));
    printf("%d\n",i);
  }
  return r0;
}
