1.0.20.15: rename SB-ASSEM:ALIGN to EMIT-ALIGNMENT
[sbcl.git] / src / compiler / hppa / array.lisp
index 68dad24..72b59be 100644 (file)
@@ -16,7 +16,7 @@
   (:translate make-array-header)
   (:policy :fast-safe)
   (:args (type :scs (any-reg))
-        (rank :scs (any-reg)))
+         (rank :scs (any-reg)))
   (:arg-types tagged-num tagged-num)
   (:temporary (:scs (descriptor-reg) :to (:result 0) :target result) header)
   (:temporary (:scs (non-descriptor-reg) :type random) ndescr)
   (:translate %check-bound)
   (:policy :fast-safe)
   (:args (array :scs (descriptor-reg))
-        (bound :scs (any-reg descriptor-reg))
-        (index :scs (any-reg descriptor-reg) :target result))
+         (bound :scs (any-reg descriptor-reg))
+         (index :scs (any-reg descriptor-reg) :target result))
   (:results (result :scs (any-reg descriptor-reg)))
   (:vop-var vop)
   (:save-p :compute-only)
   (:generator 5
     (let ((error (generate-error-code vop invalid-array-index-error
-                                     array bound index)))
+                                      array bound index)))
       (inst bc :>= nil index bound error))
     (move index result)))
 
@@ -87,8 +87,8 @@
        vector-data-offset other-pointer-lowtag ,scs ,element-type
        data-vector-set)))
 
