This paper presents STAL, a variant of Typed Assembly Language with constructs and
types to support a limited form of stack allocation. As with other statically-typed low-level
languages, the type system of STAL ensures that a wide class of errors cannot occur at
run time, and therefore the language can be adapted for use in certifying compilers where
security is a concern. Like the Java Virtual Machine Language (JVML), STAL supports
stack allocation of local variables and procedure activation records, but unlike the JVML,
STAL does not pre-suppose fixed notions of procedures, exceptions, or calling conventions.
Rather, compiler writers can choose encodings for these high-level constructs using the more
primitive RISC-like mechanisms of STAL. Consequently, some important optimizations that
are impossible to perform within the JVML, such as tail call elimination or callee-saves
registers, can be easily expressed within STAL.