This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH v2][BZ #15627] Disable SSE for rtld-* objects (tst-xmmymm failure)


On Fri, Jun 14, 2013 at 11:19:24PM +0530, Siddhesh Poyarekar wrote:
> On Fri, Jun 14, 2013 at 10:13:39AM -0700, H.J. Lu wrote:
> > Would it be better to add rtld-memset.S:
> > 
> >     mov    %rdx, %rcx
> >     movzbl    %sil, %eax
> >     mov    %rdi, %rdx
> >     rep stosb
> >     mov %rdx, %rax
> >     ret
> > 

Here's the updated patch based on your suggestion.  Verified with
gcc-4.7.2 and gcc-4.8 that it fixes the xmmymm.sh test and also does
not regress the rest of the testsuite.

OK to commit?

Siddhesh

2013-06-14  Siddhesh Poyarekar  <siddhesh@redhat.com>
	    H.J. Lu  <hjl.tools@gmail.com>

	    [BZ #15627]
	    * sysdeps/x86_64/rtld-memset.c: Remove file.
	    * sysdeps/x86_64/rtld-memset.S: New file.

diff --git a/sysdeps/x86_64/rtld-memset.S b/sysdeps/x86_64/rtld-memset.S
new file mode 100644
index 0000000..18b4903
--- /dev/null
+++ b/sysdeps/x86_64/rtld-memset.S
@@ -0,0 +1,37 @@
+/* memset implementation for the dynamic linker.  This is separate from the
+   libc implementation to avoid writing to SSE registers.
+   Copyright (C) 2013 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#include <sysdep.h>
+#include "asm-syntax.h"
+
+
+	.text
+/* void *memset (void *dest, char c, size_t count)
+   dest	 => %rdi
+   c	 => %rsi
+   count => %rdx  */
+ENTRY (memset)
+	mov	%rdx, %rcx
+	movzbl	%sil, %eax
+	mov	%rdi, %rdx
+	rep	stosb
+	mov	%rdx, %rax
+	ret
+END (memset)
+libc_hidden_builtin_def (memset)
diff --git a/sysdeps/x86_64/rtld-memset.c b/sysdeps/x86_64/rtld-memset.c
deleted file mode 100644
index 55f3835..0000000
--- a/sysdeps/x86_64/rtld-memset.c
+++ /dev/null
@@ -1 +0,0 @@
-#include <string/memset.c>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]