Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 30 Jun 2005 13:28:42 -0400
From:      John Baldwin <jhb@FreeBSD.org>
To:        freebsd-hackers@freebsd.org
Cc:        Max Laier <max@love2party.net>, Andriy Tkachuk <andrit@ukr.net>
Subject:   Re: hot path optimizations in uma_zalloc() & uma_zfree()
Message-ID:  <200506301328.43333.jhb@FreeBSD.org>
In-Reply-To: <003901c57d82$37891b80$de921bd9@ertpc>
References:  <000d01c57cf7$b9b6f9f0$29931bd9@ertpc> <200506301415.38106.max@love2party.net> <003901c57d82$37891b80$de921bd9@ertpc>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thursday 30 June 2005 10:35 am, Andriy Tkachuk wrote:
> I just checked the object code - you right, it almost the same:
>
> -   bucket->ub_bucket[bucket->ub_cnt] = item;
> -    22b9: 0f bf 43 08           movswl 0x8(%ebx),%eax
> -    22bd: 8b 4d 0c              mov    0xc(%ebp),%ecx
> -    22c0: 89 4c 83 0c           mov    %ecx,0xc(%ebx,%eax,4)
> -   bucket->ub_cnt++;
> -    22c4: 8d 42 01              lea    0x1(%edx),%eax
> -    22c7: 66 89 43 08           mov    %ax,0x8(%ebx)
> +   bucket->ub_bucket[bucket->ub_cnt++] = item;
> +    22b9: 0f bf c2              movswl %dx,%eax
> +    22bc: 8b 4d 0c              mov    0xc(%ebp),%ecx
> +    22bf: 89 4c 83 0c           mov    %ecx,0xc(%ebx,%eax,4)
> +    22c3: 8d 42 01              lea    0x1(%edx),%eax
> +    22c6: 66 89 43 08           mov    %ax,0x8(%ebx)
>
> but still there is some minor difference in first line.
> I'm not familiar with assembler, can somebody explain
> whether this difference is assential or not?

It just uses the stored value of the variable in %dx instead of loading it 
from memory at 0x8(%ebx).  When I compiled a simple test program here locally 
I got identical object code though.

> in decrementation there is no difference at all:
>
> -                       bucket->ub_cnt--;
> +                       item = bucket->ub_bucket[--bucket->ub_cnt];
>      1bbe:      66 ff 49 08             decw   0x8(%ecx)
> -                       item = bucket->ub_bucket[bucket->ub_cnt];
>      1bc2:      0f bf 41 08             movswl 0x8(%ecx),%eax
>      1bc6:      8b 44 81 0c             mov    0xc(%ecx,%eax,4),%eax
>      1bca:      89 45 f0                mov    %eax,0xfffffff0(%ebp)
>
>
> ----- Original Message -----
> From: "Max Laier" <max@love2party.net>
> To: <freebsd-hackers@freebsd.org>
> Cc: "ant" <andrit@ukr.net>
> Sent: Thursday, June 30, 2005 3:15 PM
> Subject: Re: hot path optimizations in uma_zalloc() & uma_zfree()
>
> > Another optimization is very trivial, for example:
> > -   bucket->ub_cnt--;
> > -   item = bucket->ub_bucket[bucket->ub_cnt];
> > +   item = bucket->ub_bucket[--bucket->ub_cnt];
> > (see the patch)
>
> Might be me, but this doesn't change the generated object code at all
> (modulo the changed __line__ in debugging).
>
>
>
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200506301328.43333.jhb>