;;; -*- Mode:LISP; Package:LAMBDA; Base:8; Readtable:ZL -*- ;;; ;;; (c) Copyright 1984,1985,1986 - Lisp Machine, Inc. ;;; (DECLARE (SPECIAL LAM-SYMBOL-TABLE LAM-FILE-SYMBOLS-LOADED-FROM LAM-UINST-DESC LAM-SYMBOLS-NAME)) ;old slow code .. (DEFUN old-LAM-UCODE-LOADER (MODE FILE-NAME MERGEP &OPTIONAL FILE CRAM-ADR-MAP-LOADED) (cond ((AND (NULL CRAM-ADR-MAP-LOADED) (not (memq mode '(compare load-symbols)))) (format t "~%Loading straight CRAM-ADR-MAP") (FAST-LOAD-STRAIGHT-CRAM-ADR-MAP))) (format t "~%Now processing ULOAD file") ;MODE -> NIL IS REGULAR LOAD (LET (ITM LOAD-WITHOUT-SYMBOLS-FLAG TEM (BASE 8) (IBASE 8) (PACKAGE (PKG-FIND-PACKAGE "LAMBDA"))) (if (not (eq mode 'load-symbols)) (LAM-EXECUTE-W IZERO-GOOD-PARITY T)) ;assure noop cleared, etc ;(SETQ FILE-NAME ; (FS:MERGE-PATHNAME-DEFAULTS ; (OR FILE-NAME "SYS: UBIN; UCADR ULOAD >"))) (COND ((EQ MODE 'LOAD-WITHOUT-SYMBOLS) (SETQ LOAD-WITHOUT-SYMBOLS-FLAG T) (SETQ MODE NIL)) ((EQ MODE 'COMPARE) (SETQ LOAD-WITHOUT-SYMBOLS-FLAG T))) (WITH-OPEN-STREAM (FILE (OR FILE (OPEN FILE-NAME 'IN))) (PROG (CH) L (SETQ CH (FUNCALL FILE ':TYI)) (COND ((MEMQ CH '(#\SPACE #\CR #\LF)) (GO L)) ((EQ CH #/-) (FUNCALL FILE ':UNTYI CH) (GO COM)) ((NOT MODE) (COND ((EQ CH #/I) (WRITE-CRAM-FAST (READ-FIXNUM FILE) (READ-FIXNUM FILE))) ((EQ CH #/D) (LAM-WRITE-A-MEM (READ-FIXNUM FILE) (READ-FIXNUM FILE))) ((EQ CH #/A) (LET ((ADR (READ-FIXNUM FILE))) (IF (< ADR 100) (LAM-WRITE-M-MEM ADR (READ-FIXNUM FILE)) (LAM-WRITE-A-MEM ADR (READ-FIXNUM FILE))))) ((EQ CH #/M) (WRITE-MID (READ-FIXNUM FILE) (READ-FIXNUM FILE))) (T (FERROR NIL "BAD CHAR IN FILE ~S" CH)))) ((EQ MODE 'COMPARE) (LET ((ADR (READ-FIXNUM FILE))) (COND ((EQ CH #/I) (LAM-COMPARE CH ADR (LAM-READ-C-MEM ADR) (READ-FIXNUM FILE))) ((EQ CH #/D) (LAM-COMPARE CH ADR (LAM-READ-A-MEM ADR) (READ-FIXNUM FILE))) ((EQ CH #/A) (LET ((DATA (READ-FIXNUM FILE))) (LAM-COMPARE CH ADR (LAM-READ-A-MEM ADR) DATA) (IF (< ADR 100) (LAM-COMPARE CH ADR (LAM-READ-M-MEM ADR) DATA)))) ((EQ CH #/M) (LAM-COMPARE CH ADR (READ-MID ADR) (READ-FIXNUM FILE))) (T (FERROR NIL "BAD CHAR IN FILE ~S" CH))))) (T (READ-FIXNUM FILE) (READ-FIXNUM FILE))) (GO L) COM(SETQ ITM (READ-FIXNUM FILE)) COM1(COND ((= ITM -1) (RETURN T)) ((= ITM -2) (GO SYMLOD)) ((= ITM -3) (COND ((NOT MODE) ;LOAD MICRO-CODE-SYMBOL AREA (SETQ ITM (LAM-MAIN-MEMORY-LOAD FILE)) (GO COM1)) ((EQ MODE 'COMPARE) (SETQ ITM (LAM-COMPARE-MAIN-MEMORY-LOAD FILE)) (GO COM1)) (T NIL))) ;SKIP TO NEXT NEGATIVE CODE ((= ITM -4) (READ FILE)) ;FLUSH ASSEMBLER STATE INFO (T (FERROR NIL "BAD UCODE COMMAND ~S" ITM))) (DO () ((< (SETQ ITM (READ-FIXNUM FILE)) 0))) (GO COM1) SYMLOD (COND (LOAD-WITHOUT-SYMBOLS-FLAG (RETURN T))) ;LOADING BOOTSTRAP, DONT ;AFFECT CURRENT SYMBOLS. (SETQ LAM-FILE-SYMBOLS-LOADED-FROM NIL) ;In case bomb out or something. (COND ((NOT (AND MERGEP (BOUNDP 'LAM-SYMBOLS-NAME))) (LAM-INITIALIZE-SYMBOL-TABLE T LAM-INITIAL-SYMS))) SYML1 (COND ((NUMBERP (SETQ TEM (READ FILE))) (SETQ ITM TEM) (LAM-END-ADDING-SYMBOLS) (SETQ LAM-FILE-SYMBOLS-LOADED-FROM (FUNCALL FILE ':TRUENAME)) ;So EQ will work later (GO COM1))) (LAM-ADD-TYPED-SYMBOL TEM (READ FILE) (READ-FIXNUM FILE)) (GO SYML1) )))) ;new fast code. if this bombs and you dont feel like hacking it, use old code above. (DEFUN LAM-UCODE-LOADER (MODE FILE-NAME MERGEP &OPTIONAL FILE CRAM-ADR-MAP-LOADED) (cond ((AND (NULL CRAM-ADR-MAP-LOADED) (not (memq mode '(compare load-symbols)))) (format t "~%Loading straight CRAM-ADR-MAP") (FAST-LOAD-STRAIGHT-CRAM-ADR-MAP))) (format t "~%Now processing ULOAD file") ;MODE -> NIL IS REGULAR LOAD (LET (ITM LOAD-WITHOUT-SYMBOLS-FLAG TEM (BASE 8) (IBASE 8) (PACKAGE (PKG-FIND-PACKAGE "LAMBDA"))) (if (not (eq mode 'load-symbols)) (LAM-EXECUTE-W IZERO-GOOD-PARITY T)) ;assure noop cleared, etc ;(SETQ FILE-NAME ; (FS:MERGE-PATHNAME-DEFAULTS ; (OR FILE-NAME "SYS: UBIN; UCADR ULOAD >"))) (COND ((EQ MODE 'LOAD-WITHOUT-SYMBOLS) (SETQ LOAD-WITHOUT-SYMBOLS-FLAG T) (SETQ MODE NIL)) ((EQ MODE 'COMPARE) (SETQ LOAD-WITHOUT-SYMBOLS-FLAG T))) (WITH-OPEN-STREAM (FILE (OR FILE (OPEN FILE-NAME 'IN))) (PROG (CH line idx LINE-LENGTH N1 N2) LL (SETQ LINE (FUNCALL FILE ':LINE-IN) IDX 0 LINE-LENGTH (ARRAY-ACTIVE-LENGTH LINE)) L (COND ((NOT (< IDX LINE-LENGTH)) (GO LL))) (SETQ CH (AREF LINE IDX) IDX (1+ IDX)) (COND ((MEMQ CH '(#\SPACE #\CR #\LF)) (GO L)) ((EQ CH #/-) (SETQ IDX (1- IDX)) (GO COM)) ((NOT MODE) (COND ((EQ CH #/I) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (WRITE-CRAM-FAST-OPTIMIZED N1 N2)) ((EQ CH #/D) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (LAM-WRITE-A-MEM N1 N2)) ((EQ CH #/A) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (LET ((ADR N1)) (IF (< ADR 100) (LAM-WRITE-M-MEM ADR N2) (LAM-WRITE-A-MEM ADR N2)))) ((EQ CH #/M) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (WRITE-MID N1 N2)) (T (FERROR NIL "BAD CHAR IN FILE ~S" CH)))) ((EQ MODE 'COMPARE) (COND ((EQ CH #/I) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (LAM-COMPARE CH N1 (LAM-READ-C-MEM N1) N2)) ((EQ CH #/D) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (LAM-COMPARE CH N1 (LAM-READ-A-MEM N1) N2)) ((EQ CH #/A) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (LET ((ADR N1) (DATA N2)) (LAM-COMPARE CH ADR (LAM-READ-A-MEM ADR) DATA) (IF (< ADR 100) (LAM-COMPARE CH ADR (LAM-READ-M-MEM ADR) DATA)))) ((EQ CH #/M) (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (LAM-COMPARE CH N1 (READ-MID N1) N2)) (T (FERROR NIL "BAD CHAR IN FILE ~S" CH)))) (T (MULTIPLE-VALUE (N1 IDX) (READ-FIXNUM-FAST LINE IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)))) (GO LL) COM(MULTIPLE-VALUE (ITM IDX) (READ-FIXNUM-FAST LINE IDX)) COM1(COND ((= ITM -1) (RETURN T)) ((= ITM -2) (GO SYMLOD)) ((= ITM -3) (COND ((NOT MODE) ;LOAD MICRO-CODE-SYMBOL AREA (SETQ ITM (LAM-MAIN-MEMORY-LOAD FILE)) (GO COM1)) ((EQ MODE 'COMPARE) (SETQ ITM (LAM-COMPARE-MAIN-MEMORY-LOAD FILE)) (GO COM1)) (T NIL))) ;SKIP TO NEXT NEGATIVE CODE ((= ITM -4) (READ FILE)) ;FLUSH ASSEMBLER STATE INFO (T (FERROR NIL "BAD UCODE COMMAND ~S" ITM))) (DO () (()) (SETQ LINE (FUNCALL FILE ':LINE-IN) IDX 0 LINE-LENGTH (ARRAY-ACTIVE-LENGTH LINE)) ;can't call read-fixnum-fast if line is blank (COND ((STRING-SEARCH-NOT-SET '(#\SPACE #\TAB) LINE) (MULTIPLE-VALUE (ITM IDX) (READ-FIXNUM-FAST LINE IDX)) (COND ((< ITM 0) (RETURN)))))) (GO COM1) SYMLOD (COND (LOAD-WITHOUT-SYMBOLS-FLAG (RETURN T))) ;LOADING BOOTSTRAP, DONT ;AFFECT CURRENT SYMBOLS. (SETQ LAM-FILE-SYMBOLS-LOADED-FROM NIL) ;In case bomb out or something. (COND ((NOT (AND MERGEP (BOUNDP 'LAM-SYMBOLS-NAME))) (LAM-INITIALIZE-SYMBOL-TABLE T LAM-INITIAL-SYMS))) SYML1 (SETQ LINE (FUNCALL FILE ':LINE-IN) IDX 0 LINE-LENGTH (ARRAY-ACTIVE-LENGTH LINE)) (COND ((ZEROP LINE-LENGTH) (GO SYML1))) (MULTIPLE-VALUE (TEM IDX) (READ-FROM-STRING LINE NIL IDX)) (COND ((NUMBERP TEM) (SETQ ITM TEM) (LAM-END-ADDING-SYMBOLS) (SETQ LAM-FILE-SYMBOLS-LOADED-FROM (FUNCALL FILE ':TRUENAME)) ;So EQ will work later (GO COM1))) (MULTIPLE-VALUE (N1 IDX) (READ-FROM-STRING LINE NIL IDX)) (MULTIPLE-VALUE (N2 IDX) (READ-FIXNUM-FAST LINE IDX)) (LAM-ADD-TYPED-SYMBOL TEM N1 N2) (GO SYML1) )))) (DEFUN LAM-ADD-TYPED-SYMBOL (SYM TYPE VAL) (COND ((EQ TYPE 'I-MEM) (SETQ VAL (+ VAL RACMO))) ((EQ TYPE 'A-MEM) (SETQ VAL (+ VAL RAAMO))) ((EQ TYPE 'M-MEM) (SETQ VAL (+ VAL RAMMO))) ((EQ TYPE 'D-MEM) (SETQ VAL (+ VAL RADMO))) ((EQ TYPE 'NUMBER)) (T (PRINT (LIST SYM TYPE VAL)) (BREAK "BAD-SYMBOL-TYPE"))) (LAM-ADD-SYMBOL SYM VAL)) ;only wins on LISP machine (DEFUN COMPARE-LMC-FILE (FILE-NAME &optional (memories-to-compare '(A I D MID MAIN-MEM))) (if (null file-name) (setq file-name (lam-ucode-version-from-machine))) (IF (NUMBERP FILE-NAME) (let ((pn (fs:parse-pathname (base-filename-for-version file-name)))) (setq pn (funcall pn ':new-type "LMC")) (setq file-name (funcall pn ':new-version file-name)))) (WITH-OPEN-FILE (STREAM FILE-NAME ':CHARACTERS NIL) (PROG (HCODE LCODE HADR LADR HCOUNT LCOUNT HD LD UDSP-NBLKS UDSP-RELBLK FILE MACH) L0 (SETQ LCODE (FUNCALL STREAM ':TYI) HCODE (FUNCALL STREAM ':TYI)) (COND ((OR (NOT (ZEROP HCODE)) (< LCODE 0) (> LCODE 5)) (FERROR NIL "BAD CODE HCODE=~O LCODE=~O" HCODE LCODE))) (SETQ LADR (FUNCALL STREAM ':TYI) HADR (FUNCALL STREAM ':TYI)) (SETQ LCOUNT (FUNCALL STREAM ':TYI) HCOUNT (FUNCALL STREAM ':TYI)) (COND ((OR (NOT (ZEROP HADR)) (NOT (ZEROP HCOUNT))) (FERROR NIL "BAD HEADER SA ~O,~O COUNT ~O,~O" HADR LADR HCOUNT LCOUNT))) (FORMAT T "~%CODE: ~D, ADR: ~D, COUNT: ~D" LCODE LADR LCOUNT) (COND ((ZEROP LCODE) (COND (UDSP-NBLKS (FUNCALL STREAM ':SET-POINTER (* 2 UDSP-RELBLK SI:PAGE-SIZE)) (DO ((ADR 1400 (1+ ADR)) (FIN (+ 1400 (* UDSP-NBLKS SI:PAGE-SIZE)))) ((= ADR FIN)) (COND ((NOT (= (SETQ MACH (PHYS-MEM-READ ADR)) (SETQ FILE (LET ((LOW (FUNCALL STREAM ':TYI))) (DPB (FUNCALL STREAM ':TYI) 2020 LOW))))) (FORMAT T "~%Main mem adr ~S// file ~S machine ~S" ADR FILE MACH)))))) (CLOSE STREAM) (RETURN T)) ((= LCODE 1) (IF (MEMQ 'I MEMORIES-TO-COMPARE) (GO LI) ;I-MEM (GO IGNORE-I))) ((= LCODE 2) (GO LD)) ;D-MEM ((= LCODE 3) ;HACK MAIN MEMORY LOAD LATER. (SETQ UDSP-NBLKS LADR) (SETQ UDSP-RELBLK LCOUNT) (SETQ LD (FUNCALL STREAM ':TYI) HD (FUNCALL STREAM ':TYI)) ;PHYS MEM ADR (GO L0)) ((= LCODE 4) (GO LA)) ;A-MEM ((= LCODE 5) (IF (MEMQ 'MID MEMORIES-TO-COMPARE) (GO LMID) ;macro-ir-decode memory (GO IGNORE-MID))) (T (FERROR NIL "BAD CODE ~S" LCODE))) LD (COND ((< (SETQ LCOUNT (1- LCOUNT)) 0) (GO L0))) (LAM-COMPARE-UCODE-WD (+ LADR RADMO) (FUNCALL STREAM ':TYI) (FUNCALL STREAM ':TYI) 0 0) (SETQ LADR (1+ LADR)) (GO LD) LA (COND ((< (SETQ LCOUNT (1- LCOUNT)) 0) (GO L0))) (LAM-COMPARE-UCODE-WD (+ LADR RAAMO) (FUNCALL STREAM ':TYI) (FUNCALL STREAM ':TYI) 0 0) (SETQ LADR (1+ LADR)) (GO LA) LI (write-pc ladr) LI0 (COND ((< (SETQ LCOUNT (1- LCOUNT)) 0) (GO L0))) (LET ((W1 (FUNCALL STREAM ':TYI)) (W2 (FUNCALL STREAM ':TYI)) (W3 (FUNCALL STREAM ':TYI)) (W4 (FUNCALL STREAM ':TYI)) (RD0 (READ-LOW-CRAM)) (RD1 (READ-HIGH-CRAM))) (COND ((OR (NOT (= W1 (LDB 0020 RD0))) (NOT (= W2 (LDB 2020 RD0))) (NOT (= W3 (LDB 0020 RD1))) (NOT (= W4 (LDB 2020 RD1)))) (let ((page (read-cram-adr-map (ash ladr -4)))) (cond ((= page micro-fault-page)) ((= page (ash ladr -4)) (FORMAT T "~%FAST MISCOMPARE") (LAM-COMPARE-UCODE-WD (+ LADR RACMO) W1 W2 W3 W4)) (t (format t "~%CRAM-ADR-MAP @~o is ~s, should be straight map" (ash ladr -4) page)))) (write-pc ladr)))) ;get back into phase. (LAM-EXECUTE-UINST-CLOCK-PLUS-UINST-CLOCK-LOW IZERO-GOOD-PARITY T) (SETQ LADR (1+ LADR)) (GO LI0) IGNORE-I (COND ((< (SETQ LCOUNT (1- LCOUNT)) 0) (GO L0))) (FUNCALL STREAM ':TYI) (FUNCALL STREAM ':TYI) (FUNCALL STREAM ':TYI) (FUNCALL STREAM ':TYI) (SETQ LADR (1+ LADR)) (GO IGNORE-I) LMID(COND ((< (SETQ LCOUNT (1- LCOUNT)) 0) (GO L0))) (LAM-COMPARE-UCODE-WD (+ LADR RAMIDO) (FUNCALL STREAM ':TYI) (FUNCALL STREAM ':TYI) 0 0) (SETQ LADR (1+ LADR)) (GO LMID) IGNORE-MID (COND ((< (SETQ LCOUNT (1- LCOUNT)) 0) (GO L0))) (FUNCALL STREAM ':TYI) (FUNCALL STREAM ':TYI) (SETQ LADR (1+ LADR)) (GO IGNORE-MID) ))) (DEFUN LAM-COMPARE-UCODE-WD (REG-ADR WD1 WD2 WD3 WD4) (DECLARE (FIXNUM REG-ADR)) (PROG (RD1 RD2 RD3 RD4 FILE-WD MACHINE-WD) (DECLARE (FIXNUM RD1 RD2 RD3)) (SETQ MACHINE-WD (LAM-REGISTER-EXAMINE REG-ADR)) (SETQ RD1 (LOGLDB 0020 MACHINE-WD) RD2 (LOGLDB 2020 MACHINE-WD) RD3 (LOGLDB 4020 MACHINE-WD) RD4 (LOGLDB 6020 MACHINE-WD)) (COND ((AND (NOT (AND (= WD1 RD1) (= WD2 RD2) (= WD3 RD3) (= WD4 RD4))) ;IF DOESN'T MATCH (NOT (AND (= WD1 0) (= WD2 0) (= WD3 0) (= WD4 0)))) ;AND NOT LOADED ZERO ; WHICH WOULD PROBABLY BE A ; VARIABLE WHICH IS OK TO CHANGE (TERPRI) (LAM-PRINT-ADDRESS REG-ADR) (FORMAT T " FILE ") (SETQ FILE-WD (LOGDPB WD4 6020 (LOGDPB WD3 4020 (LOGDPB WD2 2020 WD1)))) (PRIN1-THEN-SPACE FILE-WD) (AND (< REG-ADR RACME) (LAM-TYPE-OUT FILE-WD LAM-UINST-DESC T T)) (FORMAT T "~%ADR: ") (LAM-PRINT-ADDRESS REG-ADR T) (FORMAT T " MACHINE ") (PRIN1-THEN-SPACE MACHINE-WD) (AND (< REG-ADR RACME) (LAM-TYPE-OUT MACHINE-WD LAM-UINST-DESC T T)) (FORMAT T "~%BITS: ") (PRINT-BITS (LOGXOR FILE-WD MACHINE-WD)) (PRINT '-----)))) (COND ((AND (NOT (< REG-ADR RAAMO)) ;if loading low A, also check M (< REG-ADR (+ 100 RAAMO))) (LAM-COMPARE-UCODE-WD (+ (- REG-ADR RAAMO) RAMMO) WD1 WD2 WD3 WD4)))) (DEFUN LAM-MAIN-MEMORY-LOAD (FILE) (PROG (ADR ITM) (DECLARE (FIXNUM ADR ITM)) (SETQ ADR (READ-FIXNUM FILE)) L (COND ((< (SETQ ITM (READ-FIXNUM FILE)) 0) (RETURN ITM))) (PHYS-MEM-WRITE ADR ITM) (SETQ ADR (1+ ADR)) (GO L))) (DEFUN LAM-COMPARE (MEMORY-CODE LOCATION MACHINE FILE) (COND ((NOT (= FILE MACHINE)) (FORMAT T "~%MISCOMPARE: MEMORY ~C, LOCATION ~S, FILE ~S, MACHINE ~S, BITS " MEMORY-CODE LOCATION FILE MACHINE) (PRINT-BITS (LOGXOR FILE MACHINE))))) (DEFUN LAM-COMPARE-MAIN-MEMORY-LOAD (FILE) (PROG (ADR ITM TEM) (DECLARE (FIXNUM ADR ITM TEM)) (SETQ ADR (READ-FIXNUM FILE)) L (COND ((< (SETQ ITM (READ-FIXNUM FILE)) 0) (RETURN ITM))) (COND ((NOT (= ITM (SETQ TEM (PHYS-MEM-READ ADR)))) (FORMAT T "~%MAIN MEM ADR ~S, FILE ~S, MACHINE ~S" ADR ITM TEM))) (SETQ ADR (1+ ADR)) (GO L))) (DEFUN READ-FIXNUM (FILE) ;HOPEFULLY FAST NUMBER-ONLY READER (PROG (CH NUM SGN) (SETQ NUM 0 SGN 1) A (IF (OR (< (SETQ CH (TYI FILE)) 41) ;IGNORE LEADING GARBAGE (> CH 177)) (GO A)) (COND ((= CH #/-) (SETQ SGN -1)) (T (GO C))) B (SETQ CH (TYI FILE)) C (COND ((= CH #/_) (RETURN (* SGN (ASH NUM (READ-FIXNUM FILE))))) ((AND (>= CH #/0) (<= CH #/7)) (SETQ NUM (+ (ASH NUM 3) (- CH #/0))) (GO B)) ((> CH 40) (FERROR nil "NON-OCTAL-NUMBER-CHAR-IN-READ-FIXNUM" CH))) (RETURN (* SGN NUM)))) (DEFUN READ-FIXNUM-FAST (LINE IDX) ;HOPEFULLY FAST NUMBER-ONLY READER (PROG (CH NUM SGN) (SETQ NUM 0) A (SETQ CH (AREF LINE IDX) IDX (1+ IDX)) (IF (OR (< CH 41) ;IGNORE LEADING GARBAGE (> CH 177)) (GO A)) (COND ((= CH #/-) (SETQ SGN T)) (T (GO C))) B (SETQ CH (AREF LINE IDX) IDX (1+ IDX)) C (COND ((= CH #/_) (MULTIPLE-VALUE (CH IDX) (READ-FIXNUM-FAST LINE IDX)) (RETURN (values (ASH (COND (SGN (MINUS NUM)) (T NUM)) CH) IDX))) ((AND (>= CH #/0) (<= CH #/7)) (SETQ NUM (+ (ASH NUM 3) (- CH #/0))) (GO B)) ((> CH 40) (FERROR nil "non-octal CHAR-IN-READ-FIXNUM" ch))) (RETURN (values (COND (SGN (MINUS NUM)) (T NUM)) IDX)))) ;; Copied from LAD: RELEASE-3.LAMBDA-DIAG; LAM.LISP#91 on 2-Oct-86 17:53:24 (ADD-INITIALIZATION "Assure LAM Symbols Loaded" '(ASSURE-LAM-SYMBOLS-LOADED (not si:*in-cold-load-p*)) '(:BEFORE-COLD :NOW)) (net:move-initialization si:before-cold-initialization-list "Deconfigure Network System" "Assure LAM Symbols Loaded") (ADD-INITIALIZATION "Assure LAM Symbols Loaded" '(ASSURE-LAM-SYMBOLS-LOADED (not si:*in-cold-load-p*)) '(:head-of-list :gc-system-release)) (defun maybe-remove-extra-lam-symbol-tables () (when lam-file-symbols-loaded-from (let ((extras (cl:remove lam-file-symbols-loaded-from lam-symbol-tables-loaded :key #'car))) (when extras (when (format:y-or-n-p-with-timeout 1800. t "Current LAM symbols are for version ~D, but extra versions also loaded: ~{~D~^, ~}~%~ Remove extras? " (send lam-file-symbols-loaded-from :version) (mapcar #'(lambda (elt) (send (car elt) :version)) extras)) (setq lam-symbol-tables-loaded (cl:remove-if #'(lambda (elt) (member elt extras)) lam-symbol-tables-loaded))))))) (add-initialization "Maybe Remove Extra LAM Symbols" '(maybe-remove-extra-lam-symbol-tables) '(:gc-system-release))