(in-package "SB!VM")
\f
(define-assembly-routine (allocate-vector
- (:policy :fast-safe)
- (:translate allocate-vector)
- (:arg-types positive-fixnum
- positive-fixnum
- positive-fixnum))
- ((:arg type any-reg a0-offset)
- (:arg length any-reg a1-offset)
- (:arg words any-reg a2-offset)
- (:res result descriptor-reg a0-offset)
+ (:policy :fast-safe)
+ (:translate allocate-vector)
+ (:arg-types positive-fixnum
+ positive-fixnum
+ positive-fixnum))
+ ((:arg type any-reg a0-offset)
+ (:arg length any-reg a1-offset)
+ (:arg words any-reg a2-offset)
+ (:res result descriptor-reg a0-offset)
- (:temp ndescr non-descriptor-reg nl0-offset)
- (:temp pa-flag non-descriptor-reg nl3-offset)
- (:temp vector descriptor-reg a3-offset))
+ (:temp ndescr non-descriptor-reg nl0-offset)
+ (:temp pa-flag non-descriptor-reg nl3-offset)
+ (:temp vector descriptor-reg a3-offset))
(pseudo-atomic (pa-flag)
- (inst ori vector alloc-tn sb!vm:other-pointer-lowtag)
- (inst addi ndescr words (* (1+ sb!vm:vector-data-offset) sb!vm:n-word-bytes))
+ (inst ori vector alloc-tn other-pointer-lowtag)
+ ;; boxed words == unboxed bytes
+ (inst addi ndescr words (* (1+ vector-data-offset) n-word-bytes))
(inst clrrwi ndescr ndescr n-lowtag-bits)
(inst add alloc-tn alloc-tn ndescr)
- (inst srwi ndescr type sb!vm:word-shift)
- (storew ndescr vector 0 sb!vm:other-pointer-lowtag)
- (storew length vector sb!vm:vector-length-slot sb!vm:other-pointer-lowtag))
+ (inst srwi ndescr type word-shift)
+ (storew ndescr vector 0 other-pointer-lowtag)
+ (storew length vector vector-length-slot other-pointer-lowtag))
;; This makes sure the zero byte at the end of a string is paged in so
;; the kernel doesn't bitch if we pass it the string.
(storew zero-tn alloc-tn 0)
(move result vector))
+