From ea3ac115e871db74ae74a8a59b96c3202fe52e2e Mon Sep 17 00:00:00 2001 From: wlott <wlott> Date: Wed, 11 Mar 1992 18:32:49 +0000 Subject: [PATCH] Optimized system-sap-{ref,set} stuff to compute base=object+offset in one inst instead of two. --- compiler/rt/sap.lisp | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/compiler/rt/sap.lisp b/compiler/rt/sap.lisp index 2b69a1ca9..509e591d1 100644 --- a/compiler/rt/sap.lisp +++ b/compiler/rt/sap.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/rt/sap.lisp,v 1.13 1992/03/10 12:23:22 wlott Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/rt/sap.lisp,v 1.14 1992/03/11 18:32:49 wlott Exp $ ;;; ;;; This file contains the IBM RT VM definition of SAP operations. ;;; @@ -207,17 +207,16 @@ (define-vop (,name) (:policy :fast-safe) (:translate ,translate) - (:args (object :scs (sap-reg) :to (:eval 0)) + (:args (object :scs (sap-reg)) (offset :scs (unsigned-reg) :target base)) (:results (result :scs (,result-sc))) (:arg-types system-area-pointer positive-fixnum) (:result-types ,result-type) - (:temporary (:scs (sap-reg) :from (:argument 1)) base) + (:temporary (:scs (sap-reg) :from (:argument 1) :to :eval) base) (:variant-vars signed) (:variant nil) (:generator 7 - (move base offset) - (inst a base object) + (inst cas base offset object) (let ((offset 0)) ,@access-form))) @@ -288,17 +287,15 @@ (define-vop (,name) (:policy :fast-safe) (:translate ,translate) - (:args (object :scs (sap-reg) :to (:eval 0)) - (offset :scs (unsigned-reg) :target base) - (data :scs (,data-sc) :target result - :to (:eval 1))) + (:args (object :scs (sap-reg)) + (offset :scs (unsigned-reg)) + (data :scs (,data-sc) :target result)) (:arg-types system-area-pointer positive-fixnum ,data-type) - (:temporary (:scs (sap-reg) :from (:argument 1) :to (:eval 2)) base) + (:temporary (:scs (sap-reg) :from (:argument 1)) base) (:results (result :scs (,data-sc))) (:result-types ,data-type) (:generator 7 - (move base offset) - (inst cas base base object) + (inst cas base offset object) (let ((offset 0)) ,set-form) (move result data)))))) @@ -323,6 +320,15 @@ (define-system-set signed-32bit-system-set :word %set-signed-sap-ref-32 signed-reg signed-num) + +(define-system-set sap-system-set :word %set-sap-ref-sap + sap-reg system-area-pointer) + +#| + +Maybe we can get away with using define-system-set now that offsets don't +need to be shifted. + ;;; Ugly, because there are only 2 free sap-regs. We stash the data value in ;;; NARGS to free up a sap-reg for BASE. ;;; @@ -365,6 +371,8 @@ (inst st data object offset) (move result data))) +|# + ;;; fake the presence of sap-ref-single and sap-ref-double. (def-source-transform sap-ref-single (sap offset) -- GitLab