Skip to content

Commit 833d3fb

Browse files
committed
add exercise 5.37
1 parent ebfe286 commit 833d3fb

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

chapter05/5_37.scm

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
;; remove the condition, when (preserving regs, seq1 seq2), always (save first-reg),
2+
;; then (restore first-reg)
3+
(define (preserving regs seq1 seq2)
4+
(if (null? regs)
5+
(append-instruction-sequences seq1 seq2)
6+
(let ((first-reg (car regs)))
7+
(preserving (cdr regs)
8+
(make-instruction-sequence
9+
(list-union (list first-reg) (registers-needed seq1))
10+
(list-difference
11+
(registers-modified seq1)
12+
(list first-reg))
13+
(append
14+
`((save ,first-reg))
15+
(statements seq1)
16+
`((restore ,first-reg))))
17+
seq2))))

0 commit comments

Comments
 (0)