X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsparc%2Fvm.lisp;h=f50443b8faaea4e11967b3ba30fb451126fe47ed;hb=69e6aef5e6fb3bd682c7a2cbf774034d2ea58ee8;hp=bcf7f6d9a0923bb6f9e705c62577dc98c985fe66;hpb=52cfe54802db8736f1f4e2b67764c43bba9b78b3;p=sbcl.git diff --git a/src/compiler/sparc/vm.lisp b/src/compiler/sparc/vm.lisp index bcf7f6d..f50443b 100644 --- a/src/compiler/sparc/vm.lisp +++ b/src/compiler/sparc/vm.lisp @@ -129,7 +129,7 @@ ;;; and seems to be working so far -dan ;;; ;;; arbitrarily taken for alpha, too. - Christophe -(def!constant kludge-nondeterministic-catch-block-size 7) +(def!constant kludge-nondeterministic-catch-block-size 6) (!define-storage-classes @@ -150,6 +150,27 @@ ;; The control stack. (Scanned by GC) (control-stack control-stack) + ;; We put ANY-REG and DESCRIPTOR-REG early so that their SC-NUMBER + ;; is small and therefore the error trap information is smaller. + ;; Moving them up here from their previous place down below saves + ;; ~250K in core file size. --njf, 2006-01-27 + + ;; Immediate descriptor objects. Don't have to be seen by GC, but nothing + ;; bad will happen if they are. (fixnums, characters, header values, etc). + (any-reg + registers + :locations #.(append non-descriptor-regs descriptor-regs) + :constant-scs (zero immediate) + :save-p t + :alternate-scs (control-stack)) + + ;; Pointer descriptor objects. Must be seen by GC. + (descriptor-reg registers + :locations #.descriptor-regs + :constant-scs (constant null immediate) + :save-p t + :alternate-scs (control-stack)) + ;; The non-descriptor stacks. (signed-stack non-descriptor-stack) ; (signed-byte 32) (unsigned-stack non-descriptor-stack) ; (unsigned-byte 32) @@ -171,22 +192,6 @@ ;; **** Things that can go in the integer registers. - ;; Immediate descriptor objects. Don't have to be seen by GC, but nothing - ;; bad will happen if they are. (fixnums, characters, header values, etc). - (any-reg - registers - :locations #.(append non-descriptor-regs descriptor-regs) - :constant-scs (zero immediate) - :save-p t - :alternate-scs (control-stack)) - - ;; Pointer descriptor objects. Must be seen by GC. - (descriptor-reg registers - :locations #.descriptor-regs - :constant-scs (constant null immediate) - :save-p t - :alternate-scs (control-stack)) - ;; Non-Descriptor characters (character-reg registers :locations #.non-descriptor-regs @@ -294,6 +299,7 @@ (defregtn zero any-reg) (defregtn null descriptor-reg) (defregtn code descriptor-reg) + (defregtn lip descriptor-reg) (defregtn alloc any-reg) (defregtn nargs any-reg) @@ -305,19 +311,24 @@ ;;; If VALUE can be represented as an immediate constant, then return the ;;; appropriate SC number, otherwise return NIL. -(!def-vm-support-routine immediate-constant-sc (value) +(defun immediate-constant-sc (value) (typecase value ((integer 0 0) (sc-number-or-lose 'zero)) (null (sc-number-or-lose 'null)) ((or (integer #.sb!xc:most-negative-fixnum #.sb!xc:most-positive-fixnum) - system-area-pointer character) + character) (sc-number-or-lose 'immediate)) (symbol (if (static-symbol-p value) (sc-number-or-lose 'immediate) nil)))) + +(defun boxed-immediate-sc-p (sc) + (or (eql sc (sc-number-or-lose 'zero)) + (eql sc (sc-number-or-lose 'null)) + (eql sc (sc-number-or-lose 'immediate)))) ;;;; function call parameters @@ -355,7 +366,7 @@ ;;; This function is called by debug output routines that want a ;;; pretty name for a TN's location. It returns a thing that can be ;;; printed with PRINC. -(!def-vm-support-routine location-print-name (tn) +(defun location-print-name (tn) (declare (type tn tn)) ; FIXME: commented out on alpha (let ((sb (sb-name (sc-sb (tn-sc tn)))) (offset (tn-offset tn))) @@ -368,3 +379,10 @@ (constant (format nil "Const~D" offset)) (immediate-constant "Immed")))) +(defun combination-implementation-style (node) + (declare (type sb!c::combination node) (ignore node)) + (values :default nil)) + +(defun primitive-type-indirect-cell-type (ptype) + (declare (ignore ptype)) + nil)