"Clever" PRESERVING

left top

(define (preserving regs seq1 seq2)
  (if (null? regs)
      (append-instruction-sequences seq1 seq2)
      (let ((first-reg (car regs)))
        (if (and (needs-register? seq2 first-reg)        ; **
                 (modifies-register? seq1 first-reg))    ; **
            (preserving (cdr regs)
             (make-instruction-sequence
              (list-union (list first-reg)               ; ** needs
                          (registers-needed seq1))       ; **
              (list-difference (registers-modified seq1) ; ** modifies
                               (list first-reg))         ; **
              (append `((save ,first-reg))
                      (statements seq1)
                      `((restore ,first-reg))))
             seq2)
            (preserving (cdr regs) seq1 seq2)))))

Jim Miller W3C