diff --git a/code/load.lisp b/code/load.lisp index 5154c157f8829e78903f1af311a44604bd0508ee..a3106401b0fce326753c27ede908959306922e3c 100644 --- a/code/load.lisp +++ b/code/load.lisp @@ -657,6 +657,26 @@ res)) +;;; FOP-INT-VECTOR -- Internal +;;; +;;; *** NOT *** the FOP-INT-VECTOR as currently documented in rtguts. Size +;;; must be a directly supported I-vector element size, with no extra bits. +;;; This must be packed according to the local byte-ordering, allowing us to +;;; directly read the bits. +;;; +(define-fop (fop-int-vector 43) + (prepare-for-fast-read-byte *fasl-file* + (let* ((len (fast-read-u-integer 4)) + (size (fast-read-byte)) + (ac (integer-length size)) + (res (%primitive alloc-i-vector len ac))) + (done-with-fast-read-byte) + (unless (and (<= ac 5) (= size (ash 1 ac))) + (error "Losing element size ~S." size)) + (read-n-bytes *fasl-file* res 0 (ash (+ (ash len ac) 7) -3)) + res))) + +#| ;;; Fop-Int-Vector -- Internal ;;; ;;; Load an I-Vector using the Guy Steele memorial faslop. If there @@ -691,6 +711,7 @@ (when (= i n) (return)))))) (done-with-fast-read-byte)))) res))) +|# (define-fop (fop-uniform-int-vector 44) (prepare-for-fast-read-byte *fasl-file*