Path: utzoo!attcan!utgpu!jarvis.csri.toronto.edu!mailrus!cs.utexas.edu!samsung!xanth!mcnc!rti!xyzzy!meissner From: meissner@dg-rtp.dg.com (Michael Meissner) Newsgroups: comp.sys.m88k Subject: Re: Register Allocation (was Re: Info about 88open & standards) Message-ID: Date: 29 Nov 89 16:03:08 GMT References: <1989Nov16.212149.9770@paris.ics.uci.edu> <100050002@hpcuhc.HP.COM> Sender: usenet@xyzzy.UUCP Organization: Data General (Languages @ Research Triangle Park, NC.) Lines: 24 In-reply-to: edwardm@hpcuhc.HP.COM's message of 27 Nov 89 19:14:50 GMT In article <100050002@hpcuhc.HP.COM> edwardm@hpcuhc.HP.COM (Edward McClanahan) writes: | Both of these schemes implement the callee-saved model, but the JSR/BSR | is faster for "low-level...routines". | | In HP's RISC architecture, we have both callee and caller saved registers | (as is the case in the m88k standard). Still, for some "low-level stuff", | we needed a faster way to call a function. We implemented "millicode" to | fill this gap. The caller simply doesn't have to save any caller-saved | registers it happens to be using at the time. Similarly, the optimizer | doesn't have to halt optimization across the millicode call. Those | "low-level str and mem routines" are implemented in millicode. Is there | any provision for this calling convention in the m88k standard? The OCS doesn't directly support millicode, and I'm not aware of any compilers that use internal calling sequences. However for optimizing the str* and mem* stuff, you really need 10 or more registers (I think our memcpy uses more than the 12 non-preserved registers to fully pipeline the loads and such). -- Michael Meissner, Data General. Until 12/15: meissner@dg-rtp.DG.COM After 12/15: meissner@osf.org