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
|