...code:
For simplicity of presentation, we assume an idealized RISC architecture with no delay slots; see Appendix A.

...code:
We use the pseudo-instruction emit to simplify the presentation. It expands into a sequence of instructions that allocates space in a dynamic code segment, builds the representation of an instruction from its opcode and arguments, and finally writes the instruction to the allocated space. In this example the arguments in the emitted instruction are fixed; the first emit creates ``mul r3, r3, r2'', regardless of the current values of r2 and r3.

...closures.
Appel has made a similar observation [App87], and ``all code'' closures have also been proposed by Feeley and Lapalme [FL92].

...code:
nth(, (, , ..., )) yields , the element of a tuple)

...FABIUS
Quintus Fabius Maximus was a Roman general best known for his defeat of Hannibal in the Second Punic War. His primary strategy was to delay confrontation; repeated small attacks eventually led to victory without a single decisive conflict.

...unrolled.
The arithmetic operations can also be optimized based on the contents of the vector, which will likely yield substantial speedups for computations involving sparse data. The results presented here do not reflect such improvements, since we have focused on fast run-time code generation at the expense of some run-time optimizations.

...optimization.
These embedded pointers may be difficult to locate and update; for example on the MIPS a constant 32-bit pointer might be embedded into two instructions that contain 16-bit immediate values. Instruction reordering during run-time code generation can make the locations of these instructions unpredictable.

...problems.
Note that such a partial evaluator need not be implemented in its target language.

mleone@cs.cmu.edu