Update doc for C++ TLS calling convention.
authorManman Ren <manman.ren@gmail.com>
Mon, 7 Dec 2015 21:40:09 +0000 (21:40 +0000)
committerManman Ren <manman.ren@gmail.com>
Mon, 7 Dec 2015 21:40:09 +0000 (21:40 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254953 91177308-0d34-0410-b5e6-96231b3b80d8

docs/LangRef.rst

index 82b33557c128627ea5e640938ae389d30c413b46..ca0939e535752280e742c75779f0571a347724f4 100644 (file)
@@ -407,12 +407,22 @@ added in the future:
     used by a future version of the ObjectiveC runtime and should be considered
     experimental at this time.
 "``cxx_fast_tlscc``" - The `CXX_FAST_TLS` calling convention for access functions
+    Clang generates an access function to access C++-style TLS. The access
+    function generally has an entry block, an exit block and an initialization
+    block that is run at the first time. The entry and exit blocks can access
+    a few TLS IR variables, each access will be lowered to a platform-specific
+    sequence.
+
     This calling convention aims to minimize overhead in the caller by
-    preserving as many registers as possible. This calling convention behaves
-    identical to the `C` calling convention on how arguments and return values
-    are passed, but it uses a different set of caller/callee-saved registers.
-    Given that C-style TLS on Darwin has its own special CSRs, we can't use the
-    existing `PreserveMost`.
+    preserving as many registers as possible (all the registers that are
+    perserved on the fast path, composed of the entry and exit blocks).
+
+    This calling convention behaves identical to the `C` calling convention on
+    how arguments and return values are passed, but it uses a different set of
+    caller/callee-saved registers.
+
+    Given that each platform has its own lowering sequence, hence its own set
+    of preserved registers, we can't use the existing `PreserveMost`.
 
     - On X86-64 the callee preserves all general purpose registers, except for
       RDI and RAX.