Index: /branches/arm/compiler/ARM/arm2.lisp
===================================================================
--- /branches/arm/compiler/ARM/arm2.lisp	(revision 13817)
+++ /branches/arm/compiler/ARM/arm2.lisp	(revision 13818)
@@ -2452,5 +2452,5 @@
              (dest ($ arm::arg_z))
              (vsize (+ (length inherited-vars) 
-                       2                ; %closure-code%, afunc
+                       3                ; entrypoint,%closure-code%, afunc
                        2)))             ; name, lfun-bits
         (declare (list inherited-vars))
@@ -2460,6 +2460,8 @@
                    (*arm2-top-vstack-lcell* *arm2-top-vstack-lcell*))
               (arm2-lri seg arm::arg_x (ash (nx-lookup-target-uvector-subtag :function) *arm2-target-fixnum-shift*))
+              (arm2-lri seg arm::temp0 (subprim-name->offset '.SPfix-nfn-entrypoint))
               (! %closure-code% arm::arg_y)
               (arm2-store-immediate seg (arm2-afunc-lfun-ref afunc) arm::arg_z)
+              (arm2-vpush-register-arg seg arm::temp0)
               (arm2-vpush-register-arg seg arm::arg_x)
               (arm2-vpush-register-arg seg arm::arg_y)
@@ -2475,5 +2477,5 @@
               (! make-stack-gvector))
             (arm2-open-undo $undostkblk))
-          (let* ((cell 0))
+          (let* ((cell 1))
             (declare (fixnum cell))
             (progn
@@ -2482,5 +2484,7 @@
                         (arch::make-vheader vsize (nx-lookup-target-uvector-subtag :function)))
               (! %alloc-misc-fixed dest arm::imm0 (ash vsize (arch::target-word-shift arch)))
-              )       
+              )
+            (! lri arm::arg_x (subprim-name->offset '.SPfix-nfn-entrypoint))
+            (! misc-set-c-node arm::arg_x dest 0)
             (! %closure-code% arm::arg_x)
             (arm2-store-immediate seg (arm2-afunc-lfun-ref afunc) arm::arg_y)
@@ -3058,8 +3062,7 @@
       (if (eql op (%nx1-operator fixnum))
         (let* ((val (ash (cadr form) arm::fixnumshift)))
-          (if (arm::encode-arm-immediate val)
-            (logand val #xffffffff)
-            (if (arm::encode-arm-immediate (lognot val))
-              (logand (lognot val) #xffffffff))))
+          (if (or (arm::encode-arm-immediate val)
+                  (arm::encode-arm-immediate (- val)))
+            (logand val #xffffffff)))
         (if (eql op (%nx1-operator %unbound-marker))
           arm::unbound-marker
@@ -3173,5 +3176,5 @@
 
 (defun arm2-test-reg-%izerop (seg vreg xfer reg cr-bit true-p  zero)
-  (declare (fixnum reg zero))
+  (declare (fixnum reg))
   (with-arm-local-vinsn-macros (seg vreg xfer)
     (regspec-crf-gpr-case 
@@ -3179,5 +3182,5 @@
      (progn
        (if (or (arm::encode-arm-immediate zero)
-               (arm::encode-arm-immediate (lognot zero)))
+               (arm::encode-arm-immediate (- zero)))
          (! compare-immediate dest reg zero)
          (with-node-target (reg) other
@@ -3187,5 +3190,5 @@
      (with-crf-target () crf
        (if (or (arm::encode-arm-immediate zero)
-               (arm::encode-arm-immediate (lognot zero)))
+               (arm::encode-arm-immediate (- zero)))
          (! compare-immediate crf reg (logand #xffffffff zero))
          (with-node-target (reg) other
@@ -4773,5 +4776,5 @@
         (arm::make-lap-label unique)))
     (labels ((parse-operand-form (valform)
-               ;(break "valform = ~s" valform)
+                                        ;(break "valform = ~s" valform)
                (cond ((typep valform 'keyword)
                       (or (assq valform unique-labels)
@@ -4830,7 +4833,7 @@
                      (if (eval-predicate (car f))
                        (dolist (subform (cdr f))
-                         (expand-form subform))))))))
+                           (expand-form subform))))))))
       (declare (dynamic-extent #'expand-form #'parse-operand-form #'expand-insn-form #'eval-predicate))
-      ;(format t "~& vinsn = ~s" vinsn)
+                                        ;(format t "~& vinsn = ~s" vinsn)
       (dolist (form (vinsn-template-body template))
         (expand-form form ))
@@ -5338,5 +5341,5 @@
           (! negate-fixnum-overflow-inline target src)
           (progn
-            (! negate-fixnum-overflow-ool src)
+            (! negate-fixnum-overflow-ool ($ arm::arg_z) src)
             (arm2-copy-register seg target ($ arm::arg_z))))))
     (^)))
@@ -5948,5 +5951,5 @@
           (! fixnum-add-overflow-inline-skip ($ arm::arg_z) ($ arm::arg_y) ($ arm::arg_z) (aref *backend-labels* done))
           (progn
-            (! fixnum-add-overflow-ool ($ arm::arg_y) ($ arm::arg_z))
+            (! fixnum-add-overflow-ool ($ arm::arg_z) ($ arm::arg_y) ($ arm::arg_z))
             (-> done)))
         (@ out-of-line)
@@ -5970,5 +5973,5 @@
           (! fixnum-sub-overflow-inline-skip ($ arm::arg_z) ($ arm::arg_y) ($ arm::arg_z) (aref *backend-labels* done))
           (progn
-            (! fixnum-sub-overflow-ool ($ arm::arg_y) ($ arm::arg_z))
+            (! fixnum-sub-overflow-ool ($ arm::arg_z)($ arm::arg_y) ($ arm::arg_z))
             (-> done)))
         (@ out-of-line)
@@ -6266,5 +6269,5 @@
                  (! fixnum-add-overflow-inline target r1 r2)
                  (progn
-                   (! fixnum-add-overflow-ool r1 r2)
+                   (! fixnum-add-overflow-ool ($ arm::arg_z) r1 r2)
                    (arm2-copy-register seg target ($ arm::arg_z)))))
              (^)))
@@ -6329,5 +6332,5 @@
                    (! fixnum-sub-overflow-inline target r1 r2)
                    (progn
-                     (! fixnum-sub-overflow-ool r1 r2)
+                     (! fixnum-sub-overflow-ool ($ arm::arg_z) r1 r2)
                      (arm2-copy-register seg target ($ arm::arg_z)))))
               (^)))
