Fix raw-instance-slots-equalp on SPARC.
authorStas Boukarev <stassats@gmail.com>
Sun, 3 Nov 2013 21:18:01 +0000 (01:18 +0400)
committerStas Boukarev <stassats@gmail.com>
Sun, 3 Nov 2013 21:18:01 +0000 (01:18 +0400)
Some slots have to be aligned or they will cause a bus error. Take
alignment into account on #-(or x86 x86-64 ppc).

src/code/target-defstruct.lisp

index f397731..23de7d4 100644 (file)
         for accessor = (when rsd
                          (raw-slot-data-accessor-name rsd))
         always (or (not accessor)
-                   (prog1
-                       (equalp (funcall accessor x i)
-                               (funcall accessor y i))
-                     (incf i (raw-slot-data-n-words rsd))))))
+                   (progn
+                     #!-(or x86 x86-64 ppc)
+                     (setf i (logandc2 (+ i (1- (raw-slot-data-alignment rsd)))
+                                       (1- (raw-slot-data-alignment rsd))))
+                     (prog1
+                         (equalp (funcall accessor x i)
+                                 (funcall accessor y i))
+                       (incf i (raw-slot-data-n-words rsd)))))))
 \f
 ;;; default PRINT-OBJECT method