md.texi (386 constraints): Clarify A constraint documentation.

2010-11-23  Richard Guenther  <rguenther@suse.de>

	* doc/md.texi (386 constraints): Clarify A constraint documentation.

From-SVN: r167081
This commit is contained in:
Richard Guenther 2010-11-23 15:15:50 +00:00 committed by Richard Biener
parent 412dc29d62
commit ae8358d69a
2 changed files with 30 additions and 2 deletions

View file

@ -1,3 +1,7 @@
2010-11-23 Richard Guenther <rguenther@suse.de>
* doc/md.texi (386 constraints): Clarify A constraint documentation.
2010-11-23 Basile Starynkevitch <basile@starynkevitch.net>
Jeremie Salvucci <jeremie.salvucci@free.fr>

View file

@ -2101,8 +2101,32 @@ The @code{si} register.
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).
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.