X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Falpha%2Farray.lisp;h=cf3af860af2edbee20345aa2fefb47bb348c1416;hb=acce826c593a188b231b7b7918c752bda21d0201;hp=123ef77bbd7d66ec24be72062711df77ac6901b1;hpb=63fcb94b875a97e468d9add229e220ecceec2352;p=sbcl.git diff --git a/src/compiler/alpha/array.lisp b/src/compiler/alpha/array.lisp index 123ef77..cf3af86 100644 --- a/src/compiler/alpha/array.lisp +++ b/src/compiler/alpha/array.lisp @@ -23,18 +23,18 @@ (:temporary (:scs (non-descriptor-reg)) header) (:results (result :scs (descriptor-reg))) (:generator 13 - (inst addq rank (+ (* array-dimensions-offset word-bytes) + (inst addq rank (+ (* array-dimensions-offset n-word-bytes) lowtag-mask) bytes) (inst li (lognot lowtag-mask) header) (inst and bytes header bytes) (inst addq rank (fixnumize (1- array-dimensions-offset)) header) - (inst sll header type-bits header) + (inst sll header n-widetag-bits header) (inst bis header type header) (inst srl header 2 header) (pseudo-atomic () - (inst bis alloc-tn other-pointer-type result) - (storew header result 0 other-pointer-type) + (inst bis alloc-tn other-pointer-lowtag result) + (storew header result 0 other-pointer-lowtag) (inst addq alloc-tn bytes alloc-tn)))) @@ -47,12 +47,12 @@ ()) (define-full-reffer %array-dimension * - array-dimensions-offset other-pointer-type + array-dimensions-offset other-pointer-lowtag (any-reg) positive-fixnum sb!impl::%array-dimension) (define-full-setter %set-array-dimension * - array-dimensions-offset other-pointer-type - (any-reg) positive-fixnum sb!impl::%set-array-dimension #+gengc nil) + array-dimensions-offset other-pointer-lowtag + (any-reg) positive-fixnum sb!impl::%set-array-dimension #!+gengc nil) (defknown sb!impl::%array-rank (t) index (flushable)) @@ -64,8 +64,8 @@ (:temporary (:scs (non-descriptor-reg)) temp) (:results (res :scs (any-reg descriptor-reg))) (:generator 6 - (loadw temp x 0 other-pointer-type) - (inst sra temp type-bits temp) + (loadw temp x 0 other-pointer-lowtag) + (inst sra temp n-widetag-bits temp) (inst subq temp (1- array-dimensions-offset) temp) (inst sll temp 2 res))) @@ -99,13 +99,13 @@ `(progn (define-full-reffer ,(symbolicate "DATA-VECTOR-REF/" type) ,type - vector-data-offset other-pointer-type - ,(remove-if #'(lambda (x) (member x '(null zero))) scs) + vector-data-offset other-pointer-lowtag + ,(remove-if (lambda (x) (member x '(null zero))) scs) ,element-type data-vector-ref) (define-full-setter ,(symbolicate "DATA-VECTOR-SET/" type) ,type - vector-data-offset other-pointer-type ,scs ,element-type + vector-data-offset other-pointer-lowtag ,scs ,element-type data-vector-set #+gengc ,(if (member 'descriptor-reg scs) t nil)))) @@ -115,14 +115,14 @@ `(progn (define-partial-reffer ,(symbolicate "DATA-VECTOR-REF/" type) ,type - ,size ,signed vector-data-offset other-pointer-type ,scs + ,size ,signed vector-data-offset other-pointer-lowtag ,scs ,element-type data-vector-ref) (define-partial-setter ,(symbolicate "DATA-VECTOR-SET/" type) ,type - ,size vector-data-offset other-pointer-type ,scs + ,size vector-data-offset other-pointer-lowtag ,scs ,element-type data-vector-set))) (def-small-data-vector-frobs (type bits) - (let* ((elements-per-word (floor word-bits bits)) + (let* ((elements-per-word (floor n-word-bits bits)) (bit-shift (1- (integer-length elements-per-word)))) `(progn (define-vop (,(symbolicate 'data-vector-ref/ type)) @@ -142,8 +142,8 @@ (inst sll temp 2 temp) (inst addq object temp lip) (inst ldl result - (- (* vector-data-offset word-bytes) - other-pointer-type) + (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag) lip) (inst and index ,(1- elements-per-word) temp) ,@(unless (= bits 1) @@ -160,8 +160,8 @@ (:constant (integer 0 ,(1- (* (1+ (- (floor (+ #x7fff - other-pointer-type) - word-bytes) + other-pointer-lowtag) + n-word-bytes) vector-data-offset)) elements-per-word))))) (:info index) @@ -172,7 +172,7 @@ (floor index ,elements-per-word) (loadw result object (+ word vector-data-offset) - other-pointer-type) + other-pointer-lowtag) (unless (zerop extra) (inst srl result (* extra ,bits) result)) (unless (= extra ,(1- elements-per-word)) @@ -198,8 +198,8 @@ (inst sll temp 2 temp) (inst addq object temp lip) (inst ldl old - (- (* vector-data-offset word-bytes) - other-pointer-type) + (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag) lip) (inst and index ,(1- elements-per-word) shift) ,@(unless (= bits 1) @@ -227,8 +227,8 @@ (inst sll temp shift temp) (inst bis old temp old)) (inst stl old - (- (* vector-data-offset word-bytes) - other-pointer-type) + (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag) lip) (sc-case value (immediate @@ -247,8 +247,8 @@ (:constant (integer 0 ,(1- (* (1+ (- (floor (+ #x7fff - other-pointer-type) - word-bytes) + other-pointer-lowtag) + n-word-bytes) vector-data-offset)) elements-per-word)))) positive-fixnum) @@ -261,8 +261,8 @@ (floor index ,elements-per-word) (inst ldl object (- (* (+ word vector-data-offset) - word-bytes) - other-pointer-type) + n-word-bytes) + other-pointer-lowtag) old) (unless (and (sc-is value immediate) (= (tn-value value) @@ -298,8 +298,8 @@ (inst bis old temp old))) (inst stl old (- (* (+ word vector-data-offset) - word-bytes) - other-pointer-type) + n-word-bytes) + other-pointer-lowtag) object) (sc-case value (immediate @@ -355,8 +355,8 @@ (:generator 20 (inst addq object index lip) (inst lds value - (- (* vector-data-offset word-bytes) - other-pointer-type) + (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag) lip))) (define-vop (data-vector-set/simple-array-single-float) @@ -373,8 +373,8 @@ (:generator 20 (inst addq object index lip) (inst sts value - (- (* vector-data-offset word-bytes) - other-pointer-type) + (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag) lip) (unless (location= result value) (inst fmove value result)))) @@ -393,8 +393,8 @@ (inst addq object index lip) (inst addq lip index lip) (inst ldt value - (- (* vector-data-offset word-bytes) - other-pointer-type) + (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag) lip))) (define-vop (data-vector-set/simple-array-double-float) @@ -412,8 +412,8 @@ (inst addq object index lip) (inst addq lip index lip) (inst stt value - (- (* vector-data-offset word-bytes) - other-pointer-type) lip) + (- (* vector-data-offset n-word-bytes) + other-pointer-lowtag) lip) (unless (location= result value) (inst fmove value result)))) @@ -434,11 +434,11 @@ (inst addq object index lip) (inst addq lip index lip) (inst lds real-tn - (- (* vector-data-offset word-bytes) other-pointer-type) + (- (* vector-data-offset n-word-bytes) other-pointer-lowtag) lip)) (let ((imag-tn (complex-single-reg-imag-tn value))) (inst lds imag-tn - (- (* (1+ vector-data-offset) word-bytes) other-pointer-type) + (- (* (1+ vector-data-offset) n-word-bytes) other-pointer-lowtag) lip)))) (define-vop (data-vector-set/simple-array-complex-single-float) @@ -459,14 +459,14 @@ (inst addq object index lip) (inst addq lip index lip) (inst sts value-real - (- (* vector-data-offset word-bytes) other-pointer-type) + (- (* vector-data-offset n-word-bytes) other-pointer-lowtag) lip) (unless (location= result-real value-real) (inst fmove value-real result-real))) (let ((value-imag (complex-single-reg-imag-tn value)) (result-imag (complex-single-reg-imag-tn result))) (inst sts value-imag - (- (* (1+ vector-data-offset) word-bytes) other-pointer-type) + (- (* (1+ vector-data-offset) n-word-bytes) other-pointer-lowtag) lip) (unless (location= result-imag value-imag) (inst fmove value-imag result-imag))))) @@ -488,11 +488,11 @@ (inst addq lip index lip) (inst addq lip index lip) (inst ldt real-tn - (- (* vector-data-offset word-bytes) other-pointer-type) + (- (* vector-data-offset n-word-bytes) other-pointer-lowtag) lip)) (let ((imag-tn (complex-double-reg-imag-tn value))) (inst ldt imag-tn - (- (* (+ vector-data-offset 2) word-bytes) other-pointer-type) + (- (* (+ vector-data-offset 2) n-word-bytes) other-pointer-lowtag) lip)))) (define-vop (data-vector-set/simple-array-complex-double-float) @@ -515,14 +515,14 @@ (inst addq lip index lip) (inst addq lip index lip) (inst stt value-real - (- (* vector-data-offset word-bytes) other-pointer-type) + (- (* vector-data-offset n-word-bytes) other-pointer-lowtag) lip) (unless (location= result-real value-real) (inst fmove value-real result-real))) (let ((value-imag (complex-double-reg-imag-tn value)) (result-imag (complex-double-reg-imag-tn result))) (inst stt value-imag - (- (* (+ vector-data-offset 2) word-bytes) other-pointer-type) + (- (* (+ vector-data-offset 2) n-word-bytes) other-pointer-lowtag) lip) (unless (location= result-imag value-imag) (inst fmove value-imag result-imag))))) @@ -572,9 +572,9 @@ ;;; These vops are useful for accessing the bits of a vector irrespective of ;;; what type of vector it is. ;;; -(define-full-reffer raw-bits * 0 other-pointer-type (unsigned-reg) unsigned-num +(define-full-reffer raw-bits * 0 other-pointer-lowtag (unsigned-reg) unsigned-num %raw-bits) -(define-full-setter set-raw-bits * 0 other-pointer-type (unsigned-reg) +(define-full-setter set-raw-bits * 0 other-pointer-lowtag (unsigned-reg) unsigned-num %set-raw-bits #+gengc nil)