genesis: Export assembly slot offsets for primitive-objects without lowtags.
authorAlastair Bridgewater <nyef@virtdev-1.lisphacker.com>
Tue, 25 Oct 2011 22:35:03 +0000 (18:35 -0400)
committerAlastair Bridgewater <nyef@virtdev-1.lisphacker.com>
Tue, 25 Oct 2011 22:35:03 +0000 (18:35 -0400)
  * If a primitive-object has no lowtag, export its slot offsets
to assembly language as if it had a lowtag of zero.

  * While we're here, use SYMBOL-VALUE instead of EVAL to find the
numeric value of a lowtag.

src/compiler/generic/genesis.lisp

index 9dd2264..3dc5fd6 100644 (file)
@@ -2947,14 +2947,14 @@ core and return a descriptor to it."
   (format t "/* These offsets are SLOT-OFFSET * N-WORD-BYTES - LOWTAG~%")
   (format t " * so they work directly on tagged addresses. */~2%")
   (let ((name (sb!vm:primitive-object-name obj))
-        (lowtag (eval (sb!vm:primitive-object-lowtag obj))))
-    (when lowtag
-      (dolist (slot (sb!vm:primitive-object-slots obj))
-        (format t "#define ~A_~A_OFFSET ~D~%"
-                (c-symbol-name name)
-                (c-symbol-name (sb!vm:slot-name slot))
-                (- (* (sb!vm:slot-offset slot) sb!vm:n-word-bytes) lowtag)))
-      (terpri)))
+        (lowtag (or (symbol-value (sb!vm:primitive-object-lowtag obj))
+                    0)))
+    (dolist (slot (sb!vm:primitive-object-slots obj))
+      (format t "#define ~A_~A_OFFSET ~D~%"
+              (c-symbol-name name)
+              (c-symbol-name (sb!vm:slot-name slot))
+              (- (* (sb!vm:slot-offset slot) sb!vm:n-word-bytes) lowtag)))
+    (terpri))
   (format t "#endif /* LANGUAGE_ASSEMBLY */~2%"))
 
 (defun write-structure-object (dd)