;;; -*- Mode:LISP; Package:LAMBDA; Base:8; Readtable:ZL -*- ;;; ** (c) Copyright 1980 Massachusetts Institute of Technology ** ;;; ** (c) Enhancements Copyright 1984,1985,1986 - Lisp Machine, Inc. ;;; macros for QF, LAM: version of console program ;SPECIAL VARIABLES FOR ARRAY STUFF (DECLARE (SPECIAL QF-ARRAY-HEADER QF-ARRAY-DISPLACED-P QF-ARRAY-HAS-LEADER-P QF-ARRAY-NUMBER-DIMS QF-ARRAY-HEADER-ADDRESS QF-ARRAY-DATA-ORIGIN QF-ARRAY-LENGTH)) ;FUNCTIONS TO EXAMINE AND DEPOSIT FIELDS OF A Q ;BUILD A Q, GIVEN THE CONTENTS OF ITS FIELDS. ;THE CDR-CODE DEFAULTS TO CDR-ERROR. (DEFMACRO QF-MAKE-Q (POINTER DATA-TYPE &OPTIONAL CDR-CODE) (COND (CDR-CODE `(QF-SMASH-CDR-CODE (QF-SMASH-DATA-TYPE ,POINTER ,DATA-TYPE) ,CDR-CODE)) (T `(QF-SMASH-DATA-TYPE ,POINTER ,DATA-TYPE)))) ;; Many of these are set up to values that depend on ;; how big the pointer field is in the machine being debugged. (DEFVAR %%QF-POINTER) (DEFVAR %%QF-DATA-TYPE) (DEFVAR %%QF-TYPED-POINTER) (DEFVAR %%QF-CDR-CODE) (DEFVAR %QF-POINTER-MASK) (DEFVAR %%QF-BOXED-SIGN-BIT) (DEFVAR %%QF-PHT1-VIRTUAL-PAGE-NUMBER) (DEFVAR %QF-PAGE-NUMBER-MASK) (DEFVAR %QF-POINTER-SANS-BOXED-SIGN-BIT-MASK) (DEFVAR %QF-TYPED-POINTER-MASK) (defvar %QF-PHT-DUMMY-VIRTUAL-ADDRESS) (defprop %pht-swap-status-normal t special) (defprop %pht-swap-status-prepage t special) (defprop %pht-swap-status-age-trap t special) (defprop %%region-map-bits t special) (defprop %%REGION-REPRESENTATION-TYPE t special) (defprop %%REGION-SPACE-TYPE t special) (defprop %%REGION-OLDSPACE-META-BIT t special) (defprop %%REGION-EXTRA-PDL-META-BIT t special) (defprop %%REGION-REPRESENTATION-TYPE t special) (defprop %%SPECPDL-BLOCK-START-FLAG t special) (defprop %%LP-CLS-ATTENTION t special) (defprop %%LP-CLS-SELF-MAP-PROVIDED t special) (defprop %PHT-MAP-STATUS-READ-ONLY t special) (defprop SG-SPECIAL-PDL t special) (defprop SG-SPECIAL-PDL-POINTER t special) (defprop SG-SAVED-M-FLAGS t special) (defprop %%LP-CLS-ATTENTION t special) (defprop %%LP-CLS-SELF-MAP-PROVIDED t special) (defprop %%FEFH-PC-IN-WORDS t special) (defprop %%ADI-PREVIOUS-ADI-FLAG t special) (defprop %%LP-ENS-MACRO-LOCAL-BLOCK-ORIGIN t special) (defprop %%FEFHI-MS-LOCAL-BLOCK-LENGTH t special) (defprop %FEFHI-MISC t special) (DEFVAR QF-NIL :UNBOUND "Bignum representing NIL on debugged machine. Must be set up again when cache is cleared.") (DEFSUBST QF-DATA-TYPE (Q) (LDB %%QF-DATA-TYPE Q)) (DEFSUBST QF-POINTER (Q) (LOGAND %QF-POINTER-MASK Q)) ;Can't use LDB, byte too wide (DEFSUBST QF-MASK-PAGE-NUMBER (Q) (LOGAND %QF-PAGE-NUMBER-MASK Q)) (DEFSUBST QF-POINTER-SANS-BOXED-SIGN-BIT (Q) (LOGAND %QF-POINTER-SANS-BOXED-SIGN-BIT-MASK Q)) (DEFSUBST QF-BOXED-SIGN-BIT (Q) (LDB %%QF-BOXED-SIGN-BIT Q)) (DEFSUBST QF-CDR-CODE (Q) (LDB %%QF-CDR-CODE Q)) (DEFSUBST QF-TYPED-POINTER (Q) (LOGAND %QF-TYPED-POINTER-MASK Q)) ;SMASH VAL INTO POINTER AND DATA-TYPE OF Q (DEFUN QF-SMASH-TYPED-POINTER (Q VAL) (+ (QF-TYPED-POINTER VAL) (- Q (QF-TYPED-POINTER Q)))) (DEFSUBST QF-SMASH-CDR-CODE (Q VAL) (DPB VAL %%QF-CDR-CODE Q)) (DEFSUBST QF-SMASH-POINTER (Q VAL) (DPB VAL %%QF-POINTER Q)) (DEFSUBST QF-SMASH-DATA-TYPE (Q VAL) (DPB VAL %%QF-DATA-TYPE Q)) ;;;; ANALOGUES OF %P-POINTER, %P-STORE-POINTER, ETC. (DEFMACRO QF-P-POINTER (LOC) `(QF-POINTER (QF-MEM-READ ,LOC))) (DEFMACRO QF-P-DATA-TYPE (LOC) `(QF-DATA-TYPE (QF-MEM-READ ,LOC))) (DEFMACRO QF-P-CDR-CODE (LOC) `(QF-CDR-CODE (QF-MEM-READ ,LOC))) (DEFMACRO QF-P-CONTENTS (LOC) `(QF-TYPED-POINTER (QF-MEM-READ ,LOC))) (DEFMACRO QF-P-STORE-POINTER (LOC VAL) `(LET ((ADDR* ,LOC)) (QF-MEM-WRITE ADDR* (QF-SMASH-POINTER (QF-MEM-READ ADDR*) ,VAL)))) (DEFMACRO QF-P-STORE-CONTENTS (LOC VAL) `(LET ((ADDR* ,LOC)) (QF-MEM-WRITE ADDR* (QF-SMASH-TYPED-POINTER (QF-MEM-READ ADDR*) ,VAL)))) (DEFMACRO QF-P-STORE-DATA-TYPE (LOC VAL) `(LET ((ADDR* ,LOC)) (QF-MEM-WRITE ADDR* (QF-SMASH-DATA-TYPE (QF-MEM-READ ADDR*) ,VAL)))) (DEFMACRO QF-P-STORE-CDR-CODE (LOC VAL) `(LET ((ADDR* ,LOC)) (QF-MEM-WRITE ADDR* (QF-SMASH-CDR-CODE (QF-MEM-READ ADDR*) ,VAL)))) (DEFMACRO QF-TRANSPORT-HEADER (HEADER-ADDRESS) `(DO-FOREVER (LET ((CONTENTS (QF-MEM-READ ,HEADER-ADDRESS))) (UNLESS (OR (= (QF-DATA-TYPE CONTENTS) DTP-HEADER-FORWARD) (= (QF-DATA-TYPE CONTENTS) DTP-GC-FORWARD)) (RETURN NIL)) (SETQ ,HEADER-ADDRESS (QF-POINTER CONTENTS))))) (DEFSUBST QF-NULL (X) (= X QF-NIL)) (DEFMACRO SELECTN (ITEM . BODY) `((LAMBDA (*SELECTN-ITEM*) (COND . ,(MAPCAR '#(LAMBDA (CLAUSE) (COND ((EQ (CAR CLAUSE) 'OTHERWISE) `(T . ,(CDR CLAUSE))) ((ATOM (CAR CLAUSE)) `((= *SELECTN-ITEM* ,(CAR CLAUSE)) . ,(CDR CLAUSE))) (T `((OR . ,(MAPCAR '(LAMBDA (ITEM) `(= *SELECTN-ITEM* ,ITEM)) (CAR CLAUSE))) . ,(CDR CLAUSE))))) BODY))) ,ITEM))