-          (def-partial-data-vector-frobs
-              (type element-type size signed &rest scs)
+           (def-partial-data-vector-frobs
+               (type element-type size signed &rest scs)
   `(progn
      (define-partial-reffer ,(symbolicate "DATA-VECTOR-REF/" type) ,type
        ,size ,signed vector-data-offset other-pointer-lowtag ,scs
     :byte nil unsigned-reg signed-reg)
   (def-partial-data-vector-frobs simple-array-unsigned-byte-8 positive-fixnum
     :byte nil unsigned-reg signed-reg)
-  
+
   (def-partial-data-vector-frobs simple-array-unsigned-byte-15 positive-fixnum
     :short nil unsigned-reg signed-reg)
   (def-partial-data-vector-frobs simple-array-unsigned-byte-16 positive-fixnum
     :short nil unsigned-reg signed-reg)
-  
+
   (def-full-data-vector-frobs simple-array-unsigned-byte-31 unsigned-num
     unsigned-reg)
   (def-full-data-vector-frobs simple-array-unsigned-byte-32 unsigned-num
     unsigned-reg)
-  
+
   (def-partial-data-vector-frobs simple-array-signed-byte-8 tagged-num
     :byte t signed-reg)
-  
+
   (def-partial-data-vector-frobs simple-array-signed-byte-16 tagged-num
     :short t signed-reg)
-  
+
   (def-full-data-vector-frobs simple-array-unsigned-byte-29 positive-fixnum any-reg)
   (def-full-data-vector-frobs simple-array-signed-byte-30 tagged-num any-reg)
-  
+
   (def-full-data-vector-frobs simple-array-signed-byte-32 signed-num signed-reg))
 
 
 ;;; and 4-bit vectors.
 (macrolet ((def-small-data-vector-frobs (type bits)
   (let* ((elements-per-word (floor n-word-bits bits))
-        (bit-shift (1- (integer-length elements-per-word))))
+         (bit-shift (1- (integer-length elements-per-word))))
     `(progn
        (define-vop (,(symbolicate 'data-vector-ref/ type))
-        (:note "inline array access")
-        (:translate data-vector-ref)
-        (:policy :fast-safe)
-        (:args (object :scs (descriptor-reg))
-               (index :scs (unsigned-reg)))
-        (:arg-types ,type positive-fixnum)
-        (:results (result :scs (unsigned-reg) :from (:argument 0)))
-        (:result-types positive-fixnum)
-        (:temporary (:scs (non-descriptor-reg)) temp)
-        (:temporary (:scs (interior-reg)) lip)
-        (:generator 20
-          (inst srl index ,bit-shift temp)
-          (inst sh2add temp object lip)
-          (loadw result lip vector-data-offset other-pointer-lowtag)
-          (inst zdep index ,(- 32 (integer-length bits)) ,bit-shift temp)
-          ,@(unless (= bits 1)
-              `((inst addi ,(1- bits) temp temp)))
-          (inst mtctl temp :sar)
-          (inst extru result :variable ,bits result)))
+         (:note "inline array access")
+         (:translate data-vector-ref)
+         (:policy :fast-safe)
+         (:args (object :scs (descriptor-reg))
+                (index :scs (unsigned-reg)))
+         (:arg-types ,type positive-fixnum)
+         (:results (result :scs (unsigned-reg) :from (:argument 0)))
+         (:result-types positive-fixnum)
+         (:temporary (:scs (non-descriptor-reg)) temp)
+         (:temporary (:scs (interior-reg)) lip)
+         (:generator 20
+           (inst srl index ,bit-shift temp)
+           (inst sh2add temp object lip)
+           (loadw result lip vector-data-offset other-pointer-lowtag)
+           (inst zdep index ,(- 32 (integer-length bits)) ,bit-shift temp)
+           ,@(unless (= bits 1)
+               `((inst addi ,(1- bits) temp temp)))
+           (inst mtctl temp :sar)
+           (inst extru result :variable ,bits result)))
        (define-vop (,(symbolicate 'data-vector-ref-c/ type))
-        (:translate data-vector-ref)
-        (:policy :fast-safe)
-        (:args (object :scs (descriptor-reg)))
-        (:arg-types ,type (:constant index))
-        (:info index)
-        (:results (result :scs (unsigned-reg)))
-        (:result-types positive-fixnum)
-        (:temporary (:scs (non-descriptor-reg)) temp)
-        (:generator 15
-          (multiple-value-bind (word extra) (floor index ,elements-per-word)
-            (let ((offset (- (* (+ word vector-data-offset) n-word-bytes)
-                             other-pointer-lowtag)))
-              (cond ((typep offset '(signed-byte 14))
-                     (inst ldw offset object result))
-                    (t
-                     (inst ldil (ldb (byte 21 11) offset) temp)
-                     (inst ldw (ldb (byte 11 0) offset) temp result))))
-            (inst extru result (+ (* extra ,bits) ,(1- bits)) ,bits result))))
+         (:translate data-vector-ref)
+         (:policy :fast-safe)
+         (:args (object :scs (descriptor-reg)))
+         (:arg-types ,type (:constant index))
+         (:info index)
+         (:results (result :scs (unsigned-reg)))
+         (:result-types positive-fixnum)
+         (:temporary (:scs (non-descriptor-reg)) temp)
+         (:generator 15
+           (multiple-value-bind (word extra) (floor index ,elements-per-word)
+             (let ((offset (- (* (+ word vector-data-offset) n-word-bytes)
+                              other-pointer-lowtag)))
+               (cond ((typep offset '(signed-byte 14))
+                      (inst ldw offset object result))
+                     (t
+                      (inst ldil (ldb (byte 21 11) offset) temp)
+                      (inst ldw (ldb (byte 11 0) offset) temp result))))
+             (inst extru result (+ (* extra ,bits) ,(1- bits)) ,bits result))))
        (define-vop (,(symbolicate 'data-vector-set/ type))
-        (:note "inline array store")
-        (:translate data-vector-set)
-        (:policy :fast-safe)
-        (:args (object :scs (descriptor-reg))
-               (index :scs (unsigned-reg))
-               (value :scs (unsigned-reg zero immediate) :target result))
-        (:arg-types ,type positive-fixnum positive-fixnum)
-        (:results (result :scs (unsigned-reg)))
-        (:result-types positive-fixnum)
-        (:temporary (:scs (non-descriptor-reg)) temp old)
-        (:temporary (:scs (interior-reg)) lip)
-        (:generator 25
-          (inst srl index ,bit-shift temp)
-          (inst sh2add temp object lip)
-          (loadw old lip vector-data-offset other-pointer-lowtag)
-          (inst zdep index ,(- 32 (integer-length bits)) ,bit-shift temp)
-          ,@(unless (= bits 1)
-              `((inst addi ,(1- bits) temp temp)))
-          (inst mtctl temp :sar)
-          (inst dep (sc-case value (immediate (tn-value value)) (t value))
-                :variable ,bits old)
-          (storew old lip vector-data-offset other-pointer-lowtag)
-          (sc-case value
-            (immediate
-             (inst li (tn-value value) result))
-            (t
-             (move value result)))))
+         (:note "inline array store")
+         (:translate data-vector-set)
+         (:policy :fast-safe)
+         (:args (object :scs (descriptor-reg))
+                (index :scs (unsigned-reg))
+                (value :scs (unsigned-reg zero immediate) :target result))
+         (:arg-types ,type positive-fixnum positive-fixnum)
+         (:results (result :scs (unsigned-reg)))
+         (:result-types positive-fixnum)
+         (:temporary (:scs (non-descriptor-reg)) temp old)
+         (:temporary (:scs (interior-reg)) lip)
+         (:generator 25
+           (inst srl index ,bit-shift temp)
+           (inst sh2add temp object lip)
+           (loadw old lip vector-data-offset other-pointer-lowtag)
+           (inst zdep index ,(- 32 (integer-length bits)) ,bit-shift temp)
+           ,@(unless (= bits 1)
+               `((inst addi ,(1- bits) temp temp)))
+           (inst mtctl temp :sar)
+           (inst dep (sc-case value (immediate (tn-value value)) (t value))
+                 :variable ,bits old)
+           (storew old lip vector-data-offset other-pointer-lowtag)
+           (sc-case value
+             (immediate
+              (inst li (tn-value value) result))
+             (t
+              (move value result)))))
        (define-vop (,(symbolicate 'data-vector-set-c/ type))
-        (:translate data-vector-set)
-        (:policy :fast-safe)
-        (:args (object :scs (descriptor-reg))
-               (value :scs (unsigned-reg zero immediate) :target result))
-        (:arg-types ,type
-                    (:constant index)
-                    positive-fixnum)
-        (:info index)
-        (:results (result :scs (unsigned-reg)))
-        (:result-types positive-fixnum)
-        (:temporary (:scs (non-descriptor-reg)) old)
-        (:temporary (:scs (interior-reg)) lip)
-        (:generator 20
-          (multiple-value-bind (word extra) (floor index ,elements-per-word)
-            (let ((offset (- (* (+ word vector-data-offset) n-word-bytes)
-                             other-pointer-lowtag)))
-              (cond ((typep offset '(signed-byte 14))
-                     (inst ldw offset object old))
-                    (t
-                     (inst move object lip)
-                     (inst addil (ldb (byte 21 11) offset) lip)
-                     (inst ldw (ldb (byte 11 0) offset) lip old)))
-              (inst dep (sc-case value
-                          (immediate (tn-value value))
-                          (t value))
-                    (+ (* extra ,bits) ,(1- bits))
-                    ,bits
-                    old)
-              (if (typep offset '(signed-byte 14))
-                  (inst stw old offset object)
-                  (inst stw old (ldb (byte 11 0) offset) lip)))
-            (sc-case value
-              (immediate
-               (inst li (tn-value value) result))
-              (t
-               (move value result))))))))))
+         (:translate data-vector-set)
+         (:policy :fast-safe)
+         (:args (object :scs (descriptor-reg))
+                (value :scs (unsigned-reg zero immediate) :target result))
+         (:arg-types ,type
+                     (:constant index)
+                     positive-fixnum)
+         (:info index)
+         (:results (result :scs (unsigned-reg)))
+         (:result-types positive-fixnum)
+         (:temporary (:scs (non-descriptor-reg)) old)
+         (:temporary (:scs (interior-reg)) lip)
+         (:generator 20
+           (multiple-value-bind (word extra) (floor index ,elements-per-word)
+             (let ((offset (- (* (+ word vector-data-offset) n-word-bytes)
+                              other-pointer-lowtag)))
+               (cond ((typep offset '(signed-byte 14))
+                      (inst ldw offset object old))
+                     (t
+                      (inst move object lip)
+                      (inst addil (ldb (byte 21 11) offset) lip)
+                      (inst ldw (ldb (byte 11 0) offset) lip old)))
+               (inst dep (sc-case value
+                           (immediate (tn-value value))
+                           (t value))
+                     (+ (* extra ,bits) ,(1- bits))
+                     ,bits
+                     old)
+               (if (typep offset '(signed-byte 14))
+                   (inst stw old offset object)
+                   (inst stw old (ldb (byte 11 0) offset) lip)))
+             (sc-case value
+               (immediate
+                (inst li (tn-value value) result))
+               (t
+                (move value result))))))))))
   (def-small-data-vector-frobs simple-bit-vector 1)
   (def-small-data-vector-frobs simple-array-unsigned-byte-2 2)
   (def-small-data-vector-frobs simple-array-unsigned-byte-4 4))
   (:translate data-vector-ref)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to (:argument 1))
-        (index :scs (any-reg) :to (:argument 0) :target offset))
+         (index :scs (any-reg) :to (:argument 0) :target offset))
   (:arg-types simple-array-single-float positive-fixnum)
   (:results (value :scs (single-reg)))
   (:temporary (:scs (non-descriptor-reg) :from (:argument 0)) offset)
   (:result-types single-float)
   (:generator 5
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         index offset)
+          index offset)
     (inst fldx offset object value)))
 
 (define-vop (data-vector-set/simple-array-single-float)
   (:translate data-vector-set)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to (:argument 1))
