<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
Hey that's pretty clever.<BR>
It costs a register, but given:<BR>
 <BR>
    if (b >= constantX|| b <= -constantY)<BR>        a = 0;<BR>
 <BR>
The C compiler instead does something like:<BR>
  if ((b + constantY - 1) > (constantX + constantY - 1))<BR>
    a = 0;<BR>
 <BR>
This is something the front end could do in many cases.?<BR>
Adding a constant to eliminate one of the compares and branches is a win.<BR>
If an x86 compiler will give up a register for this, then it is probably a win everywhere.<BR>
 <BR>
Granted, it probably requires silent overflow. Oh well.<BR>
 <BR>
 - Jay<BR>
 <BR>> Date: Tue, 2 Mar 2010 13:59:31 +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/02 13:59:31<BR>> <BR>> Modified files:<BR>> cm3/m3-libs/m3core/src/Csupport/Common/: hand.c <BR>> <BR>> Log message:<BR>> remove m3_shift64, which for the record was:<BR>> uint64 __stdcall m3_shift64(uint64 a, int b)<BR>> {<BR>> if (b >= 64 || b <= -64)<BR>> a = 0;<BR>> else if (b > 0)<BR>> a <<= b;<BR>> else if (b < 0)<BR>> a >>= -b;<BR>> return a;<BR>> }<BR>> <BR>> _m3_shift64@12:<BR>> 00000000: 55 push ebp<BR>> 00000001: 8B EC mov ebp,esp<BR>> 00000003: 8B 4D 10 mov ecx,dword ptr [ebp+10h]<BR>> 00000006: 8D 41 3F lea eax,[ecx+3Fh]<BR>> 00000009: 83 F8 7E cmp eax,7Eh<BR>> 0000000C: 77 1C ja 0000002A<BR>> 0000000E: 8B 45 08 mov eax,dword ptr [ebp+8]<BR>> 00000011: 8B 55 0C mov edx,dword ptr [ebp+0Ch]<BR>> 00000014: 85 C9 test ecx,ecx<BR>> 00000016: 7E 07 jle 0000001F<BR>> 00000018: E8 00 00 00 00 call __allshl<BR>> 0000001D: EB 0F jmp 0000002E<BR>> 0000001F: 7D 0D jge 0000002E<BR>> 00000021: F7 D9 neg ecx<BR>> 00000023: E8 00 00 00 00 call __aullshr<BR>> 00000028: EB 04 jmp 0000002E<BR>> 0000002A: 33 C0 xor eax,eax<BR>> 0000002C: 33 D2 xor edx,edx<BR>> 0000002E: 5D pop ebp<BR>> 0000002F: C2 0C 00 ret 0Ch<BR>> <BR>                                           </body>
</html>