This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: i386 inline-asm string functions - some questions
- From: Denis Zaitsev <zzz at anda dot ru>
- To: Andreas Jaeger <aj at suse dot de>
- Cc: libc-alpha at sources dot redhat dot com, linux-gcc at vger dot kernel dot org,gcc at gcc dot gnu dot org
- Date: Thu, 25 Dec 2003 06:15:24 +0500
- Subject: Re: i386 inline-asm string functions - some questions
- References: <20031225052045.A18774@zzz.ward.six> <20031225003819.GC13447@redhat.com>
On Wed, Dec 24, 2003 at 04:38:19PM -0800, Richard Henderson wrote:
> On Thu, Dec 25, 2003 at 05:20:46AM +0500, Denis Zaitsev wrote:
> > >From some moment in the past, the next input parameters are used here
> > and there in sysdeps/i386/i486/bits/string.h:
> >
> > "m" ( *(struct { char __x[0xfffffff]; } *)__s)
> >
> > When I was seeking for the reasons to do so, I've found some
> > discussions about this in libc-alpha and gcc mailing lists. As I
> > understand from there, there are an options - to use the "m" arg(s)
> > shown above or just to use "memory" in the list of a clobbered
> > registers. So, the question is: why the "m"-way had been choosen?
>
> Someone wanted to describe that memory is read, but not written.
> There's no real good way to do that.
>
> You could use the "X" constraint, which is supposed to mean "anything"
> and by implication "unused", but it's normally only with scratch
> registers, not memories, and the address reloads don't get deleted.
Yes, I've tried the "X" - there is no difference from the "m" - all
the same unneded extra code (exactly).
> You could file an enhancement pr against "X" if you want.
Do you mean a kind of a complain that "X" does't work as it should?