From 7902c1cc813c43ca7ed1a837c4499b850b041736 Mon Sep 17 00:00:00 2001
From: wlott <wlott>
Date: Sat, 7 Jul 1990 01:01:37 +0000
Subject: [PATCH] Added :single and :double sized to sap-ref and sap-set.

---
 compiler/mips/sap.lisp | 34 +++++++++++++++++++++++++---------
 1 file changed, 25 insertions(+), 9 deletions(-)

diff --git a/compiler/mips/sap.lisp b/compiler/mips/sap.lisp
index 5694a5b0e..061bf408f 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.15 1990/06/22 17:31:03 wlott Exp $
+;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/sap.lisp,v 1.16 1990/07/07 01:01:37 wlott Exp $
 ;;;
 ;;;    This file contains the MIPS VM definition of SAP operations.
 ;;;
@@ -73,7 +73,7 @@
 (define-vop (move-sap-argument)
   (:args (x :target y
 	    :scs (sap-reg))
-	 (fp :scs (descriptor-reg)
+	 (fp :scs (any-reg)
 	     :load-if (not (sc-is y sap-reg))))
   (:results (y))
   (:generator 0
@@ -178,7 +178,7 @@
 	     (:short
 	      (inst sra temp offset 1)
 	      (inst addu sap object temp))
-	     (:long
+	     ((:long :single :double)
 	      (inst addu sap object offset)))
 	   (values sap 0)))
       (ecase size
@@ -191,7 +191,12 @@
 	     (inst lh result base offset)
 	     (inst lhu result base offset)))
 	(:long
-	 (inst lw result base offset))))
+	 (inst lw result base offset))
+	(:single
+	 (inst lwc1 result base offset))
+	(:double
+	 (inst lwc1 result base offset)
+	 (inst lwc1-odd result base (+ offset vm:word-bytes)))))
     (inst nop)))
 
 
@@ -225,17 +230,28 @@
 	     (:short
 	      (inst sra temp offset 1)
 	      (inst addu sap object temp))
-	     (:long
+	     ((:long :single :double)
 	      (inst addu sap object offset)))
 	   (values sap 0)))
       (ecase size
 	(:byte
-	 (inst sb value base offset))
+	 (inst sb value base offset)
+	 (move result value))
 	(:short
-	 (inst sh value base offset))
+	 (inst sh value base offset)
+	 (move result value))
 	(:long
-	 (inst sw value base offset))))
-    (move result value)))
+	 (inst sw value base offset)
+	 (move result value))
+	(:single
+	 (inst swc1 value base offset)
+	 (unless (location= result value)
+	   (inst move :single result value)))
+	(:double
+	 (inst swc1 value base offset)
+	 (inst swc1-odd value base (+ offset vm:word-bytes))
+	 (unless (location= result value)
+	   (inst move :double result value)))))))
 
 
 
-- 
GitLab