-        (index :scs (any-reg) :to (:argument 0) :target offset)
-        (value :scs (single-reg) :target result))
+         (index :scs (any-reg) :to (:argument 0) :target offset)
+         (value :scs (single-reg) :target result))
   (:arg-types simple-array-single-float positive-fixnum single-float)
   (:results (result :scs (single-reg)))
   (:result-types single-float)
   (:temporary (:scs (non-descriptor-reg) :from (:argument 0)) offset)
   (:generator 5
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         index offset)
+          index offset)
     (inst fstx value offset object)
     (unless (location= result value)
       (inst funop :copy value result))))
   (:translate data-vector-ref)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to (:argument 1))
-        (index :scs (any-reg) :to (:argument 0) :target offset))
+         (index :scs (any-reg) :to (:argument 0) :target offset))
   (:arg-types simple-array-double-float positive-fixnum)
   (:results (value :scs (double-reg)))
   (:result-types double-float)
   (:generator 7
     (inst sll index 1 offset)
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         offset offset)
+          offset offset)
     (inst fldx offset object value)))
 
 (define-vop (data-vector-set/simple-array-double-float)
   (:translate data-vector-set)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to (:argument 1))
-        (index :scs (any-reg) :to (:argument 0) :target offset)
-        (value :scs (double-reg) :target result))
+         (index :scs (any-reg) :to (:argument 0) :target offset)
+         (value :scs (double-reg) :target result))
   (:arg-types simple-array-double-float positive-fixnum double-float)
   (:results (result :scs (double-reg)))
   (:result-types double-float)
   (:generator 20
     (inst sll index 1 offset)
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         offset offset)
+          offset offset)
     (inst fstx value offset object)
     (unless (location= result value)
       (inst funop :copy value result))))
   (:translate data-vector-ref)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to :result)
