![Andi Kleen](/assets/img/avatar_default.png)
B stepping were the first shipping Opterons. memcpy/memset/copy_page/ clear_page had special optimized version for them. These are really old and in the minority now and the difference to the generic versions (using rep microcode) is not that big anyways. So just remove them. TODO: figure out optimized versions for Intel Netburst based EM64T Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
32 lines
535 B
ArmAsm
32 lines
535 B
ArmAsm
/* Copyright 2002 Andi Kleen, SuSE Labs */
|
|
/*
|
|
* ISO C memset - set a memory block to a byte value.
|
|
*
|
|
* rdi destination
|
|
* rsi value (char)
|
|
* rdx count (bytes)
|
|
*
|
|
* rax original destination
|
|
*/
|
|
.globl __memset
|
|
.globl memset
|
|
.p2align 4
|
|
memset:
|
|
__memset:
|
|
movq %rdi,%r9
|
|
movl %edx,%r8d
|
|
andl $7,%r8d
|
|
movl %edx,%ecx
|
|
shrl $3,%ecx
|
|
/* expand byte value */
|
|
movzbl %sil,%esi
|
|
movabs $0x0101010101010101,%rax
|
|
mulq %rsi /* with rax, clobbers rdx */
|
|
rep
|
|
stosq
|
|
movl %r8d,%ecx
|
|
rep
|
|
stosb
|
|
movq %r9,%rax
|
|
ret
|