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:
parent
412dc29d62
commit
ae8358d69a
2 changed files with 30 additions and 2 deletions
|
@ -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>
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Add table
Reference in a new issue