Saving and Restoring Registers

left top right

(define (preserving regs seq1 seq2)
  (if (null? regs)
      (append-instruction-sequences seq1 seq2)
      (let ((first-reg (car regs)))
        (preserving (cdr regs)
          (make-instruction-sequence
            (append `((save ,first-reg))
                    (statements seq1)
                    `((restore ,first-reg))))
           seq2))))

(define (end-with-linkage linkage instruction-sequence)
  (preserving '(continue)
   instruction-sequence
   (compile-linkage linkage)))

Jim Miller W3C