From: Pavel Kozlov <pavel.kozlov(a)synopsys.com>
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 <pavel.kozlov(a)synopsys.com>
---
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 4b2d6f8ad90a..2f621d5a8783 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; \
--
2.25.1