Thread View: comp.lang.functional
1 messages
1 total messages
Started by Evan Ireland
Thu, 04 Apr 1991 21:49
Three address code
Author: Evan Ireland
Date: Thu, 04 Apr 1991 21:49
Date: Thu, 04 Apr 1991 21:49
41 lines
2156 bytes
2156 bytes
I've had no luck with mail, so this is for csdw at Rhodes University.
>
>In an attempt to optimize a functional language, I would like to
>turn the stack based intermediate code into three address code.
>
>Has anyone done similar conversions? Any references would be
>greatly appreciated.
I do not have any references, but I thought that one aspect of my FAM
implementation might be of interest.
A number of interpreters and compilers that I have seen implement a stack
pointer in a register or global variable. Then to implement various stack
operations, they use auto-increment or auto-decrement operations on the stack
pointer register. Since I generate portable C, and thus cannot assume I have
DATA *f (register DATA *fp)
{
....
}
Thus I pass to each function the current pointer to top of stack, from which it
can index downwards to find its arguments. Within the function, I use indexing
operations on fp, e.g. fp[3] = fp[1], to manipulate values on the stack, so I
am not continually manipulating the stack pointer. If "f" calls another
function, it will pass the address of the current top of stack, e.g. g (&f[5]).
The advantage to me is that I have a register for a stack pointer even though I
am generating portable C code.
Now the relationship to three-address code. If you adopt such a scheme, and
your three address instructions allow some indexing, you can sometimes generate
ADD fp[3],f[4],fp[3]
I hope this helps.
_______________________________________________________________________________
E.Ireland@massey.ac.nz Evan Ireland, School of Information Sciences,
+64 63 69099 x8541 Massey University, Palmerston North, New Zealand.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads