diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-12-12 18:13:35 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-12-12 18:13:35 +0000 |
commit | 574e283890a6ca92325a06dafa76ff307a8019a2 (patch) | |
tree | 055e44e24a55fb4863e5d9cdc04e320cde52ffe9 /nptl/sysdeps/unix/sysv/linux/sh | |
parent | a162e5955f7e324be82d9318bbcbe869c66ffb86 (diff) |
Updated to fedora-glibc-20071212T1051
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/sh')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S | 54 | ||||
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S | 4 |
2 files changed, 24 insertions, 34 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S index e929e28499..afcf0be299 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevellock.S @@ -76,7 +76,7 @@ add tmp2, tmp ; \ mov.l @tmp, tmp2 ; \ bra 98f ; \ - mov #FUTEX_PRIVATE_FLAG, tmp + mov #FUTEX_PRIVATE_FLAG, tmp ; \ 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ 98: extu.b tmp, tmp ; \ xor tmp, reg ; \ @@ -88,7 +88,7 @@ add tmp2, tmp ; \ mov.l @tmp, tmp2 ; \ bra 98f ; \ - mov #FUTEX_PRIVATE_FLAG, tmp + mov #FUTEX_PRIVATE_FLAG, tmp ; \ 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ 98: extu.b tmp, tmp ; \ xor tmp, reg ; \ @@ -96,13 +96,13 @@ mov #FUTEX_WAIT, tmp ; \ or tmp, reg # endif -# define LOAD_FUTEX_WAKE(reg,tmp) \ +# define LOAD_FUTEX_WAKE(reg,tmp,tmp2) \ stc gbr, tmp ; \ mov.w 99f, tmp2 ; \ add tmp2, tmp ; \ mov.l @tmp, tmp2 ; \ bra 98f ; \ - mov #FUTEX_PRIVATE_FLAG, tmp + mov #FUTEX_PRIVATE_FLAG, tmp ; \ 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ 98: extu.b tmp, tmp ; \ xor tmp, reg ; \ @@ -225,6 +225,12 @@ __lll_timedlock_wait: add #-8, r15 cfi_adjust_cfa_offset(8) + mov #2, r2 + XCHG (r2, @r8, r3) + + tst r3, r3 + bt 6f + 1: /* Get current time. */ mov r15, r4 @@ -250,17 +256,11 @@ __lll_timedlock_wait: add #-1, r2 4: cmp/pz r2 - bf 5f /* Time is already up. */ + bf 2f /* Time is already up. */ mov.l r2, @r15 /* Store relative timeout. */ mov.l r3, @(4,r15) - mov #1, r3 - mov #2, r4 - CMPXCHG (r3, @r8, r4, r2) - tst r2, r2 - bt 8f - mov r8, r4 mov r11, r5 LOAD_FUTEX_WAIT (r5, r0, r1) @@ -272,39 +272,29 @@ __lll_timedlock_wait: SYSCALL_INST_PAD mov r0, r5 -8: - mov #0, r3 - mov #2, r4 - CMPXCHG (r3, @r8, r4, r2) - bf/s 7f - mov #0, r0 + mov #2, r2 + XCHG (r2, @r8, r3) + + tst r3, r3 + bt/s 6f + mov #-ETIMEDOUT, r1 + cmp/eq r5, r1 + bf 1b + +2: mov #ETIMEDOUT, r3 6: + mov r3, r0 add #8, r15 mov.l @r15+, r8 mov.l @r15+, r9 mov.l @r15+, r10 rts mov.l @r15+, r11 -7: - /* Check whether the time expired. */ - mov #-ETIMEDOUT, r1 - cmp/eq r5, r1 - bt 5f - /* Make sure the current holder knows we are going to sleep. */ - XCHG (r2, @r8, r3) - tst r3, r3 - bt/s 6b - mov #0, r0 - bra 1b - nop 3: rts mov #EINVAL, r0 -5: - bra 6b - mov #ETIMEDOUT, r0 cfi_endproc .L1k: diff --git a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S index 0ebfbfe8c9..13093422a3 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/lowlevelrobustlock.S @@ -42,7 +42,7 @@ add tmp2, tmp ; \ mov.l @tmp, tmp2 ; \ bra 98f ; \ - mov #FUTEX_PRIVATE_FLAG, tmp + mov #FUTEX_PRIVATE_FLAG, tmp ; \ 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ 98: extu.b tmp, tmp ; \ xor tmp, reg ; \ @@ -54,7 +54,7 @@ add tmp2, tmp ; \ mov.l @tmp, tmp2 ; \ bra 98f ; \ - mov #FUTEX_PRIVATE_FLAG, tmp + mov #FUTEX_PRIVATE_FLAG, tmp ; \ 99: .word PRIVATE_FUTEX - TLS_PRE_TCB_SIZE ; \ 98: extu.b tmp, tmp ; \ xor tmp, reg ; \ |