restore_callee_savefek adds before k the instructions that
re-load from the frame the values of callee-save registers used by the
current function, restoring these registers to their initial values.
Translation of operations and addressing mode.
In Linear, the stack pointer has offset 0, i.e. points to the
beginning of the Cminor stack data block. In Mach, the stack
pointer points to the bottom of the activation record,
at offset - fe.(fe_size) where fe is the frame environment.
Operations and addressing mode that are relative to the stack pointer
must therefore be offset by fe.(fe_size) to preserve their
behaviour.
Translation of a Linear instruction. Prepends the corresponding
Mach instructions to the given list of instructions.
Lgetstack and Lsetstack moves between registers and stack slots
are turned into Mgetstack, Mgetparent or Msetstack instructions
at offsets determined by the frame environment.
Instructions and addressing modes are modified as described previously.
Code to restore the values of callee-save registers is inserted
before the function returns.
Translation of a function. Code that saves the values of used
callee-save registers is inserted at function entry, followed
by the translation of the function body.
Subtle point: the compiler must check that the frame is no
larger than - Int.min_signed bytes, otherwise arithmetic overflows
could occur during frame accesses using signed machine integers as
offsets.