Document extensible sequence protocol
[sbcl.git] / src / assembly / x86 / array.lisp
index 0fdeb41..c79c5de 100644 (file)
 
 (in-package "SB!VM")
 \f
-;;;; allocation
+;;;; Note: On other platforms ALLOCATE-VECTOR is an assembly routine,
+;;;; but on X86 it is a VOP.
 
-(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 n-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
 ;;;; Note: CMU CL had assembly language primitives for hashing strings,
 ;;;; but SBCL doesn't.