A quick snapshot of what I've been working on.
Besides hashing out the lightweight dynamic translation scheme
that I began to explain in the docs, I'm working on some
more related standalone testbed code which builds on the
existing dt-testbed/ code. It will have the hash table
concepts from the docs plus the ring3 branch handler
concepts from the previous dt-testbed/ code. That'll
give me most of what I need to test a prototype, before
adding it to plex86.
A couple options that might be fun:
- A simplistic direct branch mechanism to chain segments of tcode
for out-of-page static branches, and possibly some dynamic branches.
Destination tcode addresses are inlined into the code along with
an ID token. Each time there is a context switch (PDBR reload etc),
a global ID is incremented. If the IDs match, the destination
tcode address can be taken. If not, the branch handler can revalidate
the destination tcode address and backpatch in a new ID into the
inlined code, as well as tcode address if necessary.
- When user segments span the ring3 handler storage area, possibly
use direct access to the storage area (and/or use the guest stack)
for state saving/restoring of simple operations. This would save
segment register reloading.
-Kevin
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Kevin Lawton [EMAIL PROTECTED]
MandrakeSoft, Inc. Plex86 developer
http://www.linux-mandrake.com/ http://www.plex86.org/
Hopkins' Law: no clever idea in computer architecture ever goes unpunished.