;;; -*- Mode:LISP; Package:LISP-INTERNALS; Base:10; Readtable:CL -*- (defun scavenge-control-pdl (control-pdl) (macrolet ((scavenge-word (word) `(hw:vma-start-read ,word))) (SCAVENGE-WORD (control-pdl-stack-group control-pdl)) (do ((frame-offset control-pdl-base (+ frame-offset control-pdl-frame-size)) (end (control-pdl-pointer control-pdl)) frame-box-bits) ((>= frame-offset end)) (setq frame-box-bits (hw:ldb (array:%vm-read32 control-pdl frame-offset) %%cpdl0-box-bits 0)) ;;; scavenge the pc also (dotimes (register 16) (when (hw:32logbitb register frame-box-bits) (SCAVENGE-WORD (array:%vm-read32 control-pdl ;do we need to make sure it is boxed (+ frame-offset ;in case the transporter refuses to move it? control-pdl-frame-offset-to-registers register)))) )) ))