Tue Oct 18 15:30:00 EDT 2011

Lifting SMs

What is there to say, really?  How many ways can you take a sequence
and fold it?

I really only have nested signals, and in-place iteration.  What's the
big deal?

The problem is that I'm doing more than that.
- Need float conversion for IO
- dereference of input arrays
- state feedback

The float conversion is specific to SM.  It is also that feature that
enables the representation of the IO as an array of pointers instead
of a struct of pointers  (implementation would be the same though.).

It seems to be reasonable to generalize to struct, but implement it
untyped, so we can have an array of void pointers, or an array of
unions with the different types, which makes little difference.

Let's forget about the casting itself, but use void pointer interface.

   int sm_tick(void *state, void **ins, void **outs);

dereference then is simply

   float *in0 = ins[0];
   int   *in1 = ins[1];

Start with adding "level" to Var in Term.