Well, that didn't last long. I've discovered a bug in REALPART and IMAGPART for x86/sse2 builds. Here is an example of the bug:
(defun zot-r (z) (declare (type (simple-array (complex double-float) (*)) z)) (realpart (aref z 0)))
(compile 'zot-r)
(let ((z (make-array 1 :element-type '(complex double-float) :initial-element #c(42d0 -42d0)))) (zot-r z))
This returns 0d0 instead of 42d0. If you replace realpart with imagpart, you also get 0d0 instead of -42d0.
This has been fixed in 2010-11 snapshot. For 20b, you can find a patch for this at http://common-lisp.net/project/cmucl/downloads/release/20b/patches/cmucl-20b-patch-000.tar.gz
As usual, download this patch, untar it somewhere. Load cmucl-20b-patch-000.asd, and (asdf:oos 'asdf:load-op :cmucl-20b-patch-000). (Alternatively, you can untar it somewhere where asdf can find the patch-000.asd file.)
Sorry for the trouble,
Ray