[virtmach] First VM

Tom Fjellstrom tfjellstrom@home.com
Tue, 14 Nov 2000 00:13:49 -0700


Michael Wolf wrote:
> 
> On Mon, Nov 13, 2000 at 06:49:47PM -0700, Tom Fjellstrom wrote:
> > I just finished ripping out that massive switch statement and put in
> > place
> > a direct threaded implementation using a table of labels and goto.
> > but now the new version is irreversibly GCC only...
> 
> If the old and new are sufficiently similar, I bet you could do something
> portable to GCC and ANSI C.

the only deference between the two are the vm_exec() function.
But right now the makefile compiles both versions.

> Due to the nature of code which relies on a lot of static tables with a lot
> of related data in each, the code probably lends itself well to being
> automatically generated based on 1 file with definitions and several
> template .c files.
> 
> So, for example, in chip.h you have
>     enum chipop {
>         NOOP = 0,
>         MUL,
>         DIV,
>         ...
>     };
> and in chip.c you have
>     OPDEF opargs[MAXOP] = {
>         { NOOP, 0},
>         ...
>     }
> and
>     switch (vm->vm_chip.ir) {
>         case (NOOP):
>             ...
>         ...
>     }
> 
> and so on.  It's redundant, but that's bad only because the files are
> written and generated by hand.  You could automatically generate all of this
> stuff all at once when you build Chip.
> 
> I think with a bit of effort, you could support both the label pointer table
> and the switch statement.
> 
> A definition language might look like:
>     opcode, num_args, switch_func, switch_c_operator, label
>     MUL, 2, 8BIT, *=, mul_label
>     MULL, 2, 32BIT, *=, mull_label
> or something similar -- I've probably got the exact details quite wrong.
> When generating code, use that data and fill in the templates.

also an optional (or not :) element would be 'code' just in case
the templates aren't what are needed.

> I would probably do this in perl, and I've heard m4 is suitable for this
> sort of thing, but I don't know m4, so take that advice with a grain of
> salt.  :)
> 
> Does this make sense?  Let me know how it turns out.

Yes, quite a lot of sense, especially sense I discovered that CHIP nor
the compiler supports OPs that I thought I added at the start.
(i.e.: SHL SHR etc...)

> mike

Now that is a nice idea. And I can do it perl :)
Hmmm, while I'm doing that I might as well put together
the perl script for generating the lexer too...
(I've been meaning to do that for a while.)

-- 
Tom Fjellstrom
tfjellstrom@home.com
http://strangesoft.net/