diff options
-rw-r--r-- | share/txr/stdlib/optimize.tl | 21 |
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) |