<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
diff attached, it is pretty simple<BR><BR> <BR>> Date: Mon, 15 Mar 2010 16:06:35 +0000<BR>> To: m3commit@elegosoft.com<BR>> From: jkrell@elego.de<BR>> Subject: [M3commit] CVS Update: cm3<BR>> <BR>> CVSROOT: /usr/cvs<BR>> Changes by: jkrell@birch. 10/03/15 16:06:35<BR>> <BR>> Modified files:<BR>> cm3/m3-sys/m3back/src/: Codex86.m3 M3x86.m3 M3x86Rep.i3 <BR>> Stackx86.m3 <BR>> <BR>> Log message:<BR>> Remove from one to three instructions from small functions.<BR>> By tracking which non-volatile registers are used and only saving/restoring them.<BR>> Unfortunately, until we are more sophisticated, we have to pay for the size<BR>> for the push instructions, but we nop them out if they aren't needed,<BR>> and only generating the needed pops. (We should look into two and three<BR>> byte nops, but presently I just use one byte nops. The pushes are each<BR>> one instruction. Theoretically, nop is faster than push, though I should check.<BR>> Plus, nop saves us from doing a pop.)<BR>> <BR>> Also a much cleaner fix to the backup(5) vs. patch fix from before. No downside now.<BR>> <BR>> Register allocator should probably favor volatile registers over non-volatile.<BR>> Even a simple PROCEDURE F(a,b:INTEGER) = BEGIN a:=b END F uses ebx. (see test p234, not commited yet)<BR>> <BR>> I noticed an ancient bug in doing this work.<BR>> Functions with >4K frames need to call chkstk or equivalent.<BR>> Specifically, stack pages must be touched in order. call naturally<BR>> touches a page. Or, side motivation: match what the C compiler does. It is correct.<BR>> (See, we also reserve room for sub esp,foo, for 32bit foo, even<BR>> though many functions save save 3 bytes and use an 8bit value and<BR>> some unusual functions can skip the entire thing (if foo = 0))<BR>> <BR>> We can issue errors for such functions and see if any turn up.<BR>> <BR>> See test case p234 (not commited yet).<BR>> <BR>> Use of the new proc_reguse is sprinkled in a bit unnecessarily much here.<BR>> corrupt, set_reg, movop1, load_ind should suffice.<BR>> <BR>                                           </body>
</html>