]> granicus.if.org Git - clang/commitdiff
document the x86 address space extension for GS.
authorChris Lattner <sabre@nondot.org>
Thu, 9 Apr 2009 19:58:15 +0000 (19:58 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 9 Apr 2009 19:58:15 +0000 (19:58 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68724 91177308-0d34-0410-b5e6-96231b3b80d8

docs/LanguageExtensions.html

index 5b8518b33054b0ae0d5f7cec428bc96c6457dc63..d73e3026b1f8e5f9a0f73cc6576b12e76b683eb8 100644 (file)
@@ -27,6 +27,11 @@ td {
   <li><a href="#__builtin_shufflevector">__builtin_shufflevector</a></li>
   </ul>
 </li>
+<li><a href="#targetspecific">Target-Specific Extensions</a>
+  <ul>
+  <li><a href="#x86-specific">X86/X86-64 Language Extensions</a></li>
+  </ul>
+</li>
 </ul>
 
 
@@ -224,6 +229,45 @@ with the same element type as vec1/vec2 but that has an element count equal to
 the number of indices specified.
 </p>
 
+<!-- ======================================================================= -->
+<h2 id="targetspecific">Target-Specific Extensions</h2>
+<!-- ======================================================================= -->
+
+<p>Clang supports some language features conditionally on some targets.</p>
+
+<!-- ======================================================================= -->
+<h3 id="x86-specific">X86/X86-64 Language Extensions</h3>
+<!-- ======================================================================= -->
+
+<p>The X86 backend has these language extensions:</p>
+
+<!-- ======================================================================= -->
+<h4 id="x86-gs-segment">Memory references off the GS segment</h4>
+<!-- ======================================================================= -->
+
+<p>Annotating a pointer with address space #256 causes it to  be code generated
+relative to the X86 GS segment register.  
+Note that this is a very very low-level feature that should only be used if you
+know what you're doing (for example in an OS kernel).</p>
+
+<p>Here is an example:</p>
+
+<pre>
+#define GS_RELATIVE __attribute__((address_space(256)))
+int foo(int GS_RELATIVE *P) {
+  return *P;
+}
+</pre>
+
+<p>Which compiles to (on X86-32):</p>
+
+<pre>
+_foo:
+       movl    4(%esp), %eax
+       movl    %gs:(%eax), %eax
+       ret
+</pre>
+
 </div>
 </body>
 </html>