diff --git a/compiler/mips/macros.lisp b/compiler/mips/macros.lisp index 1fef1e04095eec5190a596bb4d277bd82c59422c..894df8bba2d8b2c40666a999dea1610dba215c1d 100644 --- a/compiler/mips/macros.lisp +++ b/compiler/mips/macros.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/macros.lisp,v 1.33 1990/06/04 05:25:13 wlott Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/macros.lisp,v 1.34 1990/06/20 21:34:53 ram Exp $ ;;; ;;; This file contains various useful macros for generating MIPS code. ;;; @@ -147,6 +147,23 @@ ((control-stack) (storew reg fp-tn offset)))))) + +;;;; Storage allocation: + +(defmacro with-fixed-allocation ((result-tn temp-tn type-code size) + &body body) + "Do stuff to allocate an other-pointer object of fixed Size with a single + word header having the specified Type-Code. The result is placed in + Result-TN, and Temp-TN is a non-descriptor temp (which may be randomly used + by the body.) The body is placed inside the PSEUDO-ATOMIC, and presumably + initializes the object." + `(pseudo-atomic (,temp-tn) + (inst addu ,result-tn alloc-tn vm:other-pointer-type) + (inst addu alloc-tn alloc-tn (vm:pad-data-block ,size)) + (inst li ,temp-tn (logior (ash (1- ,size) vm:type-bits) ,type-code)) + (storew ,temp-tn ,result-tn 0 vm:other-pointer-type) + ,@body)) + ;;;; Three Way Comparison