xref: /third_party/musl/src/string/x86_64/memset.s (revision 570af302)
1570af302Sopenharmony_ci.global memset
2570af302Sopenharmony_ci.type memset,@function
3570af302Sopenharmony_cimemset:
4570af302Sopenharmony_ci	movzbq %sil,%rax
5570af302Sopenharmony_ci	mov $0x101010101010101,%r8
6570af302Sopenharmony_ci	imul %r8,%rax
7570af302Sopenharmony_ci
8570af302Sopenharmony_ci	cmp $126,%rdx
9570af302Sopenharmony_ci	ja 2f
10570af302Sopenharmony_ci
11570af302Sopenharmony_ci	test %edx,%edx
12570af302Sopenharmony_ci	jz 1f
13570af302Sopenharmony_ci
14570af302Sopenharmony_ci	mov %sil,(%rdi)
15570af302Sopenharmony_ci	mov %sil,-1(%rdi,%rdx)
16570af302Sopenharmony_ci	cmp $2,%edx
17570af302Sopenharmony_ci	jbe 1f
18570af302Sopenharmony_ci
19570af302Sopenharmony_ci	mov %ax,1(%rdi)
20570af302Sopenharmony_ci	mov %ax,(-1-2)(%rdi,%rdx)
21570af302Sopenharmony_ci	cmp $6,%edx
22570af302Sopenharmony_ci	jbe 1f
23570af302Sopenharmony_ci
24570af302Sopenharmony_ci	mov %eax,(1+2)(%rdi)
25570af302Sopenharmony_ci	mov %eax,(-1-2-4)(%rdi,%rdx)
26570af302Sopenharmony_ci	cmp $14,%edx
27570af302Sopenharmony_ci	jbe 1f
28570af302Sopenharmony_ci
29570af302Sopenharmony_ci	mov %rax,(1+2+4)(%rdi)
30570af302Sopenharmony_ci	mov %rax,(-1-2-4-8)(%rdi,%rdx)
31570af302Sopenharmony_ci	cmp $30,%edx
32570af302Sopenharmony_ci	jbe 1f
33570af302Sopenharmony_ci
34570af302Sopenharmony_ci	mov %rax,(1+2+4+8)(%rdi)
35570af302Sopenharmony_ci	mov %rax,(1+2+4+8+8)(%rdi)
36570af302Sopenharmony_ci	mov %rax,(-1-2-4-8-16)(%rdi,%rdx)
37570af302Sopenharmony_ci	mov %rax,(-1-2-4-8-8)(%rdi,%rdx)
38570af302Sopenharmony_ci	cmp $62,%edx
39570af302Sopenharmony_ci	jbe 1f
40570af302Sopenharmony_ci
41570af302Sopenharmony_ci	mov %rax,(1+2+4+8+16)(%rdi)
42570af302Sopenharmony_ci	mov %rax,(1+2+4+8+16+8)(%rdi)
43570af302Sopenharmony_ci	mov %rax,(1+2+4+8+16+16)(%rdi)
44570af302Sopenharmony_ci	mov %rax,(1+2+4+8+16+24)(%rdi)
45570af302Sopenharmony_ci	mov %rax,(-1-2-4-8-16-32)(%rdi,%rdx)
46570af302Sopenharmony_ci	mov %rax,(-1-2-4-8-16-24)(%rdi,%rdx)
47570af302Sopenharmony_ci	mov %rax,(-1-2-4-8-16-16)(%rdi,%rdx)
48570af302Sopenharmony_ci	mov %rax,(-1-2-4-8-16-8)(%rdi,%rdx)
49570af302Sopenharmony_ci
50570af302Sopenharmony_ci1:	mov %rdi,%rax
51570af302Sopenharmony_ci	ret
52570af302Sopenharmony_ci
53570af302Sopenharmony_ci2:	test $15,%edi
54570af302Sopenharmony_ci	mov %rdi,%r8
55570af302Sopenharmony_ci	mov %rax,-8(%rdi,%rdx)
56570af302Sopenharmony_ci	mov %rdx,%rcx
57570af302Sopenharmony_ci	jnz 2f
58570af302Sopenharmony_ci
59570af302Sopenharmony_ci1:	shr $3,%rcx
60570af302Sopenharmony_ci	rep
61570af302Sopenharmony_ci	stosq
62570af302Sopenharmony_ci	mov %r8,%rax
63570af302Sopenharmony_ci	ret
64570af302Sopenharmony_ci
65570af302Sopenharmony_ci2:	xor %edx,%edx
66570af302Sopenharmony_ci	sub %edi,%edx
67570af302Sopenharmony_ci	and $15,%edx
68570af302Sopenharmony_ci	mov %rax,(%rdi)
69570af302Sopenharmony_ci	mov %rax,8(%rdi)
70570af302Sopenharmony_ci	sub %rdx,%rcx
71570af302Sopenharmony_ci	add %rdx,%rdi
72570af302Sopenharmony_ci	jmp 1b
73