Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/5/84; site umd5.UUCP Path: utzoo!watmath!clyde!bonnie!akgua!gatech!seismo!umcp-cs!cvl!umd5!oconnor From: oconnor@umd5.UUCP Newsgroups: net.micro.atari Subject: Re: ERROR MESSAGES AND HIPPO-C Message-ID: <809@umd5.UUCP> Date: Fri, 6-Dec-85 22:58:37 EST Article-I.D.: umd5.809 Posted: Fri Dec 6 22:58:37 1985 Date-Received: Sun, 8-Dec-85 03:25:12 EST References: <8512061148.AA25696@ucbvax.berkeley.edu> Reply-To: oconnor@umd5.UUCP (Mike oconnor) Organization: U of Md, CSC, College Park, Md Lines: 51 The "out of registers" error is a result of poor compiler design. When generating subroutine calls the Hippo C compiler generates code that moves each argument into a data register before moving it onto the stack. Unfortunately it does not reuse the data register, so that when you have a call with more arguments than available registers the compiler will halt with the error "out of registers". Of the 8 data registers in the 68K only six can be used this way (a Hippo issue, not hardware). So a call to the VDI routine "v_ellpie()" which has 7 arguments will not compile (even though it is "supported" by Hippo). For example, if a program contained the following subroutine call: v_ellpie( handle, x, y, xradius, yradius, begang, endang ) ; where all the arguments are automatic variables contained in "main", the Hippo compiler generates the following assembly language: move.w -200(a6),d2 ext.l d2 move.w -198(a6),d3 ext.l d3 move.w -196(a6),d4 ext.l d4 move.w -194(a6),d5 ext.l d5 move.w -192(a6),d6 ext.l d6 move.w -190(a6),d7 whereupon it would halt with the "out of registers" error message. If there were enough registers, it would have continued with: ext.l d7 move.w -188(a6),d8 ext.l d8 move.l d2,-(sp) move.l d3,-(sp) move.l d4,-(sp) move.l d5,-(sp) move.l d6,-(sp) move.l d7,-(sp) move.l d8,-(sp) jsr _v_ellpie Because of this and their copy-protection I do not recommend this compiler to anyone. Mike O'Connor oconnor@umd5.arpa oconnor@umd5.UUCP