X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fsparc%2Farray.lisp;h=1bd9e2039a80e649dc3c4dbc540d59bb0c96e132;hb=f84d62fd74450b5f8230f1d01addd34e1c72af98;hp=5b4f5fd4765084b5c3cc0fa6ad9a3eaf502b7a77;hpb=68fd2d2dd6f265669a8957accd8a33e62786a97e;p=sbcl.git diff --git a/src/assembly/sparc/array.lisp b/src/assembly/sparc/array.lisp index 5b4f5fd..1bd9e20 100644 --- a/src/assembly/sparc/array.lisp +++ b/src/assembly/sparc/array.lisp @@ -12,20 +12,21 @@ (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) - - (:temp ndescr non-descriptor-reg nl0-offset) - (:temp vector descriptor-reg a3-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 vector descriptor-reg a3-offset)) (pseudo-atomic () (inst or vector alloc-tn other-pointer-lowtag) + ;; boxed words == unboxed bytes (inst add ndescr words (* (1+ vector-data-offset) n-word-bytes)) (inst andn ndescr 7) (inst add alloc-tn ndescr) @@ -36,79 +37,3 @@ ;; the kernel doesn't bitch if we pass it the string. (storew zero-tn alloc-tn 0) (move result vector)) - - - -;;;; Hash primitives - -;;; this is commented out in the alpha port. I'm therefore going to -;;; comment it out here pending explanation -- CSR, 2001-08-31. - -#| -#+assembler -(defparameter sxhash-simple-substring-entry (gen-label)) - -(define-assembly-routine (sxhash-simple-string - (:translate %sxhash-simple-string) - (:policy :fast-safe) - (:result-types positive-fixnum)) - ((:arg string descriptor-reg a0-offset) - (:res result any-reg a0-offset) - - (:temp length any-reg a1-offset) - (:temp accum non-descriptor-reg nl0-offset) - (:temp data non-descriptor-reg nl1-offset) - (:temp temp non-descriptor-reg nl2-offset) - (:temp offset non-descriptor-reg nl3-offset)) - - (declare (ignore result accum data temp offset)) - - (inst b sxhash-simple-substring-entry) - (loadw length string vector-length-slot other-pointer-lowtag)) - - -(define-assembly-routine (sxhash-simple-substring - (:translate %sxhash-simple-substring) - (:policy :fast-safe) - (:arg-types * positive-fixnum) - (:result-types positive-fixnum)) - ((:arg string descriptor-reg a0-offset) - (:arg length any-reg a1-offset) - (:res result any-reg a0-offset) - - (:temp accum non-descriptor-reg nl0-offset) - (:temp data non-descriptor-reg nl1-offset) - (:temp temp non-descriptor-reg nl2-offset) - (:temp offset non-descriptor-reg nl3-offset)) - (emit-label sxhash-simple-substring-entry) - - (inst li offset (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)) - (inst b test) - (move accum zero-tn) - - LOOP - - (inst xor accum data) - (inst sll temp accum 27) - (inst srl accum 5) - (inst or accum temp) - (inst add offset 4) - - TEST - - (inst subcc length (fixnumize 4)) - (inst b :ge loop) - (inst ld data string offset) - - (inst addcc length (fixnumize 4)) - (inst b :eq done) - (inst neg length) - (inst sll length 1) - (inst srl data length) - (inst xor accum data) - - DONE - - (inst sll result accum 5) - (inst srl result result 3)) -|#