about summary refs log tree commit diff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2008-01-22 18:22:07 +0000
committerUlrich Drepper <drepper@redhat.com>2008-01-22 18:22:07 +0000
commit3c7e0ea69a68fdf0e51edef1911c32b4d7bfa674 (patch)
tree0379f66fb16389c14d93e1624625fcde1fb49621
parentf66def9d2bf7c87e39cc626d536ba10dfc0fa5ac (diff)
downloadglibc-3c7e0ea69a68fdf0e51edef1911c32b4d7bfa674.tar.gz
glibc-3c7e0ea69a68fdf0e51edef1911c32b4d7bfa674.tar.xz
glibc-3c7e0ea69a68fdf0e51edef1911c32b4d7bfa674.zip
(XADD): Use a scratch register.
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h12
1 files changed, 7 insertions, 5 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h b/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h
index 76d22c88f9..c7028360f5 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h
+++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2008 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
@@ -44,14 +44,16 @@
 	mov.l	reg, mem; \
 99:	mov	r1, r15
 
-#define	XADD(reg, mem, old) \
+#define	XADD(reg, mem, old, tmp) \
 	.align	2; \
 	mova	99f, r0; \
+	nop; \
 	mov	r15, r1; \
-	mov	_IMM6, r15; \
+	mov	_IMM8, r15; \
 98:	mov.l	mem, old; \
-	add	old, reg; \
-	mov.l	reg, mem; \
+	mov	reg, tmp; \
+	add	old, tmp; \
+	mov.l	tmp, mem; \
 99:	mov	r1, r15
 
 #define	XCHG(reg, mem, old) \