diff --git a/compiler/sparc/sap.lisp b/compiler/sparc/sap.lisp index 18388e10d7bbe1257688bddc6d5b6b59ae732657..ae19ff5425882fd5453a18c220c76d11d82b0116 100644 --- a/compiler/sparc/sap.lisp +++ b/compiler/sparc/sap.lisp @@ -5,7 +5,7 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/sap.lisp,v 1.9 1998/03/21 08:05:24 dtc Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/sap.lisp,v 1.10 2000/08/12 07:33:42 dtc Rel $") ;;; ;;; ********************************************************************** ;;; @@ -296,3 +296,24 @@ (inst add sap vector (- (* vector-data-offset word-bytes) other-pointer-type)))) + + +;;; Transforms for 64-bit SAP accessors. + +(deftransform sap-ref-64 ((sap offset) (* *)) + '(logior (ash (sap-ref-32 sap offset) 32) + (sap-ref-32 sap (+ offset 4)))) + +(deftransform signed-sap-ref-64 ((sap offset) (* *)) + '(logior (ash (signed-sap-ref-32 sap offset) 32) + (sap-ref-32 sap (+ 4 offset)))) + +(deftransform %set-sap-ref-64 ((sap offset value) (* * *)) + '(progn + (%set-sap-ref-32 sap offset (ash value -32)) + (%set-sap-ref-32 sap (+ offset 4) (logand value #xffffffff)))) + +(deftransform %set-signed-sap-ref-64 ((sap offset value) (* * *)) + '(progn + (%set-signed-sap-ref-32 sap offset (ash value -32)) + (%set-sap-ref-32 sap (+ 4 offset) (logand value #xffffffff))))