This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
'A' constraint's behavior not compliant with doc under x86-64
- From: Zuxy Meng <zuxy dot meng at gmail dot com>
- To: gcc-help at gcc dot gnu dot org
- Date: Wed, 17 Feb 2010 22:21:36 +0800
- Subject: 'A' constraint's behavior not compliant with doc under x86-64
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