summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/optimize.tl21
1 files changed, 21 insertions, 0 deletions
diff --git a/share/txr/stdlib/optimize.tl b/share/txr/stdlib/optimize.tl
index 1541cd17..df423f2f 100644
--- a/share/txr/stdlib/optimize.tl
+++ b/share/txr/stdlib/optimize.tl
@@ -504,6 +504,27 @@
^((ifq ,reg (t 0) ,lab3)
,lab1
,*rest))))
+ (((mov (t @tn) (d @dn))
+ (jmp @lab3)
+ @lab1
+ (mov (t @tn) (t 0))
+ (jmp @lab3)
+ @lab2
+ (mov (t @tn) (t 0))
+ @(symbolp @lab3)
+ (ifq (t @tn) (t 0) @lab4)
+ . @rest)
+ (let ((lab5 (gensym "nl")))
+ ^((mov (t ,tn) (d ,dn))
+ (jmp ,lab4)
+ ,lab1
+ ,lab2
+ (mov (t ,tn) (t 0))
+ (jmp ,lab5)
+ ,lab3
+ (ifq (t ,tn) (t 0) ,lab4)
+ ,lab5
+ ,*rest)))
(@else else)))
(defun rewrite (fun list)