X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fmips%2Farray.lisp;h=3c53f1edede2ec0c123fc41d424ed0203b74fbba;hb=832f3b5652ae1b4a8888829cd4a1b391a8ca9952;hp=aaaff087f436d49684563b87d7d007981648d691;hpb=1b650be8b800cf96e2c268ae317fb26d0bf36827;p=sbcl.git diff --git a/src/assembly/mips/array.lisp b/src/assembly/mips/array.lisp index aaaff08..3c53f1e 100644 --- a/src/assembly/mips/array.lisp +++ b/src/assembly/mips/array.lisp @@ -13,25 +13,25 @@ (in-package "SB!VM") (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 nl4-offset)) + (:temp ndescr non-descriptor-reg nl0-offset) + (:temp pa-flag non-descriptor-reg nl4-offset)) ;; This is kinda sleezy, changing words like this. But we can because ;; the vop thinks it is temporary. - (inst addu words (+ (1- (ash 1 n-lowtag-bits)) - (* vector-data-offset n-word-bytes))) - (inst li ndescr (lognot lowtag-mask)) - (inst and words ndescr) + (inst addu words (+ lowtag-mask + (* vector-data-offset n-word-bytes))) (inst srl ndescr type word-shift) + (inst srl words n-lowtag-bits) + (inst sll words n-lowtag-bits) (pseudo-atomic (pa-flag) (inst or result alloc-tn other-pointer-lowtag)