0.9.14.18:
authorJuho Snellman <jsnell@iki.fi>
Sun, 16 Jul 2006 06:48:19 +0000 (06:48 +0000)
committerJuho Snellman <jsnell@iki.fi>
Sun, 16 Jul 2006 06:48:19 +0000 (06:48 +0000)
Get rid of the full call to FIND-CLASSOID in LAYOUT-OF for the
        'null classoid case. LAYOUT-OF is inlined into PCL's dfuns, and
        the full call caused suboptimal register allocation.

src/code/class.lisp
src/code/primordial-type.lisp
src/code/target-type.lisp
version.lisp-expr

index 8682721..c0d7ed0 100644 (file)
@@ -1473,6 +1473,10 @@ NIL is returned when no such class exists."
               (let ((layout (classoid-layout (find-classoid name))))
                 (dolist (code codes)
                   (setf (svref res code) layout)))))))
+  (setq *null-classoid-layout*
+        (locally
+            (declare (notinline find-classoid))
+          (classoid-layout (find-classoid 'null))))
   #-sb-xc-host (/show0 "done setting *BUILT-IN-CLASS-CODES*"))
 \f
 (!defun-from-collected-cold-init-forms !classes-cold-init)
index 96dcfbe..e131dcd 100644 (file)
@@ -23,4 +23,5 @@
 ;;; a vector that maps type codes to layouts, used for quickly finding
 ;;; the layouts of built-in classes
 (defvar *built-in-class-codes*) ; initialized in cold load
+(defvar *null-classoid-layout*)
 (declaim (type simple-vector *built-in-class-codes*))
index 321d0a4..4ae6003 100644 (file)
          ;; Note: was #.((CLASS-LAYOUT (SB!XC:FIND-CLASS 'NULL))).
          ;; I (WHN 19990209) replaced this with an expression evaluated at
          ;; run time in order to make it easier to build the cross-compiler.
-         ;; If it doesn't work, something else will be needed..
-         (locally
-           ;; KLUDGE: In order to really make this run at run time
-           ;; (instead of doing some weird broken thing at cold load
-           ;; time), we need to suppress a DEFTRANSFORM.. -- WHN 19991004
-           (declare (notinline find-classoid))
-           (classoid-layout (find-classoid 'null))))
+         ;;
+         ;; KLUDGE: Since there's a DEFTRANSFORM for FIND-CLASSOID on
+         ;; constant names which creates non-cold-loadable code, we
+         ;; can't just use (CLASSOID-LAYOUT (FIND-CLASSOID 'NULL))
+         ;; here. The original (WHN 19991004) solution was to locally
+         ;; notinline FIND-CLASSOID. However, the full call to
+         ;; FIND-CLASSOID caused suboptimal register allocation in PCL
+         ;; dfuns. So instead we now use a special variable which is
+         ;; initialized during cold init. -- JES, 2006-07-04
+         *null-classoid-layout*)
         (t (svref *built-in-class-codes* (widetag-of x)))))
 
 #!-sb-fluid (declaim (inline classoid-of))
index c7dd53a..fffa055 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.14.17"
+"0.9.14.18"