diff --git a/compiler/sparc/insts.lisp b/compiler/sparc/insts.lisp index 51a4763df55761743024c7a09b4839a345065903..9b6cda7fdd3122f1e747a63596e6db13566b448d 100644 --- a/compiler/sparc/insts.lisp +++ b/compiler/sparc/insts.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/insts.lisp,v 1.6 1991/11/26 22:47:01 wlott Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/insts.lisp,v 1.7 1991/12/08 07:13:08 wlott Exp $ ;;; ;;; Description of the SPARC architecture. ;;; @@ -19,18 +19,28 @@ (use-package "EXT") (use-package "C") -(disassem:set-disassem-params :instruction-alignment 32) +(disassem:set-disassem-params + :instruction-alignment 32 + :storage-class-sets '((register any-reg descriptor-reg base-character-reg + sap-reg signed-reg unsigned-reg + non-descriptor-reg interior-reg) + (float-reg single-reg double-reg) + (control-stack control-stack) + (number-stack signed-stack unsigned-stack + base-character-stack sap-stack + single-stack double-stack)) + ) ;;;; Special argument types and fixups. (defvar *disassem-use-lisp-reg-names* t) -(defconstant reg-name-vec +(defconstant reg-symbols (map 'vector #'(lambda (name) (cond ((null name) nil) - (t (make-symbol name)))) + (t (make-symbol (concatenate 'string "%" name))))) *register-names*)) (define-argument-type reg @@ -46,17 +56,20 @@ (zero 0) (t (tn-offset tn)))) :disassem-printer #'(lambda (value stream dstate) - (declare (stream stream) (fixnum value) (ignore dstate)) - (cond (*disassem-use-lisp-reg-names* - (write-char #\% stream) - (princ (aref reg-name-vec value) stream)) - (t - (multiple-value-bind (set num) - (truncate value 8) - (format stream "%~a~d" - (aref #(g o l i) set) - num)))))) - + (declare (stream stream) (fixnum value)) + (let ((regname (aref reg-symbols value))) + (princ regname stream) + (disassem:maybe-note-associated-storage-ref + value + 'register + regname + dstate))) + ) + +(defconstant float-reg-symbols + (coerce + (loop for n from 0 to 31 collect (make-symbol (format nil "%F~d" n))) + 'vector)) (define-argument-type fp-reg :type '(and tn @@ -64,7 +77,16 @@ (eq (sb-name (sc-sb (tn-sc object))) 'float-registers)))) :function tn-offset - :disassem-printer "%f~d") + :disassem-printer #'(lambda (value stream dstate) + (declare (stream stream) (fixnum value)) + (let ((regname (aref float-reg-symbols value))) + (princ regname stream) + (disassem:maybe-note-associated-storage-ref + value + 'float-reg + regname + dstate))) + ) (define-argument-type odd-fp-reg :type '(and tn @@ -277,6 +299,28 @@ ;;; ---------------------------------------------------------------- (define-f3-inst ld #b11 #b000000 :load-store :load) +(defun note-niss-ref (chunk inst stream dstate) + (when stream + (disassem:maybe-note-nil-indexed-symbol-slot-ref + (disassem:arg-value 'immed chunk inst) + dstate))) + +(defun note-control-stack-var-ref (chunk inst stream dstate) + (when stream + (disassem:maybe-note-single-storage-ref + (/ (disassem:arg-value 'immed chunk inst) word-bytes) + 'control-stack + dstate)) + ) + +(defun note-number-stack-var-ref (chunk inst stream dstate) + (when stream + (disassem:maybe-note-single-storage-ref + (/ (disassem:arg-value 'immed chunk inst) word-bytes) + 'number-stack + dstate)) + ) + (disassem:specialize (ld :disassem-control #'(lambda (chunk inst stream dstate) @@ -287,22 +331,35 @@ immed (rs1 :constant code-offset)) -(disassem:specialize (ld - :disassem-control - #'(lambda (chunk inst stream dstate) - (when stream - (disassem:maybe-note-nil-indexed-symbol-slot-ref - (disassem:arg-value 'immed chunk inst) - dstate)))) +(disassem:specialize (ld :disassem-control #'note-niss-ref) immed (rs1 :constant null-offset)) + +(disassem:specialize (ld :disassem-control #'note-control-stack-var-ref) + immed + (rs1 :constant cfp-offset)) + +(disassem:specialize (ld :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) + ;;; ---------------------------------------------------------------- (define-f3-inst ldd #b11 #b000011 :load-store :load) +(disassem:specialize (ldd :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) (define-f3-inst ldf #b11 #b100000 :dest-kind fp-reg :load-store :load) +(disassem:specialize (ldf :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) + (define-f3-inst ldf-odd #b11 #b100000 :dest-kind odd-fp-reg :load-store :load) (define-f3-inst lddf #b11 #b100011 :dest-kind fp-reg :load-store :load) +(disassem:specialize (lddf :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) (define-f3-inst stb #b11 #b000101 :load-store :store) (define-f3-inst sth #b11 #b000110 :load-store :store) @@ -310,22 +367,34 @@ ;;; ---------------------------------------------------------------- (define-f3-inst st #b11 #b000100 :load-store :store) -(disassem:specialize (st - :disassem-control - #'(lambda (chunk inst stream dstate) - (when stream - (disassem:maybe-note-nil-indexed-symbol-slot-ref - (disassem:arg-value 'immed chunk inst) - dstate)))) +(disassem:specialize (st :disassem-control #'note-niss-ref) immed (rs1 :constant null-offset)) + +(disassem:specialize (st :disassem-control #'note-control-stack-var-ref) + immed + (rs1 :constant cfp-offset)) + +(disassem:specialize (st :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) ;;; ---------------------------------------------------------------- (define-f3-inst std #b11 #b000111 :load-store :store) +(disassem:specialize (std :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) (define-f3-inst stf #b11 #b100100 :dest-kind fp-reg :load-store :store) +(disassem:specialize (stf :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) + (define-f3-inst stf-odd #b11 #b100100 :dest-kind odd-fp-reg :load-store :store) (define-f3-inst stdf #b11 #b100111 :dest-kind fp-reg :load-store :store) +(disassem:specialize (stdf :disassem-control #'note-number-stack-var-ref) + immed + (rs1 :constant nfp-offset)) (define-f3-inst ldstub #b11 #b001101 :load-store t) (define-f3-inst swap #b11 #b001111 :load-store t)