summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2015-12-07 21:40:09 +0000
committerManman Ren <manman.ren@gmail.com>2015-12-07 21:40:09 +0000
commit17567d236090aaad68770d14efa3d4b6c493e37e (patch)
tree31077ff8da3b79d81976f30b0fd71329e7210e75
parente811c7b5ad178700f44659d9070e4b86a432e302 (diff)
downloadbcm5719-llvm-17567d236090aaad68770d14efa3d4b6c493e37e.tar.gz
bcm5719-llvm-17567d236090aaad68770d14efa3d4b6c493e37e.zip
Update doc for C++ TLS calling convention.
llvm-svn: 254953
-rw-r--r--llvm/docs/LangRef.rst20
1 files changed, 15 insertions, 5 deletions
diff --git a/llvm/docs/LangRef.rst b/llvm/docs/LangRef.rst
index 82b33557c12..ca0939e5357 100644
--- a/llvm/docs/LangRef.rst
+++ b/llvm/docs/LangRef.rst
@@ -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.
OpenPOWER on IntegriCloud