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.
The Cminor stack data block starts at offset 0 in Linear,
but at offset fe.(fe_stack_data) in Mach.
Operations and addressing mode that are relative to the stack pointer
must therefore be offset by fe.(fe_stack_data) 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.max_unsigned bytes, otherwise arithmetic overflows
could occur during frame accesses using unsigned machine integers as
offsets.