Made EBP switchable between datum mask and scratch register.
authorssmith <ssmith>
Fri, 20 Jan 1995 22:45:55 +0000 (22:45 +0000)
committerssmith <ssmith>
Fri, 20 Jan 1995 22:45:55 +0000 (22:45 +0000)
v8/src/compiler/machines/i386/lapgen.scm
v8/src/compiler/machines/i386/machin.scm
v8/src/compiler/machines/i386/rules3.scm

index 35da3a06a65f3c046f31066aa26eea29e5d6025f..4286185cc79666f2ea6adbdef75854b819460d11 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: lapgen.scm,v 1.5 1995/01/20 20:15:59 ssmith Exp $
+$Id: lapgen.scm,v 1.6 1995/01/20 22:45:36 ssmith Exp $
 
 Copyright (c) 1992-1993 Massachusetts Institute of Technology
 
@@ -39,13 +39,22 @@ MIT in each case. |#
 \f
 ;;;; Register-Allocator Interface
 
-(define available-machine-registers
-  ;; esp holds the the stack pointer
-  ;; ebp holds the pointer mask
-  ;; esi holds the register array pointer
-  ;; edi holds the free pointer
-  ;; fr7 is not used so that we can always push on the stack once.
-  (list eax ecx edx ebx fr0 fr1 fr2 fr3 fr4 fr5 fr6))
+(define available-machine-registers)
+
+(if use-ebp-as-mask?
+    (set! available-machine-registers
+      ;; esp holds the the stack pointer
+      ;; ebp holds the pointer mask
+      ;; esi holds the register array pointer
+      ;; edi holds the free pointer
+      ;; fr7 is not used so that we can always push on the stack once.
+      (list eax ecx edx ebx fr0 fr1 fr2 fr3 fr4 fr5 fr6))
+    (set! available-machine-registers
+      ;; esp holds the the stack pointer
+      ;; esi holds the register array pointer
+      ;; edi holds the free pointer
+      ;; fr7 is not used so that we can always push on the stack once.
+      (list eax ecx edx ebx ebp fr0 fr1 fr2 fr3 fr4 fr5 fr6)))
 
 (define-integrable (sort-machine-registers registers)
   registers)
@@ -509,7 +518,7 @@ MIT in each case. |#
   (LAP (SHR W ,target (& ,scheme-datum-width))))
 
 (define (object->datum target)
-  (LAP (AND W ,target (R ,regnum:datum-mask))))
+  (LAP (AND W ,target ,datum-mask-value)))
 
 (define (object->address target)
   (declare (integrate-operator object->datum))
@@ -721,14 +730,11 @@ MIT in each case. |#
       (error "To must be a fixnum and from must be a fixnum or #f" from to)
       (cond ((eqv? from to)
             (LAP))
-           ((false? from)
-            (if (= to 0)
-                (LAP (AND W (R ,reg) (R ,regnum:datum-mask)))
-                (LAP (AND W (R ,reg) (R ,regnum:datum-mask))
-                     (OR W (R ,reg) (& ,(fix:lsh to scheme-type-width))))))
            ((eqv? (fix:or from to)
                   to)
             (LAP (OR W (R ,reg) (& ,(fix:lsh to scheme-type-width)))))
            (else
-            (LAP (AND W (R ,reg) (R ,regnum:datum-mask))
-                 (OR W (R ,reg) (& ,(fix:lsh to scheme-type-width))))))))
+            (if (= to 0)
+                (LAP (AND W (R ,reg) ,datum-mask-value))
+                (LAP (AND W (R ,reg) ,datum-mask-value)
+                     (OR W (R ,reg) (& ,(fix:lsh to scheme-type-width)))))))))
index 2966e562889a051af7a657ac862b9a3bf0d6f836..427267e92e82692f1f8f11b79178a691e68474d9 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: machin.scm,v 1.6 1995/01/20 20:16:50 ssmith Exp $
+$Id: machin.scm,v 1.7 1995/01/20 22:45:45 ssmith Exp $
 
 Copyright (c) 1992-1995 Massachusetts Institute of Technology
 
@@ -161,6 +161,10 @@ MIT in each case. |#
 \f
 ;;;; Machine registers
 
