This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [new-ra] GCC-3.3.2/x86: some suspicious behaviour


On Thu, Jul 08, 2004 at 05:52:57PM +0100, Paul Brook wrote:
> On Thursday 08 July 2004 17:31, Denis Zaitsev wrote:
> > On Thu, Jul 08, 2004 at 04:46:33PM +0200, Michael Matz wrote:
> > > Hi,
> > >
> > > On Thu, 8 Jul 2004, Denis Zaitsev wrote:
> > > > So, what does these two commands mean:
> > > >
> > > >
> > > > 	movl	%ecx, 16(%esp)
> > > > 	movl	%esi, 20(%esp)
> > >
> > > It means that the compiler wasn't able to optimize them away.  They do no
> > > harm.  FWIW gcc 3.4 or the new-regalloc-branch don't have this problem.
> >
> > They don't harm.  But to optimize _what_?  So, what is the initial
> > meaning of these assignments?  And why they appear only for the double
> > asm statement?
> 
> They're storing the modified values of s and d back into their stack slots 
> after the first asm. The compiler wasn't able to determine that these were 
> dead stores.
> 
> Remove the "extern inline" and compile with -O0. This will show you 
> approximately what the code looks like before optimization.

Yes, this way the variables are really just stored back into their
stack locations.  But in my case:


	movl	20(%esp), %ecx
	movl	16(%esp), %esi
	movl	%ecx, 16(%esp)
	movl	%esi, 20(%esp)


So, the stack slots seem to be swapped.  Why?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]