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
|