compiler/{sparc,ppc}/macros: with-pinned-objects improvements.
authorAlastair Bridgewater <nyef@lain.lisphacker.com>
Wed, 24 Apr 2013 17:07:35 +0000 (13:07 -0400)
committerAlastair Bridgewater <nyef@lain.lisphacker.com>
Wed, 1 May 2013 20:23:27 +0000 (16:23 -0400)
  * For all precise gencgc backends, with-pinned-objects uses an
explicit "pin list".  This pin list should be stack-allocated.

  * Declare the pin list to be TRULY-DYNAMIC-EXTENT, for both
backends.  This won't actually do anything unless the backend
also supports :stack-allocatable-fixed-objects or more than two
objects are to be pinned at once (one-arg LIST and two-arg LIST*
are both converted to CONS by the compiler, and CONS falls under
:stack-allocatable-fixed-objects rather than
:stack-allocatable-lists).

src/compiler/ppc/macros.lisp
src/compiler/sparc/macros.lisp

index 4fb7160..645c566 100644 (file)
@@ -382,4 +382,5 @@ garbage collection.  This is currently implemented by disabling GC"
     ,@body)
   #!+gencgc
   `(let ((*pinned-objects* (list* ,@objects *pinned-objects*)))
+     (declare (truly-dynamic-extent *pinned-objects*))
      ,@body))
index 4010816..4da9325 100644 (file)
@@ -372,4 +372,5 @@ garbage collection.  This is currently implemented by disabling GC"
     ,@body)
   #!+gencgc
   `(let ((*pinned-objects* (list* ,@objects *pinned-objects*)))
+     (declare (truly-dynamic-extent *pinned-objects*))
      ,@body))