;;; -*- 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)))) )) ))
