This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.24-274-g7cfde84
- From: aurel32 at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 15 Oct 2016 17:24:40 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.24-274-g7cfde84
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 7cfde840694cda82da29385e812060f99bcb367c (commit)
from cc6a8d74575e36e2c9da8454dd1d23000c5455dd (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=7cfde840694cda82da29385e812060f99bcb367c
commit 7cfde840694cda82da29385e812060f99bcb367c
Author: John David Anglin <dave.anglin@bell.net>
Date: Sat Oct 15 19:22:00 2016 +0200
hppa: Optimize atomic_compare_and_exchange_val_acq
Changelog:
* sysdeps/unix/sysv/linux/hppa/atomic-machine.h: Don't include
abort-instr.h.
(EFAULT): Remove conditional define.
(ENOSYS): Likewise.
(atomic_compare_and_exchange_val_acq): Use instruction nullification
instead of conditional branch instructions.
diff --git a/ChangeLog b/ChangeLog
index b383ba1..06a7338 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2016-09-22 John David Anglin <dave.anglin@bell.net>
+
+ * sysdeps/unix/sysv/linux/hppa/atomic-machine.h: Don't include
+ abort-instr.h.
+ (EFAULT): Remove conditional define.
+ (ENOSYS): Likewise.
+ (atomic_compare_and_exchange_val_acq): Use instruction nullification
+ instead of conditional branch instructions.
+
2016-10-15 Joseph Myers <joseph@codesourcery.com>
* math/bits/mathcalls.h [__GLIBC_USE (IEC_60559_BFP_EXT)]
diff --git a/sysdeps/unix/sysv/linux/hppa/atomic-machine.h b/sysdeps/unix/sysv/linux/hppa/atomic-machine.h
index 3f0fd15..addef2c 100644
--- a/sysdeps/unix/sysv/linux/hppa/atomic-machine.h
+++ b/sysdeps/unix/sysv/linux/hppa/atomic-machine.h
@@ -17,13 +17,6 @@
<http://www.gnu.org/licenses/>. */
#include <stdint.h> /* Required for type definitions e.g. uint8_t. */
-#include <abort-instr.h> /* Required for ABORT_INSTRUCTIUON. */
-
-/* We need EFAULT, ENONSYS */
-#if !defined EFAULT && !defined ENOSYS
-#define EFAULT 14
-#define ENOSYS 251
-#endif
#ifndef _ATOMIC_MACHINE_H
#define _ATOMIC_MACHINE_H 1
@@ -62,7 +55,7 @@ typedef uintmax_t uatomic_max_t;
#define _ASM_EDEADLOCK "-45"
/* The only basic operation needed is compare and exchange. The mem
- pointer must be word aligned. */
+ pointer must be word aligned. We no longer loop on deadlock. */
#define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \
({ \
register long lws_errno asm("r21"); \
@@ -74,20 +67,15 @@ typedef uintmax_t uatomic_max_t;
"0: \n\t" \
"ble " _LWS "(%%sr2, %%r0) \n\t" \
"ldi " _LWS_CAS ", %%r20 \n\t" \
- "ldi " _ASM_EAGAIN ", %%r20 \n\t" \
- "cmpb,=,n %%r20, %%r21, 0b \n\t" \
- "nop \n\t" \
- "ldi " _ASM_EDEADLOCK ", %%r20 \n\t" \
- "cmpb,=,n %%r20, %%r21, 0b \n\t" \
- "nop \n\t" \
+ "cmpiclr,<> " _ASM_EAGAIN ", %%r21, %%r0\n\t" \
+ "b,n 0b \n\t" \
+ "cmpclr,= %%r0, %%r21, %%r0 \n\t" \
+ "iitlbp %%r0,(%%sr0, %%r0) \n\t" \
: "=r" (lws_ret), "=r" (lws_errno) \
: "r" (lws_mem), "r" (lws_old), "r" (lws_new) \
: _LWS_CLOBBER \
); \
\
- if (lws_errno == -EFAULT || lws_errno == -ENOSYS) \
- ABORT_INSTRUCTION; \
- \
(__typeof (oldval)) lws_ret; \
})
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 9 +++++++++
sysdeps/unix/sysv/linux/hppa/atomic-machine.h | 22 +++++-----------------
2 files changed, 14 insertions(+), 17 deletions(-)
hooks/post-receive
--
GNU C Library master sources