X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsparc%2Farray.lisp;h=b39f0b19c0bf8a20cca89e673d1eabdca91eef6a;hb=57fe836373e2ecb56e6d497320b01c83447a01fc;hp=4b05ccb2d686924342e39ba06b1456bc20efa643;hpb=8823bb36153336539b7f1f541fbdc5c7717ebb19;p=sbcl.git diff --git a/src/compiler/sparc/array.lisp b/src/compiler/sparc/array.lisp index 4b05ccb..b39f0b1 100644 --- a/src/compiler/sparc/array.lisp +++ b/src/compiler/sparc/array.lisp @@ -20,13 +20,14 @@ (:arg-types tagged-num tagged-num) (:temporary (:scs (descriptor-reg) :to (:result 0) :target result) header) (:temporary (:scs (non-descriptor-reg)) ndescr) + (:temporary (:scs (non-descriptor-reg)) gencgc-temp) (:results (result :scs (descriptor-reg))) (:generator 0 (pseudo-atomic () - (inst or header alloc-tn other-pointer-lowtag) - (inst add ndescr rank (* (1+ array-dimensions-offset) n-word-bytes)) - (inst andn ndescr 4) - (inst add alloc-tn ndescr) + (inst add ndescr rank (+ (* (1+ array-dimensions-offset) n-word-bytes) + lowtag-mask)) + (inst andn ndescr lowtag-mask) + (allocation header ndescr other-pointer-lowtag :temp-tn gencgc-temp) (inst add ndescr rank (fixnumize (1- array-dimensions-offset))) (inst sll ndescr ndescr n-widetag-bits) (inst or ndescr ndescr type) @@ -125,9 +126,9 @@ (def-data-vector-frobs simple-array-unsigned-byte-32 word-index unsigned-num unsigned-reg) - (def-data-vector-frobs simple-array-unsigned-byte-29 word-index + (def-data-vector-frobs simple-array-unsigned-fixnum word-index positive-fixnum any-reg) - (def-data-vector-frobs simple-array-signed-byte-30 word-index + (def-data-vector-frobs simple-array-fixnum word-index tagged-num any-reg) (def-data-vector-frobs simple-array-signed-byte-32 word-index signed-num signed-reg)) @@ -607,24 +608,6 @@ ;;; These vops are useful for accessing the bits of a vector irrespective of ;;; what type of vector it is. -(define-vop (raw-bits word-index-ref) - (:note "raw-bits VOP") - (:translate %raw-bits) - (:results (value :scs (unsigned-reg))) - (:result-types unsigned-num) - (:variant 0 other-pointer-lowtag)) - -(define-vop (set-raw-bits word-index-set) - (:note "setf raw-bits VOP") - (:translate %set-raw-bits) - (:args (object :scs (descriptor-reg)) - (index :scs (any-reg zero immediate)) - (value :scs (unsigned-reg))) - (:arg-types * tagged-num unsigned-num) - (:results (result :scs (unsigned-reg))) - (:result-types unsigned-num) - (:variant 0 other-pointer-lowtag)) - (define-vop (vector-raw-bits word-index-ref) (:note "vector-raw-bits VOP") (:translate %vector-raw-bits) @@ -641,4 +624,4 @@ (:arg-types * tagged-num unsigned-num) (:results (result :scs (unsigned-reg))) (:result-types unsigned-num) - (:variant vector-data-offset other-pointer-lowtag)) \ No newline at end of file + (:variant vector-data-offset other-pointer-lowtag))