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

Changed re new assemfile: All temps have explicit offsets and scs.

Wrapped an eval-when around undefined-function, 'cause there is no reason
to generate a vop for it.
parent a90f7b47
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/assembly/mips/array.lisp,v 1.7 1990/04/24 03:13:54 wlott Exp $ ;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/assembly/mips/array.lisp,v 1.8 1990/05/23 06:11:51 wlott Exp $
;;; ;;;
;;; This file contains the support routines for arrays and vectors. ;;; This file contains the support routines for arrays and vectors.
;;; ;;;
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
(in-package "C") (in-package "C")
(eval-when (eval)
(defmacro allocate-vector (type length words vector ndescr) (defmacro allocate-vector (type length words vector ndescr)
`(pseudo-atomic (,ndescr) `(pseudo-atomic (,ndescr)
(inst or ,vector alloc-tn vm:other-pointer-type) (inst or ,vector alloc-tn vm:other-pointer-type)
...@@ -36,28 +38,32 @@ ...@@ -36,28 +38,32 @@
(declare (ignore vector words)) (declare (ignore vector words))
nil) nil)
); eval-when (eval)
(define-assembly-routine (allocate-vector
(:arg type)
(:arg length)
(:arg words)
(:res result)
(:temp vector :sc descriptor-reg) (define-assembly-routine (allocate-vector
(:temp ndescr :sc non-descriptor-reg :type random)) ()
(:arg type any-reg a0-offset)
(:arg length any-reg a1-offset)
(:arg words any-reg a2-offset)
(:res result descriptor-reg a0-offset)
(:temp ndescr non-descriptor-reg nl0-offset)
(:temp vector descriptor-reg a3-offset))
(allocate-vector type length words vector ndescr) (allocate-vector type length words vector ndescr)
(maybe-invoke-gc vector words) (maybe-invoke-gc vector words)
(move result vector)) (move result vector))
(define-assembly-routine (alloc-g-vector (define-assembly-routine (alloc-g-vector
(:arg length) ()
(:arg fill) (:arg length any-reg a0-offset)
(:res result) (:arg fill any-reg a1-offset)
(:res result descriptor-reg a0-offset)
(:temp ndescr :sc non-descriptor-reg :type random) (:temp ndescr non-descriptor-reg nl0-offset)
(:temp lip :sc interior-reg :type interior) (:temp lip interior-reg lip-offset)
(:temp vector :sc descriptor-reg)) (:temp vector descriptor-reg a3-offset))
(allocate-vector vm:simple-vector-type length length vector ndescr) (allocate-vector vm:simple-vector-type length length vector ndescr)
(inst beq length zero-tn done) (inst beq length zero-tn done)
...@@ -72,17 +78,18 @@ ...@@ -72,17 +78,18 @@
(inst addu lip lip vm:word-bytes) (inst addu lip lip vm:word-bytes)
done done
(move result vector)) (move result vector))
(define-assembly-routine (alloc-string (define-assembly-routine (alloc-string
(:arg length) ()
(:res result) (:arg length any-reg a0-offset)
(:res result descriptor-reg a0-offset)
(:temp ndescr :sc non-descriptor-reg :type random) (:temp ndescr non-descriptor-reg nl0-offset)
(:temp vector :sc descriptor-reg) (:temp words any-reg nl1-offset)
(:temp words :sc non-descriptor-reg :type fixnum)) (:temp vector descriptor-reg a3-offset))
;; Note: When we calculate the number of words needed, we assure that there ;; Note: When we calculate the number of words needed, we assure that there
;; will be at least one extra byte available. This allows us to pass strings ;; will be at least one extra byte available. This allows us to pass strings
;; to C land without having to tack an extra null on the end ourselves. ;; to C land without having to tack an extra null on the end ourselves.
...@@ -108,19 +115,19 @@ ...@@ -108,19 +115,19 @@
;;;; Hash primitives ;;;; Hash primitives
(define-assembly-routine (sxhash-simple-string (define-assembly-routine (sxhash-simple-string
(:arg string) ()
(:res result) (:arg string descriptor-reg a0-offset)
(:res result any-reg a0-offset)
(:temp lip :sc interior-reg :type interior)
(:temp length :sc any-reg :type fixnum) (:temp lip interior-reg lip-offset)
(:temp accum :sc non-descriptor-reg :type random) (:temp length any-reg a2-offset)
(:temp data :sc non-descriptor-reg :type random) (:temp accum non-descriptor-reg nl0-offset)
(:temp byte :sc non-descriptor-reg :type random)) (:temp data non-descriptor-reg nl1-offset)
(:temp byte non-descriptor-reg nl2-offset))
(loadw length string vm:vector-length-slot vm:other-pointer-type) (loadw length string vm:vector-length-slot vm:other-pointer-type)
(inst addu lip string (inst addu lip string
(- (* vm:vector-data-offset vm:word-bytes) vm:other-pointer-type)) (- (* vm:vector-data-offset vm:word-bytes) vm:other-pointer-type))
...@@ -203,15 +210,15 @@ ...@@ -203,15 +210,15 @@
(define-assembly-routine (sxhash-simple-substring (define-assembly-routine (sxhash-simple-substring
(:arg string) ()
(:arg length) (:arg string descriptor-reg a0-offset)
(:res result) (:arg length any-reg a1-offset)
(:res result any-reg a0-offset)
(:temp lip :sc interior-reg :type interior)
(:temp accum :sc non-descriptor-reg :type random) (:temp lip interior-reg lip-offset)
(:temp data :sc non-descriptor-reg :type random) (:temp accum non-descriptor-reg nl0-offset)
(:temp byte :sc non-descriptor-reg :type random)) (:temp data non-descriptor-reg nl1-offset)
(loadw length string vm:vector-length-slot vm:other-pointer-type) (:temp byte non-descriptor-reg nl2-offset))
(inst addu lip string (inst addu lip string
(- (* vm:vector-data-offset vm:word-bytes) vm:other-pointer-type)) (- (* vm:vector-data-offset vm:word-bytes) vm:other-pointer-type))
(inst b test) (inst b test)
...@@ -290,3 +297,4 @@ ...@@ -290,3 +297,4 @@
(inst sll result accum 5) (inst sll result accum 5)
(inst srl result result 3)) (inst srl result result 3))
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