Messages in this thread | | | Date | Fri, 3 Jul 2009 20:04:50 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH -tip] x86: atomic64: inline atomic64_read() |
| |
* Eric Dumazet <eric.dumazet@gmail.com> wrote:
> Now atomic64_read() is light weight (no register pressure and > small icache), we can inline it again. > > Also use "=&A" constraint instead of "+A" to avoid warning about > unitialized 'res' variable. (gcc had to force 0 in eax/edx) > > > $ size vmlinux.prev vmlinux.after > text data bss dec hex filename > 4908667 451676 1684868 7045211 6b805b vmlinux.prev > 4908651 451676 1684868 7045195 6b804b vmlinux.after
ok, but:
> +static inline u64 atomic64_read(atomic64_t *ptr) > +{ > + u64 res; > + > + 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.
So it's not quite lightweight. But your patch reduced the kernel image size by 17 bytes so i guess it counts as an improvement - and we also avoid function calls.
Linus, what's your preference in this case?
Ingo
| |