Index: /trunk/source/level-0/PPC/ppc-misc.lisp
===================================================================
--- /trunk/source/level-0/PPC/ppc-misc.lisp	(revision 8229)
+++ /trunk/source/level-0/PPC/ppc-misc.lisp	(revision 8230)
@@ -980,4 +980,16 @@
   (li arg_z t)
   (blr))
+
+(defppclapfunction %atomic-pop-static-cons ()
+  (li imm0 (+ target::nil-value (target::kernel-global static-conses)))
+  @again
+  (lrarx arg_z rzero imm0)
+  (cmpri arg_z target::nil-value)
+  (be @lose)
+  (%cdr arg_z arg_y)
+  (strcx. arg_y rzero imm0)
+  (bne @again)
+  @lose
+  (blr))
   
 
Index: /trunk/source/lib/misc.lisp
===================================================================
--- /trunk/source/lib/misc.lisp	(revision 8229)
+++ /trunk/source/lib/misc.lisp	(revision 8230)
@@ -824,15 +824,4 @@
   (gc))
 
-(defmacro atomic-pop-kernel-global (place)
-  "Pops an cons cell off a kernel global, in a way that's atomic w.r.t.
-   garbage collection.  Uses gc-lock a.t.m., which is too
-   expensive."
-  `(without-interrupts
-     (%lock-gc-lock)
-     (let ((value (%get-kernel-global ,place)))
-       (%set-kernel-global ,place (cdr value))
-       (%unlock-gc-lock)
-       value)))
-
 (defun static-cons (car-value cdr-value)
   "Allocates a cons cell that doesn't move on garbage collection,
@@ -841,6 +830,5 @@
   (when (eq (%get-kernel-global 'static-conses) 0)
     (initialize-static-cons))
-  (let ((cell #-x8664-target (atomic-pop-kernel-global 'static-conses)
-	      #+x8664-target (%atomic-pop-static-cons)))
+  (let ((cell (%atomic-pop-static-cons)))
     (if cell
       (progn
