Optimize (mod FIXNUM) type-checks on x86oids.
[sbcl.git] / src / code / target-extensions.lisp
index 1aff0b9..088694d 100644 (file)
@@ -35,6 +35,13 @@ order when a saved core image starts up, after the system itself has
 been initialized. Unused by SBCL itself: reserved for user and
 applications.")
 
+(defvar *exit-hooks* nil
+  #!+sb-doc
+  "This is a list of functions which are called in an unspecified
+order when SBCL process exits. Unused by SBCL itself: reserved for
+user and applications. Using (SB-EXT:EXIT :ABORT T), or calling
+exit(3) directly will circumvent these hooks.")
+
 \f
 ;;; Binary search for simple vectors
 (defun binary-search (value seq &key (key #'identity))
@@ -94,6 +101,7 @@ applications.")
                 (type (integer 0 ,(1- sb!xc:array-dimension-limit)) ,pointer)
                 (type (simple-array ,element-type (*)) ,string))
        (flet ((push-char (char)
+                (declare (optimize (sb!c::insert-array-bounds-checks 0)))
                 (when (= ,pointer ,size)
                   (let ((old ,string))
                     (setf ,size (* 2 (+ ,size 2))
@@ -111,3 +119,8 @@ applications.")
                   (%shrink-vector string size)
                   string)))
          ,@body))))
+
+;;; The smallest power of two that is equal to or greater than X.
+(defun power-of-two-ceiling (x)
+  (declare (index x))
+  (ash 1 (integer-length (1- x))))