;;; -*- Mode:LISP; Package:SIMULATOR; Base:10; Readtable:CL -*- ;;; Stuff for defining the instruction set opcode fields. ;;; See the file "HACK-OPCODE-DEFS" to find out what's done with these. ;;; fields which are invariant across instruction type: ;(def-inst-fields (ALU ALU-16-BIT-IMMEDIATE ALU-24-BIT-IMMEDIATE LOAD-32-BIT-IMMEDIATE ; FLOATING-POINT-ALU FLOATING-POINT-MULTIPLIER CONDITIONAL-BRANCH ; CALLZ JUMP CALL CALL-DISPATCH) (def-inst-fields (COMMON) stat-bit (byte 1 63.) spare1 (byte 1 62.) op-code (byte 3 58.) sub-op-code (byte 2 58.) next-pc (byte 2 56.) boxed-result (byte 2 54.) data-type-check (byte 3 51.) call-hardware-op (byte 3 48.) destination (byte 7 41.) global-frame-number (byte 4 37.)) ;;; bit 61: (def-inst-fields (ALU ALU-16-BIT-IMMEDIATE ALU-24-BIT-IMMEDIATE LOAD-32-BIT-IMMEDIATE FLOATING-POINT-ALU FLOATING-POINT-MULTIPLIER) dispatch-to-16-inst-block (byte 1 61.)) (def-inst-fields (CONDITIONAL-BRANCH JUMP) unconditional (byte 1 61.)) ;;; bits 32-36 (def-inst-fields (ALU ALU-16-BIT-IMMEDIATE ALU-24-BIT-IMMEDIATE CONDITIONAL-BRANCH JUMP) jump-condition-select (byte 3 34.)) (def-inst-fields (ALU ALU-16-BIT-IMMEDIATE ALU-24-BIT-IMMEDIATE CONDITIONAL-BRANCH JUMP CALLZ CALL-DISPATCH) byte-width (byte 2 32.)) (def-inst-fields (LOAD-32-BIT-IMMEDIATE FLOATING-POINT-ALU FLOATING-POINT-MULTIPLIER) jump-condition-select (byte 3 34.) spare2 (byte 2 32.)) ;;; right source (def-inst-fields (ALU FLOATING-POINT-ALU FLOATING-POINT-MULTIPLIER CONDITIONAL-BRANCH CALLZ JUMP CALL CALL-DISPATCH) right-source (byte 7 25.)) ;;; things with left sources (def-inst-fields (ALU ALU-16-BIT-IMMEDIATE FLOATING-POINT-ALU FLOATING-POINT-MULTIPLIER CONDITIONAL-BRANCH CALLZ CALL-DISPATCH) left-source (byte 6 19.)) ;;; alu op for 29-332 (def-inst-fields (ALU-16-BIT-IMMEDIATE ALU-24-BIT-IMMEDIATE) alu-operation (byte 7 25.)) (def-inst-fields (ALU CONDITIONAL-BRANCH CALLZ CALL-DISPATCH) alu-operation (byte 7 12.)) ;;; ALU shift and mask (def-inst-fields (ALU) spare3 (byte 1 11.) alu-shift (byte 6 5.) alu-mask (byte 5 0.)) ;;; immediate data fields (def-inst-fields (ALU-16-BIT-IMMEDIATE) spare4 (byte 3 16.) immediate-16 (byte 16. 0)) (def-inst-fields (ALU-24-BIT-IMMEDIATE) immediate-24 (byte 24. 0)) (def-inst-fields (JUMP CALL) target-address (byte 24. 0)) (def-inst-fields (ALU-24-BIT-IMMEDIATE JUMP) spare5 (byte 1 24.)) (def-inst-fields (LOAD-32-BIT-IMMEDIATE) immediate-32 (byte 32. 0)) ;;; floating point (def-inst-fields (FLOATING-POINT-ALU FLOATING-POINT-MULTIPLIER) fpu-trap-status (byte 2 17.) fpu-load (byte 6 3) fpu-unload (byte 3 0)) ;;; floating point alu (def-inst-fields (FLOATING-POINT-ALU) fpu-op (byte 8 9.)) ;WTL-2265 ;;; floating point multiplier (def-inst-fields (FLOATING-POINT-MULTIPLIER) mpu-op (byte 8 9.)) ;;; the poor unloved destination-return field (def-inst-fields (CALL) destination-return-bit-6 (byte 1 61.) destination-return-bit-5-1 (byte 5 32.) destination-return-bit-0 (byte 1 24.)) (def-inst-fields (CALLZ CALL-DISPATCH) destination-return-bit-6 (byte 1 61.) destination-return-bit-5-3 (byte 3 34.) destination-return-bit-2-0 (byte 3 0.)) ;;; random branch fields (def-inst-fields (CONDITIONAL-BRANCH) branch-address (byte 12. 0)) (def-inst-fields (CALLZ) callz-address (byte 8 4) spare6 (byte 1 3)) (def-inst-fields (CALL-DISPATCH) spare7 (byte 8 4) dispatch-to-16-inst-block (byte 1 3))