aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/mips/tls-macros.h
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mips/tls-macros.h')
-rw-r--r--sysdeps/mips/tls-macros.h15
1 files changed, 11 insertions, 4 deletions
diff --git a/sysdeps/mips/tls-macros.h b/sysdeps/mips/tls-macros.h
index 3e87e42..a6fdfbc 100644
--- a/sysdeps/mips/tls-macros.h
+++ b/sysdeps/mips/tls-macros.h
@@ -2,6 +2,7 @@
#include <sys/cdefs.h>
#include <sys/asm.h>
+#include <sysdep.h>
#define __STRING2(X) __STRING(X)
#define ADDU __STRING2(PTR_ADDU)
@@ -38,6 +39,14 @@
# define UNLOAD_GP
#endif
+# if __mips_isa_rev >= 2
+# define TLS_RDHWR "rdhwr\t%0,$29"
+# else
+# define TLS_RDHWR \
+ ".set push\n\t.set mips32r2\n\t" \
+ "rdhwr\t%0,$29\n\t.set pop"
+#endif
+
#ifndef __mips16
# define TLS_GD(x) \
({ void *__result, *__tmp; \
@@ -60,8 +69,7 @@
__result; })
# define TLS_IE(x) \
({ void *__result, *__tmp; \
- asm (".set push\n\t.set mips32r2\n\t" \
- "rdhwr\t%0,$29\n\t.set pop" \
+ asm (TLS_RDHWR \
: "=v" (__result)); \
asm (LOAD_GP LW " $3,%%gottprel(" #x ")($28)\n\t" \
ADDU " %0,%0,$3" \
@@ -71,8 +79,7 @@
__result; })
# define TLS_LE(x) \
({ void *__result; \
- asm (".set push\n\t.set mips32r2\n\t" \
- "rdhwr\t%0,$29\n\t.set pop" \
+ asm (TLS_RDHWR \
: "=v" (__result)); \
asm ("lui $3,%%tprel_hi(" #x ")\n\t" \
"addiu $3,$3,%%tprel_lo(" #x ")\n\t" \