+;; This gives us an extra scratch register
+(define use-ebp-as-mask? #f)
+
+
 (define eax 0)                         ; acumulator
 (define ecx 1)                         ; counter register
 (define edx 2)                         ; multiplication high-half target
@@ -187,30 +191,58 @@ MIT in each case. |#
 (define number-of-temporary-registers 256)
 
 (define-integrable regnum:stack-pointer esp)
-(define-integrable regnum:datum-mask ebp)
+
+    
+
 (define-integrable regnum:regs-pointer esi)
 (define-integrable regnum:free-pointer edi)
 (define-integrable regnum:hook eax)
 (define-integrable regnum:first-arg ecx)
 (define-integrable regnum:second-arg edx)
 
+(define datum-mask-value)
+(define regnum:datum-mask)
+
+(if use-ebp-as-mask?
+    (begin
+      (set! regnum:datum-mask ebp)
+      (set! datum-mask-value `(R ,ebp)))
+    (set! datum-mask-value `(& ,(- (expt 2 scheme-datum-width) 1))))
+
 (define-integrable (machine-register-known-value register)
   register                             ; ignored
   false)
 
-(define (machine-register-value-class register)
-  (cond ((<= eax register ebx)
-        value-class=object)
-       ((= register regnum:datum-mask)
-        value-class=immediate)
-       ((or (= register regnum:stack-pointer)
-            (= register regnum:free-pointer)
-            (= register regnum:regs-pointer))
-        value-class=address)
-       ((<= fr0 register fr7)
-        value-class=float)
-       (else
-        (error "illegal machine register" register))))
+(define machine-register-value-class)
+
+(if use-ebp-as-mask?
+    (set! machine-register-value-class
+         (lambda (register)
+           (cond ((<= eax register ebx)
+                  value-class=object)
+                 ((= register regnum:datum-mask)
+                  value-class=immediate)
+                 ((or (= register regnum:stack-pointer)
+                      (= register regnum:free-pointer)
+                      (= register regnum:regs-pointer))
+                  value-class=address)
+                 ((<= fr0 register fr7)
+                  value-class=float)
+                 (else
+                  (error "illegal machine register" register)))))
+    (set! machine-register-value-class
+         (lambda (register)
+           (cond ((or (<= eax register ebx)
+                      (= ebp register))
+                  value-class=object)
+                 ((or (= register regnum:stack-pointer)
+                      (= register regnum:free-pointer)
+                      (= register regnum:regs-pointer))
+                  value-class=address)
+                 ((<= fr0 register fr7)
+                  value-class=float)
+                 (else
+                  (error "illegal machine register" register))))))
 
 (define *rtlgen/argument-registers*
   (vector ecx edx))
index 512012857093f1ac3e13c4655de31b28b056f469..27126c2a04ac3c8f8de748f3c79a2733d769527a 100644 (file)
@@ -1,6 +1,6 @@
-t#| -*-Scheme-*-
+#| -*-Scheme-*-
 
-$Id: rules3.scm,v 1.9 1995/01/20 20:17:29 ssmith Exp $
+$Id: rules3.scm,v 1.10 1995/01/20 22:45:55 ssmith Exp $
 
 Copyright (c) 1992-1993 Massachusetts Institute of Technology
 
@@ -40,7 +40,7 @@ MIT in each case. |#
 ;;;; Invocations
 
 (define-integrable (clear-continuation-type-code)
-  (LAP (AND W (@R ,regnum:stack-pointer) (R ,regnum:datum-mask))))
+  (LAP (AND W (@R ,regnum:stack-pointer) ,datum-mask-value)))
 
 (define-rule statement
   (POP-RETURN)
@@ -809,7 +809,7 @@ MIT in each case. |#
           (lambda (pc-label prefix)
             (LAP ,@prefix
                  (MOV W (R ,edx) (@RO W ,eax (- ,code-block-label ,pc-label)))
-                 (AND W (R ,edx) (R ,regnum:datum-mask))
+                 (AND W (R ,edx) ,datum-mask-value)
                  (LEA (R ,ebx) (@RO W ,edx ,free-ref-offset))
                  (MOV W (R ,ecx) ,reg:environment)
                  (MOV W (@RO W ,edx ,environment-offset) (R ,ecx))
@@ -843,31 +843,31 @@ MIT in each case. |#
                   (XOR W (R ,ebx) (R ,ebx))
                   (MOV B (R ,ebx) (@ROI B ,eax (- ,bytes ,pc-label) ,ecx 1))
                   ;; address of vector
-                  (AND W (R ,edx) (R ,regnum:datum-mask))
+                  (AND W (R ,edx) ,datum-mask-value)
                   ;; Store n-sections in arg
                   (MOV W ,reg:utility-arg-4 (R ,ebx))
                   ;; vector-ref -> cc block
                   (MOV W (R ,edx) (@ROI B ,edx 4 ,ecx 4))
                   ;; address of cc-block
-                  (AND W (R ,edx) (R ,regnum:datum-mask))
+                  (AND W (R ,edx) ,datum-mask-value)
                   ;; cc-block length
                   (MOV W (R ,ebx) (@R ,edx))
                   ;; Get environment
                   (MOV W (R ,ecx) ,reg:environment)
                   ;; Eliminate length tags
-                  (AND W (R ,ebx) (R ,regnum:datum-mask))
+                  (AND W (R ,ebx) ,datum-mask-value)
                   ;; Store environment
                   (MOV W (@RI ,edx ,ebx 4) (R ,ecx))
                   ;; Get NMV header
                   (MOV W (R ,ecx) (@RO B ,edx 4))
                   ;; Eliminate NMV tag
-                  (AND W (R ,ecx) (R ,regnum:datum-mask))
+                  (AND W (R ,ecx) ,datum-mask-value)
                   ;; Address of first free reference
                   (LEA (R ,ebx) (@ROI B ,edx 8 ,ecx 4))
                   ;; Invoke linker
                   ,@(invoke-hook/call entry:compiler-link)
                   ,@(make-external-label (continuation-code-word false)
-                                        (generate-label))                 
+                                         (generate-label))                
                   ;; Increment counter and loop
                   (INC W (@R ,esp))
                   (CMP W (@R ,esp) (& ,n-blocks))