1.0.28.65: fix compiling with *PROFILE-HASH-CACHE* set to T
[sbcl.git] / src / compiler / codegen.lisp
index 2eafcda..df6d06a 100644 (file)
@@ -68,7 +68,7 @@
 (defun trace-instruction (segment vop inst args)
   (let ((*standard-output* *compiler-trace-output*))
     (unless (eq *prev-segment* segment)
-      (format t "in the ~A segment:~%" (sb!assem:segment-name segment))
+      (format t "in the ~A segment:~%" (sb!assem:segment-type segment))
       (setf *prev-segment* segment))
     (unless (eq *prev-vop* vop)
       (when vop
 
 (defun init-assembler ()
   (setf *code-segment*
-        (sb!assem:make-segment :name "regular"
+        (sb!assem:make-segment :type :regular
                                :run-scheduler (default-segment-run-scheduler)
                                :inst-hook (default-segment-inst-hook)))
   #!+sb-dyncount
   (setf (sb!assem:segment-collect-dynamic-statistics *code-segment*)
         *collect-dynamic-statistics*)
   (setf *elsewhere*
-        (sb!assem:make-segment :name "elsewhere"
+        (sb!assem:make-segment :type :elsewhere
                                :run-scheduler (default-segment-run-scheduler)
                                :inst-hook (default-segment-inst-hook)))
   (values))
         (when (and (eq (block-info 1block) block)
                    (block-start 1block))
           (sb!assem:assemble (*code-segment*)
+            ;; Align first emitted block of each loop: x86 and x86-64 both
+            ;; like 16 byte alignment, however, since x86 aligns code objects
+            ;; on 8 byte boundaries we cannot guarantee proper loop alignment
+            ;; there (yet.)
+            #!+x86-64
+            (let ((cloop (sb!c::block-loop 1block)))
+              (when (and cloop
+                         (sb!c::loop-tail cloop)
+                         (not (sb!c::loop-info cloop)))
+                (sb!assem:emit-alignment sb!vm:n-lowtag-bits #x90)
+                ;; Mark the loop as aligned by saving the IR1 block aligned.
+                (setf (sb!c::loop-info cloop) 1block)))
             (sb!assem:emit-label (block-label 1block)))
           (let ((env (block-physenv 1block)))
             (unless (eq env prev-env)