X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fppc%2Farray.lisp;h=4b68ace9c10120bf89d29fdd0178f9898db4d9b0;hb=80f222325e1f677e5cf8de01c6990906fa47f65d;hp=ba9ebf04b904173df390fd6611a7154f8172cdce;hpb=1419c1d2d50f039be46a8667351b7738ac4965e4;p=sbcl.git diff --git a/src/assembly/ppc/array.lisp b/src/assembly/ppc/array.lisp index ba9ebf0..4b68ace 100644 --- a/src/assembly/ppc/array.lisp +++ b/src/assembly/ppc/array.lisp @@ -1,6 +1,17 @@ -(in-package "SB!VM") - +;;;; various array operations that are too expensive (in space) to do +;;;; inline + +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; This software is derived from the CMU CL system, which was +;;;; written at Carnegie Mellon University and released into the +;;;; public domain. The software is in the public domain and is +;;;; provided with absolutely no warranty. See the COPYING and CREDITS +;;;; files for more information. +(in-package "SB!VM") + (define-assembly-routine (allocate-vector (:policy :fast-safe) (:translate allocate-vector) @@ -24,75 +35,3 @@ (storew ndescr vector 0 sb!vm:other-pointer-lowtag) (storew length vector sb!vm:vector-length-slot sb!vm:other-pointer-lowtag)) (move result vector)) - - - -;;;; Hash primitives -#| -#+sb-assembling -(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)) - - (loadw length string sb!vm:vector-length-slot sb!vm:other-pointer-lowtag) - (inst b sxhash-simple-substring-entry)) - - -(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)) - (move accum zero-tn) - (inst b test) - - LOOP - - (inst xor accum accum data) - (inst slwi temp accum 27) - (inst srwi accum accum 5) - (inst or accum accum temp) - (inst addi offset offset 4) - - TEST - - (inst subic. length length (fixnumize 4)) - (inst lwzx data string offset) - (inst bge loop) - - (inst addic. length length (fixnumize 4)) - (inst neg length length) - (inst beq done) - (inst slwi length length 1) - (inst srw data data length) - (inst xor accum accum data) - - DONE - - (inst slwi result accum 5) - (inst srwi result result 3)) -|# \ No newline at end of file