-        (index :scs (any-reg)))
+         (index :scs (any-reg)))
   (:arg-types simple-array-complex-single-float positive-fixnum)
   (:results (value :scs (complex-single-reg)))
   (:temporary (:scs (non-descriptor-reg) :from (:argument 1)) offset)
   (:generator 5
     (inst sll index 1 offset)
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         offset offset)
+          offset offset)
     (let ((real-tn (complex-single-reg-real-tn value)))
       (inst fldx offset object real-tn))
     (let ((imag-tn (complex-single-reg-imag-tn value)))
   (:translate data-vector-set)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to :result)
-        (index :scs (any-reg))
-        (value :scs (complex-single-reg) :target result))
+         (index :scs (any-reg))
+         (value :scs (complex-single-reg) :target result))
   (:arg-types simple-array-complex-single-float positive-fixnum
-             complex-single-float)
+              complex-single-float)
   (:results (result :scs (complex-single-reg)))
   (:result-types complex-single-float)
   (:temporary (:scs (non-descriptor-reg) :from (:argument 1)) offset)
   (:generator 5
     (inst sll index 1 offset)
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         offset offset)
+          offset offset)
     (let ((value-real (complex-single-reg-real-tn value))
-         (result-real (complex-single-reg-real-tn result)))
+          (result-real (complex-single-reg-real-tn result)))
       (inst fstx value-real offset object)
       (unless (location= result-real value-real)
-       (inst funop :copy value-real result-real)))
+        (inst funop :copy value-real result-real)))
     (let ((value-imag (complex-single-reg-imag-tn value))
-         (result-imag (complex-single-reg-imag-tn result)))
+          (result-imag (complex-single-reg-imag-tn result)))
       (inst addi n-word-bytes offset offset)
       (inst fstx value-imag offset object)
       (unless (location= result-imag value-imag)
-       (inst funop :copy value-imag result-imag)))))
+        (inst funop :copy value-imag result-imag)))))
 
 (define-vop (data-vector-ref/simple-array-complex-double-float)
   (:note "inline array access")
   (:translate data-vector-ref)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to :result)
