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: Richard Henderson <rth at redhat dot com>
- To: Andreas Jaeger <aj at suse dot de>, libc-alpha at sources dot redhat dot com, linux-gcc at vger dot kernel dot org, gcc at gcc dot gnu dot org
- Date: Wed, 24 Dec 2003 16:38:19 -0800
- Subject: Re: i386 inline-asm string functions - some questions
- References: <20031225052045.A18774@zzz.ward.six>
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.
You could file an enhancement pr against "X" if you want.
r~