Related articles |
---|
[6 earlier articles] |
Re: virtual machine efficiency lars@bearnip.com (2004-12-30) |
Re: virtual machine efficiency calumg@no.onetel.spam.com (Calum Grant) (2004-12-30) |
Re: virtual machine efficiency cr88192@hotmail.com (cr88192) (2004-12-31) |
Re: virtual machine efficiency cr88192@hotmail.com (cr88192) (2004-12-31) |
Re: virtual machine efficiency strohm@airmail.net (John R. Strohm) (2005-01-01) |
Re: virtual machine efficiency kers@hpl.hp.com (Chris Dollin) (2005-01-12) |
Re: virtual machine efficiency cr88192@hotmail.com (cr88192) (2005-01-14) |
Re: virtual machine efficiency kers@hpl.hp.com (Chris Dollin) (2005-01-15) |
Re: virtual machine efficiency hannah@schlund.de (2005-01-30) |
From: | "cr88192" <cr88192@hotmail.com> |
Newsgroups: | comp.compilers |
Date: | 14 Jan 2005 00:40:06 -0500 |
Organization: | Compilers Central |
References: | 04-12-151 05-01-038 |
Keywords: | VM, performance |
Posted-Date: | 14 Jan 2005 00:40:06 EST |
"Chris Dollin" <kers@hpl.hp.com> wrote in message
> ed_davis2 wrote:
>> I have developed a simple stack based virtual machine. I would like
>> it to be as efficient as possible, in terms of both speed and object
>> code size. Size, as in size of the object code the VM processes
>> (byte-code), and not necessarily the size of the VM.
>
> (snips)
>
> The last VM I built didn't allow you to embed large values into the
> opcode stream. Instead each procedure had an associated constant
> table, and you referred to large values by their index in the table.
similar to mine.
> Normally for loading big constants there was an eight-bit index field
> (all instructions were 16 bits wide, with a 5+3 opcode, where the 3
> bits might be an additional immediate value, or a sub-opcode), but
> there was provision for handling the contextually-rare cases where
> there were more than 256 big constants.
my opcodes are based on words, though a little different:
6.10: length, opcode.
followed by any indices or addresses.
though in most cases optional, sometimes the length field has relevance...
> 16-bit instructions turned out to be an interesting and occasionally
> frustrating choice, as was the decision to try and combine stack-based
> and register-aka-local-variable instructions. That the machine had
> *two* stacks [1] - one for values, one for locals/return addresses - was
> an automatic consequence of umpteen years writing Pop11 (and similar)
> code.
mine also has two stacks:
the value stack;
and a kind of opaque meta-stack used for control.
locals were stored in their own space which is indirectly referenced by the
control stack (variables and similar are accessed with their own opcodes).
I like my approach personally (if albeit it uses a little extra space
sometimes).
Return to the
comp.compilers page.
Search the
comp.compilers archives again.