Index: /trunk/ccl/compiler/PPC/ppc2.lisp
===================================================================
--- /trunk/ccl/compiler/PPC/ppc2.lisp	(revision 6541)
+++ /trunk/ccl/compiler/PPC/ppc2.lisp	(revision 6542)
@@ -31,4 +31,7 @@
 (defparameter *ppc2-target-node-shift* 0)
 (defparameter *ppc2-target-bits-in-word* 0)
+(defparameter *ppc2-ppc32-half-fixnum-type* '(signed-byte 29))
+(defparameter *ppc2-ppc64-half-fixnum-type* `(signed-byte 60))
+(defparameter *ppc2-target-half-fixnum-type* nil)
 
 
@@ -388,4 +391,7 @@
            (*ppc2-target-bits-in-word* (arch::target-nbits-in-word (backend-target-arch *target-backend*)))
 	   (*ppc2-target-node-size* *ppc2-target-lcell-size*)
+           (*ppc2-target-half-fixnum-type* (target-word-size-case
+                                            (32 *ppc2-ppc32-half-fixnum-type*)
+                                            (64 *ppc2-ppc64-half-fixnum-type*)))
            (*ppc2-all-lcells* ())
            (*ppc2-top-vstack-lcell* nil)
@@ -6606,4 +6612,9 @@
 
 (defppc2 ppc2-%i+ %i+ (seg vreg xfer form1 form2 &optional overflow)
+  (when overflow
+    (let* ((type *ppc2-target-half-fixnum-type*))
+      (when (and (ppc2-form-typep form1 type)
+                 (ppc2-form-typep form2 type))
+        (setq overflow nil))))
   (cond ((null vreg) 
          (ppc2-form seg nil nil form1) 
@@ -6655,4 +6666,9 @@
 
 (defppc2 ppc2-%i- %i- (seg vreg xfer num1 num2 &optional overflow)
+  (when overflow
+    (let* ((type *ppc2-target-half-fixnum-type*))
+      (when (and (ppc2-form-typep form1 type)
+                 (ppc2-form-typep form2 type))
+        (setq overflow nil))))
   (let* ((v1 (acode-fixnum-form-p num1))
          (v2 (acode-fixnum-form-p num2)))
