Index: /trunk/source/lisp-kernel/arm-asmutils.s
===================================================================
--- /trunk/source/lisp-kernel/arm-asmutils.s	(revision 15228)
+++ /trunk/source/lisp-kernel/arm-asmutils.s	(revision 15229)
@@ -196,4 +196,19 @@
 _endfn                
 
+/* zero N (r1) dnodes, starting at the dnode-aligned address in r0 */
+_exportfn(C(zero_dnodes))
+        __(cmp r1,#0)
+        __(adr r2,2f)
+        __(fldd d0,[r2,#0])
+        __(b 1f)
+0:      __(subs r1,r1,#1)
+        __(fstd d0,[r0])
+        __(add r0,r0,#dnode_size)        
+1:      __(bne 0b)
+        __(bx lr)
+        .align 3
+2:      .long 0
+        .long 0        
+_endfn                        
                                 
 	_endfile
Index: /trunk/source/lisp-kernel/gc-common.c
===================================================================
--- /trunk/source/lisp-kernel/gc-common.c	(revision 15228)
+++ /trunk/source/lisp-kernel/gc-common.c	(revision 15229)
@@ -1353,4 +1353,6 @@
 }
 
+extern void zero_dnodes(void *,natural);
+
 void 
 gc(TCR *tcr, signed_natural param)
@@ -1705,5 +1707,5 @@
       last_zeroed_addr = a->high;
     }
-    zero_memory_range(a->active, last_zeroed_addr);
+    zero_dnodes(a->active, area_dnode(last_zeroed_addr,a->active));
 
     /*
Index: /trunk/source/lisp-kernel/ppc-asmutils.s
===================================================================
--- /trunk/source/lisp-kernel/ppc-asmutils.s	(revision 15228)
+++ /trunk/source/lisp-kernel/ppc-asmutils.s	(revision 15229)
@@ -428,4 +428,16 @@
 _endfn
 
-
+/* zero N (r4) dnodes, starting at the dnode-aligned address in r3 */
+_exportfn(C(zero_dnodes))
+        __(cmpri(r4,0))
+        __(li r5,0)
+        __(li r6,0)
+        __(b 1f)
+0:      __(subi. r4,r4,1)
+        __(str(r5,0(r3)))
+        __(str(r6,node_size(r3)))
+        __(la r3,dnode_size(r3))
+1:      __(bne 0b)
+        __(blr)
+_endfn                
 	_endfile
Index: /trunk/source/lisp-kernel/x86-asmutils32.s
===================================================================
--- /trunk/source/lisp-kernel/x86-asmutils32.s	(revision 15228)
+++ /trunk/source/lisp-kernel/x86-asmutils32.s	(revision 15229)
@@ -280,4 +280,19 @@
 _endfn                                       
         __endif
+
+/* zero arg1 dnodes,starting at the dnode-aligned address in arg0 */
+_exportfn(C(zero_dnodes))  
+        __(xorl %eax,%eax)
+        __(mov 4(%esp),%edx)
+        __(mov 8(%esp),%ecx)
+        __(testl %ecx,%ecx)
+        __(jmp 1f)
+0:      __(mov %eax,0(%edx))
+        __(mov %eax,4(%edx))
+        __(lea dnode_size(%edx),%edx)
+        __(subl $1,%ecx)
+1:      __(jne 0b)
+        __(repret)
+_endfn        
         _endfile
 
Index: /trunk/source/lisp-kernel/x86-asmutils64.s
===================================================================
--- /trunk/source/lisp-kernel/x86-asmutils64.s	(revision 15228)
+++ /trunk/source/lisp-kernel/x86-asmutils64.s	(revision 15229)
@@ -276,3 +276,15 @@
 _endfn                                       
         __endif
+
+/* zero N (%rsi) dnodes, starting at the dnode-aligned address in %rdi */
+_exportfn(C(zero_dnodes))
+        __(pxor %xmm0,%xmm0)
+        __(cmpq $0,%rsi)
+        __(jmp 1f)
+0:      __(movdqa %xmm0,(%rdi))
+        __(lea 16(%rdi),%rdi)
+        __(subq $1,%rsi)
+1:      __(jne 0b)
+        __(repret)
+_endfn        
 	_endfile
