diff --git a/src/code/cold-init.lisp b/src/code/cold-init.lisp
index 9e3359e..d22b45e 100644
--- a/src/code/cold-init.lisp
+++ b/src/code/cold-init.lisp
@@ -197,9 +197,10 @@
             (setf (svref *!load-time-values* (third toplevel-thing))
                   (funcall (second toplevel-thing))))
            (:load-time-value-fixup
-            (setf (sap-ref-word (second toplevel-thing) 0)
+            (setf (sap-ref-word (int-sap (get-lisp-obj-address (second toplevel-thing)))
+                                (third toplevel-thing))
                   (get-lisp-obj-address
-                   (svref *!load-time-values* (third toplevel-thing)))))
+                   (svref *!load-time-values* (fourth toplevel-thing)))))
            #!+(and (or x86 x86-64) gencgc)
            (:load-time-code-fixup
             (sb!vm::!envector-load-time-code-fixup (second toplevel-thing)
diff --git a/src/compiler/generic/genesis.lisp b/src/compiler/generic/genesis.lisp
index da55262..cd23259 100644
--- a/src/compiler/generic/genesis.lisp
+++ b/src/compiler/generic/genesis.lisp
@@ -530,15 +530,16 @@
 
 ;;; (Note: In CMU CL, this function expected a SAP-typed ADDRESS
 ;;; value, instead of the SAP-INT we use here.)
-(declaim (ftype (function (sb!vm:word descriptor) (values))
+(declaim (ftype (function (descriptor sb!vm:word descriptor) (values))
                 note-load-time-value-reference))
-(defun note-load-time-value-reference (address marker)
+(defun note-load-time-value-reference (address offset marker)
   (cold-push (cold-cons
               (cold-intern :load-time-value-fixup)
-              (cold-cons (sap-int-to-core address)
-                         (cold-cons
-                          (number-to-core (descriptor-word-offset marker))
-                          *nil-descriptor*)))
+              (cold-cons address
+                         (cold-cons (number-to-core offset)
+                                    (cold-cons
+                                     (number-to-core (descriptor-word-offset marker))
+                                     *nil-descriptor*))))
              *current-reversed-cold-toplevels*)
   (values))
 
@@ -555,9 +556,10 @@
   ;; idea?) -- WHN 19990817
   (if (and (null (descriptor-gspace value))
            (not (null (descriptor-word-offset value))))
-    (note-load-time-value-reference (+ (logandc2 (descriptor-bits address)
-                                                 sb!vm:lowtag-mask)
-                                       (ash index sb!vm:word-shift))
+    (note-load-time-value-reference address
+                                    (- (ash index sb!vm:word-shift)
+                                       (logand (descriptor-bits address)
+                                               sb!vm:lowtag-mask))
                                     value)
     (let* ((bytes (gspace-bytes (descriptor-intuit-gspace address)))
            (byte-index (ash (+ index (descriptor-word-offset address))
