;;; -*- Mode: Lisp; Package: Lambda; Base: 8 -*- ;;; ;;; (c) Copyright 1984,85 - Lisp Machine, Inc. ;;; ;this file used by both diagnostics and lambda ucode assembler ;NOTE!!! ; symbols with exactly the same names (and different values!) ;are defined in EXPSYM. It is very important that the two files correspond ;exactly variable for variable!! ;MAKE SYMBOLS AVAILABLE AT BOTH COMPILE TIME & RUN TIME ;AND DECLARE THEM SPECIAL ;(DEFUN DEFINE-SYMBOL MACRO (X) ; (SETQ X ; (DO ((LIST (CADR X) (CDDR LIST)) ; (SYM-LIST NIL)) ; ((NULL LIST) ; `(PROGN 'COMPILE ; (SETQ . ,(CADR X)) ; (SPECIAL . ,SYM-LIST) ; (MAPC (FUNCTION (LAMBDA (X) (PUTPROP X T 'CONSTANT))) ; ',SYM-LIST)) ) ; (PUSH (CAR LIST) SYM-LIST))) ; (EVAL X) ; X) (defun setup-ucode-symbols (sym-list) (do ((tail sym-list (cddr tail))) ((null tail)) (putprop (car tail) t 'special) (putprop (car tail) t 'constant) (export (car tail)) (set (car tail) (eval (cadr tail))))) (defconst lambda-symbols '( ;IR FIELDS LAM-IR-OP (byte 2 30.) LAM-OP-ALU 0 ;ASSUMED 0 AND OMITTED IN MANY PLACES FOR BREVITY LAM-OP-BYTE 1 LAM-OP-JUMP 2 LAM-OP-DISPATCH 3 LAM-IR-POPJ-AFTER-NEXT (byte 1 51.) LAM-IR-MACRO-IR-DISPATCH (BYTE 1 52.) LAM-IR-SOURCE-TO-MACRO-IR (BYTE 1 53.) LAM-IR-MACRO-STREAM-ADVANCE (BYTE 1 54.) LAM-IR-SLOW-DEST (BYTE 1 55.) LAM-IR-ILONG (byte 1 56.) LAM-IR-STAT-BIT (byte 1 57.) LAM-IR-CLOBBERS-MEM-SUBR-BIT (byte 1 58.) ;Formerly spare, see below. LAM-IR-SPARE-BIT (byte 1 58.) ;For compatibility with old ucode, not spare now. LAM-IR-HALT (BYTE 1. 59.) LAM-IR-HIGH-INDIVIDUAL-BITS (BYTE 9 51.) ;assembler combines these with IOR not +. LAM-IR-PARITY-FIELD (BYTE 4. 60.) LAM-IR-A-SRC (byte 12. 39.) LAM-IR-M-SRC (byte 7 32.) LAM-FUNC-SRC-INDICATOR 100 ;ADD IN FOR FUNCTIONAL SOURCES LAM-IR-FUNC-SRC-FLAG (BYTE 1 38.) LAM-IR-FUNC-SRC-AUX (BYTE 1 37.) ;(Notice most of these sources don't LAM-IR-M-SRC-ADR (BYTE 6 32.) ; care if SRC-AUX is on or not...) LAM-M-SRC-INTERRUPT-POINTER 100 LAM-M-SRC-MACRO.IR.DISPLACEMENT 101 LAM-M-SRC-STAT-COUNTER 102 LAM-M-SRC-STAT-COUNTER-AUX 142 LAM-M-SRC-MACRO.IR 103 LAM-M-SRC-MACRO.IR.DECODE.RAM 104 LAM-M-SRC-MID 104 ;if enable-misc-mid is set, this will ref the MISC decode ; portion only if MACRO-IR has a MISC and its destination field ; (bits 14,15) is 0. LAM-M-SRC-MID-MISC 144 ;always ref MISC-decode portion of MID if macro-ir has a MISC ; inst (if enable-misc-mid is set). LAM-M-SRC-SPY-REG 105 LAM-M-SRC-MULTIPLIER 146 LAM-M-SRC-MULTIPLIER-FT 106 LAM-M-SRC-RG-MODE 107 LAM-M-SRC-DISP-CONST 110 LAM-M-SRC-MICRO-STACK 111 ;USP BITS 31-24, US BITS 18-0 LAM-M-SRC-MICRO-STACK-POP 112 ;SAME AS MICRO-STACK, BUT ALSO POPS USP LAM-M-SRC-CRAM-ADR-MAP 113 LAM-M-SRC-CACHE-ADDRESS 120 ;flush?? LAM-M-SRC-MD-NO-HOLD 121 LAM-M-SRC-MD 161 LAM-M-SRC-VMA 122 LAM-M-SRC-L1-MAP 123 LAM-M-SRC-L2-MAP-CONTROL 124 LAM-M-SRC-L2-MAP-PHYSICAL-PAGE 125 LAM-M-SRC-LC 126 LAM-M-SRC-PDL-BUFFER-INDEX 130 ;prefer spelled out names for PI, etc LAM-M-SRC-PI 130 LAM-M-SRC-Q 131 LAM-M-SRC-PDL-BUFFER-POINTER 132 LAM-M-SRC-PP 132 LAM-M-SRC-DP-MODE 135 LAM-M-SRC-C-PDL-BUFFER-POINTER 176 ;NOTE THAT C-PP AND C-PP-POP ARE ON AT LAM-M-SRC-C-PP 176 ;THE SAME TIME IF WE WANT A C-PP-POP LAM-M-SRC-C-PDL-BUFFER-POINTER-POP 136 LAM-M-SRC-C-PP-POP 136 LAM-M-SRC-C-PDL-BUFFER-INDEX 137 LAM-M-SRC-C-PI 137 ; LAM-MAP-PFR-BIT 1_30. ; LAM-MAP-PFW-BIT 1_31. LAM-US-POINTER-BYTE (BYTE 8 24.) LAM-US-DATA-BYTE (BYTE 21. 0) LAM-US-PC (BYTE 16. 0) LAM-US-ADI (BYTE 2 16.) LAM-US-TOP-LEVEL-FLAG (BYTE 1 18.) LAM-IR-DEST (BYTE 13. 14.) LAM-IR-A-MEM-DEST-FLAG (BYTE 1 26.) LAM-IR-A-MEM-DEST (BYTE 12. 14.) LAM-A-MEM-DEST-INDICATOR 10000 ;ADD THIS TO A MEM ADDRESS LAM-IR-M-MEM-DEST (BYTE 6 14.) LAM-IR-FUNC-DEST (BYTE 6 20.) LAM-IR-FUNC-DEST-AUX-FLAG (BYTE 1 25.) LAM-FUNC-DEST-LC 1 LAM-FUNC-DEST-RG-MODE 42 LAM-FUNC-DEST-INT-CONTROL 42 ;for compatibility LAM-FUNC-DEST-DP-MODE 2 LAM-FUNC-DEST-INTERRUPT-CLEAR 41 LAM-FUNC-DEST-STAT-COUNTER 44 ;silly, but DEST AUX selects the main stat LAM-FUNC-DEST-STAT-COUNTER-AUX 4 ;counter, but SRC AUX selects the aux LAM-FUNC-DEST-MID 5 ;REMEMBER, SLOW-DEST MUST BE SET FOR THIS TO WORK LAM-FUNC-DEST-MACRO.IR.DECODE.RAM 5 LAM-FUNC-DEST-CRAM-HIGH 6 ;REMEMBER, SLOW-DEST MUST BE SET FOR THIS TO WORK LAM-FUNC-DEST-CRAM-LOW 7 ;REMEMBER, SLOW-DEST MUST BE SET FOR THIS TO WORK LAM-FUNC-DEST-C-PDL-BUFFER-POINTER 10 ;prefer spelled out names LAM-FUNC-DEST-C-PP 10 LAM-FUNC-DEST-C-PDL-BUFFER-POINTER-PUSH 11 LAM-FUNC-DEST-C-PP-PUSH 11 ;Push, PDL pointer, push! LAM-FUNC-DEST-C-PDL-BUFFER-INDEX 12 LAM-FUNC-DEST-C-PI 12 LAM-FUNC-DEST-PDL-BUFFER-INDEX 53 LAM-FUNC-DEST-PI 53 LAM-FUNC-DEST-PDL-BUFFER-POINTER 13 LAM-FUNC-DEST-PP 13 LAM-FUNC-DEST-MICRO-STACK-PUSH 15 LAM-FUNC-DEST-IMOD-LOW 16 LAM-FUNC-DEST-IMOD-HIGH 17 LAM-FUNC-DEST-VMA 20 LAM-FUNC-DEST-VMA-START-READ 21 LAM-FUNC-DEST-VMA-START-READ-FORCE 61 LAM-FUNC-DEST-VMA-START-WRITE 22 LAM-FUNC-DEST-VMA-START-WRITE-FORCE 62 LAM-FUNC-DEST-L1-MAP 23 ;REMEMBER, SLOW-DEST MUST BE SET FOR THIS TO WORK LAM-FUNC-DEST-L2-MAP-CONTROL 24 ;REMEMBER, SLOW-DEST MUST BE SET FOR THIS TO WORK LAM-FUNC-DEST-L2-MAP-PHYSICAL-PAGE 64;REMEMBER, SLOW-DEST MUST BE SET FOR THIS TO WORK LAM-FUNC-DEST-CRAM-MAP 26 ;WWII. SLOW-DEST MUST BE SET FOR THIS TO WORK LAM-FUNC-DEST-MD 30 LAM-FUNC-DEST-MD-START-READ 31 LAM-FUNC-DEST-MD-START-READ-FORCE 71 LAM-FUNC-DEST-MD-START-WRITE 32 LAM-FUNC-DEST-MD-START-WRITE-FORCE 72 LAM-FUNC-DEST-C-PDL-INDEX-INC 33 LAM-FUNC-DEST-MICRO-STACK-DATA 34 LAM-FUNC-DEST-MICRO-STACK-POINTER-IF-POP 35 ;COMPLICATED. "Works" only on POP LAM-FUNC-DEST-C-PDL-INDEX-DEC 36 LAM-FUNC-DEST-MULTIPLIER 37 LAM-IR-OB (BYTE 3 9.) ;note bit 2 of this field conditions sel.0 of the output selector LAM-OB-MSK 0 ;DEPENDS ON THIS =0 FOR BREVITY LAM-OB-ALU 1 ;2 on selector LAM-OB-ALU-RIGHT-1 2 ;4 on selector LAM-OB-ALU-LEFT-1 6 ;5 on selector LAM-OB-ALU-EXTEND-25 3 ;6 on selector LAM-OB-ALU-MIRROR 7 ;7 on selector lam-ir-ob-control-2 (byte 1 11.) ;this bit goes to masker prom on alu's, allowing access ;to masked add hacks, etc. lam-ir-ob-control-bussed (byte 2 9.) ;these bits are always bussed to all output selectors. LAM-IR-MF (BYTE 2 12.) ;MISCELLANEOUS FUNCTION ; LAM-MF-HALT 1 LAM-IR-ALUF-ONLY (BYTE 6 3) LAM-IR-ALUF (BYTE 7 2) ;INCLUDING CARRY LAM-ALU-SETZ 0_1 LAM-ALU-AND 1_1 lam-alu-andca 2_1 LAM-ALU-AND-25 41_1 LAM-ALU-SETM 3_1 LAM-ALU-SETA 5_1 LAM-ALU-XOR 6_1 LAM-ALU-XOR-25 46_1 LAM-ALU-IOR 7_1 LAM-ALU-IOR-25 47_1 LAM-ALU-SETO 17_1 LAM-ALU-SUB 55 ;includes ALU-CARRY-IN-ONE LAM-ALU-SUB-25 155 LAM-ALU-ADD 31_1 LAM-ALU-ADD-25 71_1 LAM-ALU-M+A+1 63 LAM-ALU-M+M 37_1 LAM-ALU-M+M+1 77 ;includes ALU-CARRY-IN-ONE LAM-ALU-M+1 71 ;includes ALU-CARRY-IN-ONE LAM-ALU-M-A-1 26_1 LAM-ALU-MSTEP 20_1 LAM-ALU-MSTEP-LAST 21_1 LAM-ALU-DFSTEP 22_1 ;** slow destination required to allow divisor sign to load. LAM-ALU-DSTEP 23_1 LAM-ALU-RSTEP 24_1 ;100 bit, (bit 8 in uinst.) feeds MASKER proms on ALU inst, which, if set, selects: ; alu.output.bus.control.2 =0, bits 31-25 ->1, 24-0-> 0. ie, if alu.output.bus.control.1 ; =0 and alu.output.bus.control.0=1 (normal case), then data type bits come from ; A source, pointer bits from ALU. ; alu.output.bus.control.2 =1, lam-ir-alu-control-5 (byte 1 8) ;participates in masked-add selection lam-ir-real-aluf (byte 6 2) ;rest of alu-control LAM-IR-CARRY (BYTE 1 2) LAM-IR-Q (BYTE 2 0) LAM-Q-LEFT 1 LAM-Q-RIGHT 2 LAM-Q-LOAD 3 LAM-IR-DISP-ENABLE-META (BYTE 2 28.) ;enable bits from map. lam-ir-disp-enable-gc-write-test-meta (byte 1 28.) lam-ir-disp-enable-oldspace-meta (byte 1 29.) LAM-IR-DISP-WRITE-VMA (BYTE 1 27.) LAM-IR-DISP-LPC (BYTE 1 26.) ;"decrement" return address on call lam-ir-push-own-address (byte 1 26.) ;more modern name for above. ; LAM-IR-DISP-ADVANCE-INSTRUCTION-STREAM 3001 ; LAM-IR-DISP-LAMT 4012 LAM-IR-DISP-DISPATCH-CONSTANT (BYTE 12. 14.) LAM-IR-DISP-ADDR (BYTE 12. 39.) LAM-IR-DISPATCH-ADDR (BYTE 12. 39.) LAM-IR-BYTL-1 (BYTE 6 6) LAM-IR-DISP-BYTL (BYTE 5 6) LAM-IR-MROT (BYTE 6 0) LAM-IR-JUMP-ADDR (BYTE 16. 14.) LAM-IR-JUMP-PAGE-NUMBER-IN-ADR (BYTE 12. 18.) LAM-IR-JUMP-COND (BYTE 8. 0) LAM-IR-JUMP-INVERT-CONDITION (BYTE 1 7) LAM-IR-JUMP-TEST-CONDITION (BYTE 1 6) LAM-IR-JUMP-COND-LOW (BYTE 4 0) LAM-JUMP-COND-BIT-SET 100 LAM-JUMP-COND-BIT-CLEAR 300 LAM-JUMP-COND-M=A 301 LAM-JUMP-COND-M>A 302 LAM-JUMP-COND-M-NEQ-A 103 ;inverted from cadr LAM-JUMP-COND-NO-PAGE-FAULT 104 ;inverted from cadr LAM-JUMP-COND-DATA-TYPE-NOT-EQUAL 111 LAM-JUMP-COND-DATA-TYPE-EQUAL 311 lam-ir-bit-test (byte 1 7) lam-jump-if-bit-set 0 lam-jump-if-bit-clear 1 LAM-IR-JUMP-LC-INCREMENT (BYTE 1 11.) LAM-IR-R (BYTE 1 10.) LAM-IR-P (BYTE 1 9.) LAM-IR-JUMP-CALL-RETURN (BYTE 2 9.) LAM-IR-JUMP-COND-BITS (BYTE 9. 0) ;ALL JUMP CONDITIONAL BITS INCLUDING N BIT. LAM-IR-N (BYTE 1 8.) LAM-IR-RPN (BYTE 3 8.) LAM-IR-BYTE-FUNC (BYTE 2 28.) LAM-BYTE-FUNC-LDB 1 ;rotate source LAM-BYTE-FUNC-SELECTIVE-DEPOSIT 2 ;rotate mask LAM-BYTE-FUNC-DPB 3 ;rotate both LAM-IR-BYTE-SR (BYTE 1 28.) LAM-IR-BYTE-MR (BYTE 1 29.) lam-ir-uinst-29 (byte 1 29.) ;in alu inst, this same bit allows q-control bits ;to reach masker proms, allowing access to masked-add hacks. LAM-BYTE-SPEC (BYTE 12. 0) LAM-IR-BYTE-LENGTH-SPEC (BYTE 6 6) ;ACTUAL BYTE LENGTH IS THIS +1. LAM-IR-M-ROTATE (BYTE 6 0) ;DISPATCH MEMORY BITS LAM-DISP-START-MEM-READ-BIT (byte 1 19.) LAM-DISP-R-BIT (BYTE 1 18.) LAM-DISP-P-BIT (BYTE 1 17.) LAM-DISP-N-BIT (BYTE 1 16.) LAM-DISP-RPN-BITS (BYTE 3 16.) lam-disp-pc-bits (byte 16. 0) ;half half lam-ir-pred-write (byte 1 63.) lam-ir-tag-control (byte 3 60.) )) ;these can appear in the source or destination and are directly substituted into the INST. (DEFUN LAM-IR-DIRECT-BITS () (DPB 1 LAM-IR-SLOW-DEST (DPB 1 LAM-IR-ILONG (DPB 1 LAM-IR-CLOBBERS-MEM-SUBR-BIT 0)))) (setup-ucode-symbols lambda-symbols)