| Date | Wed, 12 Dec 2007 11:25:52 -0800 | From | "H. Peter Anvin" <> | Subject | Re: [RFT] Port 0x80 I/O speed |
| |
Kyle McMartin wrote: > On Wed, Dec 12, 2007 at 12:31:18AM +0100, Rene Herman wrote: >> asm volatile ("rdtsc": "=A" (tsc)); > > rdtsc returns a 64-bit value in two 32-bit regs, you need to do > > inline unsigned long long rdtsc(void) > { > unsigned int lo, hi; > asm volatile ("rdtsc": "=a" (lo), "=d" (hi)); > return (unsigned long long)hi << 32 | lo; > } > > as in msr.h, otherwise you'll only be looking at the value in %rax. >
"=A" works on 32-bit systems (only), obviously, and gcc will generally produce slightly better code as a result (gcc could really use a register renaming/copy propagation step *after* multi-register entities are broken apart, at least on architectures which don't have register pairs as a hardware constraint.)
-hpa
|