svn commit: r339531 - head/sys/amd64/amd64

Mateusz Guzik mjg at FreeBSD.org
Sun Oct 21 10:46:01 UTC 2018


Author: mjg
Date: Sun Oct 21 10:46:00 2018
New Revision: 339531
URL: https://svnweb.freebsd.org/changeset/base/339531

Log:
  amd64: tidy up memset to have rax set earlier for small sizes

Modified:
  head/sys/amd64/amd64/support.S

Modified: head/sys/amd64/amd64/support.S
==============================================================================
--- head/sys/amd64/amd64/support.S	Sun Oct 21 09:36:12 2018	(r339530)
+++ head/sys/amd64/amd64/support.S	Sun Oct 21 10:46:00 2018	(r339531)
@@ -452,11 +452,11 @@ END(memcpy_erms)
  */
 .macro MEMSET erms
 	PUSH_FRAME_POINTER
-	movq	%rdi,%r9
+	movq	%rdi,%rax
 	movq	%rdx,%rcx
 	movzbq	%sil,%r8
-	movabs	$0x0101010101010101,%rax
-	imulq	%r8,%rax
+	movabs	$0x0101010101010101,%r10
+	imulq	%r8,%r10
 
 	cmpq	$32,%rcx
 	jb	1016f
@@ -465,10 +465,10 @@ END(memcpy_erms)
 	ja	1256f
 
 1032:
-	movq	%rax,(%rdi)
-	movq	%rax,8(%rdi)
-	movq	%rax,16(%rdi)
-	movq	%rax,24(%rdi)
+	movq	%r10,(%rdi)
+	movq	%r10,8(%rdi)
+	movq	%r10,16(%rdi)
+	movq	%r10,24(%rdi)
 	leaq	32(%rdi),%rdi
 	subq	$32,%rcx
 	cmpq	$32,%rcx
@@ -478,54 +478,56 @@ END(memcpy_erms)
 1016:
 	cmpb	$16,%cl
 	jl	1008f
-	movq	%rax,(%rdi)
-	movq	%rax,8(%rdi)
+	movq	%r10,(%rdi)
+	movq	%r10,8(%rdi)
 	subb	$16,%cl
 	jz	1000f
 	leaq	16(%rdi),%rdi
 1008:
 	cmpb	$8,%cl
 	jl	1004f
-	movq	%rax,(%rdi)
+	movq	%r10,(%rdi)
 	subb	$8,%cl
 	jz	1000f
 	leaq	8(%rdi),%rdi
 1004:
 	cmpb	$4,%cl
 	jl	1002f
-	movl	%eax,(%rdi)
+	movl	%r10d,(%rdi)
 	subb	$4,%cl
 	jz	1000f
 	leaq	4(%rdi),%rdi
 1002:
 	cmpb	$2,%cl
 	jl	1001f
-	movw	%ax,(%rdi)
+	movw	%r10w,(%rdi)
 	subb	$2,%cl
 	jz	1000f
 	leaq	2(%rdi),%rdi
 1001:
 	cmpb	$1,%cl
 	jl	1000f
-	movb	%al,(%rdi)
+	movb	%r10b,(%rdi)
 1000:
-	movq	%r9,%rax
 	POP_FRAME_POINTER
 	ret
 	ALIGN_TEXT
 1256:
+	movq	%rdi,%r9
+	movq	%r10,%rax
 .if \erms == 1
 	rep
 	stosb
+	movq	%r9,%rax
 .else
 	shrq	$3,%rcx
 	rep
 	stosq
+	movq	%r9,%rax
 	movq	%rdx,%rcx
 	andb	$7,%cl
 	jne	1004b
 .endif
-	movq	%r9,%rax
 	POP_FRAME_POINTER
 	ret
 .endm


More information about the svn-src-all mailing list