/*
 * mysub.c
 * Submodule template file
 * [eichin:19880511.2039EST]
 */

#include <msimdecl.h>
#define FUNCTION xor_func
#define XOR(C,A,B) make_binop(xor_func, C, A, B)
#define DONE
/*
 * xor.c
 * z = xor(a, b...):
 * 	z <= LOGIC_LOW;
 *	z <= z xor a;
 * 	z <= z xor b; ...
 */ 
#define XOR_DELAY 10

xor_func(dep)
     Generics dep;
{
  STATE result = LOGIC_LOW;
  Wire outwire;
  
  SAVEOUTWIRE(dep, outwire);
  
  while(MOREARGS(dep))
    {
      STATE nextinput;
      READNEXTSTATE(dep, nextinput);

      switch(nextinput)
	{
	case LOGIC_HI:
	  result = (result==LOGIC_HI)?LOGIC_LOW:LOGIC_HI;
	  break;
	case LOGIC_LOW:
	  result = (result==LOGIC_LOW)?LOGIC_LOW:LOGIC_HI;
	  break;
	}
    }
  
  SETOUTPUT(outwire, result, globaltime+XOR_DELAY);
}
