Fix register block indexing: no hooks in the register block here.
authorTaylor R Campbell <campbell@mumble.net>
Wed, 16 Jan 2019 04:46:17 +0000 (04:46 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Wed, 21 Aug 2019 21:34:02 +0000 (21:34 +0000)
src/compiler/machines/aarch64/lapgen.scm
src/compiler/machines/aarch64/rules3.scm

index c7e1427610e70f8dbf3c0a669be91a5d0f84dcdf..a016fc79e2b1c1961e41d3d93d6040b9e5a053c4 100644 (file)
@@ -143,7 +143,7 @@ USA.
 
 (define (spill-ea index)
   ;; XXX fix register block indexing
-  (regblock-ea (+ 16 80 index)))
+  (regblock-ea (+ 16 index)))
 
 (define (home->register-transfer register alias)
   (load-register alias (spill-ea (register-renumber register))))
index c8abd37465b0d9866c6041a2bf15d7b5522b3fd9..8afe6b97986fc58cef2c8c83ce2f8fe0688df2fc 100644 (file)
@@ -310,6 +310,7 @@ USA.
          ;; number of iterations.
          (loop-count (- frame-size (remainder frame-size 2))))
     (assert (= loop-count (* (quotient frame-size 2) 2)))
+    (assert (not (= index regnum:scratch-0)))
     (LAP (ADD X ,regnum:stack-pointer ,regnum:stack-pointer
               (&U ,(* 8 frame-size)))
          ,@(if (odd? frame-size)
@@ -524,6 +525,7 @@ USA.
          (checks (get-entry-interrupt-checks))
          (type type-code:compiled-entry))
     (define (label+adjustment)
+      (assert (not (= regnum:applicand regnum:scratch-0)))
       (LAP ,@(make-external-label internal-entry-code-word external-label)
            ;; regnum:applicand holds the untagged entry address.
            ;; Push and tag it.
@@ -664,6 +666,7 @@ USA.
                                    (shift-left offset 48))))
         (else
          (error "Unknown endianness:" endianness))))
+    (assert (not (= temp regnum:scratch-0)))
     (LAP ,@(load-unsigned-immediate temp (padded-word))
          (STR X ,temp (POST+ ,Free (& 8)))
          ;; Set temp := label - 8.
@@ -695,6 +698,8 @@ USA.
 
 (define (generate/quotation-header environment-label free-ref-label n-sections)
   (let ((continuation-label (generate-label 'LINKED)))
+    (assert (not (= r0 regnum:scratch-0)))
+    (assert (not (= r1 regnum:scratch-0)))
     (LAP (LDR X ,r0 ,reg:environment)
          (ADR X ,r1 (@PCR ,environment-label ,regnum:scratch-0))
          (STR X ,r0 ,r1)
@@ -743,6 +748,7 @@ USA.
              (arg2 regnum:utility-arg2)
              (arg3 regnum:utility-arg3)
              (arg4 regnum:utility-arg4))
+        (assert (not (= counter regnum:scratch-0)))
         (LAP ,@(load-unsigned-immediate counter n-blocks)
             (LABEL ,loop-label)
              ,@(load-pc-relative arg2 vector-label)     ;arg2 := vector