X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fbackend.lisp;h=aefdae6c0895c33043c1a24e0460e493e2e9f190;hb=8cbd7fc0f27222a778ce61bae7d943a5081362cc;hp=5cba2ab58befeb1ef0ef97743152a645cab07db6;hpb=0bca0cb1bf5ce5572ab5cd7ba59f87fed1f2edb0;p=sbcl.git diff --git a/src/compiler/backend.lisp b/src/compiler/backend.lisp index 5cba2ab..aefdae6 100644 --- a/src/compiler/backend.lisp +++ b/src/compiler/backend.lisp @@ -60,10 +60,10 @@ (defvar *backend-meta-sc-names* (make-hash-table :test 'eq)) (defvar *backend-meta-sb-names* (make-hash-table :test 'eq)) (declaim (type hash-table - *backend-sc-names* - *backend-sb-names* - *backend-meta-sc-names* - *backend-meta-sb-names*)) + *backend-sc-names* + *backend-sb-names* + *backend-meta-sc-names* + *backend-meta-sb-names*)) ;;; like *SC-NUMBERS*, but updated at meta-compile time @@ -107,7 +107,7 @@ (defvar *backend-t-primitive-type*) (declaim (type primitive-type *backend-t-primitive-type*)) -;;; a hashtable translating from VOP names to the corresponding VOP-Parse +;;; a hashtable translating from VOP names to the corresponding VOP-PARSE ;;; structures. This information is only used at meta-compile time. (defvar *backend-parsed-vops* (make-hash-table :test 'eq)) (declaim (type hash-table *backend-parsed-vops*)) @@ -117,9 +117,9 @@ (defvar *backend-instruction-flavors* (make-hash-table :test 'equal)) (defvar *backend-special-arg-types* (make-hash-table :test 'eq)) (declaim (type hash-table - *backend-instruction-formats* - *backend-instruction-flavors* - *backend-special-arg-types*)) + *backend-instruction-formats* + *backend-instruction-flavors* + *backend-special-arg-types*)) ;;; mappings between CTYPE structures and the corresponding predicate. ;;; The type->predicate mapping is implemented as an alist because @@ -133,10 +133,6 @@ ;;; they haven't been installed yet (defvar *backend-internal-errors* nil) (declaim (type (or simple-vector null) *backend-internal-errors*)) - -;;; the maximum number of bytes per page on this system (used by GENESIS) -(defvar *backend-page-size* 0) -(declaim (type index *backend-page-size*)) ;;;; VM support routines @@ -147,30 +143,31 @@ (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 (:copier nil)) - ,@(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)))) + `(progn + (eval-when (:compile-toplevel :load-toplevel :execute) + (defparameter *vm-support-routines* ',routines)) + (defstruct (vm-support-routines (:copier nil)) + ,@(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 + combination-implementation-style ;; from primtype.lisp primitive-type-of @@ -195,7 +192,7 @@ ;; from nlx.lisp make-nlx-sp-tn make-dynamic-state-tns - make-nlx-entry-argument-start-location + make-nlx-entry-arg-start-location ;; from support.lisp generate-call-sequence @@ -209,17 +206,17 @@ (defmacro !def-vm-support-routine (name ll &body body) (unless (member (intern (string name) (find-package "SB!C")) - *vm-support-routines*) + *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)))) + "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)) @@ -246,9 +243,9 @@ SPARC code in CMUCL, (NOT (BACKEND-FEATUREP :SPARC-64))))) ...) -and at the IR2 translation stage, the function #'`(LAMBDA () ,GUARD) would be called. +and at the IR2 translation stage, the function #'`(LAMBDA () ,GUARD) would be called. -Until SBCL-0.7pre57, this is translated as +Until SBCL-0.7pre57, this is translated as (:GUARD #!+(OR :SPARC-V8 (AND :SPARC-V9 (NOT :SPARC-64))) T #!-(OR :SPARC-V8 (AND :SPARC-V9 (NOT :SPARC-64))) NIL) which means that whether this VOP will ever be used is determined at @@ -263,8 +260,10 @@ yet an ideal interface, but it does allow for compile-time conditionalization. |# -;;; The default value of NIL means use only unguarded VOPs. -(defvar *backend-subfeatures* nil) +;;; The default value of NIL means use only unguarded VOPs. The +;;; initial value is customizeable via +;;; customize-backend-subfeatures.lisp +(defvar *backend-subfeatures* '#.sb-cold:*shebang-backend-subfeatures*) ;;; possible *BACKEND-SUBFEATURES* values: ;;;