diff --git a/src/compiler/generic/vm-fndb.lisp b/src/compiler/generic/vm-fndb.lisp index 0c726f3b9807ced28af2b21bd13c6515342983dc..80e56309ac825e385a193735a604cc68107ec92e 100644 --- a/src/compiler/generic/vm-fndb.lisp +++ b/src/compiler/generic/vm-fndb.lisp @@ -307,8 +307,8 @@ ()) (defknown bit-bash-copy - ((simple-unboxed-array (*)) index - (simple-unboxed-array (*)) index index) + ((simple-unboxed-array (*)) vm::offset + (simple-unboxed-array (*)) vm::offset vm::offset) t ()) diff --git a/src/compiler/generic/vm-tran.lisp b/src/compiler/generic/vm-tran.lisp index 62bf92b80b310ccd4ceb0aa657fe4f4127c7f6e9..3376163a97d6f5037cee8bf95c95ba8ffe6995a0 100644 --- a/src/compiler/generic/vm-tran.lisp +++ b/src/compiler/generic/vm-tran.lisp @@ -240,22 +240,22 @@ (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 vm:char-bits)) - vector-data-bit-offset)) - string1 - (the index - (+ (the index (* start1 vm:char-bits)) - vector-data-bit-offset)) - (the index - (* (min (the index (- (or end1 (length string1)) - start1)) - (the index (- (or end2 (length string2)) - start2))) - vm:char-bits))) - string1)) + '(locally (declare (optimize (safety 0))) + (bit-bash-copy string2 + (the vm::offset + (+ (the vm::offset (* start2 vm:char-bits)) + vector-data-bit-offset)) + string1 + (the vm::offset + (+ (the vm::offset (* start1 vm:char-bits)) + vector-data-bit-offset)) + (the vm::offset + (* (min (the vm::offset (- (or end1 (length string1)) + start1)) + (the vm::offset (- (or end2 (length string2)) + start2))) + vm:char-bits))) + string1)) ;; The original version of this deftransform seemed to cause the ;; compiler to spend huge amounts of time deriving the type of the