X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fgeneric%2Fvm-tran.lisp;h=ea381c42b2614ec0952cafef86b0064b89e44b0d;hb=5dc28680e9cb2d598da02aed512aa49ea81fdade;hp=d0e4395e1ba1553a3205f920b4de25e9333dc51a;hpb=06cb0db045562ab583358e2ee7090c606e1dfe42;p=sbcl.git diff --git a/src/compiler/generic/vm-tran.lisp b/src/compiler/generic/vm-tran.lisp index d0e4395..ea381c4 100644 --- a/src/compiler/generic/vm-tran.lisp +++ b/src/compiler/generic/vm-tran.lisp @@ -11,9 +11,6 @@ (in-package "SB!C") -(file-comment - "$Header$") - ;;; FIXME: It would be good to implement SB!XC:DEFCONSTANT, and use ;;; use that here, so that the compiler is born knowing this value. ;;; FIXME: Add a comment telling whether this holds for all vectors @@ -182,89 +179,6 @@ (frob (simple-array (unsigned-byte 2) (*)) 2) (frob (simple-array (unsigned-byte 4) (*)) 4)) -;;;; simple string transforms -;;;; -;;;; Note: CMU CL had more of these, including transforms for -;;;; functions which cons. In SBCL, we've gotten rid of the transforms -;;;; for functions which cons, since our GC overhead is sufficiently -;;;; large that it doesn't seem worth it to try to economize on -;;;; function call overhead or on the overhead of runtime type -;;;; dispatch in AREF. - -(deftransform subseq ((string start &optional (end nil)) - (simple-string t &optional t)) - `(let* ((length (- (or end (length string)) - start)) - (result (make-string length))) - (declare (optimize (safety 0))) - (bit-bash-copy string - (the index - (+ (the index (* start sb!vm:byte-bits)) - ,vector-data-bit-offset)) - result - ,vector-data-bit-offset - (the index (* length sb!vm:byte-bits))) - result)) - -(deftransform copy-seq ((seq) (simple-string)) - `(let* ((length (length seq)) - (res (make-string length))) - (declare (optimize (safety 0))) - (bit-bash-copy seq - ,vector-data-bit-offset - res - ,vector-data-bit-offset - (the index (* length sb!vm:byte-bits))) - res)) - -(deftransform replace ((string1 string2 &key (start1 0) (start2 0) - end1 end2) - (simple-string simple-string &rest t)) - `(locally (declare (optimize (safety 0))) - (bit-bash-copy string2 - (the index - (+ (the index (* start2 sb!vm:byte-bits)) - ,vector-data-bit-offset)) - string1 - (the index - (+ (the index (* start1 sb!vm:byte-bits)) - ,vector-data-bit-offset)) - (the index - (* (min (the index (- (or end1 (length string1)) - start1)) - (the index (- (or end2 (length string2)) - start2))) - sb!vm:byte-bits))) - string1)) - -(deftransform concatenate ((rtype &rest sequences) - (t &rest simple-string) - simple-string) - (collect ((lets) - (forms) - (all-lengths) - (args)) - (dolist (seq sequences) - (declare (ignore seq)) - (let ((n-seq (gensym)) - (n-length (gensym))) - (args n-seq) - (lets `(,n-length (the index (* (length ,n-seq) sb!vm:byte-bits)))) - (all-lengths n-length) - (forms `(bit-bash-copy ,n-seq ,vector-data-bit-offset - res start - ,n-length)) - (forms `(setq start (+ start ,n-length))))) - `(lambda (rtype ,@(args)) - (declare (ignore rtype)) - (let* (,@(lets) - (res (make-string (truncate (the index (+ ,@(all-lengths))) - sb!vm:byte-bits))) - (start ,vector-data-bit-offset)) - (declare (type index start ,@(all-lengths))) - ,@(forms) - res)))) - ;;;; bit vector hackery ;;; SIMPLE-BIT-VECTOR bit-array operations are transformed to a word loop that