New GENERAL-TEMPORARY! shorthand.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 25 Aug 2019 15:38:25 +0000 (15:38 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sun, 25 Aug 2019 19:11:54 +0000 (19:11 +0000)
src/compiler/machines/aarch64/lapgen.scm
src/compiler/machines/aarch64/rules1.scm
src/compiler/machines/aarch64/rules3.scm
src/compiler/machines/aarch64/rulfix.scm

index 4e48c6169dd5b8512d71fd6d9e280679172478df..6590d91f21dcaa4cc90c3455293c378b818b21a6 100644 (file)
@@ -183,9 +183,14 @@ USA.
   (delete-dead-registers!)
   (allocate-alias-register! register (register-type register)))
 
+(define (general-temporary!)
+  (allocate-temporary-register! 'GENERAL))
+
 (define (standard-move-to-temporary! source)
   (if (eq? source 'Z)
-      (let ((temp (allocate-temporary-register! 'GENERAL)))
+      ;; XXX What about float?  Should maybe rename this to
+      ;; GENERAL-MOVE-TO-TEMPORARY!.
+      (let ((temp (general-temporary!)))
         (prefix-instructions! (LAP (MOVZ X ,temp (&U 0))))
         temp)
       (move-to-temporary-register! source (register-type source))))
@@ -386,7 +391,7 @@ USA.
               (fits-in-unsigned-12? (shift-right (- imm) 12)))
          (sub `(LSL (&U ,(- imm)) 12)))
         (else
-         (let ((temp (allocate-temporary-register! 'GENERAL)))
+         (let ((temp (get-temporary)))
            (LAP ,@(load-unsigned-immediate temp imm)
                 ,@(add temp))))))
 \f
index 77367d6df642fc4b3a23cf780c695ebee7c4864a..814993166dc3341826b1d0888cb926ddc1d4d9e0 100644 (file)
@@ -68,8 +68,7 @@ USA.
                         (REGISTER (? datum))))
   (standard-unary target datum
     (lambda (target datum)
-      (affix-type target type datum
-                  (lambda () (allocate-temporary-register! 'GENERAL))))))
+      (affix-type target type datum general-temporary!))))
 
 (define-rule statement
   (ASSIGN (REGISTER (? target)) (OBJECT->TYPE (REGISTER (? source))))
index 37ed22954455d71f379bc68f0751b10c4778b1f3..18a340d49571133d69c8d523c0905de218d291a3 100644 (file)
@@ -309,7 +309,7 @@ USA.
   (assert (= 8 address-units-per-object))
   (let* ((temp1 regnum:scratch-0)
          (temp2 regnum:scratch-1)
-         (index (allocate-temporary-register! 'GENERAL))
+         (index (general-temporary!))
          (label (generate-label 'MOVE-LOOP))
          ;; Unroll an odd element if there is one; then do an even
          ;; number of iterations.
@@ -339,7 +339,7 @@ USA.
          (let loop ((n frame-size) (temps '()))
            (if (zero? n)
                temps
-               (let ((temp (allocate-temporary-register! 'GENERAL)))
+               (let ((temp (general-temporary!)))
                  (loop (- n 1) (cons temp temps)))))))
     (LAP ,@(let loop ((temps temps))
              ;; (pop2 r1 r2) (pop2 r3 r4) (pop r5)
@@ -595,7 +595,7 @@ USA.
 \f
 (define (generate/cons-closure target label min max size)
   (let* ((target (standard-target! target))
-         (temp (allocate-temporary-register! 'GENERAL))
+         (temp (general-temporary!))
          (manifest-type type-code:manifest-closure)
          (manifest-size (closure-manifest-size size))
          (Free regnum:free-pointer)
@@ -612,13 +612,12 @@ USA.
          ;; offsets without pre/post-increment.
          ,@(add-immediate Free Free (* 8 size))
          ;; Set the last component to be the relocation reference point.
-         ,@(affix-type temp type-code:compiled-entry target
-                       (lambda () (allocate-temporary-register! 'GENERAL)))
+         ,@(affix-type temp type-code:compiled-entry target general-temporary!)
          (STR X ,temp (POST+ ,Free (& 8))))))
 
 (define (generate/cons-multiclosure target nentries size entries)
   (let* ((target (standard-target! target))
-         (temp (allocate-temporary-register! 'GENERAL))
+         (temp (general-temporary!))
          (manifest-type type-code:manifest-closure)
          (manifest-size (multiclosure-manifest-size nentries size))
          ;; 1 for manifest, 1 for padding & format word, 1 for PC offset.
@@ -650,8 +649,7 @@ USA.
          ;; offsets without pre/post-increment.
          ,@(add-immediate Free Free (* 8 size))
          ;; Set the last component to be the relocation reference point.
-         ,@(affix-type temp type-code:compiled-entry target
-                       (lambda () (allocate-temporary-register! 'GENERAL)))
+         ,@(affix-type temp type-code:compiled-entry target general-temporary!)
          (STR X ,temp (POST+ ,Free (& 8))))))
 \f
 (define (generate-closure-entry label padding min max offset temp)
index b9e30a595303e1d221d37ebc9305995477b3493d..0af7cec4ec70ead4e49ab34e2db0636f775c7fd9 100644 (file)
@@ -174,7 +174,7 @@ USA.
              (MUL X ,target ,regnum:scratch-0 ,source2))
         (let* ((mask regnum:scratch-0)
                (hi regnum:scratch-1)
-               (temp (allocate-temporary-register! 'GENERAL)))
+               (temp (general-temporary!)))
           ;; We're going to test whether the high 64-bits is equal to
           ;; the -1 or 0 we expect it to be.  Overflow if not equal, no
           ;; overflow if equal.