diff --git a/compiler/generic/vm-tran.lisp b/compiler/generic/vm-tran.lisp index a4fe7371eb6b4bba7f6e67c73e824daaea72b2e2..0bf715ce01b304c13f7a2439193fe9ec24f1a933 100644 --- a/compiler/generic/vm-tran.lisp +++ b/compiler/generic/vm-tran.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/vm-tran.lisp,v 1.7 1990/04/29 23:53:52 wlott Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/generic/vm-tran.lisp,v 1.8 1990/05/15 01:21:52 wlott Exp $ ;;; ;;; This file contains impelemtentation-dependent transforms. ;;; @@ -233,3 +233,27 @@ ,@(forms) res)))) + +;;;; Primitive translator for byte-blt + + +(def-primitive-translator byte-blt (src src-start dst dst-start dst-end) + `(let ((src ,src) + (src-start (* ,src-start vm:byte-bits)) + (dst ,dst) + (dst-start (* ,dst-start vm:byte-bits)) + (dst-end (* ,dst-end vm:byte-bits))) + (let ((length (- dst-end dst-start))) + (etypecase src + (system-area-pointer + (etypecase dst + (system-area-pointer + (system-area-copy src src-start dst dst-start length)) + ((simple-unboxed-array (*)) + (copy-from-system-area src src-start dst dst-start length)))) + ((simple-unboxed-array (*)) + (etypecase dst + (system-area-pointer + (copy-to-system-area src src-start dst dst-start length)) + ((simple-unboxed-array (*)) + (bit-bash-copy src src-start dst dst-start length))))))))