lkml.org 
[lkml]   [2009]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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


\
 
 \ /
  Last update: 2009-07-03 20:07    [W:0.135 / U:0.064 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site