#include <stdlib.h>
#include "tree-vect.h"

typedef struct {
    short I;
    int W;
    int X;
    int V;
    int U;
    int P;
    int Q;
    int R;
} __attribute__((packed)) f1_neuron;

f1_neuron *f1_layer;

int numf1s = 1000;

void __attribute__((noinline,noclone))
reset_nodes() 
{
  int i;

  for (i=0;i<numf1s;i++)
    {
      f1_layer[i].W = 0;
      f1_layer[i].X = 0;
      f1_layer[i].V = 0;
      f1_layer[i].U = 0;
      f1_layer[i].P = 0;
      f1_layer[i].Q = 0;
      f1_layer[i].R = 0;
    }
}

int main ()
{
  int i;
  check_vect ();
  f1_layer = (f1_neuron *)malloc (numf1s * sizeof (f1_neuron));
  for (i = 0; i < numf1s; i++)
    f1_layer[i].I = -1;
  reset_nodes ();
  for (i = 0; i < numf1s; i++)
    if (f1_layer[i].I != -1)
      abort ();
  return 0; 
}
