-(define-assembly-routine (allocate-vector
- (:policy :fast-safe)
- (:translate allocate-vector)
- (:arg-types positive-fixnum
- positive-fixnum
- positive-fixnum))
- ((:arg type unsigned-reg eax-offset)
- (:arg length any-reg ebx-offset)
- (:arg words any-reg ecx-offset)
- (:res result descriptor-reg edx-offset))
- (inst mov result (+ (1- (ash 1 lowtag-bits))
- (* vector-data-offset word-bytes)))
- (inst add result words)
- (inst and result (lognot sb!vm:lowtag-mask))
- (pseudo-atomic
- (allocation result result)
- (inst lea result (make-ea :byte :base result :disp other-pointer-lowtag))
- (storew type result 0 other-pointer-lowtag)
- (storew length result vector-length-slot other-pointer-lowtag))
- (inst ret))
-\f