From 1f891b5655a6e3bd8c2beb0768ee97e8dcc3c9c0 Mon Sep 17 00:00:00 2001 From: Pavel Kozlov Date: Tue, 20 Sep 2022 20:54:20 +0400 Subject: arc: fix TLS_GD macro, bad clobber list Move function call outside the inline asm code to simplify a clobber list. The patch fixes tests tst-tls7 and tst-tls8 on ARCv3, they didn't pass because cc was not in clobber list and bad code was generated. The compiler didn't take in account changes of CPU Condition flags. Signed-off-by: Pavel Kozlov --- test/tls/tls-macros-arc.h | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/tls/tls-macros-arc.h b/test/tls/tls-macros-arc.h index 4b2d6f8..2f621d5 100644 --- a/test/tls/tls-macros-arc.h +++ b/test/tls/tls-macros-arc.h @@ -2,14 +2,12 @@ #define TLS_LD(x) TLS_IE(x) #define TLS_GD(x) \ - ({ int *__result; \ - __asm__ ("add r0, pcl, @" #x "@tlsgd \n" \ - ".tls_gd_ld " #x "`bl __tls_get_addr@plt \n" \ - "mov %0, r0 \n" \ - : "=&r" (__result) \ - ::"r0","r1","r2","r3","r4","r5","r6","r7", \ - "r8","r9","r10","r11","r12"); \ - __result; }) + ({ void *__result; \ + extern void *__tls_get_addr (void *); \ + __asm__ ("add %0, pcl, @" #x "@tlsgd \n" \ + ".tls_gd_ld " #x " \n" \ + : "=r" (__result)); \ + (int *)__tls_get_addr(__result); }) #define TLS_LE(x) \ ({ int *__result; \ -- cgit v1.2.3