aarch64: Use tpidr_el0 rather than __read_tp in librt
authorRichard Henderson <rth@redhat.com>
Tue, 20 May 2014 20:17:20 +0000 (16:17 -0400)
committerRichard Henderson <rth@redhat.com>
Thu, 29 May 2014 16:39:03 +0000 (12:39 -0400)
ChangeLog
sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h

index 26812de..5b9b820 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2014-05-29  Richard Henderson  <rth@twiddle.net>
 
+       * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h
+       [!NOT_IN_libc] (SINGLE_THREAD_P): Use tpidr_el0 instead of a
+       call to __read_tp.
+
        * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h (PSEUDO):
        Always allocate 64 bytes of stack frame.  Use ldp/stp to create
        it and break it down.
index 0f5bb51..546ed7b 100644 (file)
@@ -113,17 +113,9 @@ extern int __local_multiple_threads attribute_hidden;
                                   header.multiple_threads) == 0, 1)
 #  else
 #   define SINGLE_THREAD_P(R)                                          \
-       stp     x0, x30, [sp, -16]!;                                    \
-       cfi_adjust_cfa_offset (16);                                     \
-       cfi_rel_offset (x0, 0);                                         \
-       cfi_rel_offset (x30, 8);                                        \
-       bl      __read_tp;                                              \
-       sub     x0, x0, PTHREAD_SIZEOF;                                 \
-       ldr     w##R, [x0, PTHREAD_MULTIPLE_THREADS_OFFSET];            \
-       ldp     x0, x30, [sp], 16;                                      \
-       cfi_restore (x0);                                               \
-       cfi_restore (x30);                                              \
-       cfi_adjust_cfa_offset (-16)
+       mrs     x##R, tpidr_el0;                                        \
+       sub     x##R, x##R, PTHREAD_SIZEOF;                             \
+       ldr     w##R, [x##R, PTHREAD_MULTIPLE_THREADS_OFFSET]
 #  endif
 # endif