This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
No need to explain this one, I think.
Index: ChangeLog
2004-11-10 Alexandre Oliva <aoliva@redhat.com>
* elf/tls-macros.h: Add FR-V section.
Index: elf/tls-macros.h
--- elf/tls-macros.h 2004-07-08 01:46:11.000000000 -0300
+++ elf/tls-macros.h 2005-01-31 04:07:09.000000000 -0200
@@ -731,6 +731,61 @@
__result; \
})
+#elif defined __FRV_FDPIC__
+
+/* gr15 isn't a fixed register. We could code an asm function that
+ copied the incoming gr15 to gr8 and be done with it, instead of
+ loading it from the function's own function descriptor, but this is
+ so easy to code in C that it will do. */
+static long __get_gr15(void) {
+ static struct funcdesc {
+ long ip, gp;
+ } const *fd = (const struct funcdesc *)__get_gr15;
+ return fd->gp;
+}
+
+/* FR-V Local Executable TLS access. */
+# define TLS_LE(x) \
+ ({ char * __result; \
+ register long __tp asm ("gr29"); \
+ asm ("sethi.p #tlsmoffhi(" #x "), %0\n\t" \
+ "setlo #tlsmofflo(" #x "), %0" : "=r" (__result)); \
+ (int *)(__result + __tp); \
+ })
+
+/* FR-V Initial Executable TLS access. */
+# define TLS_IE(x) \
+ ({ char * __result; \
+ register long __tp asm ("gr29"); \
+ register long __pic asm ("gr15") = __get_gr15(); \
+ asm ("ldi @(%1, #gottlsoff12(" #x ")), %0" : "=r" (__result) \
+ : "r" (__pic)); \
+ (int *)(__result + __tp); \
+ })
+
+/* FR-V Local Dynamic TLS access. */
+# define TLS_LD(x) \
+ ({ char * __result; \
+ register long __tp asm ("gr29"); \
+ register long __pic asm ("gr15") = __get_gr15(); \
+ long __modbase; \
+ asm ("call #gettlsoff(0)" : "=D09" (__modbase)) \
+ : "r" (__pic) : "gr8"); \
+ asm ("sethi.p #tlsmoffhi(" #x "), %0\n\t" \
+ "setlo #tlsmofflo(" #x "), %0" : "=r" (__result)); \
+ (int *)(__result + __modbase + __tp); \
+ })
+
+/* FR-V General Dynamic TLS access. */
+# define TLS_GD(x) \
+ ({ char * __result; \
+ register long __tp asm ("gr29"); \
+ register long __pic asm ("gr15") = __get_gr15(); \
+ asm ("call #gettlsoff(" #x ")" : "=D09" (__result) \
+ : "r" (__pic) : "gr8"); \
+ (int *)(__result + __tp); \
+ })
+
#else
# error "No support for this architecture so far."
#endif
--
Alexandre Oliva http://www.ic.unicamp.br/~oliva/
Red Hat Compiler Engineer aoliva@{redhat.com, gcc.gnu.org}
Free Software Evangelist oliva@{lsd.ic.unicamp.br, gnu.org}
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |