r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[rebcode] Rebcode discussion

BrianH
20-Feb-2007
[1674]
If you join these function blocks after the rebcode function is created, 
you may have context issues. It is better to join them before assembly.
Steeve
20-Feb-2007
[1675x3]
yes but i try to do emulation + a debugger , so Z80 opcodes are converts 
step by step
i have no context issues, cause all words i use have the same context
there is no local words in my rebcode functions
BrianH
20-Feb-2007
[1678]
You can do code snippets for your emulation/debugger, and concatenation 
for direct execution.
Steeve
20-Feb-2007
[1679]
it's what i do
BrianH
20-Feb-2007
[1680x2]
As long as you are careful the semantics shouldn't change.
Remember that these branch statements group statements together into 
basic blocks, so you should break up your code into snippets on boundaries 
between these blocks.
Steeve
20-Feb-2007
[1682x2]
that why i don't use branch statements
branchements are controled outside rebcodes functions
BrianH
20-Feb-2007
[1684x2]
For non-generated code, the only useful branch statement in rebcode 
is BRAB. All others have better structured equivalents.
BTW, the English word for branchements is branches.
Steeve
20-Feb-2007
[1686x2]
i have a main loop wich do the branchements and call the rebcode 
routines
sorry
BrianH
20-Feb-2007
[1688x2]
Just trying to help :)
Are you doing a compiler or an interpreter? A compiler would be faster, 
but would require you to translate branches.
Steeve
20-Feb-2007
[1690x2]
it's an hybrid way
i try to do the two things
BrianH
20-Feb-2007
[1692]
A JIT compiler, perhaps?
Maxim
20-Feb-2007
[1693x2]
sort of like a JIT ?
hehe
Steeve
20-Feb-2007
[1695x3]
first i parse Z80 opcodes and execute them step by step, then they 
are concatened to build sub-routines and cached, if sub-routines 
are mantory another time, then i call cached sub-routines instead 
of reparse the opcodes.
*mandatory
(requested is better)
BrianH
20-Feb-2007
[1698]
Do you do basic block analysis of the source opcodes to determine 
where the subroutine boundaries are? For that matter, does the Z80 
have indirect branches?
Steeve
20-Feb-2007
[1699]
;-_-
BrianH
20-Feb-2007
[1700]
Sorry, I don't speak IRC.
Steeve
20-Feb-2007
[1701x2]
yes indirect branches exist
but it's not a problem, the management of branches is done in real 
time, it's in a stack, so i can manage fixed as indirect branches.
BrianH
20-Feb-2007
[1703]
How common are they? Can you analyze them to determine their destinations 
to convert them into branches or calls?
Steeve
20-Feb-2007
[1704x2]
all branches are converted into call
difficult to explain with my bad english
BrianH
20-Feb-2007
[1706x2]
Call of function or continuation? (Sorry if your English doesn't 
include computer-science terms)
Meaning, does the call return?
Steeve
20-Feb-2007
[1708x2]
when i seek a Z80 branch opcode (direct or indirect), i stop the 
current rebcode function construction and i build new one for the 
folowing opcodes
so each rebcode function (routines) must return the adress of the 
next branch
BrianH
20-Feb-2007
[1710x2]
Continuation then.
How do you handle back-branches then?
Steeve
20-Feb-2007
[1712x2]
if a routine return an unknwon adress, then the parser jump a these 
adress and rebuild a new function.
back-branches are treated in the same manner
BrianH
20-Feb-2007
[1714]
So, no basic block analysis at all. All branches are considered non-local.
Steeve
20-Feb-2007
[1715]
yep
BrianH
20-Feb-2007
[1716]
Would it be too difficult to translate branches to literal offsets 
into their rebcode equivalents, as an optimization?
Steeve
20-Feb-2007
[1717x3]
here you can see my first try without rebcode http://perso.orange.fr/rebol/galaga.r
i could try this as a final compilation step, perhaps
in the source you can see the concept of branches management i use
BrianH
20-Feb-2007
[1720]
Your trick of generating words for branch targets may need changing 
when you switch to rebcode. Pre-2.7 versions of REBOL had hard limits 
on the number of words possible at once (about 8000). You might consider 
issue! values instead with a lookup table (probably a hash!).
Steeve
20-Feb-2007
[1721]
ok
BrianH
20-Feb-2007
[1722x2]
It will be a little slower. You might then return references to the 
code rather than the names.
That will cut down on lookups. Make it threaded.