Hi Gonzalo!

> memcpy already takes care of copying in the fastest way posible.

That's right, but we still have a call, a ret, and a conditional or two ;-)
By inlining we can get rid of these things (especially if size is known up-front).
Moreover, due to JIT's dynamic nature it's possible to generate faster code at 
run-time.
For example, the following (generic) memcpy is faster on pre-Pentium x86s (Intel 
syntax):
  mov esi, $src
  mov ecx, $size
  mov edi, $dest
  shr ecx,1
  rep movsw
  adc cl,cl
  rep movsb

For const size==1 we could just mov al, [src]; mov [dest],al
etc.etc.
BTW, MS JIT uses similar optimizations for cpblk/initblk.

This is a small optimization of course, something similar to inlining TLS access, but 
why not :-)
In fact I'm more concerned about possible incompatibility, if people would rely on 
memmove-like
behaviour for cpblk in Mono.

Sergey


----- Original Message ----- 
From: "Gonzalo Paniagua Javier" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, May 25, 2002 3:27 AM
Subject: Re: [Mono-list] cpblk?


> * [ Serge <[EMAIL PROTECTED]>
> * Fri, 24 May 2002 21:29:54 +0200 ]
> > I think that the point is to use fast block move instructions if
> > available (say, MOVS on x86), especially in the cases where
> > size=const.  Hence non-overlapping behaviour in the specs.
> 
> Hi Sergey!
> 
> memcpy already takes care of copying in the fastest way posible. It has
> a threshold (may be 8, can't remember now) and if the number of bytes to
> copy is GE than the threshold, it uses movl. If not, it uses movb.
> 
> 
> 
> _______________________________________________
> Mono-list maillist  -  [EMAIL PROTECTED]
> http://lists.ximian.com/mailman/listinfo/mono-list
> 




_______________________________________________
Mono-list maillist  -  [EMAIL PROTECTED]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to