;;; -*- Mode:LISP; Package:LAMBDA; Base:8 -*-
;;;
;;; (c) Copyright 1984,85 - Lisp Machine, Inc.
;;;

;NOTE!!!
;  symbols with exactly the same names (and different values!)
;are defined in LAMSYM.  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 setup-raven-symbols (sym-list)
  (do ((tail sym-list (cddr tail)))
      ((null tail))
    (putprop (car tail) t 'special)
    (putprop (car tail) t 'constant)
    (set (car tail) (eval (cadr tail)))))

    
(defconst raven-symbols
  '(
    ;; IR Fields
    RAV-IR-OP  (Byte 2. 54.)
      RAV-OP-ALU 0
      RAV-OP-BYTE 1
      RAV-OP-JUMP 2
      RAV-OP-DISPATCH 3
    RAV-IR-A-SRC  (Byte 10. 32.)
    RAV-IR-M-SRC  (Byte 7. 42.)
    rav-ir-m-src-adr (byte 6 42.)
      RAV-FUNC-SRC-INDICATOR 100
      rav-IR-FUNC-SRC-FLAG (byte 1 48. )
      RAV-M-SRC-VMA 100
      RAV-M-SRC-Q 101
      RAV-M-SRC-MACRO.IR.DISPLACEMENT 102
      RAV-M-SRC-MICRO-STACK-POINTER 103		;aligned to right
      RAV-M-SRC-MCR 104
      RAV-M-SRC-LC 105
      RAV-M-SRC-L2-MAP-PHYSICAL-PAGE 106
      RAV-M-SRC-DISP-CONSTANT 107
      RAV-M-SRC-L1-MAP 110
      RAV-M-SRC-L2-MAP-CONTROL 111
      RAV-M-SRC-MACRO.IR 112
      RAV-M-SRC-MACRO.IR.BRANCH.OFFSET 113

      RAV-M-SRC-MICRO-STACK 120
      RAV-M-SRC-MICRO-STACK-DATA 120
      RAV-M-SRC-MICRO-STACK-POP 121
      RAV-M-SRC-MICRO-STACK-DATA-POP 121
      RAV-M-SRC-MD 122

      RAV-M-SRC-C-PDL-BUFFER-POINTER 140
      RAV-M-SRC-C-PDL-BUFFER-INDEX 141

      RAV-M-SRC-C-PDL-BUFFER-POINTER-POP 144
      RAV-M-SRC-C-PDL-BUFFER-INDEX-DEC 145

      RAV-M-SRC-PDL-BUFFER-POINTER 150
      RAV-M-SRC-PDL-BUFFER-INDEX 151

      RAV-M-SRC-PDL-BUFFER-POINTER-POP 154
      RAV-M-SRC-PDL-BUFFER-INDEX-DEC 155

    RAV-IR-DEST (Byte 13. 19.)
    RAV-ir-A-MEM-DEST-flag (byte 1 31.)
    rav-ir-a-mem-dest (byte 12. 19.)
    RAV-IR-M-MEM-DEST (Byte 6. 19.)
    RAV-IR-OB  (BYTE 3. 16.)
      RAV-OB-A-BUS 0
      RAV-OB-R-BUS 1
      RAV-OB-A-BUS2 2
      RAV-OB-ALU 3
      RAV-OB-LEFT-1 4
      RAV-OB-RIGHT-1 5
      RAV-OB-EXTEND-25 6
      RAV-OB-MIRROR 7
    rav-ir-typed-alu-mode (byte 1 8)
    rav-ir-carry (byte 1 2)
    RAV-IR-ALUF-only  (BYTE 5. 3.)
    rav-ir-aluf (byte 6 2)
      RAV-ALU-SETZ 0_1
      RAV-ALU-AND 1_1
      RAV-ALU-ANDCA 2_1
      RAV-ALU-SETM 3_1
      RAV-ALU-ANDCM 4_1
      RAV-ALU-SETA 5_1
      RAV-ALU-XOR 6_1
      RAV-ALU-IOR 7_1
      RAV-ALU-ANDCB 10_1
      RAV-ALU-EQV 11_1
      RAV-ALU-SETCA 12_1
      RAV-ALU-ORCA 13_1
      RAV-ALU-SETCM 14_1
      RAV-ALU-ORCM 15_1
      RAV-ALU-ORCB 16_1
      RAV-ALU-SETO 17_1
      RAV-ALU-ADD 31_1
      RAV-ALU-SUB 36_1
      RAV-ALU-M+M 37_1
      RAV-ALU-M+ 34_1
      RAV-ALU-MUL 20_1
      RAV-ALU-MUL-LAST 21_1
      RAV-ALU-DIV 22_1
      RAV-ALU-DIV-LAST 22_1
      RAV-ALU-DIV-FIRST 23_1
      RAV-ALU-DIV-CORR 24_1
    RAV-IR-Q  (BYTE 2. 0.)
      RAV-Q-NOP 0
      RAV-Q-LEFT 1
      RAV-Q-RIGHT 2
      RAV-Q-LOAD 3

    RAV-IR-FUNC-DEST (Byte 6. 25.)
      RAV-FUNC-DEST-LC 1
      RAV-FUNC-DEST-MCR 2
      RAV-FUNC-DEST-MICRO-STACK-POINTER 3
      RAV-FUNC-DEST-MICRO-STACK-DATA 4
      RAV-FUNC-DEST-MICRO-STACK-DATA-PUSH 5
      RAV-FUNC-DEST-MICRO-STACK-PUSH 5
      RAV-FUNC-DEST-IMOD-LOW 6
      RAV-FUNC-DEST-IMOD-HIGH 7
      RAV-FUNC-DEST-MACRO.IR 10

      RAV-FUNC-DEST-TEST-SYNCH 17

      RAV-FUNC-DEST-VMA 20
      RAV-FUNC-DEST-VMA-WRITE-L1 21		;map addressed by MD, data in VMA
      RAV-FUNC-DEST-VMA-WRITE-L2-MAP-CONTROL 22
      RAV-FUNC-DEST-VMA-WRITE-L2-MAP-PHYSICAL-PAGE 23
      RAV-FUNC-DEST-VMA-START-READ 24
      RAV-FUNC-DEST-VMA-START-WRITE 25
      RAV-FUNC-DEST-VMA-START-UNMAPPED-READ 26
      RAV-FUNC-DEST-VMA-START-UNMAPPED-WRITE 27

      RAV-FUNC-DEST-MD 30
      RAV-FUNC-DEST-MD-WRITE-L1 31		;??
      RAV-FUNC-DEST-MD-WRITE-L2-CONTROL 32
      RAV-FUNC-DEST-MD-WRITE-L2-PHYSICAL-PAGE 33
      RAV-FUNC-DEST-MD-START-READ 34
      RAV-FUNC-DEST-MD-START-WRITE 35
      RAV-FUNC-DEST-MD-START-UNMAPPED-READ 36
      RAV-FUNC-DEST-MD-START-UNMAPPED-WRITE 37

      RAV-FUNC-DEST-C-PDL-BUFFER-POINTER 40
      RAV-FUNC-DEST-C-PDL-BUFFER-INDEX 41
      RAV-FUNC-DEST-C-PDL-BUFFER-POINTER-PUSH 44
      RAV-FUNC-DEST-C-PDL-BUFFER-INDEX-INC 45

      RAV-FUNC-DEST-PDL-BUFFER-POINTER 50
      RAV-FUNC-DEST-PDL-BUFFER-INDEX 51

      RAV-FUNC-DEST-VMA-START-UNMAPPED-BYTE-READ 66
      RAV-FUNC-DEST-VMA-START-UNMAPPED-BYTE-WRITE 67

      RAV-FUNC-DEST-MD-START-UNMAPPED-BYTE-READ 76
      RAV-FUNC-DEST-MD-START-UNMAPPED-BYTE-WRITE 77

    RAV-IR-BYTE-FUNC  (Byte 2. 17.)
      RAV-BYTE-FUNC-LDB 1
      RAV-BYTE-FUNC-SELECTIVE-DEPOSIT 2
      RAV-BYTE-FUNC-DPB 3
    rav-ir-rotate-right (byte 1 16.)
    RAV-IR-MR  (BYTE 1. 18.)
    RAV-IR-SR  (BYTE 1. 17.)
    rav-IR-BYTE-SR (byte 1 17.)
    RAV-IR-ROTATION-LENGTH  (BYTE 5. 5.)
    RAV-IR-ROTATION-COUNT (BYTE 5. 0.)
    rav-byte-spec (byte 10. 0)

    rav-ir-byte-length-spec (byte 5 5)
    rav-ir-m-rotate (byte 5 0)

    RAV-IR-JUMP-ADDR  (BYTE 14. 18.)
    RAV-IR-jump-on-bit  (BYTE 1. 17.)		;if this is on, then jump-cond is m adr
    rav-IR-JUMP-TEST-CONDITION (byte 1 17.)

    ; RPN
    ; 000 jump-xct-next
    ; 001 jump
    ; 010 call-xct-next
    ; 011 call
    ; 100 popj-xct-next
    ; 101 popj
    ; 110 NOP  <- unknown in lambda ... other documentation says this is same as jump-xct-next
    ; 111 SKIP <- unknown in lambda ... other documentation says this is same as jump
    RAV-IR-N (BYTE 1 5)
    RAV-IR-P (BYTE 1 6)
    RAV-IR-R (BYTE 1 7)
    RAV-IR-RPN (Byte 3. 5.)
    rav-ir-jump-call-return (byte 2 6)
    rav-ir-jump-invert-cond (byte 1 15.)

    RAV-ir-JUMP-COND  (BYTE 6. 10.)
    rav-ir-jump-cond-low (byte 5 10.)
      RAV-JUMP-COND-BIT-SET 0
      RAV-JUMP-COND-BIT-clear (+ 0 40)
      RAV-JUMP-COND-M<A 1
      RAV-JUMP-COND-M>=A (+ 1 40)
      RAV-JUMP-COND-M<=A 2
      RAV-JUMP-COND-M>A (+ 2 40)
      RAV-JUMP-COND-MA 3
      RAV-JUMP-COND-M=A (+ 3 40)
      RAV-JUMP-COND-PAGE-FAULT 4
      RAV-JUMP-COND-PAGE-FAULT-OR-INTERRUPT 5
      RAV-JUMP-COND-PAGE-FAULT-OR-INTERRUPT-OR-SEQUENCE-BREAK 6
      RAV-JUMP-COND-UNC 7
      RAV-JUMP-COND-DATA-TYPE-NOT-EQUAL 10
      RAV-JUMP-COND-DATA-TYPE-EQUAL (+ 10 40)
      RAV-JUMP-COND-BOXED-SIGN-BIT-SET 15
      RAV-JUMP-COND-BOXED-SIGN-BIT-clear (+ 15 40)
      RAV-JUMP-COND-Q0 12
      RAV-JUMP-COND-NUBUS-ERROR 13
      RAV-JUMP-COND-NOT-FIXNUM-OVERFLOW 14
      RAV-JUMP-COND-FIXNUM-OVERFLOW (+ 14 40)
      RAV-JUMP-COND-TAG-CLASSIFY 20
    RAV-IR-WRITE-CONTROL-STORE  (BYTE 1. 9.)
    RAV-IR-READ-CONTROL-STORE (BYTE 1. 8.)
    RAV-DISPATCH-SRC  (BYTE 2. 12.)
      RAV-DISPATCH-SRC-M-SRC 0
      RAV-DISPATCH-SRC-M-DATA-TYPE 1
      RAV-DISPATCH-SRC-MIR 2
      RAV-DISPATCH-SRC-MIR2 3
    RAV-DISPATCH-MASK-LENGTH  (Byte 3. 5.)
    rav-ir-disp-enable-meta (Byte 2. 10.)
      RAV-ir-disp-enable-gc-write-test-meta (byte 1 10.)
      rav-ir-disp-enable-oldspace-meta (byte 1 11.)
    RAV-IR-WRITE-DISPATCH-MEMORY  (BYTE 1. 9.)
    RAV-IR-READ-DISPATCH-MEMORY (BYTE 1. 8.)
    RAV-IR-DISPATCH-ADDR  (BYTE 12. 20.)
    RAV-IR-DISP-ADDR	  (BYTE 12. 20.)
    rav-ir-rotation-direction (byte 1 16.)
    rav-ir-dispatch-instruction-stream (byte 1 15.)
    rav-ir-dispatch-source-select (byte 2 12.)
    rav-ir-disp-bytl (byte 5. 5.)

    rav-ir-write-classifer-ram (byte 1 9)	;alu inst
    rav-ir-halt (byte 1 49.)
    rav-ir-parity (byte 1 50.)
    rav-ir-abbrv-jump (byte 3 51.)
    rav-ir-disp-const (byte 10. 32.)
    rav-IR-DISP-DISPATCH-CONSTANT (byte 10. 32.)
    rav-ir-push-own-address (byte 1 17.)
    rav-ir-enable-instruction-stream (byte 1 15.)
    
    rav-disp-r-bit (byte 1 16.)
    rav-disp-p-bit (byte 1 15.)
    rav-disp-n-bit (byte 1 14.)
    rav-disp-rpn-bits (byte 3 14.)
    )
  )

(defun exp-ir-direct-bits ()
  0)

(setup-raven-symbols raven-symbols)
