From 8565f8a98ca79102b8016187ac376b3647b4b87f Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 19 Feb 2021 19:03:41 -0800 Subject: compiler: constant fold pred/succ functions. * share/txr/stdlib/compiler.tl (%const-foldable-funs%): Add pred, succ and their sisters. * share/txr/stdlib/vm-param.tl (%max-lev-idx%, %max-v-lev%, %max-sm-lev-idx%): Get rid of macro-time wrapping in calculation, which are there for manual constant folding. * share/txr/stdlib/asm.tl (with-lev-idx): Remove macro-time providing manual constant folding. --- share/txr/stdlib/asm.tl | 2 +- share/txr/stdlib/compiler.tl | 5 ++++- share/txr/stdlib/vm-param.tl | 6 +++--- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/share/txr/stdlib/asm.tl b/share/txr/stdlib/asm.tl index 89ad4b3a..624ddff6 100644 --- a/share/txr/stdlib/asm.tl +++ b/share/txr/stdlib/asm.tl @@ -270,7 +270,7 @@ (defmacro with-lev-idx ((lev-var idx-var) val-expr . body) (with-gensyms (val-var) ^(let* ((,val-var ,val-expr) - (,lev-var (ash ,val-var (macro-time (- %lev-bits%)))) + (,lev-var (ash ,val-var (- %lev-bits%))) (,idx-var (logtrunc ,val-var %lev-bits%))) ,*body)))) diff --git a/share/txr/stdlib/compiler.tl b/share/txr/stdlib/compiler.tl index 774a1616..f7ed530e 100644 --- a/share/txr/stdlib/compiler.tl +++ b/share/txr/stdlib/compiler.tl @@ -258,7 +258,10 @@ (defvarl %bin-op% (relate %nary-ops% %bin-ops% nil)) -(defvarl %const-foldable-funs% '(+ - * / b- b+ b* b/ car cdr cadr caddr first second)) +(defvarl %const-foldable-funs% '(+ - * / b- b+ b* b/ + pred ppred ppred pppred + succ ssucc ssucc sssucc + car cdr cadr caddr first second)) (defvarl assumed-fun) diff --git a/share/txr/stdlib/vm-param.tl b/share/txr/stdlib/vm-param.tl index b8b8d77f..d87e5bf3 100644 --- a/share/txr/stdlib/vm-param.tl +++ b/share/txr/stdlib/vm-param.tl @@ -25,12 +25,12 @@ ;; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. (defsymacro %lev-size% 1024) -(defsymacro %max-lev-idx% (macro-time (pred %lev-size%))) +(defsymacro %max-lev-idx% (pred %lev-size%)) (defsymacro %lev-bits% 10) (defsymacro %max-lev% 63) -(defsymacro %max-v-lev% (macro-time (ppred %max-lev%))) +(defsymacro %max-v-lev% (ppred %max-lev%)) (defsymacro %sm-lev-size% 64) -(defsymacro %max-sm-lev-idx% (macro-time (pred %sm-lev-size%))) +(defsymacro %max-sm-lev-idx% (pred %sm-lev-size%)) (defsymacro %max-sm-lev% 15) (defsymacro %sm-lev-bits% 6) (defsymacro %max-lambda-fixed-args% 127) -- cgit v1.2.3