'A' constraint's behavior not compliant with doc under x86-64

Tim Prince n8tm@aol.com
Wed Feb 17 14:30:00 GMT 2010


On 2/17/2010 6:21 AM, Zuxy Meng wrote:
> Hi,
>
> According to "info gcc", the 'A' constraint denotes the `a' and `d'
> registers, as a pair (for instructions that return half the result in
> one and half in the other). However, in reality 'A' is treated simply as
> a 64-bit long integer in %rax under x86-64. For example, the following
> code piece:
>
> #include <stdint.h>
>
> uint64_t rdtsc(void)
> {
>     uint64_t ret;
>     asm ("rdtsc":"=A"(ret));
>     return ret;
> }
>
> produces:
>
> [zuxy@Rainbow31 bin]$ objdump -d a.o
>
> a.o:     file format elf64-x86-64
>
>
> Disassembly of section .text:
>
> 0000000000000000 <rdtsc>:
>    0:   0f 31                   rdtsc
>    2:   c3                      retq
>
> I'm using GCC 4.4.3 but I doubt the problem has been there since Day One.
> --
> Zuxy
>
>   
The problem of incompatibility of gcc inline asm for rdtsc between 32-
and 64-bit mode "has been there since Day One". For 64-bit mode, you are
stuck with concatenating the 2 registers explicitly.

Tim Prince



More information about the Gcc-help mailing list