<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
diff attached<BR><BR><BR> <BR>> Date: Sat, 13 Mar 2010 19:11:14 +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/13 19:11:14<BR>> <BR>> Modified files:<BR>> cm3/m3-sys/m3back/src/: Codex86.m3 M3x86.m3 Stackx86.m3 <BR>> <BR>> Log message:<BR>> improve all integer compares, some/all set compares<BR>> not yet: float compares<BR>> <BR>> old pattern:<BR>> cmp<BR>> setcc byte in memory<BR>> xor reg,reg (any register, I believe)<BR>> mov reg, memory<BR>> <BR>> new patterns, depending on comparison/types:<BR>> xor reg, reg (register restricted to RegistersForByteOperations = {EAX, EBX, ECX, EDX}<BR>> cmp<BR>> setcc reg<BR>> <BR>> or<BR>> cmp possibly with operands reversed<BR>> sbb reg, reg<BR>> neg reg<BR>> <BR>> or<BR>> cmp possibly with operands reversed<BR>> sbb reg, reg<BR>> inc reg<BR>> <BR>> There is a little extra pressure on eax,ebx,ecx,edx, but<BR>> we save an instruction and we avoid use of an in-memory temporary.<BR>> The instruction could have been saved by using movzx as the manuals<BR>> recommend anyway, instead of xor+mov.<BR>> <BR>> The sequences are used are based on optimized C.<BR>> <BR>> Basic problem here is setcc which only sets a byte<BR>> but we generally want 32bit values.<BR>> <BR>> Possibly more to do here.<BR>> <BR>> The main difficulty developing this change was<BR>> that I didn't initially restrict to RegistersForByteOperations.<BR>> Small test cases worked ok but cases with more register pressure did not.<BR>> see test p232 for a test that currently exercises some of this.<BR>> <BR>                                          </body>
</html>