X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsparc%2Fsubprim.lisp;h=733ad6a67c73b2b16326566265e04452d382f6bc;hb=69e6aef5e6fb3bd682c7a2cbf774034d2ea58ee8;hp=4ff2127cc6a95456efdf64746d922a4f4e153c80;hpb=68fd2d2dd6f265669a8957accd8a33e62786a97e;p=sbcl.git diff --git a/src/compiler/sparc/subprim.lisp b/src/compiler/sparc/subprim.lisp index 4ff2127..733ad6a 100644 --- a/src/compiler/sparc/subprim.lisp +++ b/src/compiler/sparc/subprim.lisp @@ -19,15 +19,15 @@ (:temporary (:scs (descriptor-reg) :from (:argument 0)) ptr) (:temporary (:scs (non-descriptor-reg)) temp) (:temporary (:scs (any-reg) :type fixnum :to (:result 0) :target result) - count) + count) (:results (result :scs (any-reg descriptor-reg))) (:policy :fast-safe) (:vop-var vop) (:save-p :compute-only) (:generator 50 (let ((done (gen-label)) - (loop (gen-label)) - (not-list (generate-cerror-code vop object-not-list-error object))) + (loop (gen-label)) + (not-list (generate-cerror-code vop object-not-list-error object))) (move ptr object) (move count zero-tn) @@ -37,17 +37,20 @@ (inst b :eq done) (inst nop) - (test-type ptr temp not-list t list-pointer-lowtag) + ;; FIXME: Maybe rewrite this to remove this TEST-TYPE (and the + ;; one below) to put it in line with all other architectures + ;; (apart from PPC)? + (test-type ptr not-list t (list-pointer-lowtag) :temp temp) (loadw ptr ptr cons-cdr-slot list-pointer-lowtag) (inst add count count (fixnumize 1)) - (test-type ptr temp loop nil list-pointer-lowtag) + (test-type ptr loop nil (list-pointer-lowtag) :temp temp) (cerror-call vop done object-not-list-error ptr) (emit-label done) (move result count)))) - + (define-static-fun length (object) :translate length)