-        (index :scs (any-reg)))
+         (index :scs (any-reg)))
   (:arg-types simple-array-complex-double-float positive-fixnum)
   (:results (value :scs (complex-double-reg)))
   (:result-types complex-double-float)
   (:generator 7
     (inst sll index 2 offset)
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         offset offset)
+          offset offset)
     (let ((real-tn (complex-double-reg-real-tn value)))
       (inst fldx offset object real-tn))
     (let ((imag-tn (complex-double-reg-imag-tn value)))
   (:translate data-vector-set)
   (:policy :fast-safe)
   (:args (object :scs (descriptor-reg) :to :result)
-        (index :scs (any-reg))
-        (value :scs (complex-double-reg) :target result))
+         (index :scs (any-reg))
+         (value :scs (complex-double-reg) :target result))
   (:arg-types simple-array-complex-double-float positive-fixnum
-             complex-double-float)
+              complex-double-float)
   (:results (result :scs (complex-double-reg)))
   (:result-types complex-double-float)
   (:temporary (:scs (non-descriptor-reg) :from (:argument 1)) offset)
   (:generator 20
     (inst sll index 2 offset)
     (inst addi (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)
-         offset offset)
+          offset offset)
     (let ((value-real (complex-double-reg-real-tn value))
-         (result-real (complex-double-reg-real-tn result)))
+          (result-real (complex-double-reg-real-tn result)))
       (inst fstx value-real offset object)
       (unless (location= result-real value-real)
-       (inst funop :copy value-real result-real)))
+        (inst funop :copy value-real result-real)))
     (let ((value-imag (complex-double-reg-imag-tn value))
-         (result-imag (complex-double-reg-imag-tn result)))
+          (result-imag (complex-double-reg-imag-tn result)))
       (inst addi (* 2 n-word-bytes) offset offset)
       (inst fstx value-imag offset object)
       (unless (location= result-imag value-imag)
-       (inst funop :copy value-imag result-imag)))))
+        (inst funop :copy value-imag result-imag)))))
 
 \f
 ;;; These VOPs are used for implementing float slots in structures (whose raw
   (:translate %raw-set-double)
   (:arg-types sb!c::raw-vector positive-fixnum double-float))
 (define-vop (raw-ref-complex-single
-            data-vector-ref/simple-array-complex-single-float)
+             data-vector-ref/simple-array-complex-single-float)
   (:translate %raw-ref-complex-single)
   (:arg-types sb!c::raw-vector positive-fixnum))
 (define-vop (raw-set-complex-single
-            data-vector-set/simple-array-complex-single-float)
+             data-vector-set/simple-array-complex-single-float)
   (:translate %raw-set-complex-single)
   (:arg-types sb!c::raw-vector positive-fixnum complex-single-float))
 (define-vop (raw-ref-complex-double
-            data-vector-ref/simple-array-complex-double-float)
+             data-vector-ref/simple-array-complex-double-float)
   (:translate %raw-ref-complex-double)
   (:arg-types sb!c::raw-vector positive-fixnum))
 (define-vop (raw-set-complex-double
-            data-vector-set/simple-array-complex-double-float)
+             data-vector-set/simple-array-complex-double-float)
   (:translate %raw-set-complex-double)
   (:arg-types sb!c::raw-vector positive-fixnum complex-double-float))