-
-;;; the maximum number of bytes per page on this system (used by GENESIS)
-(defvar *backend-page-size* 0)
-(declaim (type index *backend-page-size*))
-\f
-;;;; VM support routines
-
-;;; FIXME: Do we need this kind of indirection for the VM support
-;;; routines any more?
-
-;;; forward declaration
-(defvar *backend-support-routines*)
-
-(macrolet ((def-vm-support-routines (&rest routines)
- `(progn
- (eval-when (:compile-toplevel :load-toplevel :execute)
- (defparameter *vm-support-routines* ',routines))
- (defstruct vm-support-routines
- ,@(mapcar #'(lambda (routine)
- `(,routine nil :type (or function null)))
- routines))
- ,@(mapcar
- #'(lambda (name)
- `(defun ,name (&rest args)
- (apply (or (,(symbolicate "VM-SUPPORT-ROUTINES-"
- name)
- *backend-support-routines*)
- (error "machine-specific support ~S ~
- routine undefined"
- ',name))
- args)))
- routines))))
-
- (def-vm-support-routines
-
- ;; from vm.lisp
- immediate-constant-sc
- location-print-name
-
- ;; from primtype.lisp
- primitive-type-of
- primitive-type
-
- ;; from c-call.lisp
- make-call-out-tns
-
- ;; from call.lisp
- standard-argument-location
- make-return-pc-passing-location
- make-old-fp-passing-location
- make-old-fp-save-location
- make-return-pc-save-location
- make-argument-count-location
- make-nfp-tn
- make-stack-pointer-tn
- make-number-stack-pointer-tn
- make-unknown-values-locations
- select-component-format
-
- ;; from nlx.lisp
- make-nlx-sp-tn
- make-dynamic-state-tns
- make-nlx-entry-argument-start-location
-
- ;; from support.lisp
- generate-call-sequence
- generate-return-sequence
-
- ;; for use with scheduler
- emit-nop
- location-number))
-
-(defprinter (vm-support-routines))
-
-(defmacro def-vm-support-routine (name ll &body body)
- (unless (member (intern (string name) (find-package "SB!C"))
- *vm-support-routines*)
- (warn "unknown VM support routine: ~A" name))
- (let ((local-name (symbolicate "IMPL-OF-VM-SUPPORT-ROUTINE-" name)))
- `(progn
- (defun ,local-name ,ll ,@body)
- (setf (,(intern (concatenate 'simple-string
- "VM-SUPPORT-ROUTINES-"
- (string name))
- (find-package "SB!C"))
- *backend-support-routines*)
- #',local-name))))
-
-;;; the VM support routines
-(defvar *backend-support-routines* (make-vm-support-routines))
-(declaim (type vm-support-routines *backend-support-routines*))