Messages in this thread | | | Date | Fri, 3 Jul 2009 12:10:23 -0700 (PDT) | From | Linus Torvalds <> | Subject | Re: [PATCH -tip] x86: atomic64: inline atomic64_read() |
| |
On Fri, 3 Jul 2009, Ingo Molnar wrote: > > + > > + asm volatile( > > + "mov %%ebx, %%eax\n\t" > > + "mov %%ecx, %%edx\n\t" > > + LOCK_PREFIX "cmpxchg8b %1\n" > > + : "=&A" (res) > > + : "m" (*ptr) > > + ); > > That clobbers or affects eax, ebx, ecx, edx. The only registers it > does not clobber is esi, edi and rbp.
No, it only clobbers eax/edx. Yes, it touches ebx/ecx, but that's kind of incidental, and read-only, and doesn't matter.
> Linus, what's your preference in this case?
I think it's kind of subtle to do that thing, but it _is_ very much a special case. It's odd to use a cmpxchg8b to just do a read in the first place, so the fact that we then play other games with it is kind of immaterial.
Adding a comment about the magic "we don't care about the initial values in eax/edx and ebx/ecx, but they have to match in case we end up doing a writeback" might be a good idea.
Linus
| |