Skip to content
Snippets Groups Projects
Commit 5d89882c authored by wlott's avatar wlott
Browse files

Picked up Miles' latest changes.

parent 51251be9
No related branches found
No related tags found
No related merge requests found
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
;;; Scott Fahlman (FAHLMAN@CMUC). ;;; 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. ;;; Description of the SPARC architecture.
;;; ;;;
...@@ -19,18 +19,28 @@ ...@@ -19,18 +19,28 @@
(use-package "EXT") (use-package "EXT")
(use-package "C") (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. ;;;; Special argument types and fixups.
(defvar *disassem-use-lisp-reg-names* t) (defvar *disassem-use-lisp-reg-names* t)
(defconstant reg-name-vec (defconstant reg-symbols
(map 'vector (map 'vector
#'(lambda (name) #'(lambda (name)
(cond ((null name) nil) (cond ((null name) nil)
(t (make-symbol name)))) (t (make-symbol (concatenate 'string "%" name)))))
*register-names*)) *register-names*))
(define-argument-type reg (define-argument-type reg
...@@ -46,17 +56,20 @@ ...@@ -46,17 +56,20 @@
(zero 0) (zero 0)
(t (tn-offset tn)))) (t (tn-offset tn))))
:disassem-printer #'(lambda (value stream dstate) :disassem-printer #'(lambda (value stream dstate)
(declare (stream stream) (fixnum value) (ignore dstate)) (declare (stream stream) (fixnum value))
(cond (*disassem-use-lisp-reg-names* (let ((regname (aref reg-symbols value)))
(write-char #\% stream) (princ regname stream)
(princ (aref reg-name-vec value) stream)) (disassem:maybe-note-associated-storage-ref
(t value
(multiple-value-bind (set num) 'register
(truncate value 8) regname
(format stream "%~a~d" dstate)))
(aref #(g o l i) set) )
num))))))
(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 (define-argument-type fp-reg
:type '(and tn :type '(and tn
...@@ -64,7 +77,16 @@ ...@@ -64,7 +77,16 @@
(eq (sb-name (sc-sb (tn-sc object))) (eq (sb-name (sc-sb (tn-sc object)))
'float-registers)))) 'float-registers))))
:function tn-offset :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 (define-argument-type odd-fp-reg
:type '(and tn :type '(and tn
...@@ -277,6 +299,28 @@ ...@@ -277,6 +299,28 @@
;;; ---------------------------------------------------------------- ;;; ----------------------------------------------------------------
(define-f3-inst ld #b11 #b000000 :load-store :load) (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:specialize (ld
:disassem-control :disassem-control
#'(lambda (chunk inst stream dstate) #'(lambda (chunk inst stream dstate)
...@@ -287,22 +331,35 @@ ...@@ -287,22 +331,35 @@
immed immed
(rs1 :constant code-offset)) (rs1 :constant code-offset))
(disassem:specialize (ld (disassem:specialize (ld :disassem-control #'note-niss-ref)
:disassem-control
#'(lambda (chunk inst stream dstate)
(when stream
(disassem:maybe-note-nil-indexed-symbol-slot-ref
(disassem:arg-value 'immed chunk inst)
dstate))))
immed immed
(rs1 :constant null-offset)) (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) (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) (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 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) (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 stb #b11 #b000101 :load-store :store)
(define-f3-inst sth #b11 #b000110 :load-store :store) (define-f3-inst sth #b11 #b000110 :load-store :store)
...@@ -310,22 +367,34 @@ ...@@ -310,22 +367,34 @@
;;; ---------------------------------------------------------------- ;;; ----------------------------------------------------------------
(define-f3-inst st #b11 #b000100 :load-store :store) (define-f3-inst st #b11 #b000100 :load-store :store)
(disassem:specialize (st (disassem:specialize (st :disassem-control #'note-niss-ref)
:disassem-control
#'(lambda (chunk inst stream dstate)
(when stream
(disassem:maybe-note-nil-indexed-symbol-slot-ref
(disassem:arg-value 'immed chunk inst)
dstate))))
immed immed
(rs1 :constant null-offset)) (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) (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) (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 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) (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 ldstub #b11 #b001101 :load-store t)
(define-f3-inst swap #b11 #b001111 :load-store t) (define-f3-inst swap #b11 #b001111 :load-store t)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment