Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 May 2018 21:11:29 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r334182 - in head/sys: conf sparc64/sparc64
Message-ID:  <201805242111.w4OLBTRv009882@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: imp
Date: Thu May 24 21:11:28 2018
New Revision: 334182
URL: https://svnweb.freebsd.org/changeset/base/334182

Log:
  Define memmove and make bcopy alt entry point
  
  Make a memmove entry point just before bcopy and have it swap its args
  before continuing into the body of bcopy. Adjust the returns to return
  dst (original %o0 swapped to %o1) from both entry points. bcopy users
  will ignore them. Since these are in the branch delay slot, it should
  take no additional time. I use %o6 for this rather than just move %o1
  back to %o2 at the end since my sparc64 assembler knowledge is weak.
  Also eliminate wrapper call from memmove to bcopy.
  
  Differential Revision: https://reviews.freebsd.org/D15374

Modified:
  head/sys/conf/files.sparc64
  head/sys/sparc64/sparc64/support.S

Modified: head/sys/conf/files.sparc64
==============================================================================
--- head/sys/conf/files.sparc64	Thu May 24 21:11:24 2018	(r334181)
+++ head/sys/conf/files.sparc64	Thu May 24 21:11:28 2018	(r334182)
@@ -71,7 +71,6 @@ libkern/ffsll.c			standard
 libkern/fls.c			standard
 libkern/flsl.c			standard
 libkern/flsll.c			standard
-libkern/memmove.c		standard
 sparc64/central/central.c	optional	central
 sparc64/ebus/ebus.c		optional	ebus
 sparc64/ebus/epic.c		optional	epic ebus

Modified: head/sys/sparc64/sparc64/support.S
==============================================================================
--- head/sys/sparc64/sparc64/support.S	Thu May 24 21:11:24 2018	(r334181)
+++ head/sys/sparc64/sparc64/support.S	Thu May 24 21:11:28 2018	(r334182)
@@ -265,10 +265,18 @@ ENTRY(bcmp)
 END(bcmp)
 
 /*
+ * void *memmove(void *dst, const void *src, size_t len)
  * void bcopy(const void *src, void *dst, size_t len)
  */
-ENTRY(bcopy)
+ENTRY(memmove)
 	/*
+	 * Swap src/dst for memmove/bcopy differences
+	 */
+	mov	%o0, %o6
+	mov	%o1, %o0
+	mov	%o6, %o1
+ALTENTRY(bcopy)
+	/*
 	 * Check for overlap, and copy backwards if so.
 	 */
 	sub	%o1, %o0, %g1
@@ -290,15 +298,15 @@ ENTRY(bcopy)
 	ba	%xcc, 1b
 	 stb	%g1, [%o1]
 2:	retl
-	 nop
+	 mov	%o6, %o0
 
 	/*
 	 * Do the fast version.
 	 */
 3:	_MEMCPY(%o1, %o0, %o2, EMPTY, EMPTY, EMPTY, EMPTY)
 	retl
-	 nop
-END(bcopy)
+	 mov	%o6, %o0
+END(memmove)
 
 /*
  * void bzero(void *b, size_t len)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201805242111.w4OLBTRv009882>