Index: /trunk/ccl/compiler/PPC/PPC32/ppc32-vinsns.lisp
===================================================================
--- /trunk/ccl/compiler/PPC/PPC32/ppc32-vinsns.lisp	(revision 5181)
+++ /trunk/ccl/compiler/PPC/PPC32/ppc32-vinsns.lisp	(revision 5182)
@@ -2330,7 +2330,15 @@
 (define-ppc32-vinsn fixnum->char (((dest :lisp))
                                   ((src :imm))
-                                  ())
+                                  ((temp :u32)
+                                   (crf0 (:crf 0))))
+  (srwi temp src (+ ppc32::fixnumshift 11))
+  (cmpwi temp 27)
   (slwi dest src (- ppc32::charcode-shift ppc32::fixnumshift))
-  (addi dest dest ppc32::subtag-character))
+  (bne+ :ok)
+  (li dest ppc32::nil-value)
+  (b :done)
+  :ok
+  (addi dest dest ppc32::subtag-character)
+  :done)
 
 
Index: /trunk/ccl/compiler/PPC/PPC64/ppc64-vinsns.lisp
===================================================================
--- /trunk/ccl/compiler/PPC/PPC64/ppc64-vinsns.lisp	(revision 5181)
+++ /trunk/ccl/compiler/PPC/PPC64/ppc64-vinsns.lisp	(revision 5182)
@@ -2319,7 +2319,15 @@
 (define-ppc64-vinsn fixnum->char (((dest :lisp))
 				  ((src :imm))
-				  ())
+				  ((temp :u64)
+                                   (crf0 (:crf 0))))
+  (srdi temp src (+ ppc64::fixnumshift 11))
+  (cmpdi temp 27)
   (sldi dest src (- ppc64::charcode-shift ppc64::fixnumshift))
-  (addi dest dest ppc64::subtag-character))
+  (bne+ :ok)
+  (li dest ppc64::nil-value)
+  (b :done)
+  :ok
+  (addi dest dest ppc64::subtag-character)
+  :done)
 
 (define-ppc64-vinsn u32->char (((dest :lisp))
