[PATCH] PR46598 confusion
Richard Guenther
rguenther@suse.de
Tue Nov 23 16:37:00 GMT 2010
On Tue, 23 Nov 2010, Jan Hubicka wrote:
> > --- 2102,2130 ----
> >
> > @item A
> > The @code{a} and @code{d} registers, as a pair (for instructions that
> > ! return half the result in one and half in the other). For example
>
> I would probably just remove
> ", as a pair (for instructions that
> > ! return half the result in one and half in the other)"
>
> and add something like "This class is used for instructions that return double
> word result in ax:dx pair. Single word values will be allocated either in ax or
> dx." To further prevent confusion that "A" imply register pair instead of class
> containing ax and bx.
>
> The change is OK with me and I believe it belongs to x86 maintainership.
I have committed the following.
Thanks,
Richard.
2010-11-23 Richard Guenther <rguenther@suse.de>
* doc/md.texi (386 constraints): Clarify A constraint documentation.
Index: gcc/doc/md.texi
===================================================================
*** gcc/doc/md.texi (revision 167079)
--- gcc/doc/md.texi (working copy)
*************** The @code{si} register.
*** 2101,2108 ****
The @code{di} register.
@item A
! The @code{a} and @code{d} registers, as a pair (for instructions that
! return half the result in one and half in the other).
@item f
Any 80387 floating-point (stack) register.
--- 2101,2132 ----
The @code{di} register.
@item A
! The @code{a} and @code{d} registers. This class is used for instructions
! that return double word results in the @code{ax:dx} register pair. Single
! word values will be allocated either in @code{ax} or @code{dx}.
! For example on i386 the following implements @code{rdtsc}:
!
! @smallexample
! unsigned long long rdtsc (void)
! @{
! unsigned long long tick;
! __asm__ __volatile__("rdtsc":"=A"(tick));
! return tick;
! @}
! @end smallexample
!
! This is not correct on x86_64 as it would allocate tick in either @code{ax}
! or @code{dx}. You have to use the following variant instead:
!
! @smallexample
! unsigned long long rdtsc (void)
! @{
! unsigned int tickl, tickh;
! __asm__ __volatile__("rdtsc":"=a"(tickl),"=d"(tickh));
! return ((unsigned long long)tickh << 32)|tickl;
! @}
! @end smallexample
!
@item f
Any 80387 floating-point (stack) register.
More information about the Gcc-patches
mailing list