0.8.13.29:
authorChristophe Rhodes <csr21@cam.ac.uk>
Thu, 5 Aug 2004 16:37:04 +0000 (16:37 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Thu, 5 Aug 2004 16:37:04 +0000 (16:37 +0000)
Inline allocation on the x86 isn't a universal win.
... OK, then, optimize for the increasingly-common case
(high-spec machines)
... and provide a backend-subfeature for those advanced users
who know where their sbcl is going to run.

src/compiler/x86/macros.lisp
version.lisp-expr

index 137a0e8..028d6b7 100644 (file)
 ;;; which time all calls to alloc() would have needed a syscall to
 ;;; mask signals for the duration.  Now we have pseudoatomic there's
 ;;; no need for that overhead.  Still, inline alloc would be a neat
-;;; addition someday
+;;; addition someday (except see below).
 
 (defun allocation-dynamic-extent (alloc-tn size)
   (inst sub esp-tn size)
 (defun allocation (alloc-tn size &optional inline dynamic-extent)
   (cond
     (dynamic-extent (allocation-dynamic-extent alloc-tn size))
-    ((or (null inline) (policy inline (>= speed space)))
+    ;; FIXME: for reasons unknown, inline allocation is a speed win on
+    ;; non-P4s, and a speed loss on P4s (and probably other such
+    ;; high-spec high-cache machines).  :INLINE-ALLOCATION-IS-GOOD is
+    ;; a bit of a KLUDGE, really.  -- CSR, 2004-08-05 (following
+    ;; observations made by ASF and Juho Snellman)
+    ((and (member :inline-allocation-is-good *backend-subfeatures*)
+         (or (null inline) (policy inline (>= speed space))))
      (allocation-inline alloc-tn size))
     (t (allocation-notinline alloc-tn size)))
   (values))
index be62a90..7df5dda 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.8.13.28"
+"0.8.13.29"