The SBCL distribution includes a nice statistical profiler contrib, which is mostly just a straightforward port of Gerd Moellman's work for CMUCL. One of the features that has been added afterwards is integration between the disassembler and the profiler:

[]
;      4C9:       WAIT                        ; 56/1000 samples
;      4CA:       FSTD FR5                    ; 3/1000 samples
;      4CC:       FSTPD FR0                   ; 3/1000 samples
;      4CE:       FLDD FR4                    ; 17/1000 samples
;      4D0:       FMULD FR5                   ; 4/1000 samples
;      4D2:       WAIT                        ; 31/1000 samples
;      4D3:       MOV EAX, [#x9035424]        ; -30d0
                                              ; 12/1000 samples
;      4D9:       FSTPD FR6                   ; 1/1000 samples
[]

This was originally intended to be a cute but completely useless hack, but unfortunately it has actually been of some use every now and then. Here's a second attempt at "cute but useless"; annotation of source code with profiling information:

CL-USER> (sb-sprof::profile-annotate-source #'find-zero-with-test-2*)
(<b>[8/1000</b>
(LAMBDA ()
  (SB-INT:NAMED-LAMBDA FIND-ZERO-WITH-TEST-2* (XK-1 XK EPSILON)
      (DECLARE (TYPE DOUBLE-FLOAT XK-1 XK EPSILON)
	(OPTIMIZE (SPEED 2) (DEBUG 2)))
    (BLOCK FIND-ZERO-WITH-TEST-2*
      (<b>[23/1000]</b>
       (LABELS ((TEST-2 (X)
                  (DECLARE (DOUBLE-FLOAT X))
                  (<b>[23/1000]</b> (+ (<b>[126/1000]</b> (* X X)) -3)))
                (NEXT-X-1 (F XK-1 XK)
                  (DECLARE (DOUBLE-FLOAT XK-1 XK) (IGNORE F))
                  (<b>[2/1000]</b> (/ (<b>[78/1000]</b> (+ XK-1 XK)) 20d0)))
                (FIND-ZERO (F NEXT-X XK-1 XK EPSILON)
                  (<b>[83/1000]</b>
                   (LABELS ((FIND-ZERO-RECURSIVE (XK-1 XK)
                              (<b>[4/1000]</b>
                               (LET ((XK+1
                                      (<b>[30/1000]</b> (FUNCALL NEXT-X F XK-1 XK))))
                                 (IF
                                  (<
                                   (<b>[184/1000]</b>
                                    (ABS (<b>[48/1000]</b> (FUNCALL F XK+1))))
                                   EPSILON)
                                  XK+1
                                  (IF
                                   (<b>[36/1000]</b>
                                    (<
                                     (<b>[18/1000]</b>
                                      (* (<b>[26/1000]</b> (FUNCALL F XK))
                                         (<b>[12/1000]</b> (FUNCALL F XK+1))))
                                     00d0))
                                   (FIND-ZERO-RECURSIVE XK XK+1)
                                   (<b>[29/1000]</b>
                                    (FIND-ZERO-RECURSIVE XK-1 XK+1))))))))
                     (FIND-ZERO-RECURSIVE XK-1 XK)))))
         (DECLARE (INLINE TEST-2 NEXT-X-1 FIND-ZERO))
         (FIND-ZERO #'TEST-2 #'NEXT-X-1 XK-1 XK EPSILON)))))))

As a bonus, the implementation is a really disgusting hack.