From 2f54c6f4c22546adadc06288a15a60c2e41005aa Mon Sep 17 00:00:00 2001 From: wlott <wlott> Date: Thu, 26 Apr 1990 20:32:28 +0000 Subject: [PATCH] Forgot to save buffer before checking in last set of changes. --- compiler/mips/sap.lisp | 112 ++++++++++++++++++++++------------------- 1 file changed, 59 insertions(+), 53 deletions(-) diff --git a/compiler/mips/sap.lisp b/compiler/mips/sap.lisp index e859e50ba..6b7f691fb 100644 --- a/compiler/mips/sap.lisp +++ b/compiler/mips/sap.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/sap.lisp,v 1.7 1990/04/26 20:23:02 wlott Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/sap.lisp,v 1.8 1990/04/26 20:32:28 wlott Exp $ ;;; ;;; This file contains the MIPS VM definition of SAP operations. ;;; @@ -151,34 +151,37 @@ (:temporary (:scs (sap-reg) :from (:argument 0)) sap) (:temporary (:scs (non-descriptor-reg)) temp) (:generator 5 - (sc-case offset - ((zero) - (move sap object)) - ((negative-immediate immediate) - (inst addu sap object - (ash (tn-value offset) - (ecase size (:byte 0) (:short 1) (:long 2))))) - ((any-reg descriptor-reg) - (ecase size - (:byte - (inst sra temp offset 2) - (inst addu sap object temp)) - (:short - (inst sra temp offset 1) - (inst addu sap object temp)) - (:long - (inst addu sap object offset))))) - (ecase size - (:byte - (if signed - (inst lb result sap 0) - (inst lbu result sap 0))) - (:short - (if signed - (inst lh result sap 0) - (inst lhu result sap 0))) - (:long - (inst lw result sap 0))) + (multiple-value-bind + (base offset) + (sc-case offset + ((zero) + (values object 0)) + ((negative-immediate immediate) + (values object + (ash (tn-value offset) + (ecase size (:byte 0) (:short 1) (:long 2))))) + ((any-reg descriptor-reg) + (ecase size + (:byte + (inst sra temp offset 2) + (inst addu sap object temp)) + (:short + (inst sra temp offset 1) + (inst addu sap object temp)) + (:long + (inst addu sap object offset))) + (values sap 0))) + (ecase size + (:byte + (if signed + (inst lb result base offset) + (inst lbu result base offset))) + (:short + (if signed + (inst lh result base offset) + (inst lhu result base offset))) + (:long + (inst lw result base offset)))) (inst nop))) @@ -194,30 +197,33 @@ sap) (:temporary (:scs (non-descriptor-reg)) temp) (:generator 5 - (sc-case offset - ((zero) - (move sap object)) - ((negative-immediate immediate) - (inst addu sap object - (ash (tn-value offset) - (ecase size (:byte 0) (:short 1) (:long 2))))) - ((any-reg descriptor-reg) - (ecase size - (:byte - (inst sra temp offset 2) - (inst addu sap object temp)) - (:short - (inst sra temp offset 1) - (inst addu sap object temp)) - (:long - (inst addu sap object offset))))) - (ecase size - (:byte - (inst sb value sap 0)) - (:short - (inst sh value sap 0)) - (:long - (inst sw value sap 0))) + (multiple-value-bind + (base offset) + (sc-case offset + ((zero) + (values object 0)) + ((negative-immediate immediate) + (values object + (ash (tn-value offset) + (ecase size (:byte 0) (:short 1) (:long 2))))) + ((any-reg descriptor-reg) + (ecase size + (:byte + (inst sra temp offset 2) + (inst addu sap object temp)) + (:short + (inst sra temp offset 1) + (inst addu sap object temp)) + (:long + (inst addu sap object offset))) + (values sap 0))) + (ecase size + (:byte + (inst sb value base offset)) + (:short + (inst sh value base offset)) + (:long + (inst sw value base offset)))) (move result value))) -- GitLab