Index: /branches/arm/compiler/ARM/arm-arch.lisp
===================================================================
--- /branches/arm/compiler/ARM/arm-arch.lisp	(revision 13858)
+++ /branches/arm/compiler/ARM/arm-arch.lisp	(revision 13859)
@@ -1295,9 +1295,10 @@
   area.succ)
 
+;;; We generally don't want much code to see the function's entrypoint.
 (defarmarchmacro ccl::nth-immediate (f i)
-  `(ccl::%svref ,f ,i))
+  `(ccl::%svref ,f (the fixnum (+ (the fixnum ,i) 1))))
 
 (defarmarchmacro ccl::set-nth-immediate (f i new)
-  `(setf (ccl::%svref ,f ,i) ,new))
+  `(setf (ccl::%svref ,f (the fixnum (+ (the fixnum ,i) 1))) ,new))
 
 (defarmarchmacro ccl::symptr->symvector (s)
Index: /branches/arm/compiler/ARM/arm-lapmacros.lisp
===================================================================
--- /branches/arm/compiler/ARM/arm-lapmacros.lisp	(revision 13858)
+++ /branches/arm/compiler/ARM/arm-lapmacros.lisp	(revision 13859)
@@ -300,4 +300,8 @@
  `(ldr ,dest (:@ ,vector (:$ (+ (* 4 ,index) arm::misc-data-offset)))))
 
+;;; Immediate indices (for e.g. gfs) don't account for the entrypoint.
+(defarmlapmacro nth-immediate (dest index vector)
+  `(svref ,dest (1+ ,index) ,vector))
+
 ;;; This evals its args in the wrong order.
 ;;; Can't imagine any code will care.
