Optimize raw-instance-slots-equalp for #-complex-float-vops.
[sbcl.git] / src / code / target-defstruct.lisp
index 2295453..0e5742f 100644 (file)
   ;; all this with %RAW-INSTANCE-REF/WORD and bitwise comparisons, but
   ;; that'll fail in some cases. For example -0.0 and 0.0 are EQUALP
   ;; but have different bit patterns. -- JES, 2007-08-21
-  (loop with i = 0
-        for dsd in (dd-slots (layout-info layout))
+  (loop for dsd in (dd-slots (layout-info layout))
         for raw-type = (dsd-raw-type dsd)
-        for rsd = (when raw-type
+        for rsd = (unless (eql raw-type t)
                     (find raw-type
                           *raw-slot-data-list*
                           :key 'raw-slot-data-raw-type))
         always (or (not rsd)
-                   (progn
-                     #!-(or x86 x86-64 ppc)
-                     (setf i (logandc2 (+ i (1- (raw-slot-data-alignment rsd)))
-                                       (1- (raw-slot-data-alignment rsd))))
-                     (prog1
-                         (funcall (raw-slot-data-comparer rsd) i x y)
-                       (incf i (raw-slot-data-n-words rsd)))))))
+                   (funcall (raw-slot-data-comparer rsd) (dsd-index dsd) x y))))
 \f
 ;;; default PRINT-OBJECT method