Re: x86 D flag: what's its status thru the program?

Lukasz Michal Rak <[email protected]> Mon, 5 Jul 2004 19:19:06 +0200 (CEST)
Newsgroups org.kernel.vger.linux-gcc
Message-ID <[email protected]>
> >  The convention is that the D flag in IA32 is cleared. So if you call a
> > subroutine you have to clear D flag before making call.
>
> Do you mean that 'I have to clear the D flag if I had set it somewhere
> before?'  Else what is the sense of the convention?
Yes. Other code may assume that D is cleared and for example after calling
your code will not check state of D flag, so if you will left D flag set
this may cause errors.

> > The subroutine can change the state of D flag, but before returning
> > the routine has to clear the D flag.
>
> If the subroutine can change the flag, that it will violate the
> convention, won't it?  And what is the strength of the convention,
> again?
>
Subroutine can change the D flag, but before exiting must clear it.

The convention should make you free from checking the state of flag
and clearing at the beginning of your code.

> >  Hope I helped.
>
> Thanks, but I still don't understand something.  Again: if every
> procedure keeps the flag clear at exit, then why the same every
> procedure clears it at entry?  In a suspicion, that caller has changed
> the flag against the rules?
Just to be sure that the D flag is cleared. The convetion is one thing and
reality other.


Lukasz