Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libc/amd64/string/memset.S
Show All 35 Lines | |||||
.macro MEMSET erms | .macro MEMSET erms | ||||
movq %rdi,%rax | movq %rdi,%rax | ||||
movq %rdx,%rcx | movq %rdx,%rcx | ||||
movzbq %sil,%r8 | movzbq %sil,%r8 | ||||
movabs $0x0101010101010101,%r10 | movabs $0x0101010101010101,%r10 | ||||
imulq %r8,%r10 | imulq %r8,%r10 | ||||
cmpq $32,%rcx | cmpq $32,%rcx | ||||
jb 1016f | jbe 101632f | ||||
cmpq $256,%rcx | cmpq $256,%rcx | ||||
ja 1256f | ja 1256f | ||||
1032: | 103200: | ||||
movq %r10,(%rdi) | movq %r10,(%rdi) | ||||
movq %r10,8(%rdi) | movq %r10,8(%rdi) | ||||
movq %r10,16(%rdi) | movq %r10,16(%rdi) | ||||
movq %r10,24(%rdi) | movq %r10,24(%rdi) | ||||
leaq 32(%rdi),%rdi | leaq 32(%rdi),%rdi | ||||
subq $32,%rcx | subq $32,%rcx | ||||
cmpq $32,%rcx | cmpq $32,%rcx | ||||
jae 1032b | ja 103200b | ||||
cmpb $0,%cl | |||||
je 1000f | |||||
1016: | |||||
cmpb $16,%cl | cmpb $16,%cl | ||||
jl 1008f | ja 201632f | ||||
movq %r10,-16(%rdi,%rcx) | |||||
movq %r10,-8(%rdi,%rcx) | |||||
ret | |||||
ALIGN_TEXT | |||||
101632: | |||||
cmpb $16,%cl | |||||
jl 100816f | |||||
201632: | |||||
movq %r10,(%rdi) | movq %r10,(%rdi) | ||||
movq %r10,8(%rdi) | movq %r10,8(%rdi) | ||||
subb $16,%cl | movq %r10,-16(%rdi,%rcx) | ||||
jz 1000f | movq %r10,-8(%rdi,%rcx) | ||||
leaq 16(%rdi),%rdi | ret | ||||
1008: | ALIGN_TEXT | ||||
100816: | |||||
cmpb $8,%cl | cmpb $8,%cl | ||||
jl 1004f | jl 100408f | ||||
movq %r10,(%rdi) | movq %r10,(%rdi) | ||||
subb $8,%cl | movq %r10,-8(%rdi,%rcx) | ||||
jz 1000f | ret | ||||
leaq 8(%rdi),%rdi | ALIGN_TEXT | ||||
1004: | 100408: | ||||
cmpb $4,%cl | cmpb $4,%cl | ||||
jl 1002f | jl 100204f | ||||
movl %r10d,(%rdi) | movl %r10d,(%rdi) | ||||
subb $4,%cl | movl %r10d,-4(%rdi,%rcx) | ||||
jz 1000f | ret | ||||
leaq 4(%rdi),%rdi | ALIGN_TEXT | ||||
1002: | 100204: | ||||
cmpb $2,%cl | cmpb $2,%cl | ||||
jl 1001f | jl 100001f | ||||
movw %r10w,(%rdi) | movw %r10w,(%rdi) | ||||
subb $2,%cl | movw %r10w,-2(%rdi,%rcx) | ||||
jz 1000f | ret | ||||
leaq 2(%rdi),%rdi | ALIGN_TEXT | ||||
1001: | 100001: | ||||
cmpb $1,%cl | cmpb $0,%cl | ||||
jl 1000f | je 100000f | ||||
movb %r10b,(%rdi) | movb %r10b,(%rdi) | ||||
1000: | 100000: | ||||
ret | ret | ||||
ALIGN_TEXT | ALIGN_TEXT | ||||
1256: | 1256: | ||||
movq %rdi,%r9 | movq %rdi,%r9 | ||||
movq %r10,%rax | movq %r10,%rax | ||||
testl $15,%edi | testl $15,%edi | ||||
jnz 3f | jnz 3f | ||||
1: | 1: | ||||
Show All 20 Lines | 3: | ||||
movq %r10,8(%rdi) | movq %r10,8(%rdi) | ||||
movq %rdi,%r8 | movq %rdi,%r8 | ||||
andq $15,%r8 | andq $15,%r8 | ||||
leaq -16(%rcx,%r8),%rcx | leaq -16(%rcx,%r8),%rcx | ||||
neg %r8 | neg %r8 | ||||
leaq 16(%rdi,%r8),%rdi | leaq 16(%rdi,%r8),%rdi | ||||
jmp 1b | jmp 1b | ||||
.endm | .endm | ||||
ENTRY(memset) | ENTRY(memset) | ||||
MEMSET erms=0 | MEMSET erms=0 | ||||
END(memset) | END(memset) | ||||
.section .note.GNU-stack,"",%progbits | .section .note.GNU-stack,"",%progbits |