From: Thiemo S. <th...@us...> - 2005-09-07 23:27:52
|
Update of /cvsroot/sbcl/sbcl/src/compiler/mips In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22548/src/compiler/mips Modified Files: subprim.lisp Log Message: Use generated labels for the mips list length vop. Index: subprim.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/mips/subprim.lisp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- subprim.lisp 14 Jul 2005 18:48:32 -0000 1.2 +++ subprim.lisp 7 Sep 2005 23:27:45 -0000 1.3 @@ -17,31 +17,29 @@ (:vop-var vop) (:save-p :compute-only) (:generator 50 - (move ptr object) - (move count zero-tn) - - LOOP + (let ((done (gen-label)) + (loop (gen-label)) + (not-list (gen-label))) + (move ptr object) + (move count zero-tn) - (inst beq ptr null-tn done) - (inst nop) + (emit-label loop) - (inst and temp ptr lowtag-mask) - (inst xor temp list-pointer-lowtag) - (inst bne temp zero-tn not-list) - (inst nop) + (inst beq ptr null-tn done) + (inst and temp ptr lowtag-mask) + (inst xor temp list-pointer-lowtag) + (inst bne temp zero-tn not-list) + (inst nop) - (loadw ptr ptr cons-cdr-slot list-pointer-lowtag) - (inst b loop) - (inst addu count count (fixnumize 1)) + (loadw ptr ptr cons-cdr-slot list-pointer-lowtag) + (inst b loop) + (inst addu count count (fixnumize 1)) - NOT-LIST - (cerror-call vop done object-not-list-error ptr) + (emit-label not-list) + (cerror-call vop done object-not-list-error ptr) - DONE - (move result count))) + (emit-label done) + (move result count)))) (define-static-fun length (object) :translate length) - - - |