In previous work, we presented a Typed Assembly Language (TAL). TAL is sufficiently expressive to serve as a target language for compilers of high-level languages such as ML. Moreover, pe system is powerful enough to encode source-level abstractions such as closures and data types, yet flexible enough to admit most traditional low-level optimizations. The compiler presented in our original work was based on a continuation-passing style (CPS) transform, which eliminated the need for a control stack by heap allocating activation records. However, modern architectures and most compilers are based on stack allocation of these records. This paper presents STAL, an extension of TAL with stack constructs and stack types to support the stack allocation style. We show that STAL is sufficiently expressive to support languages such as Java, Pascal, and ML; constructs such as exceptions and displays; and optimizations such as tail call elimination and callee-saves registers. This paper makes two ...
J. Gregory Morrisett, Karl Crary, Neal Glew, David