From b4b166af4f39af2fc8eb36ccd1abf106fc2ddcbe Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 22 Jan 2008 18:58:31 +0000 Subject: [PATCH] * sysdeps/i386/fpu/ftestexcept.c (fetestexcept): Use short for fnstsw. --- ChangeLog | 4 +++ nptl/ChangeLog | 19 +++++++++++++ nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S | 5 ++-- .../unix/sysv/linux/sh/pthread_barrier_wait.S | 8 +++--- .../sysv/linux/sh/pthread_rwlock_timedrdlock.S | 8 +++--- .../sysv/linux/sh/pthread_rwlock_timedwrlock.S | 8 +++--- nptl/sysdeps/unix/sysv/linux/sh/sem_post.S | 31 ++++++++++++++++++---- sysdeps/i386/fpu/ftestexcept.c | 2 +- 8 files changed, 67 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0767bb0544..16898b9d8d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2008-01-12 H.J. Lu + + * sysdeps/i386/fpu/ftestexcept.c (fetestexcept): Use short for fnstsw. + 2008-01-12 Andreas Jaeger [BZ #5040] diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 7c88aa5a16..b1f89484dd 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,22 @@ +2008-01-22 Kaz Kojima + + * sysdeps/unix/sysv/linux/sh/sem_post.S: Don't overflow value field. + +2008-01-21 Kaz Kojima + + * sysdeps/unix/sysv/linux/sh/lowlevel-atomic.h (XADD): Use + a scratch register. + * sysdeps/unix/sysv/linux/sh/lowlevellock.S + (__lll_lock_wait_private): Fix typo. + * sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S + (pthread_barrier_wait): Likewise. Adjust XADD use. + * sysdeps/unix/sysv/linux/sh/sem_post.S (__new_sem_post): + Adjust XADD use. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S + (pthread_rwlock_timedrdlock): Return correct return value. + * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S + (pthread_rwlock_timedwrlock): Likewise. + 2008-01-15 Ulrich Drepper * tst-eintr2.c (do_test): make sure that if mutex_lock in main diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index afcf0be299..d8279173d7 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S @@ -1,4 +1,5 @@ -/* Copyright (C) 2003, 2004, 2005, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2005, 2007, 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 @@ -143,7 +144,7 @@ __lll_lock_wait_private: bf 1b mov.l @r15+, r8 - ret + rts mov r2, r0 cfi_endproc .size __lll_lock_wait_private,.-__lll_lock_wait_private diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S index c7d7d2278d..4a6059aef4 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_barrier_wait.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007, 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 @@ -86,7 +86,7 @@ pthread_barrier_wait: initial count unlock the object. */ mov #1, r3 mov.l @(INIT_COUNT,r8), r4 - XADD (r3, @(LEFT,r8), r2) + XADD (r3, @(LEFT,r8), r2, r5) add #-1, r4 cmp/eq r2, r4 bf 10f @@ -131,7 +131,7 @@ pthread_barrier_wait: initial count unlock the object. */ mov #1, r3 mov.l @(INIT_COUNT,r8), r4 - XADD (r3, @(LEFT,r8), r2) + XADD (r3, @(LEFT,r8), r2, r5) add #-1, r4 cmp/eq r2, r4 bf 5f @@ -144,7 +144,7 @@ pthread_barrier_wait: mov #-1, r0 /* == PTHREAD_BARRIER_SERIAL_THREAD */ lds.l @r15+, pr mov.l @r15+, r8 - ret + rts mov.l @r15+, r9 1: diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S index e40771de0f..743f283be5 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007, 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 @@ -232,6 +232,7 @@ pthread_rwlock_timedrdlock: .word TID - TLS_PRE_TCB_SIZE 6: + mov r3, r10 mov r8, r4 #if MUTEX != 0 add #MUTEX, r4 @@ -244,7 +245,7 @@ pthread_rwlock_timedrdlock: nop .Lwake2b: bra 7b - mov #0, r3 + mov r10, r3 8: /* Overflow. */ @@ -278,6 +279,7 @@ pthread_rwlock_timedrdlock: nop 12: + mov r3, r10 mov r8, r5 #if MUTEX != 0 add #MUTEX, r5 @@ -290,7 +292,7 @@ pthread_rwlock_timedrdlock: mov r2, r4 .Lwait3b: bra 13b - nop + mov r10, r3 16: bra 17b diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S index dfe137973c..307494c8c2 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2007, 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 @@ -225,6 +225,7 @@ pthread_rwlock_timedwrlock: bra 9b mov #EDEADLK, r3 6: + mov r3, r10 mov r8, r4 #if MUTEX != 0 add #MUTEX, r4 @@ -237,7 +238,7 @@ pthread_rwlock_timedwrlock: nop .Lwake6b: bra 7b - mov #0, r3 + mov r10, r3 .Ltidoff: .word TID - TLS_PRE_TCB_SIZE @@ -266,6 +267,7 @@ pthread_rwlock_timedwrlock: nop 12: + mov r3, r10 mov r8, r5 #if MUTEX != 0 add #MUTEX, r5 @@ -278,7 +280,7 @@ pthread_rwlock_timedwrlock: mov r2, r4 .Lwait7b: bra 13b - nop + mov r10, r3 16: bra 17b diff --git a/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S b/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S index a3a7710ef9..4a154fc649 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/sem_post.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2007, 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 @@ -30,8 +30,16 @@ .type __new_sem_post,@function .align 5 __new_sem_post: - mov #1, r3 - XADD (r3, @(VALUE,r4), r2) + mov.l @(VALUE,r4), r2 +0: + mov.l .Lmax, r1 + cmp/eq r1, r2 + bt/s 3f + mov r2, r3 + mov r3, r5 + add #1, r5 + CMPXCHG (r3, @(VALUE,r4), r5, r2) + bf 0b mov.l @(NWAITERS,r4), r2 tst r2, r2 bt 2f @@ -52,7 +60,15 @@ __new_sem_post: mov #0, r0 1: - mov #EINVAL, r2 + bra 4f + mov #EINVAL, r2 + +3: + mov #EOVERFLOW, r2 +4: + mov.l r12, @-r15 + mov.l r8, @-r15 + sts.l pr, @-r15 mova .Lgot3, r0 mov.l .Lgot3, r12 add r0, r12 @@ -67,19 +83,24 @@ __new_sem_post: .Lerrno3: .long errno@GOTTPOFF .Lexit: + mov.l r2, @r0 #else + mov r2, r8 mov.l .Lerrloc3, r1 bsrf r1 nop .Lerrloc3b: + mov r8, @r0 #endif - mov.l r2, @r0 lds.l @r15+, pr + mov.l @r15+, r8 mov.l @r15+, r12 rts mov #-1, r0 .align 2 +.Lmax: + .long SEM_VALUE_MAX .Lgot3: .long _GLOBAL_OFFSET_TABLE_ #if !USE___THREAD diff --git a/sysdeps/i386/fpu/ftestexcept.c b/sysdeps/i386/fpu/ftestexcept.c index 9038e04c3b..1979fe13fd 100644 --- a/sysdeps/i386/fpu/ftestexcept.c +++ b/sysdeps/i386/fpu/ftestexcept.c @@ -26,7 +26,7 @@ int fetestexcept (int excepts) { - int temp; + short temp; int xtemp = 0; /* Get current exceptions. */ -- 2.11.4.GIT