This is a C++ program to look for candidate superoperators,
make a perfect hash function for them, and write out the
tables needed for the perfect hash function.

Much of the code in this directory is taken from GPERF, as
a result, it is written in a different style than superops.cc
which is the main driver program (e.g. superops.cc uses the
STL, the other files do not).  The reason why I used GPERF's
code instead of using GPERF directly (as I do for the
builtins.gperf hash function, for example) is that:
1) I would still have needed to write code to glue the
   superoperator search with GPERF.
2) I needed a completely different calling convention and
   implementation of the lookup function than the usual one:
   so instead of hacking and sed'ing GPERF's output I decided
   that modifying GPERF's output routines would have been
   more maintainable.
3) The superoperator search program was already written in C++.

The GPERF code was taken almost unmodified with the exception
of options.cc (because most options that only affected output
are not needed anymore, and because I stripped the getopt code).
Of course, input.cc and main.cc (and also output.cc) are not
there anymore, their function is done by the single file
hash.cc.

Run the program, and it will automagically generate:
1) superop1.inl and superop2.inl, which contain the hash
   tables and the tables for writing the hash lookup function.

2) byte.def, the final part of the input to genbc (used for
   decoding the instructions).

3) vm.def, the final part of the input to genvm (used for
   executing the instructions in the virtual machine proper).

4) table.st, the superoperator table to be included in
   CompildCode.st.

Paolo
