X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fearly-extensions.lisp;h=c3f2474359ca59d915547548e5ffde8871901417;hb=cf0b72cd4052a09b9a305081524bd44e2948c1e5;hp=2c6263a90fc7f15c1f962c0e5cee4f928f903232;hpb=51e63f301624e39febdd85b5feba19b7c980f307;p=sbcl.git diff --git a/src/code/early-extensions.lisp b/src/code/early-extensions.lisp index 2c6263a..c3f2474 100644 --- a/src/code/early-extensions.lisp +++ b/src/code/early-extensions.lisp @@ -30,6 +30,10 @@ ;;; bound because ANSI specifies it as an exclusive bound.) (def!type index () `(integer 0 (,sb!xc:array-dimension-limit))) +;;; like INDEX, but only up to half the maximum. Used by hash-table +;;; code that does plenty to (aref v (* 2 i)) and (aref v (1+ (* 2 i))). +(def!type index/2 () `(integer 0 (,(floor sb!xc:array-dimension-limit 2)))) + ;;; like INDEX, but augmented with -1 (useful when using the index ;;; to count downwards to 0, e.g. LOOP FOR I FROM N DOWNTO 0, with ;;; an implementation which terminates the loop by testing for the @@ -65,7 +69,7 @@ (* max-offset sb!vm:n-word-bytes)) scale))) -#!+x86 +#!+(or x86 x86-64) (defun displacement-bounds (lowtag element-size data-offset) (let* ((adjustment (- (* data-offset sb!vm:n-word-bytes) lowtag)) (bytes-per-element (ceiling element-size sb!vm:n-byte-bits)) @@ -75,7 +79,7 @@ bytes-per-element))) (values min max))) -#!+x86 +#!+(or x86 x86-64) (def!type constant-displacement (lowtag element-size data-offset) (flet ((integerify (x) (etypecase x