;;; -*- Mode:LISP; Package:LAMBDA; Base:10 -*- (defun dump-ass (&optional &key filename (processor :lambda)) (or filename (setq filename (format nil "SYS:ULAMBDA;~A-MICROCODE QFASL >" processor))) (or (= (length *files-comprising-this-microcode*) (length (subset #'(lambda (x) (not (string-equal "UCODE" (send x :name)))) (si:system-source-files :lambda-ucode)))) (ferror nil "inconsistent assembly state")) (let ((l *files-comprising-this-microcode*) (forms) (sexp-key (ecase processor (:LAMBDA 'UA-LAMBDA-SEXP) (:EXPLORER 'UA-EXPLORER-SEXP))) (defmic-key (ecase processor (:LAMBDA 'LAMBDA-DEFMICS) (:EXPLORER 'EXPLORER-DEFMICS)))) (dolist (f l) (let ((sexp (send f :get sexp-key)) (defmic (send f :get defmic-key))) (or sexp (ferror nil "File ~A has no ~S property" f sexp-key)) (push `(funcall ',f :putprop ',sexp ',sexp-key) forms) (push `(funcall ',f :putprop ',defmic ',defmic-key) forms))) (let ((time (time))) (format t "~&Dumping data to ~A" filename) (COMPILER:DUMP-FORMS-TO-FILE filename forms '(:package :lam)) (setq time (quotient (time-difference (time) time) 60.0)) (format t " took ~\scientific\seconds.~%" time) filename)))