www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2002/02/07/00:01:12

X-Authentication-Warning: delorie.com: mailnull set sender to djgpp-bounces using -f
Message-ID: <3C620456.967C433F@yahoo.com>
From: CBFalconer <cbfalconer AT yahoo DOT com>
Organization: Ched Research
X-Mailer: Mozilla 4.75 [en] (Win98; U)
X-Accept-Language: en
MIME-Version: 1.0
Newsgroups: comp.os.msdos.djgpp,comp.lang.c
Subject: Re: gcc 2.953 output - is this a bug?
References: <3C61E6BB DOT 7F9AD526 AT yahoo DOT com> <87d6zim2vy DOT fsf AT pfaff DOT stanford DOT edu>
Lines: 45
Date: Thu, 07 Feb 2002 04:51:47 GMT
NNTP-Posting-Host: 12.90.167.91
X-Complaints-To: abuse AT worldnet DOT att DOT net
X-Trace: bgtnsc05-news.ops.worldnet.att.net 1013057507 12.90.167.91 (Thu, 07 Feb 2002 04:51:47 GMT)
NNTP-Posting-Date: Thu, 07 Feb 2002 04:51:47 GMT
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp
Reply-To: djgpp AT delorie DOT com

Ben Pfaff wrote:
> 
> CBFalconer <cbfalconer AT yahoo DOT com> writes:
> 
> > Please look at the following disassembly:
> >
> >       h = h * 37UL + (unsigned char) *string++;
> >  585:   8d 04 d2                lea    (%edx,%edx,8),%eax <<***
> >  588:   8d 04 82                lea    (%edx,%eax,4),%eax <<***
> >
> > look at the lines marked "<<***".  I fail to see how this
> > implements h * 37UL.
> 
> Why, you mean it's not perfectly obvious? :-)
> Here's a translation back to C of these lines:
>         eax = edx + 8 * edx
>         eax = edx + 4 * eax
> Here's an equivalent for the first line:
>         eax = 9 * edx
> which, performing a substitution on eax, means that the second
> line becomes equivalent to
>         eax = edx + 4 * (9 * edx)
> and from there it should be evident.
> 
> (GCC is more clever than I thought.)

Thanks.  If I had a handy x86 manual I *might* have eventually
figured it out. Incidentally, I found that gcc generated better
code for:

              h = h * 31UL + *string++;
than for:
              h = (h << 5) - h;
              h += *string++;

the latter used an additional temporary.  Which proves something
or other.

-- 
Chuck F (cbfalconer AT yahoo DOT com) (cbfalconer AT XXXXworldnet DOT att DOT net)
   Available for consulting/temporary embedded and systems.
   (Remove "XXXX" from reply address. yahoo works unmodified)
   mailto:uce AT ftc DOT gov  (for spambots to harvest)


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019