(defun mdfss ;;multiply-double-floats-setting-post-status (a b status) (declare (double-float a b) (type (simple-array (unsigned-byte 32)) status) (optimize (speed 3)(safety 0))) (fclex); clear exceptions (prog1 (* a b) (fstsw status) ;;; store 16 bits of status register into a word-aligned 16 bits )) (defun mdfc ;;multiply-double-floats-with-control-word (a b cw) ;; cw is the word set into fp control, e.g. rounding mode (declare (double-float a b) (type (simple-array (unsigned-byte 32)) cw) (optimize (speed 3)(safety 0))) (fldcw cw) ; set control word (* a b)) ;; maybe saving/restoriing old cw would be polite (defparameter stat (make-array 1 :element-type '(unsigned-byte 32))) ;;(setq comp::*hack-compiler-output* '(mdfc)) ;; edit the file ;; :cont ;;(setq comp::*hack-compiler-output* nil)