-(defknown copy-to-system-area
- ((simple-unboxed-array (*)) index system-area-pointer index index)
- (values)
- ())
-
-(defknown copy-from-system-area
- (system-area-pointer index (simple-unboxed-array (*)) index index)
- (values)
- ())
-
-(defknown system-area-copy
- (system-area-pointer index system-area-pointer index index)
- (values)
- ())
-
-(defknown bit-bash-copy
- ((simple-unboxed-array (*)) index
- (simple-unboxed-array (*)) index index)
- (values)
- ())
+;;; FIXME: there's some ugly duplication between the (INTERN (FORMAT ...))
+;;; magic here and the same magic in src/code/bit-bash.lisp. I don't know
+;;; of any good way to clean it up, but it's definitely violating OAOO.
+(macrolet ((define-known-copiers ()
+ `(progn
+ ,@(loop for i = 1 then (* i 2)
+ collect `(defknown ,(intern (format nil "UB~D-BASH-COPY" i)
+ (find-package "SB!KERNEL"))
+ ((simple-unboxed-array (*)) index (simple-unboxed-array (*)) index index)
+ (values)
+ ())
+ collect `(defknown ,(intern (format nil "SYSTEM-AREA-UB~D-COPY" i)
+ (find-package "SB!KERNEL"))
+ (system-area-pointer index system-area-pointer index index)
+ (values)
+ ())
+ collect `(defknown ,(intern (format nil "COPY-UB~D-TO-SYSTEM-AREA" i)
+ (find-package "SB!KERNEL"))
+ ((simple-unboxed-array (*)) index system-area-pointer index index)
+ (values)
+ ())
+ collect `(defknown ,(intern (format nil "COPY-UB~D-FROM-SYSTEM-AREA" i)
+ (find-package "SB!KERNEL"))
+ (system-area-pointer index (simple-unboxed-array (*)) index index)
+ (values)
+ ())
+ until (= i sb!vm:n-word-bits)))))
+ (define-known-copiers))