mescc: Tinycc support: more function stack space.
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 25 Jul 2017 08:01:12 +0000 (10:01 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Wed, 26 Jul 2017 09:36:45 +0000 (11:36 +0200)
* module/mes/as-i386.mes (function-locals): Increase local space from
  64 (16 vars) to 2*1025 + 80 (20 vars).

module/language/c99/compiler.mes
module/mes/as-i386.mes
stage0/x86.M1

index 3cb94c6e8638ec2ad9472c101712bc7d8ef294f9..91d60269337d9b053a3bc326bf8992def3d122e3 100644 (file)
       (format (current-error-port) "    :~a\n" name)
       (let loop ((statements (.statements o))
                  (info (clone info #:locals locals #:function (.name o) #:text text)))
-        (if (null? statements) (clone info
-                                      #:function #f
-                                      #:functions (append (.functions info) (list (cons name (assert-return (.text info))))))
+        (if (null? statements) (let* ((locals (.locals info))
+                                      (local (and (pair? locals) (car locals)))
+                                      (count (and=> local (compose local:id cdr)))
+                                      (stack (and count (* count 4))))
+                                 (if (and stack (getenv "MESC_DEBUG")) (stderr "        stack: ~a\n" stack))
+                                 (clone info
+                                       #:function #f
+                                       #:functions (append (.functions info) (list (cons name (assert-return (.text info)))))))
             (let* ((statement (car statements)))
               (loop (cdr statements)
                     ((ast->info info) (car statements)))))))))
index d5059c4396b83058513cf64b41f419bdbe117711..4ffb7923d8b4981759fb7b1bfb010a14269568e5 100644 (file)
@@ -38,7 +38,7 @@
     ("mov____%esp,%ebp")))
 
 (define (i386:function-locals)
-  '(("sub____%esp,$i8" (#:immediate1 #x40)))) ; sub %esp,$0x40  # 16 local vars
+  `(("sub____%esp,$i32" (#:immediate ,(+ (* 4 1025) (* 20 4)))))) ; sub %esp,xxx 4*1024 buf, 20 local vars
 
 (define (i386:push-label label)
   `(("push___$i32" (#:address ,label)))) ; push  $0x<label>
index f37f3747eb99751af4581076b7f9844845a668fd..fc3fd41b06663f3ad500cdf77bb48b5e799ed151 100644 (file)
@@ -143,6 +143,7 @@ DEFINE sub____%dl,%al 28c2
 DEFINE sub____%eax,%edx 29c2
 DEFINE sub____%edx,%eax 29d0
 DEFINE sub____%edx,%eax 29d0
+DEFINE sub____%esp,$i32 81ec
 DEFINE sub____%esp,$i8 83ec
 DEFINE test___%al,%al 84c0
 DEFINE test___%eax,%eax 85c0