From: Nikodemus S. <de...@us...> - 2007-11-06 14:17:50
|
Update of /cvsroot/sbcl/sbcl/src/compiler/x86-64 In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv29591/src/compiler/x86-64 Modified Files: macros.lisp Log Message: 1.0.11.11: expand zero-object WITH-PINNED-OBJECTS to a PROGN * x86 and x86-64 only. Index: macros.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/x86-64/macros.lisp,v retrieving revision 1.23 retrieving revision 1.24 diff -u -d -r1.23 -r1.24 --- macros.lisp 28 Jun 2007 13:04:59 -0000 1.23 +++ macros.lisp 6 Nov 2007 14:17:41 -0000 1.24 @@ -531,18 +531,20 @@ ;;; helper for alien stuff. (def!macro with-pinned-objects ((&rest objects) &body body) "Arrange with the garbage collector that the pages occupied by -OBJECTS will not be moved in memory for the duration of BODY. -Useful for e.g. foreign calls where another thread may trigger -garbage collection" - `(multiple-value-prog1 - (progn - ,@(loop for p in objects - collect `(push-word-on-c-stack - (int-sap (sb!kernel:get-lisp-obj-address ,p)))) - ,@body) - ;; If the body returned normally, we should restore the stack pointer - ;; for the benefit of any following code in the same function. If - ;; there's a non-local exit in the body, sp is garbage anyway and - ;; will get set appropriately from {a, the} frame pointer before it's - ;; next needed - (pop-words-from-c-stack ,(length objects)))) +OBJECTS will not be moved in memory for the duration of BODY. Useful +for e.g. foreign calls where another thread may trigger garbage +collection" + (if objects + `(multiple-value-prog1 + (progn + ,@(loop for p in objects + collect `(push-word-on-c-stack + (int-sap (sb!kernel:get-lisp-obj-address ,p)))) + ,@body) + ;; If the body returned normally, we should restore the stack pointer + ;; for the benefit of any following code in the same function. If + ;; there's a non-local exit in the body, sp is garbage anyway and + ;; will get set appropriately from {a, the} frame pointer before it's + ;; next needed + (pop-words-from-c-stack ,(length objects))) + `(progn ,@body))) |