public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Screwy arch/x86/include/asm/string_32.h
@ 2009-03-14 16:06 David Newall
  2009-03-14 22:53 ` Jeremy Fitzhardinge
  0 siblings, 1 reply; 2+ messages in thread
From: David Newall @ 2009-03-14 16:06 UTC (permalink / raw)
  To: Linux Kernel Mailing List

There's a lot of weirdness in __constant_memcpy in
arch/x86/include/asm/string_32.h (2.6.29-rc7).

   1. The first switch is missing a case for n equal 7.
   2. When n < 20, the four tests (n > 16, n > 12, n > 8 & n > 4)
      execute identical statements; always 'asm volatile("movsl" :
      "=&D"(edi), "=&S"(esi) : "0"(edi), "1"(esi) : "memory")'.


I think it copies less than 4 bytes for values of n between 9 and 19.

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: Screwy arch/x86/include/asm/string_32.h
  2009-03-14 16:06 Screwy arch/x86/include/asm/string_32.h David Newall
@ 2009-03-14 22:53 ` Jeremy Fitzhardinge
  0 siblings, 0 replies; 2+ messages in thread
From: Jeremy Fitzhardinge @ 2009-03-14 22:53 UTC (permalink / raw)
  To: David Newall; +Cc: Linux Kernel Mailing List

David Newall wrote:
> There's a lot of weirdness in __constant_memcpy in
> arch/x86/include/asm/string_32.h (2.6.29-rc7).
>
>    1. The first switch is missing a case for n equal 7.
>   
That's because there's no way to copy 7 bytes in two operations of 1/2/4 
bytes; it would need to be 3 (4+2+1), which I guess the author deemed 
overly complex.

>    2. When n < 20, the four tests (n > 16, n > 12, n > 8 & n > 4)
>       execute identical statements; always 'asm volatile("movsl" :
>       "=&D"(edi), "=&S"(esi) : "0"(edi), "1"(esi) : "memory")'.
>   

movs is a string instruction which has the side-effect of incrementing 
esi and edi, so each if() falls through to copy the next 4 bytes.

However, the tail switch should probably use plain "mov" rather than 
"movs" because nobody uses esi/edi afterwards.

    J

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2009-03-14 22:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-14 16:06 Screwy arch/x86/include/asm/string_32.h David Newall
2009-03-14 22:53 ` Jeremy Fitzhardinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox