<div dir="ltr">This is the address space extension for accessing TLS:<div><a href="http://clang.llvm.org/docs/LanguageExtensions.html#x86-x86-64-language-extensions">http://clang.llvm.org/docs/LanguageExtensions.html#x86-x86-64-language-extensions</a><br>
</div><div><br></div><div>That's a lot cleaner.  Let's do that.</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 23, 2014 at 10:38 AM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">  Addressed rnk's comments.<br>
<br>
  Chandler: can you provide a pointer to the address space technique you mentioned?<br>
<br>
Hi rnk, whunt,<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D2606" target="_blank">http://llvm-reviews.chandlerc.com/D2606</a><br>
<br>
CHANGE SINCE LAST DIFF<br>
  <a href="http://llvm-reviews.chandlerc.com/D2606?vs=6606&id=6607#toc" target="_blank">http://llvm-reviews.chandlerc.com/D2606?vs=6606&id=6607#toc</a><br>
<div><div class="h5"><br>
Files:<br>
  lib/Headers/Intrin.h<br>
<br>
Index: lib/Headers/Intrin.h<br>
===================================================================<br>
--- lib/Headers/Intrin.h<br>
+++ lib/Headers/Intrin.h<br>
@@ -101,9 +101,13 @@<br>
 unsigned long __readcr8(void);<br>
 unsigned int __readdr(unsigned int);<br>
 unsigned int __readeflags(void);<br>
+static __inline__<br>
 unsigned char __readfsbyte(unsigned long);<br>
+static __inline__<br>
 unsigned long __readfsdword(unsigned long);<br>
+static __inline__<br>
 unsigned __int64 __readfsqword(unsigned long);<br>
+static __inline__<br>
 unsigned short __readfsword(unsigned long);<br>
 unsigned __int64 __readmsr(unsigned long);<br>
 unsigned __int64 __readpmc(unsigned long);<br>
@@ -767,6 +771,33 @@<br>
   __asm__ volatile ("" : : : "memory");<br>
 }<br>
 /*----------------------------------------------------------------------------*\<br>
+|* readfs<br>
+\*----------------------------------------------------------------------------*/<br>
+static __inline__ unsigned char __attribute__((__always_inline__, __nodebug__))<br>
</div></div>+__readfsbyte(unsigned long __offset) {<br>
+  unsigned char __result;<br>
+  __asm__ ("movb %%fs:(%1), %0" : "=r" (__result) : "r" (__offset));<br>
<div class="im">+  return __result;<br>
+}<br>
+static __inline__ unsigned long __attribute__((__always_inline__, __nodebug__))<br>
</div>+__readfsdword(unsigned long __offset) {<br>
+  unsigned long __result;<br>
+  __asm__ ("movl %%fs:(%1), %0" : "=r" (__result) : "r" (__offset));<br>
<div class="im">+  return __result;<br>
+}<br>
+static __inline__ unsigned __int64 __attribute__((__always_inline__, __nodebug__))<br>
</div>+__readfsqword(unsigned long __offset) {<br>
+  unsigned __int64 __result;<br>
+  __asm__ ("movq %%fs:(%1), %0" : "=r" (__result) : "r" (__offset));<br>
<div class="im">+  return __result;<br>
+}<br>
+static __inline__ unsigned short __attribute__((__always_inline__, __nodebug__))<br>
</div>+__readfsword(unsigned long __offset) {<br>
+  unsigned short __result;<br>
+  __asm__ ("movw %%fs:(%1), %0" : "=r" (__result) : "r" (__offset));<br>
<div class="HOEnZb"><div class="h5">+  return __result;<br>
+}<br>
+/*----------------------------------------------------------------------------*\<br>
 |* Misc<br>
 \*----------------------------------------------------------------------------*/<br>
 static __inline__ void * __attribute__((__always_inline__, __nodebug__))<br>
</div></div></blockquote></div><br></div>