summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stdlib/compiler.tl8
1 files changed, 5 insertions, 3 deletions
diff --git a/stdlib/compiler.tl b/stdlib/compiler.tl
index 002ef24d..fe4db13e 100644
--- a/stdlib/compiler.tl
+++ b/stdlib/compiler.tl
@@ -954,7 +954,7 @@
(uni tfrag.fvars [reduce-left uni cfrags nil .fvars])
(uni tfrag.ffuns [reduce-left uni cfrags nil .ffuns]))))))))
-(defmeth compiler eliminate-frame (me code env)
+(defmeth compiler eliminate-frame (me code env : no-tregs)
(if (>= me.(unalloc-reg-count) (len env.vb))
(let ((trhash (hash))
(vbhash (hash))
@@ -987,7 +987,9 @@
(let ((vb [vbhash loc]))
(set vb.loc treg)))
me.(free-tregs tregs)
- (append (mapcar (ret ^(mov ,@1 (t 0))) (nreverse tregs)) ncode)))
+ (if no-tregs
+ ncode
+ (append (mapcar (ret ^(mov ,@1 (t 0))) (nreverse tregs)) ncode))))
code))
(defmeth compiler comp-let (me oreg env form)
@@ -1216,7 +1218,7 @@
me.(free-treg btreg)
(when (and cspy (plusp frsize) (null cspy.cap-vars))
(when-match ((close @reg @frsize @nil . @irest) . @crest)
- me.(eliminate-frame code nenv)
+ me.(eliminate-frame code nenv t)
(set code ^((close ,reg 0 ,me.treg-cntr ,*irest)
,*crest))))
nenv.(unused-check form "parameter")